@remotion/renderer 4.0.0-webhook.26 → 4.1.0-alpha1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (411) hide show
  1. package/LICENSE.md +8 -8
  2. package/README.md +9 -0
  3. package/client.d.ts +1 -0
  4. package/client.js +1 -0
  5. package/dist/assets/calculate-asset-positions.d.ts +0 -0
  6. package/dist/assets/calculate-asset-positions.js +1 -0
  7. package/dist/assets/calculate-atempo.d.ts +0 -0
  8. package/dist/assets/calculate-atempo.js +0 -0
  9. package/dist/assets/convert-assets-to-file-urls.d.ts +0 -0
  10. package/dist/assets/convert-assets-to-file-urls.js +0 -0
  11. package/dist/assets/download-and-map-assets-to-file.d.ts +6 -4
  12. package/dist/assets/download-and-map-assets-to-file.js +49 -19
  13. package/dist/assets/download-file.d.ts +8 -5
  14. package/dist/assets/download-file.js +71 -8
  15. package/dist/assets/download-map.d.ts +8 -29
  16. package/dist/assets/download-map.js +15 -16
  17. package/dist/assets/ffmpeg-volume-expression.d.ts +4 -3
  18. package/dist/assets/ffmpeg-volume-expression.js +5 -3
  19. package/dist/assets/flatten-volume-array.d.ts +0 -0
  20. package/dist/assets/flatten-volume-array.js +0 -0
  21. package/dist/assets/get-audio-channels.d.ts +2 -2
  22. package/dist/assets/get-audio-channels.js +14 -12
  23. package/dist/assets/read-file.d.ts +1 -1
  24. package/dist/assets/read-file.js +5 -7
  25. package/dist/assets/round-volume-to-avoid-stack-overflow.d.ts +0 -0
  26. package/dist/assets/round-volume-to-avoid-stack-overflow.js +0 -0
  27. package/dist/assets/sanitize-filename.d.ts +0 -0
  28. package/dist/assets/sanitize-filename.js +0 -0
  29. package/dist/assets/sanitize-filepath.d.ts +0 -0
  30. package/dist/assets/sanitize-filepath.js +2 -2
  31. package/dist/assets/truncate-utf8-bytes.d.ts +0 -0
  32. package/dist/assets/truncate-utf8-bytes.js +0 -0
  33. package/dist/assets/types.d.ts +5 -4
  34. package/dist/assets/types.js +0 -0
  35. package/dist/audio-codec.d.ts +28 -0
  36. package/dist/audio-codec.js +83 -0
  37. package/dist/browser/Browser.d.ts +16 -14
  38. package/dist/browser/Browser.js +69 -72
  39. package/dist/browser/BrowserConnector.d.ts +0 -0
  40. package/dist/browser/BrowserConnector.js +0 -0
  41. package/dist/browser/BrowserFetcher.d.ts +16 -64
  42. package/dist/browser/BrowserFetcher.js +147 -235
  43. package/dist/browser/BrowserPage.d.ts +21 -6
  44. package/dist/browser/BrowserPage.js +54 -22
  45. package/dist/browser/BrowserRunner.d.ts +1 -1
  46. package/dist/browser/BrowserRunner.js +32 -22
  47. package/dist/browser/Connection.d.ts +0 -0
  48. package/dist/browser/Connection.js +1 -1
  49. package/dist/browser/ConsoleMessage.d.ts +1 -1
  50. package/dist/browser/ConsoleMessage.js +0 -0
  51. package/dist/browser/DOMWorld.d.ts +5 -4
  52. package/dist/browser/DOMWorld.js +16 -9
  53. package/dist/browser/Errors.d.ts +0 -0
  54. package/dist/browser/Errors.js +0 -0
  55. package/dist/browser/EvalTypes.d.ts +7 -7
  56. package/dist/browser/EvalTypes.js +0 -0
  57. package/dist/browser/EventEmitter.d.ts +0 -0
  58. package/dist/browser/EventEmitter.js +0 -0
  59. package/dist/browser/ExecutionContext.d.ts +0 -0
  60. package/dist/browser/ExecutionContext.js +0 -0
  61. package/dist/browser/FrameManager.d.ts +0 -2
  62. package/dist/browser/FrameManager.js +13 -17
  63. package/dist/browser/HTTPRequest.d.ts +0 -0
  64. package/dist/browser/HTTPRequest.js +0 -0
  65. package/dist/browser/HTTPResponse.d.ts +0 -0
  66. package/dist/browser/HTTPResponse.js +0 -0
  67. package/dist/browser/JSHandle.d.ts +0 -0
  68. package/dist/browser/JSHandle.js +14 -14
  69. package/dist/browser/LaunchOptions.d.ts +2 -2
  70. package/dist/browser/LaunchOptions.js +0 -0
  71. package/dist/browser/Launcher.d.ts +9 -3
  72. package/dist/browser/Launcher.js +16 -29
  73. package/dist/browser/LifecycleWatcher.d.ts +1 -1
  74. package/dist/browser/LifecycleWatcher.js +0 -0
  75. package/dist/browser/NetworkEventManager.d.ts +4 -4
  76. package/dist/browser/NetworkEventManager.js +0 -0
  77. package/dist/browser/NetworkManager.d.ts +0 -0
  78. package/dist/browser/NetworkManager.js +0 -0
  79. package/dist/browser/NodeWebSocketTransport.d.ts +0 -0
  80. package/dist/browser/NodeWebSocketTransport.js +21 -21
  81. package/dist/browser/Product.d.ts +1 -1
  82. package/dist/browser/Product.js +0 -0
  83. package/dist/browser/PuppeteerNode.d.ts +2 -5
  84. package/dist/browser/PuppeteerNode.js +2 -11
  85. package/dist/browser/PuppeteerViewport.d.ts +0 -0
  86. package/dist/browser/PuppeteerViewport.js +0 -0
  87. package/dist/browser/ScreenshotOptions.d.ts +0 -14
  88. package/dist/browser/ScreenshotOptions.js +0 -1
  89. package/dist/browser/Target.d.ts +4 -3
  90. package/dist/browser/Target.js +8 -2
  91. package/dist/browser/TaskQueue.d.ts +0 -0
  92. package/dist/browser/TaskQueue.js +0 -0
  93. package/dist/browser/TimeoutSettings.d.ts +0 -0
  94. package/dist/browser/TimeoutSettings.js +0 -0
  95. package/dist/browser/assert.d.ts +0 -0
  96. package/dist/browser/assert.js +0 -0
  97. package/dist/browser/create-browser-fetcher.d.ts +0 -0
  98. package/dist/browser/create-browser-fetcher.js +34 -48
  99. package/dist/browser/devtools-commands.d.ts +5 -1
  100. package/dist/browser/devtools-commands.js +0 -0
  101. package/dist/browser/devtools-types.d.ts +92 -10
  102. package/dist/browser/devtools-types.js +0 -0
  103. package/dist/browser/get-download-destination.d.ts +0 -0
  104. package/dist/browser/get-download-destination.js +8 -8
  105. package/dist/browser/is-target-closed-err.d.ts +1 -0
  106. package/dist/browser/is-target-closed-err.js +9 -0
  107. package/dist/browser/mitt/index.d.ts +6 -6
  108. package/dist/browser/mitt/index.js +0 -0
  109. package/dist/browser/node.d.ts +0 -0
  110. package/dist/browser/node.js +0 -0
  111. package/dist/browser/revisions.d.ts +1 -1
  112. package/dist/browser/revisions.js +0 -0
  113. package/dist/browser/should-log-message.d.ts +24 -0
  114. package/dist/browser/should-log-message.js +72 -0
  115. package/dist/browser/util.d.ts +2 -2
  116. package/dist/browser/util.js +0 -0
  117. package/dist/browser-executable.d.ts +1 -1
  118. package/dist/browser-executable.js +0 -0
  119. package/dist/browser-log.d.ts +1 -1
  120. package/dist/browser-log.js +0 -0
  121. package/dist/browser.d.ts +1 -1
  122. package/dist/browser.js +0 -0
  123. package/dist/calculate-ffmpeg-filters.d.ts +2 -1
  124. package/dist/calculate-ffmpeg-filters.js +1 -0
  125. package/dist/call-ffmpeg.d.ts +14 -0
  126. package/dist/call-ffmpeg.js +42 -0
  127. package/dist/can-use-parallel-encoding.d.ts +0 -0
  128. package/dist/can-use-parallel-encoding.js +0 -0
  129. package/dist/chalk/index.d.ts +54 -0
  130. package/dist/chalk/index.js +135 -0
  131. package/dist/chalk/is-color-supported.d.ts +1 -0
  132. package/dist/chalk/is-color-supported.js +37 -0
  133. package/dist/check-apple-silicon.d.ts +1 -1
  134. package/dist/check-apple-silicon.js +8 -47
  135. package/dist/chunk.d.ts +0 -0
  136. package/dist/chunk.js +0 -0
  137. package/dist/client.d.ts +204 -0
  138. package/dist/client.js +49 -0
  139. package/dist/codec-supports-media.d.ts +3 -2
  140. package/dist/codec-supports-media.js +20 -5
  141. package/dist/codec.d.ts +2 -2
  142. package/dist/codec.js +0 -0
  143. package/dist/combine-videos.d.ts +6 -2
  144. package/dist/combine-videos.js +17 -17
  145. package/dist/compositor/compose.d.ts +26 -0
  146. package/dist/compositor/compose.js +82 -0
  147. package/dist/compositor/compositor.d.ts +11 -0
  148. package/dist/compositor/compositor.js +219 -0
  149. package/dist/compositor/get-executable-path.d.ts +1 -0
  150. package/dist/compositor/get-executable-path.js +57 -0
  151. package/dist/compositor/make-nonce.d.ts +1 -0
  152. package/dist/compositor/make-nonce.js +8 -0
  153. package/dist/compositor/payloads.d.ts +68 -0
  154. package/dist/{ffmpeg-executable.js → compositor/payloads.js} +0 -0
  155. package/dist/compress-assets.d.ts +0 -0
  156. package/dist/compress-assets.js +0 -0
  157. package/dist/convert-number-of-gif-loops-to-ffmpeg.d.ts +0 -0
  158. package/dist/convert-number-of-gif-loops-to-ffmpeg.js +0 -0
  159. package/dist/convert-to-positive-frame-index.d.ts +0 -0
  160. package/dist/convert-to-positive-frame-index.js +0 -0
  161. package/dist/create-ffmpeg-complex-filter.d.ts +5 -1
  162. package/dist/create-ffmpeg-complex-filter.js +6 -4
  163. package/dist/create-ffmpeg-merge-filter.d.ts +5 -1
  164. package/dist/create-ffmpeg-merge-filter.js +21 -13
  165. package/dist/create-silent-audio.d.ts +1 -3
  166. package/dist/create-silent-audio.js +3 -6
  167. package/dist/crf.d.ts +6 -2
  168. package/dist/crf.js +41 -8
  169. package/dist/cycle-browser-tabs.d.ts +2 -5
  170. package/dist/cycle-browser-tabs.js +5 -5
  171. package/dist/delay-render-embedded-stack.d.ts +0 -0
  172. package/dist/delay-render-embedded-stack.js +0 -0
  173. package/dist/delete-directory.d.ts +1 -1
  174. package/dist/delete-directory.js +43 -17
  175. package/dist/does-have-m2-bug.d.ts +3 -0
  176. package/dist/does-have-m2-bug.js +12 -0
  177. package/dist/ensure-frames-in-order.d.ts +0 -0
  178. package/dist/ensure-frames-in-order.js +0 -0
  179. package/dist/ensure-output-directory.d.ts +0 -0
  180. package/dist/ensure-output-directory.js +5 -5
  181. package/dist/error-handling/handle-javascript-exception.d.ts +0 -0
  182. package/dist/error-handling/handle-javascript-exception.js +10 -0
  183. package/dist/error-handling/symbolicate-error.d.ts +0 -0
  184. package/dist/error-handling/symbolicate-error.js +6 -3
  185. package/dist/error-handling/symbolicateable-error.d.ts +0 -0
  186. package/dist/error-handling/symbolicateable-error.js +0 -0
  187. package/dist/ffmpeg-filter-file.d.ts +6 -1
  188. package/dist/ffmpeg-filter-file.js +40 -8
  189. package/dist/ffmpeg-override.d.ts +1 -1
  190. package/dist/ffmpeg-override.js +0 -0
  191. package/dist/file-extensions.d.ts +14 -0
  192. package/dist/file-extensions.js +76 -0
  193. package/dist/find-closest-package-json.d.ts +2 -0
  194. package/dist/find-closest-package-json.js +31 -0
  195. package/dist/frame-range.d.ts +1 -1
  196. package/dist/frame-range.js +0 -0
  197. package/dist/get-browser-instance.d.ts +8 -3
  198. package/dist/get-browser-instance.js +10 -5
  199. package/dist/get-codec-name.d.ts +0 -0
  200. package/dist/get-codec-name.js +0 -0
  201. package/dist/get-compositions.d.ts +27 -14
  202. package/dist/get-compositions.js +72 -39
  203. package/dist/get-concurrency.d.ts +1 -1
  204. package/dist/get-concurrency.js +11 -4
  205. package/dist/get-duration-from-frame-range.d.ts +0 -0
  206. package/dist/get-duration-from-frame-range.js +0 -0
  207. package/dist/get-extension-from-codec.d.ts +5 -1
  208. package/dist/get-extension-from-codec.js +56 -32
  209. package/dist/get-extension-of-filename.d.ts +0 -0
  210. package/dist/get-extension-of-filename.js +5 -1
  211. package/dist/get-frame-padded-index.d.ts +3 -2
  212. package/dist/get-frame-padded-index.js +3 -2
  213. package/dist/get-frame-to-render.d.ts +0 -0
  214. package/dist/get-frame-to-render.js +1 -1
  215. package/dist/get-local-browser-executable.d.ts +0 -0
  216. package/dist/get-local-browser-executable.js +7 -15
  217. package/dist/get-port.d.ts +4 -1
  218. package/dist/get-port.js +8 -8
  219. package/dist/get-prores-profile-name.d.ts +0 -0
  220. package/dist/get-prores-profile-name.js +0 -0
  221. package/dist/get-video-threads-flag.d.ts +0 -0
  222. package/dist/get-video-threads-flag.js +3 -3
  223. package/dist/guess-extension-for-media.d.ts +3 -1
  224. package/dist/guess-extension-for-media.js +4 -7
  225. package/dist/image-format.d.ts +12 -6
  226. package/dist/image-format.js +19 -13
  227. package/dist/index.d.ts +368 -49
  228. package/dist/index.js +68 -46
  229. package/dist/is-audio-codec.d.ts +0 -0
  230. package/dist/is-audio-codec.js +0 -0
  231. package/dist/is-serve-url.d.ts +0 -0
  232. package/dist/is-serve-url.js +0 -0
  233. package/dist/jpeg-quality.d.ts +2 -0
  234. package/dist/jpeg-quality.js +22 -0
  235. package/dist/locks.d.ts +7 -0
  236. package/dist/locks.js +44 -0
  237. package/dist/log-level.d.ts +1 -1
  238. package/dist/log-level.js +0 -0
  239. package/dist/logger.d.ts +24 -0
  240. package/dist/logger.js +68 -0
  241. package/dist/make-cancel-signal.d.ts +13 -2
  242. package/dist/make-cancel-signal.js +24 -1
  243. package/dist/merge-audio-track.d.ts +4 -4
  244. package/dist/merge-audio-track.js +38 -33
  245. package/dist/mime-db.d.ts +0 -0
  246. package/dist/mime-db.js +0 -0
  247. package/dist/mime-types.d.ts +0 -0
  248. package/dist/mime-types.js +3 -3
  249. package/dist/normalize-serve-url.d.ts +0 -0
  250. package/dist/normalize-serve-url.js +0 -0
  251. package/dist/offthread-video-server.d.ts +47 -11
  252. package/dist/offthread-video-server.js +111 -58
  253. package/dist/open-browser.d.ts +21 -6
  254. package/dist/open-browser.js +37 -16
  255. package/dist/options/audio-bitrate.d.ts +2 -0
  256. package/dist/options/audio-bitrate.js +11 -0
  257. package/dist/options/crf.d.ts +2 -0
  258. package/dist/options/crf.js +11 -0
  259. package/dist/options/enforce-audio.d.ts +2 -0
  260. package/dist/options/enforce-audio.js +11 -0
  261. package/dist/options/jpeg-quality.d.ts +2 -0
  262. package/dist/options/jpeg-quality.js +11 -0
  263. package/dist/options/mute.d.ts +2 -0
  264. package/dist/options/mute.js +11 -0
  265. package/dist/options/option.d.ts +8 -0
  266. package/dist/options/option.js +2 -0
  267. package/dist/options/scale.d.ts +2 -0
  268. package/dist/options/scale.js +11 -0
  269. package/dist/options/video-bitrate.d.ts +2 -0
  270. package/dist/options/video-bitrate.js +11 -0
  271. package/dist/options/video-codec.d.ts +2 -0
  272. package/dist/options/video-codec.js +11 -0
  273. package/dist/overwrite.d.ts +0 -0
  274. package/dist/overwrite.js +0 -0
  275. package/dist/p-limit.d.ts +0 -0
  276. package/dist/p-limit.js +0 -0
  277. package/dist/parse-browser-error-stack.d.ts +1 -1
  278. package/dist/parse-browser-error-stack.js +0 -0
  279. package/dist/parse-ffmpeg-progress.d.ts +0 -0
  280. package/dist/parse-ffmpeg-progress.js +0 -0
  281. package/dist/perf.d.ts +2 -2
  282. package/dist/perf.js +9 -7
  283. package/dist/pixel-format.d.ts +2 -2
  284. package/dist/pixel-format.js +3 -0
  285. package/dist/pool.d.ts +0 -0
  286. package/dist/pool.js +0 -0
  287. package/dist/prepare-server.d.ts +25 -10
  288. package/dist/prepare-server.js +71 -18
  289. package/dist/preprocess-audio-track.d.ts +7 -5
  290. package/dist/preprocess-audio-track.js +7 -8
  291. package/dist/prespawn-ffmpeg.d.ts +20 -10
  292. package/dist/prespawn-ffmpeg.js +67 -29
  293. package/dist/prestitcher-memory-usage.d.ts +0 -4
  294. package/dist/prestitcher-memory-usage.js +4 -5
  295. package/dist/prores-profile.d.ts +6 -4
  296. package/dist/prores-profile.js +8 -8
  297. package/dist/provide-screenshot.d.ts +8 -4
  298. package/dist/provide-screenshot.js +5 -2
  299. package/dist/puppeteer-evaluate.d.ts +0 -0
  300. package/dist/puppeteer-evaluate.js +20 -12
  301. package/dist/puppeteer-screenshot.d.ts +12 -2
  302. package/dist/puppeteer-screenshot.js +18 -45
  303. package/dist/redirect-status-codes.d.ts +1 -0
  304. package/dist/redirect-status-codes.js +6 -0
  305. package/dist/render-frames.d.ts +52 -35
  306. package/dist/render-frames.js +248 -143
  307. package/dist/render-media.d.ts +76 -29
  308. package/dist/render-media.js +324 -195
  309. package/dist/render-still.d.ts +46 -19
  310. package/dist/render-still.js +128 -69
  311. package/dist/replace-browser.d.ts +6 -0
  312. package/dist/replace-browser.js +47 -0
  313. package/dist/resolve-asset-src.d.ts +0 -0
  314. package/dist/resolve-asset-src.js +2 -2
  315. package/dist/sample-rate.d.ts +0 -0
  316. package/dist/sample-rate.js +0 -0
  317. package/dist/screenshot-dom-element.d.ts +8 -4
  318. package/dist/screenshot-dom-element.js +15 -4
  319. package/dist/screenshot-task.d.ts +11 -2
  320. package/dist/screenshot-task.js +43 -13
  321. package/dist/seek-to-frame.d.ts +1 -0
  322. package/dist/seek-to-frame.js +49 -3
  323. package/dist/select-composition.d.ts +41 -0
  324. package/dist/select-composition.js +156 -0
  325. package/dist/serve-handler/index.d.ts +1 -1
  326. package/dist/serve-handler/index.js +21 -19
  327. package/dist/serve-handler/is-path-inside.d.ts +0 -0
  328. package/dist/serve-handler/is-path-inside.js +3 -3
  329. package/dist/serve-handler/range-parser.d.ts +0 -0
  330. package/dist/serve-handler/range-parser.js +0 -0
  331. package/dist/serve-static.d.ts +8 -6
  332. package/dist/serve-static.js +85 -59
  333. package/dist/set-props-and-env.d.ts +5 -3
  334. package/dist/set-props-and-env.js +18 -10
  335. package/dist/stitch-frames-to-video.d.ts +39 -16
  336. package/dist/stitch-frames-to-video.js +210 -121
  337. package/dist/stringify-ffmpeg-filter.d.ts +10 -2
  338. package/dist/stringify-ffmpeg-filter.js +37 -34
  339. package/dist/symbolicate-stacktrace.d.ts +16 -3
  340. package/dist/symbolicate-stacktrace.js +49 -24
  341. package/dist/take-frame-and-compose.d.ts +22 -0
  342. package/dist/take-frame-and-compose.js +103 -0
  343. package/dist/tmp-dir.d.ts +0 -0
  344. package/dist/tmp-dir.js +7 -8
  345. package/dist/truthy.d.ts +1 -1
  346. package/dist/truthy.js +0 -0
  347. package/dist/types.d.ts +2 -2
  348. package/dist/types.js +0 -0
  349. package/dist/validate-concurrency.d.ts +2 -0
  350. package/dist/validate-concurrency.js +21 -10
  351. package/dist/validate-even-dimensions-with-codec.d.ts +0 -0
  352. package/dist/validate-even-dimensions-with-codec.js +0 -0
  353. package/dist/validate-every-nth-frame.d.ts +2 -1
  354. package/dist/validate-every-nth-frame.js +8 -1
  355. package/dist/validate-ffmpeg-override.d.ts +0 -0
  356. package/dist/validate-ffmpeg-override.js +0 -0
  357. package/dist/validate-number-of-gif-loops.d.ts +2 -0
  358. package/dist/validate-number-of-gif-loops.js +24 -0
  359. package/dist/validate-opengl-renderer.d.ts +2 -3
  360. package/dist/validate-opengl-renderer.js +9 -4
  361. package/dist/validate-output-filename.d.ts +7 -2
  362. package/dist/validate-output-filename.js +20 -51
  363. package/dist/validate-puppeteer-timeout.d.ts +0 -0
  364. package/dist/validate-puppeteer-timeout.js +1 -0
  365. package/dist/validate-scale.d.ts +0 -0
  366. package/dist/validate-scale.js +0 -0
  367. package/dist/validate-videobitrate.d.ts +1 -0
  368. package/dist/validate-videobitrate.js +20 -0
  369. package/dist/wait-for-symbolication-error-to-be-done.d.ts +0 -0
  370. package/dist/wait-for-symbolication-error-to-be-done.js +5 -31
  371. package/dist/ws/ws-types.d.ts +0 -0
  372. package/dist/ws/ws-types.js +2 -1
  373. package/install-toolchain.mjs +36 -0
  374. package/package.json +70 -60
  375. package/types/ws/index.d.ts +5 -5
  376. package/.prettierrc.js +0 -14
  377. package/dist/assets/dl-browser.d.ts +0 -1
  378. package/dist/assets/dl-browser.js +0 -38
  379. package/dist/assets/get-video-stream-duration.d.ts +0 -4
  380. package/dist/assets/get-video-stream-duration.js +0 -59
  381. package/dist/calculate-sar-dar-pixels.d.ts +0 -9
  382. package/dist/calculate-sar-dar-pixels.js +0 -19
  383. package/dist/convert-to-pcm.d.ts +0 -6
  384. package/dist/convert-to-pcm.js +0 -20
  385. package/dist/ensure-presentation-timestamp.d.ts +0 -2
  386. package/dist/ensure-presentation-timestamp.js +0 -69
  387. package/dist/extract-frame-from-video.d.ts +0 -16
  388. package/dist/extract-frame-from-video.js +0 -277
  389. package/dist/ffmpeg-executable.d.ts +0 -1
  390. package/dist/ffmpeg-flags.d.ts +0 -12
  391. package/dist/ffmpeg-flags.js +0 -45
  392. package/dist/frame-to-ffmpeg-timestamp.d.ts +0 -1
  393. package/dist/frame-to-ffmpeg-timestamp.js +0 -8
  394. package/dist/get-audio-codec-name.d.ts +0 -2
  395. package/dist/get-audio-codec-name.js +0 -28
  396. package/dist/get-video-info.d.ts +0 -3
  397. package/dist/get-video-info.js +0 -49
  398. package/dist/is-beyond-last-frame.d.ts +0 -3
  399. package/dist/is-beyond-last-frame.js +0 -12
  400. package/dist/last-frame-from-video-cache.d.ts +0 -17
  401. package/dist/last-frame-from-video-cache.js +0 -55
  402. package/dist/legacy-webpack-config.d.ts +0 -9
  403. package/dist/legacy-webpack-config.js +0 -13
  404. package/dist/quality.d.ts +0 -1
  405. package/dist/quality.js +0 -21
  406. package/dist/validate-ffmpeg.d.ts +0 -2
  407. package/dist/validate-ffmpeg.js +0 -72
  408. package/dist/validate-frame.d.ts +0 -1
  409. package/dist/validate-frame.js +0 -24
  410. package/tsconfig.json +0 -10
  411. package/vitest.config.ts +0 -8
@@ -0,0 +1,219 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.startCompositor = exports.startLongRunningCompositor = exports.getIdealMaximumFrameCacheItems = void 0;
7
+ const node_child_process_1 = require("node:child_process");
8
+ const node_fs_1 = require("node:fs");
9
+ const node_os_1 = __importDefault(require("node:os"));
10
+ const call_ffmpeg_1 = require("../call-ffmpeg");
11
+ const get_concurrency_1 = require("../get-concurrency");
12
+ const logger_1 = require("../logger");
13
+ const compose_1 = require("./compose");
14
+ const get_executable_path_1 = require("./get-executable-path");
15
+ const make_nonce_1 = require("./make-nonce");
16
+ const getIdealMaximumFrameCacheItems = () => {
17
+ const freeMemory = node_os_1.default.freemem();
18
+ // Assuming 1 frame is approximately 6MB
19
+ // Assuming only half the available memory should be used
20
+ const max = Math.floor(freeMemory / (1024 * 1024 * 6));
21
+ // Never store more than 1000 frames
22
+ // But 100 is needed even if it's going to swap
23
+ return Math.max(100, Math.min(max, 1000));
24
+ };
25
+ exports.getIdealMaximumFrameCacheItems = getIdealMaximumFrameCacheItems;
26
+ const startLongRunningCompositor = (maximumFrameCacheItems, verbose, indent) => {
27
+ return (0, exports.startCompositor)('StartLongRunningProcess', {
28
+ concurrency: (0, get_concurrency_1.getActualConcurrency)(null),
29
+ maximum_frame_cache_items: maximumFrameCacheItems,
30
+ verbose,
31
+ }, indent);
32
+ };
33
+ exports.startLongRunningCompositor = startLongRunningCompositor;
34
+ const startCompositor = (type, payload, indent) => {
35
+ var _a;
36
+ const bin = (0, get_executable_path_1.getExecutablePath)('compositor');
37
+ if (!process.env.READ_ONLY_FS) {
38
+ (0, node_fs_1.chmodSync)(bin, 0o755);
39
+ }
40
+ const fullCommand = (0, compose_1.serializeCommand)(type, payload);
41
+ const child = (0, node_child_process_1.spawn)(bin, [JSON.stringify(fullCommand)], (0, call_ffmpeg_1.dynamicLibraryPathOptions)());
42
+ const stderrChunks = [];
43
+ let outputBuffer = Buffer.from('');
44
+ const separator = Buffer.from('remotion_buffer:');
45
+ const waiters = new Map();
46
+ const onMessage = (statusType, nonce, data) => {
47
+ if (nonce === '0') {
48
+ logger_1.Log.verboseAdvanced({ indent, logLevel: (0, logger_1.getLogLevel)(), tag: 'compositor' }, data.toString('utf8'));
49
+ }
50
+ if (waiters.has(nonce)) {
51
+ if (statusType === 'error') {
52
+ try {
53
+ const parsed = JSON.parse(data.toString('utf8'));
54
+ waiters.get(nonce).reject(new Error(`Compositor error: ${parsed.error}\n${parsed.backtrace}`));
55
+ }
56
+ catch (err) {
57
+ waiters.get(nonce).reject(new Error(data.toString('utf8')));
58
+ }
59
+ }
60
+ else {
61
+ waiters.get(nonce).resolve(data);
62
+ }
63
+ waiters.delete(nonce);
64
+ }
65
+ };
66
+ let runningStatus = { type: 'running' };
67
+ let missingData = null;
68
+ const processInput = () => {
69
+ let separatorIndex = outputBuffer.indexOf(separator);
70
+ if (separatorIndex === -1) {
71
+ return;
72
+ }
73
+ separatorIndex += separator.length;
74
+ let nonceString = '';
75
+ let lengthString = '';
76
+ let statusString = '';
77
+ // Each message from Rust is prefixed with `remotion_buffer;{[nonce]}:{[length]}`
78
+ // Let's read the buffer to extract the nonce, and if the full length is available,
79
+ // we'll extract the data and pass it to the callback.
80
+ // eslint-disable-next-line no-constant-condition
81
+ while (true) {
82
+ const nextDigit = outputBuffer[separatorIndex];
83
+ // 0x3a is the character ":"
84
+ if (nextDigit === 0x3a) {
85
+ separatorIndex++;
86
+ break;
87
+ }
88
+ separatorIndex++;
89
+ nonceString += String.fromCharCode(nextDigit);
90
+ }
91
+ // eslint-disable-next-line no-constant-condition
92
+ while (true) {
93
+ const nextDigit = outputBuffer[separatorIndex];
94
+ if (nextDigit === 0x3a) {
95
+ separatorIndex++;
96
+ break;
97
+ }
98
+ separatorIndex++;
99
+ lengthString += String.fromCharCode(nextDigit);
100
+ }
101
+ // eslint-disable-next-line no-constant-condition
102
+ while (true) {
103
+ const nextDigit = outputBuffer[separatorIndex];
104
+ if (nextDigit === 0x3a) {
105
+ break;
106
+ }
107
+ separatorIndex++;
108
+ statusString += String.fromCharCode(nextDigit);
109
+ }
110
+ const length = Number(lengthString);
111
+ const status = Number(statusString);
112
+ const dataLength = outputBuffer.length - separatorIndex - 1;
113
+ if (dataLength < length) {
114
+ missingData = {
115
+ dataMissing: length - dataLength,
116
+ };
117
+ return;
118
+ }
119
+ const data = outputBuffer.subarray(separatorIndex + 1, separatorIndex + 1 + Number(lengthString));
120
+ onMessage(status === 1 ? 'error' : 'success', nonceString, data);
121
+ missingData = null;
122
+ outputBuffer = outputBuffer.subarray(separatorIndex + Number(lengthString) + 1);
123
+ processInput();
124
+ };
125
+ let unprocessedBuffers = [];
126
+ child.stdout.on('data', (data) => {
127
+ unprocessedBuffers.push(data);
128
+ const separatorIndex = data.indexOf(separator);
129
+ if (separatorIndex === -1) {
130
+ if (missingData) {
131
+ missingData.dataMissing -= data.length;
132
+ }
133
+ if (!missingData || missingData.dataMissing > 0) {
134
+ return;
135
+ }
136
+ }
137
+ unprocessedBuffers.unshift(outputBuffer);
138
+ outputBuffer = Buffer.concat(unprocessedBuffers);
139
+ unprocessedBuffers = [];
140
+ processInput();
141
+ });
142
+ child.stderr.on('data', (data) => {
143
+ stderrChunks.push(data);
144
+ });
145
+ let resolve = null;
146
+ let reject = null;
147
+ child.on('close', (code) => {
148
+ const waitersToKill = Array.from(waiters.values());
149
+ if (code === 0) {
150
+ runningStatus = { type: 'quit-without-error' };
151
+ resolve === null || resolve === void 0 ? void 0 : resolve();
152
+ for (const waiter of waitersToKill) {
153
+ waiter.reject(new Error(`Compositor already quit`));
154
+ }
155
+ waiters.clear();
156
+ }
157
+ else {
158
+ const errorMessage = Buffer.concat(stderrChunks).toString('utf-8');
159
+ runningStatus = { type: 'quit-with-error', error: errorMessage };
160
+ const error = new Error(`Compositor panicked: ${errorMessage}`);
161
+ for (const waiter of waitersToKill) {
162
+ waiter.reject(error);
163
+ }
164
+ waiters.clear();
165
+ reject === null || reject === void 0 ? void 0 : reject(error);
166
+ }
167
+ });
168
+ return {
169
+ waitForDone: () => {
170
+ return new Promise((res, rej) => {
171
+ if (runningStatus.type === 'quit-without-error') {
172
+ rej(new Error('Compositor already quit'));
173
+ return;
174
+ }
175
+ if (runningStatus.type === 'quit-with-error') {
176
+ rej(new Error(`Compositor already quit: ${runningStatus.error}`));
177
+ return;
178
+ }
179
+ resolve = res;
180
+ reject = rej;
181
+ });
182
+ },
183
+ finishCommands: () => {
184
+ if (runningStatus.type === 'quit-with-error') {
185
+ throw new Error(`Compositor already quit: ${runningStatus.error}`);
186
+ }
187
+ if (runningStatus.type === 'quit-without-error') {
188
+ throw new Error('Compositor already quit');
189
+ }
190
+ child.stdin.write('EOF\n');
191
+ },
192
+ executeCommand: (command, params) => {
193
+ if (runningStatus.type === 'quit-without-error') {
194
+ throw new Error('Compositor already quit');
195
+ }
196
+ if (runningStatus.type === 'quit-with-error') {
197
+ throw new Error(`Compositor quit: ${runningStatus.error}`);
198
+ }
199
+ return new Promise((_resolve, _reject) => {
200
+ const nonce = (0, make_nonce_1.makeNonce)();
201
+ const composed = {
202
+ nonce,
203
+ payload: {
204
+ type: command,
205
+ params,
206
+ },
207
+ };
208
+ // TODO: Should have a way to error out a single task
209
+ child.stdin.write(JSON.stringify(composed) + '\n');
210
+ waiters.set(nonce, {
211
+ resolve: _resolve,
212
+ reject: _reject,
213
+ });
214
+ });
215
+ },
216
+ pid: (_a = child.pid) !== null && _a !== void 0 ? _a : null,
217
+ };
218
+ };
219
+ exports.startCompositor = startCompositor;
@@ -0,0 +1 @@
1
+ export declare const getExecutablePath: (type: 'compositor' | 'ffmpeg' | 'ffprobe' | 'ffmpeg-cwd') => string;
@@ -0,0 +1,57 @@
1
+ "use strict";
2
+ // Adapted from @swc/core package
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.getExecutablePath = void 0;
5
+ function isMusl() {
6
+ // @ts-expect-error no types
7
+ const { glibcVersionRuntime } = process.report.getReport().header;
8
+ return !glibcVersionRuntime;
9
+ }
10
+ const getExecutablePath = (type) => {
11
+ if (type === 'compositor' && process.env.COMPOSITOR_PATH) {
12
+ return process.env.COMPOSITOR_PATH;
13
+ }
14
+ const key = type === 'compositor'
15
+ ? 'binaryPath'
16
+ : type === 'ffmpeg'
17
+ ? 'ffmpegPath'
18
+ : type === 'ffprobe'
19
+ ? 'ffprobePath'
20
+ : 'ffmpegCwd';
21
+ switch (process.platform) {
22
+ case 'win32':
23
+ switch (process.arch) {
24
+ case 'x64':
25
+ return require('@remotion/compositor-win32-x64-msvc')[key];
26
+ default:
27
+ throw new Error(`Unsupported architecture on Windows: ${process.arch}`);
28
+ }
29
+ case 'darwin':
30
+ switch (process.arch) {
31
+ case 'x64':
32
+ return require('@remotion/compositor-darwin-x64')[key];
33
+ case 'arm64':
34
+ return require('@remotion/compositor-darwin-arm64')[key];
35
+ default:
36
+ throw new Error(`Unsupported architecture on macOS: ${process.arch}`);
37
+ }
38
+ case 'linux':
39
+ switch (process.arch) {
40
+ case 'x64':
41
+ if (isMusl()) {
42
+ return require('@remotion/compositor-linux-x64-musl')[key];
43
+ }
44
+ return require('@remotion/compositor-linux-x64-gnu')[key];
45
+ case 'arm64':
46
+ if (isMusl()) {
47
+ return require('@remotion/compositor-linux-arm64-musl')[key];
48
+ }
49
+ return require('@remotion/compositor-linux-arm64-gnu')[key];
50
+ default:
51
+ throw new Error(`Unsupported architecture on Linux: ${process.arch}`);
52
+ }
53
+ default:
54
+ throw new Error(`Unsupported OS: ${process.platform}, architecture: ${process.arch}`);
55
+ }
56
+ };
57
+ exports.getExecutablePath = getExecutablePath;
@@ -0,0 +1 @@
1
+ export declare const makeNonce: () => string;
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.makeNonce = void 0;
4
+ const makeNonce = () => {
5
+ return (Math.random().toString(36).substring(2, 15) +
6
+ Math.random().toString(36).substring(2, 15));
7
+ };
8
+ exports.makeNonce = makeNonce;
@@ -0,0 +1,68 @@
1
+ export type Layer = {
2
+ type: 'PngImage';
3
+ params: {
4
+ src: string;
5
+ x: number;
6
+ y: number;
7
+ width: number;
8
+ height: number;
9
+ };
10
+ } | {
11
+ type: 'JpgImage';
12
+ params: {
13
+ src: string;
14
+ x: number;
15
+ y: number;
16
+ width: number;
17
+ height: number;
18
+ };
19
+ } | {
20
+ type: 'Solid';
21
+ params: {
22
+ fill: [number, number, number, number];
23
+ x: number;
24
+ y: number;
25
+ width: number;
26
+ height: number;
27
+ };
28
+ };
29
+ export type CompositorImageFormat = 'Png' | 'Jpeg';
30
+ export type CompositorCommand = {
31
+ Compose: {
32
+ output: string;
33
+ width: number;
34
+ height: number;
35
+ layers: Layer[];
36
+ output_format: CompositorImageFormat;
37
+ };
38
+ ExtractFrame: {
39
+ input: string;
40
+ time: number;
41
+ transparent: boolean;
42
+ };
43
+ Echo: {
44
+ message: string;
45
+ };
46
+ StartLongRunningProcess: {
47
+ concurrency: number;
48
+ maximum_frame_cache_items: number;
49
+ verbose: boolean;
50
+ };
51
+ GetOpenVideoStats: {};
52
+ DeliberatePanic: {};
53
+ CloseAllVideos: {};
54
+ FreeUpMemory: {
55
+ percent_of_memory: number;
56
+ };
57
+ };
58
+ export type CompositorCommandSerialized<T extends keyof CompositorCommand> = {
59
+ nonce: string;
60
+ payload: {
61
+ type: T;
62
+ params: CompositorCommand[T];
63
+ };
64
+ };
65
+ export type ErrorPayload = {
66
+ error: string;
67
+ backtrace: string;
68
+ };
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
@@ -1,5 +1,9 @@
1
1
  import type { DownloadMap } from './assets/download-map';
2
- export declare const createFfmpegComplexFilter: (filters: number, downloadMap: DownloadMap) => Promise<{
2
+ import type { PreprocessedAudioTrack } from './preprocess-audio-track';
3
+ export declare const createFfmpegComplexFilter: ({ filters, downloadMap, }: {
4
+ filters: PreprocessedAudioTrack[];
5
+ downloadMap: DownloadMap;
6
+ }) => Promise<{
3
7
  complexFilterFlag: [string, string] | null;
4
8
  cleanup: () => void;
5
9
  }>;
@@ -3,12 +3,14 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.createFfmpegComplexFilter = void 0;
4
4
  const create_ffmpeg_merge_filter_1 = require("./create-ffmpeg-merge-filter");
5
5
  const ffmpeg_filter_file_1 = require("./ffmpeg-filter-file");
6
- const createFfmpegComplexFilter = async (filters, downloadMap) => {
7
- if (filters === 0) {
6
+ const createFfmpegComplexFilter = async ({ filters, downloadMap, }) => {
7
+ if (filters.length === 0) {
8
8
  return { complexFilterFlag: null, cleanup: () => undefined };
9
9
  }
10
- const complexFilter = (0, create_ffmpeg_merge_filter_1.createFfmpegMergeFilter)(filters);
11
- const { file, cleanup } = await (0, ffmpeg_filter_file_1.makeFfmpegFilterFile)(complexFilter, downloadMap);
10
+ const complexFilter = (0, create_ffmpeg_merge_filter_1.createFfmpegMergeFilter)({
11
+ inputs: filters,
12
+ });
13
+ const { file, cleanup } = await (0, ffmpeg_filter_file_1.makeFfmpegFilterFileStr)(complexFilter, downloadMap);
12
14
  return {
13
15
  complexFilterFlag: ['-filter_complex_script', file],
14
16
  cleanup,
@@ -1 +1,5 @@
1
- export declare const createFfmpegMergeFilter: (inputs: number) => string;
1
+ import type { PreprocessedAudioTrack } from './preprocess-audio-track';
2
+ export declare const OUTPUT_FILTER_NAME = "outputaudio";
3
+ export declare const createFfmpegMergeFilter: ({ inputs, }: {
4
+ inputs: PreprocessedAudioTrack[];
5
+ }) => string;
@@ -1,18 +1,26 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.createFfmpegMergeFilter = void 0;
3
+ exports.createFfmpegMergeFilter = exports.OUTPUT_FILTER_NAME = void 0;
4
4
  const truthy_1 = require("./truthy");
5
- const createFfmpegMergeFilter = (inputs) => {
6
- const leftChannel = new Array(inputs * 2)
7
- .fill(true)
8
- .map((_, i) => (i % 2 === 0 ? `c${i}` : null))
9
- .filter(truthy_1.truthy)
10
- .join('+');
11
- const rightChannel = new Array(inputs * 2)
12
- .fill(true)
13
- .map((_, i) => (i % 2 === 1 ? `c${i}` : null))
14
- .filter(truthy_1.truthy)
15
- .join('+');
16
- return `[0:a][1:a]amerge=inputs=${inputs},pan=stereo|c0=${leftChannel}|c1=${rightChannel}[a]`;
5
+ exports.OUTPUT_FILTER_NAME = 'outputaudio';
6
+ const createFfmpegMergeFilter = ({ inputs, }) => {
7
+ const pads = inputs.map((input, index) => {
8
+ const filters = [
9
+ input.filter.pad_start ? input.filter.pad_start : null,
10
+ input.filter.pad_end ? input.filter.pad_end : null,
11
+ 'acopy',
12
+ ];
13
+ return `[${index}:a]${filters.filter(truthy_1.truthy).join(',')}[padded${index}]`;
14
+ });
15
+ const normalize = ':normalize=0';
16
+ return [
17
+ ...pads,
18
+ `${new Array(inputs.length)
19
+ .fill(true)
20
+ .map((_, i) => {
21
+ return `[padded${i}]`;
22
+ })
23
+ .join('')}amix=inputs=${inputs.length}:dropout_transition=0${normalize}[${exports.OUTPUT_FILTER_NAME}]`,
24
+ ].join(';');
17
25
  };
18
26
  exports.createFfmpegMergeFilter = createFfmpegMergeFilter;
@@ -1,6 +1,4 @@
1
- import type { FfmpegExecutable } from './ffmpeg-executable';
2
- export declare const createSilentAudio: ({ ffmpegExecutable, numberOfSeconds, outName, }: {
3
- ffmpegExecutable: FfmpegExecutable;
1
+ export declare const createSilentAudio: ({ numberOfSeconds, outName, }: {
4
2
  numberOfSeconds: number;
5
3
  outName: string;
6
4
  }) => Promise<void>;
@@ -1,13 +1,10 @@
1
1
  "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
2
  Object.defineProperty(exports, "__esModule", { value: true });
6
3
  exports.createSilentAudio = void 0;
7
- const execa_1 = __importDefault(require("execa"));
4
+ const call_ffmpeg_1 = require("./call-ffmpeg");
8
5
  const sample_rate_1 = require("./sample-rate");
9
- const createSilentAudio = async ({ ffmpegExecutable, numberOfSeconds, outName, }) => {
10
- await (0, execa_1.default)(ffmpegExecutable !== null && ffmpegExecutable !== void 0 ? ffmpegExecutable : 'ffmpeg', [
6
+ const createSilentAudio = async ({ numberOfSeconds, outName, }) => {
7
+ await (0, call_ffmpeg_1.callFf)('ffmpeg', [
11
8
  '-f',
12
9
  'lavfi',
13
10
  '-i',
package/dist/crf.d.ts CHANGED
@@ -1,5 +1,9 @@
1
1
  import type { Codec } from './codec';
2
- export declare type Crf = number | undefined;
2
+ export type Crf = number | undefined;
3
3
  export declare const getDefaultCrfForCodec: (codec: Codec) => number;
4
4
  export declare const getValidCrfRanges: (codec: Codec) => [number, number];
5
- export declare const validateSelectedCrfAndCodecCombination: (crf: unknown, codec: Codec) => void;
5
+ export declare const validateQualitySettings: ({ codec, crf, videoBitrate, }: {
6
+ crf: unknown;
7
+ codec: Codec;
8
+ videoBitrate: string | null | undefined;
9
+ }) => string[];
package/dist/crf.js CHANGED
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.validateSelectedCrfAndCodecCombination = exports.getValidCrfRanges = exports.getDefaultCrfForCodec = void 0;
3
+ exports.validateQualitySettings = exports.getValidCrfRanges = exports.getDefaultCrfForCodec = void 0;
4
4
  const is_audio_codec_1 = require("./is-audio-codec");
5
5
  const getDefaultCrfForCodec = (codec) => {
6
6
  if ((0, is_audio_codec_1.isAudioCodec)(codec)) {
@@ -9,7 +9,7 @@ const getDefaultCrfForCodec = (codec) => {
9
9
  if (codec === 'h264' || codec === 'h264-mkv') {
10
10
  return 18; // FFMPEG default 23
11
11
  }
12
- if (codec === 'h265' || codec === 'gif') {
12
+ if (codec === 'h265') {
13
13
  return 23; // FFMPEG default 28
14
14
  }
15
15
  if (codec === 'vp8') {
@@ -21,6 +21,9 @@ const getDefaultCrfForCodec = (codec) => {
21
21
  if (codec === 'prores') {
22
22
  return 0;
23
23
  }
24
+ if (codec === 'gif') {
25
+ return 0;
26
+ }
24
27
  throw new TypeError(`Got unexpected codec "${codec}"`);
25
28
  };
26
29
  exports.getDefaultCrfForCodec = getDefaultCrfForCodec;
@@ -31,10 +34,13 @@ const getValidCrfRanges = (codec) => {
31
34
  if (codec === 'prores') {
32
35
  return [0, 0];
33
36
  }
37
+ if (codec === 'gif') {
38
+ return [0, 0];
39
+ }
34
40
  if (codec === 'h264' || codec === 'h264-mkv') {
35
41
  return [1, 51];
36
42
  }
37
- if (codec === 'h265' || codec === 'gif') {
43
+ if (codec === 'h265') {
38
44
  return [0, 51];
39
45
  }
40
46
  if (codec === 'vp8') {
@@ -46,19 +52,46 @@ const getValidCrfRanges = (codec) => {
46
52
  throw new TypeError(`Got unexpected codec "${codec}"`);
47
53
  };
48
54
  exports.getValidCrfRanges = getValidCrfRanges;
49
- const validateSelectedCrfAndCodecCombination = (crf, codec) => {
50
- if (crf === null) {
51
- return;
55
+ const validateQualitySettings = ({ codec, crf, videoBitrate, }) => {
56
+ if (crf && videoBitrate) {
57
+ throw new Error('"crf" and "videoBitrate" can not both be set. Choose one of either.');
58
+ }
59
+ if (videoBitrate) {
60
+ if (codec === 'prores') {
61
+ console.warn('ProRes does not support videoBitrate. Ignoring.');
62
+ return [];
63
+ }
64
+ if ((0, is_audio_codec_1.isAudioCodec)(codec)) {
65
+ console.warn(`${codec} does not support videoBitrate. Ignoring.`);
66
+ return [];
67
+ }
68
+ return ['-b:v', videoBitrate];
69
+ }
70
+ if (crf === null || typeof crf === 'undefined') {
71
+ const actualCrf = (0, exports.getDefaultCrfForCodec)(codec);
72
+ return ['-crf', String(actualCrf)];
52
73
  }
53
74
  if (typeof crf !== 'number') {
54
75
  throw new TypeError('Expected CRF to be a number, but is ' + JSON.stringify(crf));
55
76
  }
56
77
  const range = (0, exports.getValidCrfRanges)(codec);
57
78
  if (crf === 0 && (codec === 'h264' || codec === 'h264-mkv')) {
58
- throw new TypeError("Setting the CRF to 0 with a H264 codec is not supported anymore because of it's inconsistencies between platforms. Videos with CRF 0 cannot be played on iOS/macOS. 0 is a extreme value with inefficient settings which you probably want. Set CRF to a higher value to fix this error.");
79
+ throw new TypeError("Setting the CRF to 0 with a H264 codec is not supported anymore because of it's inconsistencies between platforms. Videos with CRF 0 cannot be played on iOS/macOS. 0 is a extreme value with inefficient settings which you probably do not want. Set CRF to a higher value to fix this error.");
59
80
  }
60
81
  if (crf < range[0] || crf > range[1]) {
82
+ if (range[0] === 0 && range[1] === 0) {
83
+ throw new TypeError(`The "${codec}" codec does not support the --crf option.`);
84
+ }
61
85
  throw new TypeError(`CRF must be between ${range[0]} and ${range[1]} for codec ${codec}. Passed: ${crf}`);
62
86
  }
87
+ if (codec === 'prores') {
88
+ console.warn('ProRes does not support the "crf" option. Ignoring.');
89
+ return [];
90
+ }
91
+ if ((0, is_audio_codec_1.isAudioCodec)(codec)) {
92
+ console.warn(`${codec} does not support the "crf" option. Ignoring.`);
93
+ return [];
94
+ }
95
+ return ['-crf', String(crf)];
63
96
  };
64
- exports.validateSelectedCrfAndCodecCombination = validateSelectedCrfAndCodecCombination;
97
+ exports.validateQualitySettings = validateQualitySettings;
@@ -1,7 +1,4 @@
1
- import type { openBrowser } from './open-browser';
2
- declare type Await<T> = T extends PromiseLike<infer U> ? U : T;
3
- declare type Browser = Await<ReturnType<typeof openBrowser>>;
4
- export declare const cycleBrowserTabs: (puppeteerInstance: Browser, concurrency: number) => {
1
+ import type { BrowserReplacer } from './replace-browser';
2
+ export declare const cycleBrowserTabs: (puppeteerInstance: BrowserReplacer, concurrency: number) => {
5
3
  stopCycling: () => void;
6
4
  };
7
- export {};
@@ -13,24 +13,24 @@ const cycleBrowserTabs = (puppeteerInstance, concurrency) => {
13
13
  const set = () => {
14
14
  interval = setTimeout(() => {
15
15
  puppeteerInstance
16
+ .getBrowser()
16
17
  .pages()
17
18
  .then((pages) => {
18
- var _a;
19
19
  if (pages.length === 0) {
20
20
  return;
21
21
  }
22
22
  const currentPage = pages[i % pages.length];
23
23
  i++;
24
- if (!((_a = currentPage === null || currentPage === void 0 ? void 0 : currentPage.isClosed) === null || _a === void 0 ? void 0 : _a.call(currentPage)) &&
24
+ if (!(currentPage === null || currentPage === void 0 ? void 0 : currentPage.closed) &&
25
25
  !stopped &&
26
26
  (currentPage === null || currentPage === void 0 ? void 0 : currentPage.url()) !== 'about:blank') {
27
27
  return currentPage.bringToFront();
28
28
  }
29
29
  })
30
- .then(() => {
30
+ .catch((err) => console.log(err))
31
+ .finally(() => {
31
32
  set();
32
- })
33
- .catch((err) => console.log(err));
33
+ });
34
34
  }, 200);
35
35
  };
36
36
  set();
File without changes
File without changes
@@ -1 +1 @@
1
- export declare const deleteDirectory: (directory: string) => Promise<void>;
1
+ export declare const deleteDirectory: (directory: string) => void;