@remotion/renderer 4.0.0-alpha.4 → 4.0.0-alpha4

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 (556) hide show
  1. package/LICENSE.md +8 -8
  2. package/README.md +47 -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 +2 -1
  12. package/dist/assets/download-and-map-assets-to-file.js +60 -11
  13. package/dist/assets/download-file.d.ts +7 -5
  14. package/dist/assets/download-file.js +49 -6
  15. package/dist/assets/download-map.d.ts +8 -3
  16. package/dist/assets/download-map.js +8 -4
  17. package/dist/assets/ffmpeg-volume-expression.d.ts +2 -1
  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 +1 -1
  22. package/dist/assets/get-audio-channels.js +5 -4
  23. package/dist/assets/get-video-stream-duration.d.ts +7 -1
  24. package/dist/assets/get-video-stream-duration.js +50 -14
  25. package/dist/assets/read-file.d.ts +0 -0
  26. package/dist/assets/read-file.js +2 -4
  27. package/dist/assets/round-volume-to-avoid-stack-overflow.d.ts +0 -0
  28. package/dist/assets/round-volume-to-avoid-stack-overflow.js +0 -0
  29. package/dist/assets/sanitize-filename.d.ts +0 -0
  30. package/dist/assets/sanitize-filename.js +0 -0
  31. package/dist/assets/sanitize-filepath.d.ts +0 -0
  32. package/dist/assets/sanitize-filepath.js +0 -0
  33. package/dist/assets/truncate-utf8-bytes.d.ts +0 -0
  34. package/dist/assets/truncate-utf8-bytes.js +0 -0
  35. package/dist/assets/types.d.ts +1 -0
  36. package/dist/assets/types.js +0 -0
  37. package/dist/audio-codec.d.ts +27 -0
  38. package/dist/audio-codec.js +89 -0
  39. package/dist/browser/Browser.d.ts +4 -2
  40. package/dist/browser/Browser.js +15 -12
  41. package/dist/browser/BrowserConnector.d.ts +0 -0
  42. package/dist/browser/BrowserConnector.js +0 -0
  43. package/dist/browser/BrowserFetcher.d.ts +16 -63
  44. package/dist/browser/BrowserFetcher.js +146 -231
  45. package/dist/browser/BrowserPage.d.ts +8 -2
  46. package/dist/browser/BrowserPage.js +8 -11
  47. package/dist/browser/BrowserRunner.d.ts +1 -4
  48. package/dist/browser/BrowserRunner.js +30 -73
  49. package/dist/browser/Connection.d.ts +0 -0
  50. package/dist/browser/Connection.js +1 -1
  51. package/dist/browser/ConsoleMessage.d.ts +0 -0
  52. package/dist/browser/ConsoleMessage.js +0 -0
  53. package/dist/browser/DOMWorld.d.ts +2 -1
  54. package/dist/browser/DOMWorld.js +8 -1
  55. package/dist/browser/Errors.d.ts +0 -0
  56. package/dist/browser/Errors.js +0 -0
  57. package/dist/browser/EvalTypes.d.ts +0 -0
  58. package/dist/browser/EvalTypes.js +0 -0
  59. package/dist/browser/EventEmitter.d.ts +0 -0
  60. package/dist/browser/EventEmitter.js +0 -0
  61. package/dist/browser/ExecutionContext.d.ts +0 -0
  62. package/dist/browser/ExecutionContext.js +0 -0
  63. package/dist/browser/FrameManager.d.ts +0 -2
  64. package/dist/browser/FrameManager.js +0 -3
  65. package/dist/browser/HTTPRequest.d.ts +0 -0
  66. package/dist/browser/HTTPRequest.js +0 -0
  67. package/dist/browser/HTTPResponse.d.ts +0 -0
  68. package/dist/browser/HTTPResponse.js +0 -0
  69. package/dist/browser/JSHandle.d.ts +0 -0
  70. package/dist/browser/JSHandle.js +0 -0
  71. package/dist/browser/LaunchOptions.d.ts +0 -4
  72. package/dist/browser/LaunchOptions.js +0 -0
  73. package/dist/browser/Launcher.d.ts +7 -1
  74. package/dist/browser/Launcher.js +12 -375
  75. package/dist/browser/LifecycleWatcher.d.ts +0 -0
  76. package/dist/browser/LifecycleWatcher.js +0 -0
  77. package/dist/browser/NetworkEventManager.d.ts +0 -0
  78. package/dist/browser/NetworkEventManager.js +0 -0
  79. package/dist/browser/NetworkManager.d.ts +0 -0
  80. package/dist/browser/NetworkManager.js +0 -0
  81. package/dist/browser/NodeWebSocketTransport.d.ts +0 -0
  82. package/dist/browser/NodeWebSocketTransport.js +1 -1
  83. package/dist/browser/Product.d.ts +0 -0
  84. package/dist/browser/Product.js +0 -0
  85. package/dist/browser/PuppeteerNode.d.ts +0 -3
  86. package/dist/browser/PuppeteerNode.js +2 -14
  87. package/dist/browser/PuppeteerViewport.d.ts +0 -0
  88. package/dist/browser/PuppeteerViewport.js +0 -0
  89. package/dist/browser/ScreenshotOptions.d.ts +0 -14
  90. package/dist/browser/ScreenshotOptions.js +0 -1
  91. package/dist/browser/Target.d.ts +0 -0
  92. package/dist/browser/Target.js +0 -0
  93. package/dist/browser/TaskQueue.d.ts +0 -0
  94. package/dist/browser/TaskQueue.js +0 -0
  95. package/dist/browser/TimeoutSettings.d.ts +0 -0
  96. package/dist/browser/TimeoutSettings.js +0 -0
  97. package/dist/browser/assert.d.ts +0 -0
  98. package/dist/browser/assert.js +0 -0
  99. package/dist/browser/create-browser-fetcher.d.ts +0 -0
  100. package/dist/browser/create-browser-fetcher.js +34 -90
  101. package/dist/browser/devtools-commands.d.ts +0 -0
  102. package/dist/browser/devtools-commands.js +0 -0
  103. package/dist/browser/devtools-types.d.ts +4 -0
  104. package/dist/browser/devtools-types.js +0 -0
  105. package/dist/browser/get-download-destination.d.ts +0 -0
  106. package/dist/browser/get-download-destination.js +0 -0
  107. package/dist/browser/mitt/index.d.ts +0 -0
  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 +0 -1
  112. package/dist/browser/revisions.js +0 -1
  113. package/dist/browser/util.d.ts +0 -0
  114. package/dist/browser/util.js +0 -0
  115. package/dist/browser-executable.d.ts +0 -0
  116. package/dist/browser-executable.js +0 -0
  117. package/dist/browser-log.d.ts +0 -0
  118. package/dist/browser-log.js +0 -0
  119. package/dist/browser.d.ts +0 -0
  120. package/dist/browser.js +0 -0
  121. package/dist/calculate-ffmpeg-filters.d.ts +2 -1
  122. package/dist/calculate-ffmpeg-filters.js +1 -0
  123. package/dist/calculate-sar-dar-pixels.d.ts +0 -0
  124. package/dist/calculate-sar-dar-pixels.js +0 -0
  125. package/dist/can-use-parallel-encoding.d.ts +0 -0
  126. package/dist/can-use-parallel-encoding.js +0 -0
  127. package/dist/check-apple-silicon.d.ts +1 -0
  128. package/dist/check-apple-silicon.js +55 -0
  129. package/dist/chunk.d.ts +0 -0
  130. package/dist/chunk.js +0 -0
  131. package/dist/client.d.ts +179 -0
  132. package/dist/client.js +23 -0
  133. package/dist/codec-supports-media.d.ts +1 -0
  134. package/dist/codec-supports-media.js +8 -1
  135. package/dist/codec.d.ts +0 -0
  136. package/dist/codec.js +0 -0
  137. package/dist/combine-videos.d.ts +9 -2
  138. package/dist/combine-videos.js +12 -8
  139. package/dist/compositor/compose.d.ts +13 -0
  140. package/dist/compositor/compose.js +47 -0
  141. package/dist/compositor/get-executable-path.d.ts +1 -0
  142. package/dist/compositor/get-executable-path.js +47 -0
  143. package/dist/compositor/payloads.d.ts +41 -0
  144. package/dist/compositor/payloads.js +2 -0
  145. package/dist/compress-assets.d.ts +0 -0
  146. package/dist/compress-assets.js +0 -0
  147. package/dist/convert-number-of-gif-loops-to-ffmpeg.d.ts +0 -0
  148. package/dist/convert-number-of-gif-loops-to-ffmpeg.js +0 -0
  149. package/dist/convert-to-positive-frame-index.d.ts +4 -0
  150. package/dist/convert-to-positive-frame-index.js +8 -0
  151. package/dist/create-ffmpeg-complex-filter.d.ts +9 -5
  152. package/dist/create-ffmpeg-complex-filter.js +8 -4
  153. package/dist/create-ffmpeg-merge-filter.d.ts +8 -1
  154. package/dist/create-ffmpeg-merge-filter.js +29 -13
  155. package/dist/create-silent-audio.d.ts +2 -1
  156. package/dist/create-silent-audio.js +3 -2
  157. package/dist/crf.d.ts +5 -1
  158. package/dist/crf.js +33 -6
  159. package/dist/cycle-browser-tabs.d.ts +2 -5
  160. package/dist/cycle-browser-tabs.js +5 -5
  161. package/dist/delay-render-embedded-stack.d.ts +0 -0
  162. package/dist/delay-render-embedded-stack.js +0 -0
  163. package/dist/delete-directory.d.ts +1 -1
  164. package/dist/delete-directory.js +31 -5
  165. package/dist/determine-resize-params.d.ts +1 -0
  166. package/dist/determine-resize-params.js +10 -0
  167. package/dist/determine-vcodec-ffmpeg-flags.d.ts +2 -0
  168. package/dist/determine-vcodec-ffmpeg-flags.js +13 -0
  169. package/dist/does-have-m2-bug.d.ts +3 -0
  170. package/dist/does-have-m2-bug.js +12 -0
  171. package/dist/ensure-ffmpeg.d.ts +18 -0
  172. package/dist/ensure-ffmpeg.js +58 -0
  173. package/dist/ensure-frames-in-order.d.ts +0 -0
  174. package/dist/ensure-frames-in-order.js +0 -0
  175. package/dist/ensure-output-directory.d.ts +0 -0
  176. package/dist/ensure-output-directory.js +0 -0
  177. package/dist/ensure-presentation-timestamp.d.ts +14 -1
  178. package/dist/ensure-presentation-timestamp.js +36 -17
  179. package/dist/error-handling/handle-javascript-exception.d.ts +0 -0
  180. package/dist/error-handling/handle-javascript-exception.js +10 -0
  181. package/dist/error-handling/symbolicate-error.d.ts +0 -0
  182. package/dist/error-handling/symbolicate-error.js +2 -1
  183. package/dist/error-handling/symbolicateable-error.d.ts +0 -0
  184. package/dist/error-handling/symbolicateable-error.js +0 -0
  185. package/dist/extract-frame-from-video.d.ts +2 -0
  186. package/dist/extract-frame-from-video.js +47 -110
  187. package/dist/ffmpeg-executable.d.ts +0 -0
  188. package/dist/ffmpeg-executable.js +0 -0
  189. package/dist/ffmpeg-filter-file.d.ts +6 -1
  190. package/dist/ffmpeg-filter-file.js +36 -4
  191. package/dist/ffmpeg-flags.d.ts +20 -2
  192. package/dist/ffmpeg-flags.js +205 -9
  193. package/dist/ffmpeg-override.d.ts +4 -0
  194. package/dist/ffmpeg-override.js +2 -0
  195. package/dist/file-extensions.d.ts +25 -0
  196. package/dist/file-extensions.js +88 -0
  197. package/dist/find-closest-package-json.d.ts +2 -0
  198. package/dist/find-closest-package-json.js +31 -0
  199. package/dist/frame-range.d.ts +0 -0
  200. package/dist/frame-range.js +0 -0
  201. package/dist/frame-to-ffmpeg-timestamp.d.ts +0 -0
  202. package/dist/frame-to-ffmpeg-timestamp.js +0 -0
  203. package/dist/get-browser-instance.d.ts +0 -0
  204. package/dist/get-browser-instance.js +1 -1
  205. package/dist/get-can-extract-frames-fast.d.ts +14 -0
  206. package/dist/get-can-extract-frames-fast.js +71 -0
  207. package/dist/get-codec-name.d.ts +0 -0
  208. package/dist/get-codec-name.js +0 -0
  209. package/dist/get-compositions.d.ts +4 -0
  210. package/dist/get-compositions.js +26 -7
  211. package/dist/get-concurrency.d.ts +1 -1
  212. package/dist/get-concurrency.js +8 -1
  213. package/dist/get-duration-from-frame-range.d.ts +0 -0
  214. package/dist/get-duration-from-frame-range.js +0 -0
  215. package/dist/get-extension-from-codec.d.ts +5 -1
  216. package/dist/get-extension-from-codec.js +56 -32
  217. package/dist/get-extension-of-filename.d.ts +0 -0
  218. package/dist/get-extension-of-filename.js +5 -1
  219. package/dist/get-frame-of-video-slow.d.ts +15 -0
  220. package/dist/get-frame-of-video-slow.js +72 -0
  221. package/dist/get-frame-padded-index.d.ts +1 -1
  222. package/dist/get-frame-padded-index.js +3 -2
  223. package/dist/get-frame-to-render.d.ts +0 -0
  224. package/dist/get-frame-to-render.js +1 -1
  225. package/dist/get-local-browser-executable.d.ts +0 -0
  226. package/dist/get-local-browser-executable.js +4 -14
  227. package/dist/get-port.d.ts +4 -1
  228. package/dist/get-port.js +8 -8
  229. package/dist/get-prores-profile-name.d.ts +0 -0
  230. package/dist/get-prores-profile-name.js +0 -0
  231. package/dist/get-video-info.d.ts +6 -1
  232. package/dist/get-video-info.js +19 -9
  233. package/dist/get-video-threads-flag.d.ts +0 -0
  234. package/dist/get-video-threads-flag.js +0 -0
  235. package/dist/guess-extension-for-media.d.ts +5 -1
  236. package/dist/guess-extension-for-media.js +4 -3
  237. package/dist/image-format.d.ts +1 -1
  238. package/dist/image-format.js +3 -0
  239. package/dist/index.d.ts +187 -41
  240. package/dist/index.js +31 -28
  241. package/dist/is-audio-codec.d.ts +0 -0
  242. package/dist/is-audio-codec.js +0 -0
  243. package/dist/is-beyond-last-frame.d.ts +0 -0
  244. package/dist/is-beyond-last-frame.js +0 -0
  245. package/dist/is-serve-url.d.ts +0 -0
  246. package/dist/is-serve-url.js +0 -0
  247. package/dist/last-frame-from-video-cache.d.ts +2 -0
  248. package/dist/last-frame-from-video-cache.js +0 -0
  249. package/dist/legacy-webpack-config.d.ts +0 -0
  250. package/dist/legacy-webpack-config.js +0 -0
  251. package/dist/locks.d.ts +7 -0
  252. package/dist/locks.js +44 -0
  253. package/dist/log-level.d.ts +0 -0
  254. package/dist/log-level.js +0 -0
  255. package/dist/make-cancel-signal.d.ts +11 -0
  256. package/dist/make-cancel-signal.js +24 -1
  257. package/dist/merge-audio-track.d.ts +3 -1
  258. package/dist/merge-audio-track.js +43 -30
  259. package/dist/mime-db.d.ts +0 -0
  260. package/dist/mime-db.js +0 -0
  261. package/dist/mime-types.d.ts +1 -0
  262. package/dist/mime-types.js +6 -1
  263. package/dist/normalize-serve-url.d.ts +0 -0
  264. package/dist/normalize-serve-url.js +0 -0
  265. package/dist/offthread-video-server.d.ts +2 -1
  266. package/dist/offthread-video-server.js +13 -1
  267. package/dist/open-browser.d.ts +5 -0
  268. package/dist/open-browser.js +12 -15
  269. package/dist/overwrite.d.ts +0 -0
  270. package/dist/overwrite.js +0 -0
  271. package/dist/p-limit.d.ts +0 -0
  272. package/dist/p-limit.js +0 -0
  273. package/dist/parse-browser-error-stack.d.ts +0 -0
  274. package/dist/parse-browser-error-stack.js +0 -0
  275. package/dist/parse-ffmpeg-progress.d.ts +0 -0
  276. package/dist/parse-ffmpeg-progress.js +0 -0
  277. package/dist/perf.d.ts +0 -0
  278. package/dist/perf.js +0 -0
  279. package/dist/pixel-format.d.ts +1 -1
  280. package/dist/pixel-format.js +3 -0
  281. package/dist/pool.d.ts +0 -0
  282. package/dist/pool.js +0 -0
  283. package/dist/prepare-server.d.ts +3 -2
  284. package/dist/prepare-server.js +8 -3
  285. package/dist/preprocess-audio-track.d.ts +7 -1
  286. package/dist/preprocess-audio-track.js +7 -4
  287. package/dist/prespawn-ffmpeg.d.ts +4 -1
  288. package/dist/prespawn-ffmpeg.js +17 -12
  289. package/dist/prestitcher-memory-usage.d.ts +0 -0
  290. package/dist/prestitcher-memory-usage.js +0 -0
  291. package/dist/prores-profile.d.ts +4 -1
  292. package/dist/prores-profile.js +6 -6
  293. package/dist/provide-screenshot.d.ts +5 -1
  294. package/dist/provide-screenshot.js +4 -1
  295. package/dist/puppeteer-evaluate.d.ts +0 -0
  296. package/dist/puppeteer-evaluate.js +19 -11
  297. package/dist/puppeteer-screenshot.d.ts +11 -2
  298. package/dist/puppeteer-screenshot.js +11 -14
  299. package/dist/quality.d.ts +0 -0
  300. package/dist/quality.js +0 -0
  301. package/dist/redirect-status-codes.d.ts +1 -0
  302. package/dist/redirect-status-codes.js +6 -0
  303. package/dist/render-frames.d.ts +15 -3
  304. package/dist/render-frames.js +176 -84
  305. package/dist/render-media.d.ts +38 -6
  306. package/dist/render-media.js +123 -27
  307. package/dist/render-still.d.ts +8 -4
  308. package/dist/render-still.js +66 -31
  309. package/dist/replace-browser.d.ts +6 -0
  310. package/dist/replace-browser.js +47 -0
  311. package/dist/resolve-asset-src.d.ts +0 -0
  312. package/dist/resolve-asset-src.js +0 -0
  313. package/dist/sample-rate.d.ts +0 -0
  314. package/dist/sample-rate.js +0 -0
  315. package/dist/screenshot-dom-element.d.ts +5 -1
  316. package/dist/screenshot-dom-element.js +10 -2
  317. package/dist/screenshot-task.d.ts +12 -2
  318. package/dist/screenshot-task.js +24 -9
  319. package/dist/seek-to-frame.d.ts +1 -0
  320. package/dist/seek-to-frame.js +49 -3
  321. package/dist/serve-handler/index.d.ts +0 -0
  322. package/dist/serve-handler/index.js +0 -0
  323. package/dist/serve-handler/is-path-inside.d.ts +0 -0
  324. package/dist/serve-handler/is-path-inside.js +0 -0
  325. package/dist/serve-handler/range-parser.d.ts +0 -0
  326. package/dist/serve-handler/range-parser.js +0 -0
  327. package/dist/serve-static.d.ts +1 -0
  328. package/dist/serve-static.js +77 -41
  329. package/dist/set-props-and-env.d.ts +3 -1
  330. package/dist/set-props-and-env.js +39 -15
  331. package/dist/stitch-frames-to-video.d.ts +14 -1
  332. package/dist/stitch-frames-to-video.js +122 -50
  333. package/dist/stringify-ffmpeg-filter.d.ts +10 -2
  334. package/dist/stringify-ffmpeg-filter.js +37 -34
  335. package/dist/symbolicate-stacktrace.d.ts +0 -0
  336. package/dist/symbolicate-stacktrace.js +0 -0
  337. package/dist/take-frame-and-compose.d.ts +20 -0
  338. package/dist/take-frame-and-compose.js +96 -0
  339. package/dist/tmp-dir.d.ts +0 -0
  340. package/dist/tmp-dir.js +0 -0
  341. package/dist/truthy.d.ts +0 -0
  342. package/dist/truthy.js +0 -0
  343. package/dist/try-to-extract-frame-of-video-fast.d.ts +13 -0
  344. package/dist/try-to-extract-frame-of-video-fast.js +55 -0
  345. package/dist/types.d.ts +0 -0
  346. package/dist/types.js +0 -0
  347. package/dist/validate-concurrency.d.ts +0 -0
  348. package/dist/validate-concurrency.js +14 -9
  349. package/dist/validate-even-dimensions-with-codec.d.ts +0 -0
  350. package/dist/validate-even-dimensions-with-codec.js +0 -0
  351. package/dist/validate-every-nth-frame.d.ts +2 -1
  352. package/dist/validate-every-nth-frame.js +8 -1
  353. package/dist/validate-ffmpeg-override.d.ts +2 -0
  354. package/dist/validate-ffmpeg-override.js +12 -0
  355. package/dist/validate-ffmpeg.d.ts +7 -2
  356. package/dist/validate-ffmpeg.js +48 -43
  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 +0 -0
  360. package/dist/validate-opengl-renderer.js +0 -0
  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 -1
  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/warn-about-ffmpeg-version.d.ts +5 -0
  372. package/dist/warn-about-ffmpeg-version.js +37 -0
  373. package/dist/ws/ws-types.d.ts +0 -0
  374. package/dist/ws/ws-types.js +2 -1
  375. package/package.json +68 -60
  376. package/.prettierrc.js +0 -14
  377. package/dist/add-silent-audio-if-necessary.d.ts +0 -8
  378. package/dist/add-silent-audio-if-necessary.d.ts.map +0 -1
  379. package/dist/add-silent-audio-if-necessary.js +0 -51
  380. package/dist/add-silent-audio-if-necessary.js.map +0 -1
  381. package/dist/assets/asset-is-used-at-time.d.ts +0 -3
  382. package/dist/assets/asset-is-used-at-time.d.ts.map +0 -1
  383. package/dist/assets/asset-is-used-at-time.js +0 -8
  384. package/dist/assets/asset-is-used-at-time.js.map +0 -1
  385. package/dist/assets/calculate-asset-positions.d.ts.map +0 -1
  386. package/dist/assets/calculate-asset-positions.js.map +0 -1
  387. package/dist/assets/calculate-atempo.d.ts.map +0 -1
  388. package/dist/assets/calculate-atempo.js.map +0 -1
  389. package/dist/assets/convert-assets-to-file-urls.d.ts.map +0 -1
  390. package/dist/assets/convert-assets-to-file-urls.js.map +0 -1
  391. package/dist/assets/download-and-map-assets-to-file.d.ts.map +0 -1
  392. package/dist/assets/download-and-map-assets-to-file.js.map +0 -1
  393. package/dist/assets/download-file.d.ts.map +0 -1
  394. package/dist/assets/download-file.js.map +0 -1
  395. package/dist/assets/ffmpeg-volume-expression.d.ts.map +0 -1
  396. package/dist/assets/ffmpeg-volume-expression.js.map +0 -1
  397. package/dist/assets/flatten-volume-array.d.ts.map +0 -1
  398. package/dist/assets/flatten-volume-array.js.map +0 -1
  399. package/dist/assets/get-asset-audio-details.d.ts +0 -5
  400. package/dist/assets/get-asset-audio-details.d.ts.map +0 -1
  401. package/dist/assets/get-asset-audio-details.js +0 -21
  402. package/dist/assets/get-asset-audio-details.js.map +0 -1
  403. package/dist/assets/get-audio-channels.d.ts.map +0 -1
  404. package/dist/assets/get-audio-channels.js.map +0 -1
  405. package/dist/assets/get-simulatenous-assets.d.ts +0 -3
  406. package/dist/assets/get-simulatenous-assets.d.ts.map +0 -1
  407. package/dist/assets/get-simulatenous-assets.js +0 -14
  408. package/dist/assets/get-simulatenous-assets.js.map +0 -1
  409. package/dist/assets/read-file.d.ts.map +0 -1
  410. package/dist/assets/read-file.js.map +0 -1
  411. package/dist/assets/round-volume-to-avoid-stack-overflow.d.ts.map +0 -1
  412. package/dist/assets/round-volume-to-avoid-stack-overflow.js.map +0 -1
  413. package/dist/assets/sanitize-filename.d.ts.map +0 -1
  414. package/dist/assets/sanitize-filename.js.map +0 -1
  415. package/dist/assets/sanitize-filepath.d.ts.map +0 -1
  416. package/dist/assets/sanitize-filepath.js.map +0 -1
  417. package/dist/assets/split-assets-into-segments.d.ts +0 -6
  418. package/dist/assets/split-assets-into-segments.d.ts.map +0 -1
  419. package/dist/assets/split-assets-into-segments.js +0 -89
  420. package/dist/assets/split-assets-into-segments.js.map +0 -1
  421. package/dist/assets/truncate-utf8-bytes.d.ts.map +0 -1
  422. package/dist/assets/truncate-utf8-bytes.js.map +0 -1
  423. package/dist/assets/types.d.ts.map +0 -1
  424. package/dist/assets/types.js.map +0 -1
  425. package/dist/assets-to-ffmpeg-inputs.d.ts +0 -7
  426. package/dist/assets-to-ffmpeg-inputs.d.ts.map +0 -1
  427. package/dist/assets-to-ffmpeg-inputs.js +0 -15
  428. package/dist/assets-to-ffmpeg-inputs.js.map +0 -1
  429. package/dist/browser-log.d.ts.map +0 -1
  430. package/dist/browser-log.js.map +0 -1
  431. package/dist/calculate-ffmpeg-filters.d.ts.map +0 -1
  432. package/dist/calculate-ffmpeg-filters.js.map +0 -1
  433. package/dist/can-use-parallel-encoding.d.ts.map +0 -1
  434. package/dist/can-use-parallel-encoding.js.map +0 -1
  435. package/dist/combine-videos.d.ts.map +0 -1
  436. package/dist/combine-videos.js.map +0 -1
  437. package/dist/convert-to-pcm.d.ts +0 -6
  438. package/dist/convert-to-pcm.js +0 -20
  439. package/dist/create-ffmpeg-complex-filter.d.ts.map +0 -1
  440. package/dist/create-ffmpeg-complex-filter.js.map +0 -1
  441. package/dist/cycle-browser-tabs.d.ts.map +0 -1
  442. package/dist/cycle-browser-tabs.js.map +0 -1
  443. package/dist/delay-render-embedded-stack.d.ts.map +0 -1
  444. package/dist/delay-render-embedded-stack.js.map +0 -1
  445. package/dist/delete-directory.d.ts.map +0 -1
  446. package/dist/delete-directory.js.map +0 -1
  447. package/dist/ensure-frames-in-order.d.ts.map +0 -1
  448. package/dist/ensure-frames-in-order.js.map +0 -1
  449. package/dist/ensure-output-directory.d.ts.map +0 -1
  450. package/dist/ensure-output-directory.js.map +0 -1
  451. package/dist/error-handling/handle-javascript-exception.d.ts.map +0 -1
  452. package/dist/error-handling/handle-javascript-exception.js.map +0 -1
  453. package/dist/error-handling/symbolicate-error.d.ts.map +0 -1
  454. package/dist/error-handling/symbolicate-error.js.map +0 -1
  455. package/dist/error-handling/symbolicateable-error.d.ts.map +0 -1
  456. package/dist/error-handling/symbolicateable-error.js.map +0 -1
  457. package/dist/ffmpeg-flags.d.ts.map +0 -1
  458. package/dist/ffmpeg-flags.js.map +0 -1
  459. package/dist/get-audio-codec-name.d.ts +0 -2
  460. package/dist/get-audio-codec-name.d.ts.map +0 -1
  461. package/dist/get-audio-codec-name.js +0 -28
  462. package/dist/get-audio-codec-name.js.map +0 -1
  463. package/dist/get-browser-instance.d.ts.map +0 -1
  464. package/dist/get-browser-instance.js.map +0 -1
  465. package/dist/get-codec-name.d.ts.map +0 -1
  466. package/dist/get-codec-name.js.map +0 -1
  467. package/dist/get-compositions.d.ts.map +0 -1
  468. package/dist/get-compositions.js.map +0 -1
  469. package/dist/get-concurrency.d.ts.map +0 -1
  470. package/dist/get-concurrency.js.map +0 -1
  471. package/dist/get-extension-from-codec.d.ts.map +0 -1
  472. package/dist/get-extension-from-codec.js.map +0 -1
  473. package/dist/get-frame-to-render.d.ts.map +0 -1
  474. package/dist/get-frame-to-render.js.map +0 -1
  475. package/dist/get-local-browser-executable.d.ts.map +0 -1
  476. package/dist/get-local-browser-executable.js.map +0 -1
  477. package/dist/get-port.d.ts.map +0 -1
  478. package/dist/get-port.js.map +0 -1
  479. package/dist/get-prores-profile-name.d.ts.map +0 -1
  480. package/dist/get-prores-profile-name.js.map +0 -1
  481. package/dist/image-format.d.ts.map +0 -1
  482. package/dist/image-format.js.map +0 -1
  483. package/dist/index.d.ts.map +0 -1
  484. package/dist/index.js.map +0 -1
  485. package/dist/is-serve-url.d.ts.map +0 -1
  486. package/dist/is-serve-url.js.map +0 -1
  487. package/dist/legacy-webpack-config.d.ts.map +0 -1
  488. package/dist/legacy-webpack-config.js.map +0 -1
  489. package/dist/make-assets-download-dir.d.ts +0 -1
  490. package/dist/make-assets-download-dir.d.ts.map +0 -1
  491. package/dist/make-assets-download-dir.js +0 -13
  492. package/dist/make-assets-download-dir.js.map +0 -1
  493. package/dist/normalize-serve-url.d.ts.map +0 -1
  494. package/dist/normalize-serve-url.js.map +0 -1
  495. package/dist/open-browser.d.ts.map +0 -1
  496. package/dist/open-browser.js.map +0 -1
  497. package/dist/parse-browser-error-stack.d.ts.map +0 -1
  498. package/dist/parse-browser-error-stack.js.map +0 -1
  499. package/dist/parse-ffmpeg-progress.d.ts.map +0 -1
  500. package/dist/parse-ffmpeg-progress.js.map +0 -1
  501. package/dist/pool.d.ts.map +0 -1
  502. package/dist/pool.js.map +0 -1
  503. package/dist/prepare-server.d.ts.map +0 -1
  504. package/dist/prepare-server.js.map +0 -1
  505. package/dist/provide-screenshot.d.ts.map +0 -1
  506. package/dist/provide-screenshot.js.map +0 -1
  507. package/dist/puppeteer-evaluate.d.ts.map +0 -1
  508. package/dist/puppeteer-evaluate.js.map +0 -1
  509. package/dist/puppeteer-screenshot.d.ts.map +0 -1
  510. package/dist/puppeteer-screenshot.js.map +0 -1
  511. package/dist/render-media.d.ts.map +0 -1
  512. package/dist/render-media.js.map +0 -1
  513. package/dist/render-still.d.ts.map +0 -1
  514. package/dist/render-still.js.map +0 -1
  515. package/dist/render.d.ts +0 -45
  516. package/dist/render.d.ts.map +0 -1
  517. package/dist/render.js +0 -245
  518. package/dist/render.js.map +0 -1
  519. package/dist/resolve-asset-src.d.ts.map +0 -1
  520. package/dist/resolve-asset-src.js.map +0 -1
  521. package/dist/sample-rate.d.ts.map +0 -1
  522. package/dist/sample-rate.js.map +0 -1
  523. package/dist/screenshot-dom-element.d.ts.map +0 -1
  524. package/dist/screenshot-dom-element.js.map +0 -1
  525. package/dist/screenshot-task.d.ts.map +0 -1
  526. package/dist/screenshot-task.js.map +0 -1
  527. package/dist/seek-to-frame.d.ts.map +0 -1
  528. package/dist/seek-to-frame.js.map +0 -1
  529. package/dist/serve-static.d.ts.map +0 -1
  530. package/dist/serve-static.js.map +0 -1
  531. package/dist/set-props-and-env.d.ts.map +0 -1
  532. package/dist/set-props-and-env.js.map +0 -1
  533. package/dist/stitcher.d.ts +0 -32
  534. package/dist/stitcher.d.ts.map +0 -1
  535. package/dist/stitcher.js +0 -204
  536. package/dist/stitcher.js.map +0 -1
  537. package/dist/stringify-ffmpeg-filter.d.ts.map +0 -1
  538. package/dist/stringify-ffmpeg-filter.js.map +0 -1
  539. package/dist/symbolicate-stacktrace.d.ts.map +0 -1
  540. package/dist/symbolicate-stacktrace.js.map +0 -1
  541. package/dist/tmp-dir.d.ts.map +0 -1
  542. package/dist/tmp-dir.js.map +0 -1
  543. package/dist/types.d.ts.map +0 -1
  544. package/dist/types.js.map +0 -1
  545. package/dist/validate-even-dimensions-with-codec.d.ts.map +0 -1
  546. package/dist/validate-even-dimensions-with-codec.js.map +0 -1
  547. package/dist/validate-ffmpeg.d.ts.map +0 -1
  548. package/dist/validate-ffmpeg.js.map +0 -1
  549. package/dist/validate-frame.d.ts +0 -1
  550. package/dist/validate-frame.js +0 -24
  551. package/dist/validate-puppeteer-timeout.d.ts.map +0 -1
  552. package/dist/validate-puppeteer-timeout.js.map +0 -1
  553. package/dist/validate-scale.d.ts.map +0 -1
  554. package/dist/validate-scale.js.map +0 -1
  555. package/tsconfig.json +0 -10
  556. package/vitest.config.ts +0 -8
@@ -1,38 +1,66 @@
1
1
  "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
2
25
  var __importDefault = (this && this.__importDefault) || function (mod) {
3
26
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
27
  };
5
28
  Object.defineProperty(exports, "__esModule", { value: true });
6
29
  exports.stitchFramesToVideo = exports.spawnFfmpeg = void 0;
7
30
  const execa_1 = __importDefault(require("execa"));
8
- const fs_1 = __importDefault(require("fs"));
9
- const promises_1 = require("fs/promises");
31
+ const fs_1 = __importStar(require("fs"));
10
32
  const path_1 = __importDefault(require("path"));
11
33
  const remotion_1 = require("remotion");
12
34
  const calculate_asset_positions_1 = require("./assets/calculate-asset-positions");
13
35
  const convert_assets_to_file_urls_1 = require("./assets/convert-assets-to-file-urls");
14
36
  const download_and_map_assets_to_file_1 = require("./assets/download-and-map-assets-to-file");
37
+ const audio_codec_1 = require("./audio-codec");
15
38
  const codec_1 = require("./codec");
16
39
  const codec_supports_media_1 = require("./codec-supports-media");
17
40
  const convert_number_of_gif_loops_to_ffmpeg_1 = require("./convert-number-of-gif-loops-to-ffmpeg");
18
41
  const crf_1 = require("./crf");
19
42
  const delete_directory_1 = require("./delete-directory");
20
- const get_audio_codec_name_1 = require("./get-audio-codec-name");
43
+ const does_have_m2_bug_1 = require("./does-have-m2-bug");
44
+ const ffmpeg_flags_1 = require("./ffmpeg-flags");
45
+ const find_closest_package_json_1 = require("./find-closest-package-json");
21
46
  const get_codec_name_1 = require("./get-codec-name");
22
47
  const get_extension_from_codec_1 = require("./get-extension-from-codec");
23
48
  const get_prores_profile_name_1 = require("./get-prores-profile-name");
49
+ const make_cancel_signal_1 = require("./make-cancel-signal");
24
50
  const merge_audio_track_1 = require("./merge-audio-track");
25
51
  const parse_ffmpeg_progress_1 = require("./parse-ffmpeg-progress");
26
52
  const pixel_format_1 = require("./pixel-format");
27
53
  const preprocess_audio_track_1 = require("./preprocess-audio-track");
54
+ const prores_profile_1 = require("./prores-profile");
28
55
  const truthy_1 = require("./truthy");
29
56
  const validate_even_dimensions_with_codec_1 = require("./validate-even-dimensions-with-codec");
30
57
  const validate_ffmpeg_1 = require("./validate-ffmpeg");
58
+ const validate_videobitrate_1 = require("./validate-videobitrate");
31
59
  const packageJsonPath = path_1.default.join(__dirname, '..', 'package.json');
32
60
  const packageJson = fs_1.default.existsSync(packageJsonPath)
33
61
  ? JSON.parse(fs_1.default.readFileSync(packageJsonPath, 'utf-8'))
34
62
  : null;
35
- const getAssetsData = async ({ assets, onDownload, fps, expectedFrames, verbose, ffmpegExecutable, ffprobeExecutable, onProgress, downloadMap, }) => {
63
+ const getAssetsData = async ({ assets, onDownload, fps, expectedFrames, verbose, ffmpegExecutable, ffprobeExecutable, onProgress, downloadMap, remotionRoot, }) => {
36
64
  const fileUrlAssets = await (0, convert_assets_to_file_urls_1.convertAssetsToFileUrls)({
37
65
  assets,
38
66
  onDownload: onDownload !== null && onDownload !== void 0 ? onDownload : (() => () => undefined),
@@ -57,6 +85,7 @@ const getAssetsData = async ({ assets, onDownload, fps, expectedFrames, verbose,
57
85
  expectedFrames,
58
86
  fps,
59
87
  downloadMap,
88
+ remotionRoot,
60
89
  });
61
90
  preprocessProgress[index] = 1;
62
91
  updateProgress();
@@ -69,16 +98,17 @@ const getAssetsData = async ({ assets, onDownload, fps, expectedFrames, verbose,
69
98
  outName,
70
99
  numberOfSeconds: Number((expectedFrames / fps).toFixed(3)),
71
100
  downloadMap,
101
+ remotionRoot,
72
102
  });
73
- (0, delete_directory_1.deleteDirectory)(downloadMap.audioMixing);
74
103
  onProgress(1);
104
+ (0, delete_directory_1.deleteDirectory)(downloadMap.audioMixing);
75
105
  preprocessed.forEach((p) => {
76
- (0, delete_directory_1.deleteDirectory)(p);
106
+ (0, delete_directory_1.deleteDirectory)(p.outName);
77
107
  });
78
108
  return outName;
79
109
  };
80
- const spawnFfmpeg = async (options) => {
81
- var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v;
110
+ const spawnFfmpeg = async (options, remotionRoot) => {
111
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y;
82
112
  remotion_1.Internals.validateDimension(options.height, 'height', 'passed to `stitchFramesToVideo()`');
83
113
  remotion_1.Internals.validateDimension(options.width, 'width', 'passed to `stitchFramesToVideo()`');
84
114
  const codec = (_a = options.codec) !== null && _a !== void 0 ? _a : codec_1.DEFAULT_CODEC;
@@ -88,31 +118,51 @@ const spawnFfmpeg = async (options) => {
88
118
  codec,
89
119
  scale: 1,
90
120
  });
121
+ (0, prores_profile_1.validateSelectedCodecAndProResCombination)({
122
+ codec,
123
+ proResProfile: options.proResProfile,
124
+ });
125
+ (0, validate_videobitrate_1.validateBitrate)(options.audioBitrate, 'audioBitrate');
126
+ (0, validate_videobitrate_1.validateBitrate)(options.videoBitrate, 'videoBitrate');
91
127
  remotion_1.Internals.validateFps(options.fps, 'in `stitchFramesToVideo()`', false);
92
- const crf = (_b = options.crf) !== null && _b !== void 0 ? _b : (0, crf_1.getDefaultCrfForCodec)(codec);
93
- const pixelFormat = (_c = options.pixelFormat) !== null && _c !== void 0 ? _c : pixel_format_1.DEFAULT_PIXEL_FORMAT;
94
- await (0, validate_ffmpeg_1.validateFfmpeg)((_d = options.ffmpegExecutable) !== null && _d !== void 0 ? _d : null);
128
+ const pixelFormat = (_b = options.pixelFormat) !== null && _b !== void 0 ? _b : pixel_format_1.DEFAULT_PIXEL_FORMAT;
129
+ await (0, validate_ffmpeg_1.validateFfmpeg)((_c = options.ffmpegExecutable) !== null && _c !== void 0 ? _c : null, remotionRoot, 'ffmpeg');
95
130
  const encoderName = (0, get_codec_name_1.getCodecName)(codec);
96
- const audioCodecName = (0, get_audio_codec_name_1.getAudioCodecName)(codec);
97
131
  const proResProfileName = (0, get_prores_profile_name_1.getProResProfileName)(codec, options.proResProfile);
98
132
  const mediaSupport = (0, codec_supports_media_1.codecSupportsMedia)(codec);
99
- const supportsCrf = encoderName && codec !== 'prores';
133
+ const shouldRenderAudio = mediaSupport.audio &&
134
+ (options.assetsInfo.assets.flat(1).length > 0 ||
135
+ options.enforceAudioTrack) &&
136
+ !options.muted;
137
+ const shouldRenderVideo = mediaSupport.video;
138
+ if (!shouldRenderAudio && !shouldRenderVideo) {
139
+ throw new Error('The output format has neither audio nor video. This can happen if you are rendering an audio codec and the output file has no audio or the muted flag was passed.');
140
+ }
141
+ // Explanation: https://github.com/remotion-dev/remotion/issues/1647
142
+ const resolvedAudioCodec = ((_d = options.internalOptions) === null || _d === void 0 ? void 0 : _d.preferLossless)
143
+ ? (0, audio_codec_1.getDefaultAudioCodec)({ codec, preferLossless: true })
144
+ : (_e = options.audioCodec) !== null && _e !== void 0 ? _e : (0, audio_codec_1.getDefaultAudioCodec)({ codec, preferLossless: false });
100
145
  const tempFile = options.outputLocation
101
146
  ? null
102
- : path_1.default.join(options.assetsInfo.downloadMap.stitchFrames, `out.${(0, get_extension_from_codec_1.getFileExtensionFromCodec)(codec, 'final')}`);
147
+ : path_1.default.join(options.assetsInfo.downloadMap.stitchFrames, `out.${(0, get_extension_from_codec_1.getFileExtensionFromCodec)(codec, resolvedAudioCodec)}`);
103
148
  if (options.verbose) {
104
- console.log('[verbose] ffmpeg', (_e = options.ffmpegExecutable) !== null && _e !== void 0 ? _e : 'ffmpeg in PATH');
149
+ console.log('[verbose] ffmpeg', (_f = options.ffmpegExecutable) !== null && _f !== void 0 ? _f : 'ffmpeg in PATH');
105
150
  console.log('[verbose] encoder', encoderName);
106
- console.log('[verbose] audioCodec', audioCodecName);
151
+ console.log('[verbose] audioCodec', resolvedAudioCodec);
107
152
  console.log('[verbose] pixelFormat', pixelFormat);
108
- if (supportsCrf) {
109
- console.log('[verbose] crf', crf);
153
+ if (options.ffmpegOverride) {
154
+ console.log('[verbose] ffmpegOverride', options.ffmpegOverride);
110
155
  }
111
156
  console.log('[verbose] codec', codec);
112
- console.log('[verbose] isAudioOnly', mediaSupport.audio && !mediaSupport.video);
157
+ console.log('[verbose] shouldRenderAudio', shouldRenderAudio);
158
+ console.log('[verbose] shouldRenderVideo', shouldRenderVideo);
113
159
  console.log('[verbose] proResProfileName', proResProfileName);
114
160
  }
115
- (0, crf_1.validateSelectedCrfAndCodecCombination)(crf, codec);
161
+ (0, crf_1.validateQualitySettings)({
162
+ crf: options.crf,
163
+ codec,
164
+ videoBitrate: options.videoBitrate,
165
+ });
116
166
  (0, pixel_format_1.validateSelectedPixelFormatAndCodecCombination)(pixelFormat, codec);
117
167
  const expectedFrames = options.assetsInfo.assets.length;
118
168
  const updateProgress = (preStitchProgress, muxProgress) => {
@@ -120,45 +170,47 @@ const spawnFfmpeg = async (options) => {
120
170
  const totalFrameProgress = 0.5 * preStitchProgress * expectedFrames + muxProgress * 0.5;
121
171
  (_a = options.onProgress) === null || _a === void 0 ? void 0 : _a.call(options, Math.round(totalFrameProgress));
122
172
  };
123
- const audio = mediaSupport.audio
173
+ const audio = shouldRenderAudio
124
174
  ? await getAssetsData({
125
175
  assets: options.assetsInfo.assets,
126
176
  onDownload: options.onDownload,
127
177
  fps: options.fps,
128
178
  expectedFrames,
129
- verbose: (_f = options.verbose) !== null && _f !== void 0 ? _f : false,
130
- ffmpegExecutable: (_g = options.ffmpegExecutable) !== null && _g !== void 0 ? _g : null,
131
- ffprobeExecutable: (_h = options.ffprobeExecutable) !== null && _h !== void 0 ? _h : null,
179
+ verbose: (_g = options.verbose) !== null && _g !== void 0 ? _g : false,
180
+ ffmpegExecutable: (_h = options.ffmpegExecutable) !== null && _h !== void 0 ? _h : null,
181
+ ffprobeExecutable: (_j = options.ffprobeExecutable) !== null && _j !== void 0 ? _j : null,
132
182
  onProgress: (prog) => updateProgress(prog, 0),
133
183
  downloadMap: options.assetsInfo.downloadMap,
184
+ remotionRoot,
134
185
  })
135
186
  : null;
136
187
  if (mediaSupport.audio && !mediaSupport.video) {
137
- if (!audioCodecName) {
188
+ if (!resolvedAudioCodec) {
138
189
  throw new TypeError('exporting audio but has no audio codec name. Report this in the Remotion repo.');
139
190
  }
140
- const ffmpegTask = (0, execa_1.default)('ffmpeg', [
191
+ const ffmpegTask = (0, execa_1.default)(await (0, ffmpeg_flags_1.getExecutableBinary)((_k = options.ffmpegExecutable) !== null && _k !== void 0 ? _k : null, remotionRoot, 'ffmpeg'), [
141
192
  '-i',
142
193
  audio,
143
194
  '-c:a',
144
- audioCodecName,
195
+ (0, audio_codec_1.mapAudioCodecToFfmpegAudioCodecName)(resolvedAudioCodec),
145
196
  // Set bitrate up to 320k, for aac it might effectively be lower
146
197
  '-b:a',
147
- '320k',
198
+ (_l = options.audioBitrate) !== null && _l !== void 0 ? _l : '320k',
148
199
  options.force ? '-y' : null,
149
- (_j = options.outputLocation) !== null && _j !== void 0 ? _j : tempFile,
200
+ (_m = options.outputLocation) !== null && _m !== void 0 ? _m : tempFile,
150
201
  ].filter(remotion_1.Internals.truthy));
151
- (_k = options.cancelSignal) === null || _k === void 0 ? void 0 : _k.call(options, () => {
202
+ (_o = options.cancelSignal) === null || _o === void 0 ? void 0 : _o.call(options, () => {
152
203
  ffmpegTask.kill();
153
204
  });
154
205
  await ffmpegTask;
155
- (_l = options.onProgress) === null || _l === void 0 ? void 0 : _l.call(options, expectedFrames);
206
+ (_p = options.onProgress) === null || _p === void 0 ? void 0 : _p.call(options, expectedFrames);
156
207
  if (audio) {
157
- await (0, delete_directory_1.deleteDirectory)(path_1.default.dirname(audio));
208
+ (0, delete_directory_1.deleteDirectory)(path_1.default.dirname(audio));
158
209
  }
159
210
  const file = await new Promise((resolve, reject) => {
160
211
  if (tempFile) {
161
- (0, promises_1.readFile)(tempFile)
212
+ fs_1.promises
213
+ .readFile(tempFile)
162
214
  .then((f) => {
163
215
  return resolve(f);
164
216
  })
@@ -168,7 +220,7 @@ const spawnFfmpeg = async (options) => {
168
220
  resolve(null);
169
221
  }
170
222
  });
171
- await (0, delete_directory_1.deleteDirectory)(options.assetsInfo.downloadMap.stitchFrames);
223
+ (0, delete_directory_1.deleteDirectory)(options.assetsInfo.downloadMap.stitchFrames);
172
224
  return {
173
225
  getLogs: () => '',
174
226
  task: Promise.resolve(file),
@@ -176,8 +228,8 @@ const spawnFfmpeg = async (options) => {
176
228
  }
177
229
  const ffmpegArgs = [
178
230
  ['-r', String(options.fps)],
179
- ...(((_m = options.internalOptions) === null || _m === void 0 ? void 0 : _m.preEncodedFileLocation)
180
- ? [['-i', (_o = options.internalOptions) === null || _o === void 0 ? void 0 : _o.preEncodedFileLocation]]
231
+ ...(((_q = options.internalOptions) === null || _q === void 0 ? void 0 : _q.preEncodedFileLocation)
232
+ ? [['-i', (_r = options.internalOptions) === null || _r === void 0 ? void 0 : _r.preEncodedFileLocation]]
181
233
  : [
182
234
  ['-f', 'image2'],
183
235
  ['-s', `${options.width}x${options.height}`],
@@ -185,30 +237,35 @@ const spawnFfmpeg = async (options) => {
185
237
  ['-i', options.assetsInfo.imageSequenceName],
186
238
  ]),
187
239
  audio ? ['-i', audio] : null,
188
- ((_p = options.numberOfGifLoops) !== null && _p !== void 0 ? _p : null) === null
240
+ ((_s = options.numberOfGifLoops) !== null && _s !== void 0 ? _s : null) === null
189
241
  ? null
190
242
  : [
191
243
  '-loop',
192
- (0, convert_number_of_gif_loops_to_ffmpeg_1.convertNumberOfGifLoopsToFfmpegSyntax)((_q = options.numberOfGifLoops) !== null && _q !== void 0 ? _q : null),
244
+ (0, convert_number_of_gif_loops_to_ffmpeg_1.convertNumberOfGifLoopsToFfmpegSyntax)((_t = options.numberOfGifLoops) !== null && _t !== void 0 ? _t : null),
193
245
  ],
194
246
  // -c:v is the same as -vcodec as -codec:video
195
247
  // and specified the video codec.
196
248
  ['-c:v', encoderName],
197
- ...(((_r = options.internalOptions) === null || _r === void 0 ? void 0 : _r.preEncodedFileLocation)
249
+ ...(((_u = options.internalOptions) === null || _u === void 0 ? void 0 : _u.preEncodedFileLocation)
198
250
  ? []
199
251
  : [
200
252
  proResProfileName ? ['-profile:v', proResProfileName] : null,
201
- supportsCrf ? ['-crf', String(crf)] : null,
202
253
  ['-pix_fmt', pixelFormat],
203
254
  // Without explicitly disabling auto-alt-ref,
204
255
  // transparent WebM generation doesn't work
205
256
  pixelFormat === 'yuva420p' ? ['-auto-alt-ref', '0'] : null,
206
- ['-b:v', '1M'],
257
+ ...(0, crf_1.validateQualitySettings)({
258
+ crf: options.crf,
259
+ videoBitrate: options.videoBitrate,
260
+ codec,
261
+ }),
207
262
  ]),
208
263
  codec === 'h264' ? ['-movflags', 'faststart'] : null,
209
- audioCodecName ? ['-c:a', audioCodecName] : null,
264
+ resolvedAudioCodec
265
+ ? ['-c:a', (0, audio_codec_1.mapAudioCodecToFfmpegAudioCodecName)(resolvedAudioCodec)]
266
+ : null,
210
267
  // Set max bitrate up to 1024kbps, will choose lower if that's too much
211
- audioCodecName ? ['-b:a', '512K'] : null,
268
+ resolvedAudioCodec ? ['-b:a', options.audioBitrate || '512K'] : null,
212
269
  // Ignore metadata that may come from remote media
213
270
  ['-map_metadata', '-1'],
214
271
  [
@@ -217,22 +274,29 @@ const spawnFfmpeg = async (options) => {
217
274
  [`Made with Remotion`, packageJson ? packageJson.version : null].join(' '),
218
275
  ],
219
276
  options.force ? '-y' : null,
220
- (_s = options.outputLocation) !== null && _s !== void 0 ? _s : tempFile,
277
+ (_v = options.outputLocation) !== null && _v !== void 0 ? _v : tempFile,
221
278
  ];
222
279
  if (options.verbose) {
223
280
  console.log('Generated FFMPEG command:');
224
281
  console.log(ffmpegArgs);
225
282
  }
226
283
  const ffmpegString = ffmpegArgs.flat(2).filter(Boolean);
227
- const task = (0, execa_1.default)((_t = options.ffmpegExecutable) !== null && _t !== void 0 ? _t : 'ffmpeg', ffmpegString, {
284
+ const finalFfmpegString = options.ffmpegOverride
285
+ ? options.ffmpegOverride({ type: 'stitcher', args: ffmpegString })
286
+ : ffmpegString;
287
+ if (options.verbose && options.ffmpegOverride) {
288
+ console.log('Generated final FFMPEG command:');
289
+ console.log(finalFfmpegString);
290
+ }
291
+ const task = (0, execa_1.default)(await (0, ffmpeg_flags_1.getExecutableBinary)((_w = options.ffmpegExecutable) !== null && _w !== void 0 ? _w : null, remotionRoot, 'ffmpeg'), finalFfmpegString, {
228
292
  cwd: options.dir,
229
293
  });
230
- (_u = options.cancelSignal) === null || _u === void 0 ? void 0 : _u.call(options, () => {
294
+ (_x = options.cancelSignal) === null || _x === void 0 ? void 0 : _x.call(options, () => {
231
295
  task.kill();
232
296
  });
233
297
  let ffmpegOutput = '';
234
298
  let isFinished = false;
235
- (_v = task.stderr) === null || _v === void 0 ? void 0 : _v.on('data', (data) => {
299
+ (_y = task.stderr) === null || _y === void 0 ? void 0 : _y.on('data', (data) => {
236
300
  var _a;
237
301
  const str = data.toString();
238
302
  ffmpegOutput += str;
@@ -261,7 +325,8 @@ const spawnFfmpeg = async (options) => {
261
325
  (0, delete_directory_1.deleteDirectory)(options.assetsInfo.downloadMap.stitchFrames);
262
326
  return null;
263
327
  }
264
- return (0, promises_1.readFile)(tempFile)
328
+ return fs_1.promises
329
+ .readFile(tempFile)
265
330
  .then((file) => {
266
331
  return Promise.all([
267
332
  file,
@@ -275,17 +340,24 @@ const spawnFfmpeg = async (options) => {
275
340
  };
276
341
  };
277
342
  exports.spawnFfmpeg = spawnFfmpeg;
343
+ /**
344
+ * @description Takes a series of images and audio information generated by renderFrames() and encodes it to a video.
345
+ * @see [Documentation](https://www.remotion.dev/docs/renderer/stitch-frames-to-video)
346
+ */
278
347
  const stitchFramesToVideo = async (options) => {
279
- const { task, getLogs } = await (0, exports.spawnFfmpeg)(options);
348
+ var _a, _b;
349
+ const remotionRoot = (0, find_closest_package_json_1.findRemotionRoot)();
350
+ const { task, getLogs } = await (0, exports.spawnFfmpeg)(options, remotionRoot);
280
351
  const happyPath = task.catch(() => {
281
352
  throw new Error(getLogs());
282
353
  });
354
+ (0, does_have_m2_bug_1.warnAboutM2Bug)((_a = options.codec) !== null && _a !== void 0 ? _a : null, (_b = options.pixelFormat) !== null && _b !== void 0 ? _b : null);
283
355
  return Promise.race([
284
356
  happyPath,
285
357
  new Promise((_resolve, reject) => {
286
358
  var _a;
287
359
  (_a = options.cancelSignal) === null || _a === void 0 ? void 0 : _a.call(options, () => {
288
- reject(new Error('stitchFramesToVideo() got cancelled'));
360
+ reject(new Error(make_cancel_signal_1.cancelErrorMessages.stitchFramesToVideo));
289
361
  });
290
362
  }),
291
363
  ]);
@@ -1,5 +1,12 @@
1
1
  import type { AssetVolume } from './assets/types';
2
- export declare const stringifyFfmpegFilter: ({ trimLeft, trimRight, channels, startInVideo, volume, fps, playbackRate, durationInFrames, assetDuration, }: {
2
+ export declare type FilterWithoutPaddingApplied = ProcessedTrack & {
3
+ filter: string;
4
+ };
5
+ export declare type ProcessedTrack = {
6
+ pad_start: string | null;
7
+ pad_end: string | null;
8
+ };
9
+ export declare const stringifyFfmpegFilter: ({ trimLeft, trimRight, channels, startInVideo, volume, fps, playbackRate, durationInFrames, assetDuration, allowAmplificationDuringRender, }: {
3
10
  trimLeft: number;
4
11
  trimRight: number;
5
12
  channels: number;
@@ -9,4 +16,5 @@ export declare const stringifyFfmpegFilter: ({ trimLeft, trimRight, channels, st
9
16
  durationInFrames: number;
10
17
  playbackRate: number;
11
18
  assetDuration: number | null;
12
- }) => string | null;
19
+ allowAmplificationDuringRender: boolean;
20
+ }) => FilterWithoutPaddingApplied | null;
@@ -5,7 +5,7 @@ const calculate_atempo_1 = require("./assets/calculate-atempo");
5
5
  const ffmpeg_volume_expression_1 = require("./assets/ffmpeg-volume-expression");
6
6
  const sample_rate_1 = require("./sample-rate");
7
7
  const truthy_1 = require("./truthy");
8
- const stringifyFfmpegFilter = ({ trimLeft, trimRight, channels, startInVideo, volume, fps, playbackRate, durationInFrames, assetDuration, }) => {
8
+ const stringifyFfmpegFilter = ({ trimLeft, trimRight, channels, startInVideo, volume, fps, playbackRate, durationInFrames, assetDuration, allowAmplificationDuringRender, }) => {
9
9
  const startInVideoSeconds = startInVideo / fps;
10
10
  if (assetDuration && trimLeft >= assetDuration) {
11
11
  return null;
@@ -14,44 +14,47 @@ const stringifyFfmpegFilter = ({ trimLeft, trimRight, channels, startInVideo, vo
14
14
  volume,
15
15
  fps,
16
16
  trimLeft,
17
+ allowAmplificationDuringRender,
17
18
  });
18
19
  // Avoid setting filters if possible, as combining them can create noise
19
20
  const chunkLength = durationInFrames / fps;
20
21
  const actualTrimRight = assetDuration
21
22
  ? Math.min(trimRight, assetDuration)
22
23
  : trimRight;
23
- const padAtEnd = chunkLength - (actualTrimRight - trimLeft) - startInVideoSeconds;
24
- return (`[0:a]` +
25
- [
26
- `aformat=sample_fmts=s32:sample_rates=${sample_rate_1.DEFAULT_SAMPLE_RATE}`,
27
- // Order matters! First trim the audio
28
- `atrim=${trimLeft.toFixed(6)}:${actualTrimRight.toFixed(6)}`,
29
- // then set the tempo
30
- (0, calculate_atempo_1.calculateATempo)(playbackRate),
31
- // set the volume if needed
32
- // The timings for volume must include whatever is in atrim, unless the volume
33
- // filter gets applied before atrim
34
- volumeFilter.value === '1'
35
- ? null
36
- : `volume=${volumeFilter.value}:eval=${volumeFilter.eval}`,
37
- // For n channels, we delay n + 1 channels.
38
- // This is because `ffprobe` for some audio files reports the wrong amount
39
- // of channels.
40
- // This should be fine because FFMPEG documentation states:
41
- // "Unused delays will be silently ignored."
42
- // https://ffmpeg.org/ffmpeg-filters.html#adelay
43
- startInVideoSeconds === 0
44
- ? null
45
- : `adelay=${new Array(channels + 1)
46
- .fill((startInVideoSeconds * 1000).toFixed(0))
47
- .join('|')}`,
48
- // Only in the end, we pad to the full length.
49
- padAtEnd > 0.0000001
50
- ? 'apad=pad_len=' + Math.round(padAtEnd * sample_rate_1.DEFAULT_SAMPLE_RATE)
51
- : null,
52
- ]
53
- .filter(truthy_1.truthy)
54
- .join(',') +
55
- `[a0]`);
24
+ const audibleDuration = (actualTrimRight - trimLeft) / playbackRate;
25
+ const padAtEnd = chunkLength - audibleDuration - startInVideoSeconds;
26
+ return {
27
+ filter: `[0:a]` +
28
+ [
29
+ `aformat=sample_fmts=s32:sample_rates=${sample_rate_1.DEFAULT_SAMPLE_RATE}`,
30
+ // Order matters! First trim the audio
31
+ `atrim=${trimLeft.toFixed(6)}:${actualTrimRight.toFixed(6)}`,
32
+ // then set the tempo
33
+ (0, calculate_atempo_1.calculateATempo)(playbackRate),
34
+ // set the volume if needed
35
+ // The timings for volume must include whatever is in atrim, unless the volume
36
+ // filter gets applied before atrim
37
+ volumeFilter.value === '1'
38
+ ? null
39
+ : `volume=${volumeFilter.value}:eval=${volumeFilter.eval}`,
40
+ // For n channels, we delay n + 1 channels.
41
+ // This is because `ffprobe` for some audio files reports the wrong amount
42
+ // of channels.
43
+ // This should be fine because FFMPEG documentation states:
44
+ // "Unused delays will be silently ignored."
45
+ // https://ffmpeg.org/ffmpeg-filters.html#adelay
46
+ ]
47
+ .filter(truthy_1.truthy)
48
+ .join(',') +
49
+ `[a0]`,
50
+ pad_end: padAtEnd > 0.0000001
51
+ ? 'apad=pad_len=' + Math.round(padAtEnd * sample_rate_1.DEFAULT_SAMPLE_RATE)
52
+ : null,
53
+ pad_start: startInVideoSeconds === 0
54
+ ? null
55
+ : `adelay=${new Array(channels + 1)
56
+ .fill((startInVideoSeconds * 1000).toFixed(0))
57
+ .join('|')}`,
58
+ };
56
59
  };
57
60
  exports.stringifyFfmpegFilter = stringifyFfmpegFilter;
File without changes
File without changes
@@ -0,0 +1,20 @@
1
+ /// <reference types="node" />
2
+ import type { TAsset } from 'remotion';
3
+ import type { DownloadMap } from './assets/download-map';
4
+ import type { Page } from './browser/BrowserPage';
5
+ import type { ImageFormat } from './image-format';
6
+ export declare const takeFrameAndCompose: ({ freePage, imageFormat, quality, frame, width, height, output, scale, downloadMap, wantsBuffer, }: {
7
+ freePage: Page;
8
+ imageFormat: ImageFormat;
9
+ quality: number | undefined;
10
+ frame: number;
11
+ height: number;
12
+ width: number;
13
+ output: string | null;
14
+ scale: number;
15
+ downloadMap: DownloadMap;
16
+ wantsBuffer: boolean;
17
+ }) => Promise<{
18
+ buffer: Buffer | null;
19
+ collectedAssets: TAsset[];
20
+ }>;
@@ -0,0 +1,96 @@
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.takeFrameAndCompose = void 0;
7
+ const fs_1 = __importDefault(require("fs"));
8
+ const path_1 = __importDefault(require("path"));
9
+ const compose_1 = require("./compositor/compose");
10
+ const provide_screenshot_1 = require("./provide-screenshot");
11
+ const puppeteer_evaluate_1 = require("./puppeteer-evaluate");
12
+ const truthy_1 = require("./truthy");
13
+ const takeFrameAndCompose = async ({ freePage, imageFormat, quality, frame, width, height, output, scale, downloadMap, wantsBuffer, }) => {
14
+ var _a;
15
+ const [clipRegion, collectedAssets] = await Promise.all([
16
+ (0, puppeteer_evaluate_1.puppeteerEvaluateWithCatch)({
17
+ pageFunction: () => {
18
+ if (typeof window.remotion_getClipRegion === 'undefined') {
19
+ return null;
20
+ }
21
+ return window.remotion_getClipRegion();
22
+ },
23
+ args: [],
24
+ frame,
25
+ page: freePage,
26
+ }),
27
+ (0, puppeteer_evaluate_1.puppeteerEvaluateWithCatch)({
28
+ pageFunction: () => {
29
+ return window.remotion_collectAssets();
30
+ },
31
+ args: [],
32
+ frame,
33
+ page: freePage,
34
+ }),
35
+ ]);
36
+ if (imageFormat === 'none') {
37
+ return { buffer: null, collectedAssets };
38
+ }
39
+ const needsComposing = clipRegion === null
40
+ ? null
41
+ : {
42
+ tmpFile: path_1.default.join(downloadMap.compositingDir, `${frame}.${imageFormat}`),
43
+ finalOutfie: output !== null && output !== void 0 ? output : path_1.default.join(downloadMap.compositingDir, `${frame}-final.${imageFormat}`),
44
+ clipRegion: clipRegion,
45
+ };
46
+ if (clipRegion !== 'hide') {
47
+ const shouldMakeBuffer = wantsBuffer && !needsComposing;
48
+ const buf = await (0, provide_screenshot_1.provideScreenshot)({
49
+ page: freePage,
50
+ imageFormat,
51
+ quality,
52
+ options: {
53
+ frame,
54
+ output: shouldMakeBuffer ? null : (_a = needsComposing === null || needsComposing === void 0 ? void 0 : needsComposing.tmpFile) !== null && _a !== void 0 ? _a : output,
55
+ },
56
+ height,
57
+ width,
58
+ clipRegion,
59
+ });
60
+ if (shouldMakeBuffer) {
61
+ return { buffer: buf, collectedAssets };
62
+ }
63
+ }
64
+ if (needsComposing) {
65
+ await (0, compose_1.compose)({
66
+ height: height * scale,
67
+ width: width * scale,
68
+ layers: [
69
+ needsComposing.clipRegion === 'hide'
70
+ ? null
71
+ : {
72
+ type: imageFormat === 'jpeg'
73
+ ? 'JpgImage'
74
+ : 'PngImage',
75
+ params: {
76
+ height: needsComposing.clipRegion.height * scale,
77
+ width: needsComposing.clipRegion.width * scale,
78
+ src: needsComposing.tmpFile,
79
+ x: needsComposing.clipRegion.x * scale,
80
+ y: needsComposing.clipRegion.y * scale,
81
+ },
82
+ },
83
+ ].filter(truthy_1.truthy),
84
+ output: needsComposing.finalOutfie,
85
+ downloadMap,
86
+ imageFormat: imageFormat === 'jpeg' ? 'Jpeg' : 'Png',
87
+ });
88
+ if (wantsBuffer) {
89
+ const buffer = await fs_1.default.promises.readFile(needsComposing.finalOutfie);
90
+ await fs_1.default.promises.unlink(needsComposing.finalOutfie);
91
+ return { buffer, collectedAssets };
92
+ }
93
+ }
94
+ return { buffer: null, collectedAssets };
95
+ };
96
+ exports.takeFrameAndCompose = takeFrameAndCompose;
package/dist/tmp-dir.d.ts CHANGED
File without changes
package/dist/tmp-dir.js CHANGED
File without changes
package/dist/truthy.d.ts CHANGED
File without changes
package/dist/truthy.js CHANGED
File without changes
@@ -0,0 +1,13 @@
1
+ /// <reference types="node" />
2
+ import type { OffthreadVideoImageFormat } from 'remotion';
3
+ import type { NeedsResize, SpecialVCodecForTransparency } from './assets/download-map';
4
+ import type { FfmpegExecutable } from './ffmpeg-executable';
5
+ export declare const tryToExtractFrameOfVideoFast: ({ ffmpegExecutable, remotionRoot, specialVCodecForTransparency, imageFormat, needsResize, src, actualOffset, }: {
6
+ ffmpegExecutable: FfmpegExecutable;
7
+ remotionRoot: string;
8
+ imageFormat: OffthreadVideoImageFormat;
9
+ needsResize: NeedsResize;
10
+ src: string;
11
+ specialVCodecForTransparency: SpecialVCodecForTransparency;
12
+ actualOffset: string;
13
+ }) => Promise<readonly [string, Buffer]>;