@remotion/renderer 4.0.0-alpha.4 → 4.0.0-audio-mixing.4

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 (554) 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 +54 -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 +1 -0
  44. package/dist/browser/BrowserFetcher.js +24 -21
  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 +10 -368
  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 -0
  86. package/dist/browser/PuppeteerNode.js +2 -9
  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 +2 -44
  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 +0 -0
  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-pcm.d.ts +2 -1
  150. package/dist/convert-to-pcm.js +3 -2
  151. package/dist/convert-to-positive-frame-index.d.ts +4 -0
  152. package/dist/convert-to-positive-frame-index.js +8 -0
  153. package/dist/create-ffmpeg-complex-filter.d.ts +1 -4
  154. package/dist/create-ffmpeg-complex-filter.js +0 -0
  155. package/dist/create-ffmpeg-merge-filter.d.ts +0 -0
  156. package/dist/create-ffmpeg-merge-filter.js +1 -12
  157. package/dist/create-silent-audio.d.ts +2 -1
  158. package/dist/create-silent-audio.js +3 -2
  159. package/dist/crf.d.ts +5 -1
  160. package/dist/crf.js +33 -6
  161. package/dist/cycle-browser-tabs.d.ts +2 -5
  162. package/dist/cycle-browser-tabs.js +5 -5
  163. package/dist/delay-render-embedded-stack.d.ts +0 -0
  164. package/dist/delay-render-embedded-stack.js +0 -0
  165. package/dist/delete-directory.d.ts +1 -1
  166. package/dist/delete-directory.js +31 -5
  167. package/dist/determine-resize-params.d.ts +1 -0
  168. package/dist/determine-resize-params.js +10 -0
  169. package/dist/determine-vcodec-ffmpeg-flags.d.ts +2 -0
  170. package/dist/determine-vcodec-ffmpeg-flags.js +13 -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 +0 -0
  190. package/dist/ffmpeg-filter-file.js +0 -0
  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 +0 -0
  225. package/dist/get-local-browser-executable.d.ts +0 -0
  226. package/dist/get-local-browser-executable.js +1 -3
  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 +1 -0
  258. package/dist/merge-audio-track.js +28 -18
  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 +4 -0
  268. package/dist/open-browser.js +7 -13
  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 +1 -0
  286. package/dist/preprocess-audio-track.js +4 -3
  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 +62 -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 +118 -49
  333. package/dist/stringify-ffmpeg-filter.d.ts +2 -1
  334. package/dist/stringify-ffmpeg-filter.js +4 -2
  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 +21 -11
  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/create-ffmpeg-complex-filter.d.ts.map +0 -1
  438. package/dist/create-ffmpeg-complex-filter.js.map +0 -1
  439. package/dist/cycle-browser-tabs.d.ts.map +0 -1
  440. package/dist/cycle-browser-tabs.js.map +0 -1
  441. package/dist/delay-render-embedded-stack.d.ts.map +0 -1
  442. package/dist/delay-render-embedded-stack.js.map +0 -1
  443. package/dist/delete-directory.d.ts.map +0 -1
  444. package/dist/delete-directory.js.map +0 -1
  445. package/dist/ensure-frames-in-order.d.ts.map +0 -1
  446. package/dist/ensure-frames-in-order.js.map +0 -1
  447. package/dist/ensure-output-directory.d.ts.map +0 -1
  448. package/dist/ensure-output-directory.js.map +0 -1
  449. package/dist/error-handling/handle-javascript-exception.d.ts.map +0 -1
  450. package/dist/error-handling/handle-javascript-exception.js.map +0 -1
  451. package/dist/error-handling/symbolicate-error.d.ts.map +0 -1
  452. package/dist/error-handling/symbolicate-error.js.map +0 -1
  453. package/dist/error-handling/symbolicateable-error.d.ts.map +0 -1
  454. package/dist/error-handling/symbolicateable-error.js.map +0 -1
  455. package/dist/ffmpeg-flags.d.ts.map +0 -1
  456. package/dist/ffmpeg-flags.js.map +0 -1
  457. package/dist/get-audio-codec-name.d.ts +0 -2
  458. package/dist/get-audio-codec-name.d.ts.map +0 -1
  459. package/dist/get-audio-codec-name.js +0 -28
  460. package/dist/get-audio-codec-name.js.map +0 -1
  461. package/dist/get-browser-instance.d.ts.map +0 -1
  462. package/dist/get-browser-instance.js.map +0 -1
  463. package/dist/get-codec-name.d.ts.map +0 -1
  464. package/dist/get-codec-name.js.map +0 -1
  465. package/dist/get-compositions.d.ts.map +0 -1
  466. package/dist/get-compositions.js.map +0 -1
  467. package/dist/get-concurrency.d.ts.map +0 -1
  468. package/dist/get-concurrency.js.map +0 -1
  469. package/dist/get-extension-from-codec.d.ts.map +0 -1
  470. package/dist/get-extension-from-codec.js.map +0 -1
  471. package/dist/get-frame-to-render.d.ts.map +0 -1
  472. package/dist/get-frame-to-render.js.map +0 -1
  473. package/dist/get-local-browser-executable.d.ts.map +0 -1
  474. package/dist/get-local-browser-executable.js.map +0 -1
  475. package/dist/get-port.d.ts.map +0 -1
  476. package/dist/get-port.js.map +0 -1
  477. package/dist/get-prores-profile-name.d.ts.map +0 -1
  478. package/dist/get-prores-profile-name.js.map +0 -1
  479. package/dist/image-format.d.ts.map +0 -1
  480. package/dist/image-format.js.map +0 -1
  481. package/dist/index.d.ts.map +0 -1
  482. package/dist/index.js.map +0 -1
  483. package/dist/is-serve-url.d.ts.map +0 -1
  484. package/dist/is-serve-url.js.map +0 -1
  485. package/dist/legacy-webpack-config.d.ts.map +0 -1
  486. package/dist/legacy-webpack-config.js.map +0 -1
  487. package/dist/make-assets-download-dir.d.ts +0 -1
  488. package/dist/make-assets-download-dir.d.ts.map +0 -1
  489. package/dist/make-assets-download-dir.js +0 -13
  490. package/dist/make-assets-download-dir.js.map +0 -1
  491. package/dist/normalize-serve-url.d.ts.map +0 -1
  492. package/dist/normalize-serve-url.js.map +0 -1
  493. package/dist/open-browser.d.ts.map +0 -1
  494. package/dist/open-browser.js.map +0 -1
  495. package/dist/parse-browser-error-stack.d.ts.map +0 -1
  496. package/dist/parse-browser-error-stack.js.map +0 -1
  497. package/dist/parse-ffmpeg-progress.d.ts.map +0 -1
  498. package/dist/parse-ffmpeg-progress.js.map +0 -1
  499. package/dist/pool.d.ts.map +0 -1
  500. package/dist/pool.js.map +0 -1
  501. package/dist/prepare-server.d.ts.map +0 -1
  502. package/dist/prepare-server.js.map +0 -1
  503. package/dist/provide-screenshot.d.ts.map +0 -1
  504. package/dist/provide-screenshot.js.map +0 -1
  505. package/dist/puppeteer-evaluate.d.ts.map +0 -1
  506. package/dist/puppeteer-evaluate.js.map +0 -1
  507. package/dist/puppeteer-screenshot.d.ts.map +0 -1
  508. package/dist/puppeteer-screenshot.js.map +0 -1
  509. package/dist/render-media.d.ts.map +0 -1
  510. package/dist/render-media.js.map +0 -1
  511. package/dist/render-still.d.ts.map +0 -1
  512. package/dist/render-still.js.map +0 -1
  513. package/dist/render.d.ts +0 -45
  514. package/dist/render.d.ts.map +0 -1
  515. package/dist/render.js +0 -245
  516. package/dist/render.js.map +0 -1
  517. package/dist/resolve-asset-src.d.ts.map +0 -1
  518. package/dist/resolve-asset-src.js.map +0 -1
  519. package/dist/sample-rate.d.ts.map +0 -1
  520. package/dist/sample-rate.js.map +0 -1
  521. package/dist/screenshot-dom-element.d.ts.map +0 -1
  522. package/dist/screenshot-dom-element.js.map +0 -1
  523. package/dist/screenshot-task.d.ts.map +0 -1
  524. package/dist/screenshot-task.js.map +0 -1
  525. package/dist/seek-to-frame.d.ts.map +0 -1
  526. package/dist/seek-to-frame.js.map +0 -1
  527. package/dist/serve-static.d.ts.map +0 -1
  528. package/dist/serve-static.js.map +0 -1
  529. package/dist/set-props-and-env.d.ts.map +0 -1
  530. package/dist/set-props-and-env.js.map +0 -1
  531. package/dist/stitcher.d.ts +0 -32
  532. package/dist/stitcher.d.ts.map +0 -1
  533. package/dist/stitcher.js +0 -204
  534. package/dist/stitcher.js.map +0 -1
  535. package/dist/stringify-ffmpeg-filter.d.ts.map +0 -1
  536. package/dist/stringify-ffmpeg-filter.js.map +0 -1
  537. package/dist/symbolicate-stacktrace.d.ts.map +0 -1
  538. package/dist/symbolicate-stacktrace.js.map +0 -1
  539. package/dist/tmp-dir.d.ts.map +0 -1
  540. package/dist/tmp-dir.js.map +0 -1
  541. package/dist/types.d.ts.map +0 -1
  542. package/dist/types.js.map +0 -1
  543. package/dist/validate-even-dimensions-with-codec.d.ts.map +0 -1
  544. package/dist/validate-even-dimensions-with-codec.js.map +0 -1
  545. package/dist/validate-ffmpeg.d.ts.map +0 -1
  546. package/dist/validate-ffmpeg.js.map +0 -1
  547. package/dist/validate-frame.d.ts +0 -1
  548. package/dist/validate-frame.js +0 -24
  549. package/dist/validate-puppeteer-timeout.d.ts.map +0 -1
  550. package/dist/validate-puppeteer-timeout.js.map +0 -1
  551. package/dist/validate-scale.d.ts.map +0 -1
  552. package/dist/validate-scale.js.map +0 -1
  553. package/tsconfig.json +0 -10
  554. package/vitest.config.ts +0 -8
@@ -1,38 +1,65 @@
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 ffmpeg_flags_1 = require("./ffmpeg-flags");
44
+ const find_closest_package_json_1 = require("./find-closest-package-json");
21
45
  const get_codec_name_1 = require("./get-codec-name");
22
46
  const get_extension_from_codec_1 = require("./get-extension-from-codec");
23
47
  const get_prores_profile_name_1 = require("./get-prores-profile-name");
48
+ const make_cancel_signal_1 = require("./make-cancel-signal");
24
49
  const merge_audio_track_1 = require("./merge-audio-track");
25
50
  const parse_ffmpeg_progress_1 = require("./parse-ffmpeg-progress");
26
51
  const pixel_format_1 = require("./pixel-format");
27
52
  const preprocess_audio_track_1 = require("./preprocess-audio-track");
53
+ const prores_profile_1 = require("./prores-profile");
28
54
  const truthy_1 = require("./truthy");
29
55
  const validate_even_dimensions_with_codec_1 = require("./validate-even-dimensions-with-codec");
30
56
  const validate_ffmpeg_1 = require("./validate-ffmpeg");
57
+ const validate_videobitrate_1 = require("./validate-videobitrate");
31
58
  const packageJsonPath = path_1.default.join(__dirname, '..', 'package.json');
32
59
  const packageJson = fs_1.default.existsSync(packageJsonPath)
33
60
  ? JSON.parse(fs_1.default.readFileSync(packageJsonPath, 'utf-8'))
34
61
  : null;
35
- const getAssetsData = async ({ assets, onDownload, fps, expectedFrames, verbose, ffmpegExecutable, ffprobeExecutable, onProgress, downloadMap, }) => {
62
+ const getAssetsData = async ({ assets, onDownload, fps, expectedFrames, verbose, ffmpegExecutable, ffprobeExecutable, onProgress, downloadMap, remotionRoot, }) => {
36
63
  const fileUrlAssets = await (0, convert_assets_to_file_urls_1.convertAssetsToFileUrls)({
37
64
  assets,
38
65
  onDownload: onDownload !== null && onDownload !== void 0 ? onDownload : (() => () => undefined),
@@ -57,6 +84,7 @@ const getAssetsData = async ({ assets, onDownload, fps, expectedFrames, verbose,
57
84
  expectedFrames,
58
85
  fps,
59
86
  downloadMap,
87
+ remotionRoot,
60
88
  });
61
89
  preprocessProgress[index] = 1;
62
90
  updateProgress();
@@ -69,16 +97,17 @@ const getAssetsData = async ({ assets, onDownload, fps, expectedFrames, verbose,
69
97
  outName,
70
98
  numberOfSeconds: Number((expectedFrames / fps).toFixed(3)),
71
99
  downloadMap,
100
+ remotionRoot,
72
101
  });
73
- (0, delete_directory_1.deleteDirectory)(downloadMap.audioMixing);
74
102
  onProgress(1);
103
+ (0, delete_directory_1.deleteDirectory)(downloadMap.audioMixing);
75
104
  preprocessed.forEach((p) => {
76
105
  (0, delete_directory_1.deleteDirectory)(p);
77
106
  });
78
107
  return outName;
79
108
  };
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;
109
+ const spawnFfmpeg = async (options, remotionRoot) => {
110
+ 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
111
  remotion_1.Internals.validateDimension(options.height, 'height', 'passed to `stitchFramesToVideo()`');
83
112
  remotion_1.Internals.validateDimension(options.width, 'width', 'passed to `stitchFramesToVideo()`');
84
113
  const codec = (_a = options.codec) !== null && _a !== void 0 ? _a : codec_1.DEFAULT_CODEC;
@@ -88,31 +117,51 @@ const spawnFfmpeg = async (options) => {
88
117
  codec,
89
118
  scale: 1,
90
119
  });
120
+ (0, prores_profile_1.validateSelectedCodecAndProResCombination)({
121
+ codec,
122
+ proResProfile: options.proResProfile,
123
+ });
124
+ (0, validate_videobitrate_1.validateBitrate)(options.audioBitrate, 'audioBitrate');
125
+ (0, validate_videobitrate_1.validateBitrate)(options.videoBitrate, 'videoBitrate');
91
126
  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);
127
+ const pixelFormat = (_b = options.pixelFormat) !== null && _b !== void 0 ? _b : pixel_format_1.DEFAULT_PIXEL_FORMAT;
128
+ await (0, validate_ffmpeg_1.validateFfmpeg)((_c = options.ffmpegExecutable) !== null && _c !== void 0 ? _c : null, remotionRoot, 'ffmpeg');
95
129
  const encoderName = (0, get_codec_name_1.getCodecName)(codec);
96
- const audioCodecName = (0, get_audio_codec_name_1.getAudioCodecName)(codec);
97
130
  const proResProfileName = (0, get_prores_profile_name_1.getProResProfileName)(codec, options.proResProfile);
98
131
  const mediaSupport = (0, codec_supports_media_1.codecSupportsMedia)(codec);
99
- const supportsCrf = encoderName && codec !== 'prores';
132
+ const shouldRenderAudio = mediaSupport.audio &&
133
+ (options.assetsInfo.assets.flat(1).length > 0 ||
134
+ options.enforceAudioTrack) &&
135
+ !options.muted;
136
+ const shouldRenderVideo = mediaSupport.video;
137
+ if (!shouldRenderAudio && !shouldRenderVideo) {
138
+ 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.');
139
+ }
140
+ // Explanation: https://github.com/remotion-dev/remotion/issues/1647
141
+ const resolvedAudioCodec = ((_d = options.internalOptions) === null || _d === void 0 ? void 0 : _d.preferLossless)
142
+ ? (0, audio_codec_1.getDefaultAudioCodec)({ codec, preferLossless: true })
143
+ : (_e = options.audioCodec) !== null && _e !== void 0 ? _e : (0, audio_codec_1.getDefaultAudioCodec)({ codec, preferLossless: false });
100
144
  const tempFile = options.outputLocation
101
145
  ? null
102
- : path_1.default.join(options.assetsInfo.downloadMap.stitchFrames, `out.${(0, get_extension_from_codec_1.getFileExtensionFromCodec)(codec, 'final')}`);
146
+ : path_1.default.join(options.assetsInfo.downloadMap.stitchFrames, `out.${(0, get_extension_from_codec_1.getFileExtensionFromCodec)(codec, resolvedAudioCodec)}`);
103
147
  if (options.verbose) {
104
- console.log('[verbose] ffmpeg', (_e = options.ffmpegExecutable) !== null && _e !== void 0 ? _e : 'ffmpeg in PATH');
148
+ console.log('[verbose] ffmpeg', (_f = options.ffmpegExecutable) !== null && _f !== void 0 ? _f : 'ffmpeg in PATH');
105
149
  console.log('[verbose] encoder', encoderName);
106
- console.log('[verbose] audioCodec', audioCodecName);
150
+ console.log('[verbose] audioCodec', resolvedAudioCodec);
107
151
  console.log('[verbose] pixelFormat', pixelFormat);
108
- if (supportsCrf) {
109
- console.log('[verbose] crf', crf);
152
+ if (options.ffmpegOverride) {
153
+ console.log('[verbose] ffmpegOverride', options.ffmpegOverride);
110
154
  }
111
155
  console.log('[verbose] codec', codec);
112
- console.log('[verbose] isAudioOnly', mediaSupport.audio && !mediaSupport.video);
156
+ console.log('[verbose] shouldRenderAudio', shouldRenderAudio);
157
+ console.log('[verbose] shouldRenderVideo', shouldRenderVideo);
113
158
  console.log('[verbose] proResProfileName', proResProfileName);
114
159
  }
115
- (0, crf_1.validateSelectedCrfAndCodecCombination)(crf, codec);
160
+ (0, crf_1.validateQualitySettings)({
161
+ crf: options.crf,
162
+ codec,
163
+ videoBitrate: options.videoBitrate,
164
+ });
116
165
  (0, pixel_format_1.validateSelectedPixelFormatAndCodecCombination)(pixelFormat, codec);
117
166
  const expectedFrames = options.assetsInfo.assets.length;
118
167
  const updateProgress = (preStitchProgress, muxProgress) => {
@@ -120,45 +169,47 @@ const spawnFfmpeg = async (options) => {
120
169
  const totalFrameProgress = 0.5 * preStitchProgress * expectedFrames + muxProgress * 0.5;
121
170
  (_a = options.onProgress) === null || _a === void 0 ? void 0 : _a.call(options, Math.round(totalFrameProgress));
122
171
  };
123
- const audio = mediaSupport.audio
172
+ const audio = shouldRenderAudio
124
173
  ? await getAssetsData({
125
174
  assets: options.assetsInfo.assets,
126
175
  onDownload: options.onDownload,
127
176
  fps: options.fps,
128
177
  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,
178
+ verbose: (_g = options.verbose) !== null && _g !== void 0 ? _g : false,
179
+ ffmpegExecutable: (_h = options.ffmpegExecutable) !== null && _h !== void 0 ? _h : null,
180
+ ffprobeExecutable: (_j = options.ffprobeExecutable) !== null && _j !== void 0 ? _j : null,
132
181
  onProgress: (prog) => updateProgress(prog, 0),
133
182
  downloadMap: options.assetsInfo.downloadMap,
183
+ remotionRoot,
134
184
  })
135
185
  : null;
136
186
  if (mediaSupport.audio && !mediaSupport.video) {
137
- if (!audioCodecName) {
187
+ if (!resolvedAudioCodec) {
138
188
  throw new TypeError('exporting audio but has no audio codec name. Report this in the Remotion repo.');
139
189
  }
140
- const ffmpegTask = (0, execa_1.default)('ffmpeg', [
190
+ const ffmpegTask = (0, execa_1.default)(await (0, ffmpeg_flags_1.getExecutableBinary)((_k = options.ffmpegExecutable) !== null && _k !== void 0 ? _k : null, remotionRoot, 'ffmpeg'), [
141
191
  '-i',
142
192
  audio,
143
193
  '-c:a',
144
- audioCodecName,
194
+ (0, audio_codec_1.mapAudioCodecToFfmpegAudioCodecName)(resolvedAudioCodec),
145
195
  // Set bitrate up to 320k, for aac it might effectively be lower
146
196
  '-b:a',
147
- '320k',
197
+ (_l = options.audioBitrate) !== null && _l !== void 0 ? _l : '320k',
148
198
  options.force ? '-y' : null,
149
- (_j = options.outputLocation) !== null && _j !== void 0 ? _j : tempFile,
199
+ (_m = options.outputLocation) !== null && _m !== void 0 ? _m : tempFile,
150
200
  ].filter(remotion_1.Internals.truthy));
151
- (_k = options.cancelSignal) === null || _k === void 0 ? void 0 : _k.call(options, () => {
201
+ (_o = options.cancelSignal) === null || _o === void 0 ? void 0 : _o.call(options, () => {
152
202
  ffmpegTask.kill();
153
203
  });
154
204
  await ffmpegTask;
155
- (_l = options.onProgress) === null || _l === void 0 ? void 0 : _l.call(options, expectedFrames);
205
+ (_p = options.onProgress) === null || _p === void 0 ? void 0 : _p.call(options, expectedFrames);
156
206
  if (audio) {
157
- await (0, delete_directory_1.deleteDirectory)(path_1.default.dirname(audio));
207
+ (0, delete_directory_1.deleteDirectory)(path_1.default.dirname(audio));
158
208
  }
159
209
  const file = await new Promise((resolve, reject) => {
160
210
  if (tempFile) {
161
- (0, promises_1.readFile)(tempFile)
211
+ fs_1.promises
212
+ .readFile(tempFile)
162
213
  .then((f) => {
163
214
  return resolve(f);
164
215
  })
@@ -168,7 +219,7 @@ const spawnFfmpeg = async (options) => {
168
219
  resolve(null);
169
220
  }
170
221
  });
171
- await (0, delete_directory_1.deleteDirectory)(options.assetsInfo.downloadMap.stitchFrames);
222
+ (0, delete_directory_1.deleteDirectory)(options.assetsInfo.downloadMap.stitchFrames);
172
223
  return {
173
224
  getLogs: () => '',
174
225
  task: Promise.resolve(file),
@@ -176,8 +227,8 @@ const spawnFfmpeg = async (options) => {
176
227
  }
177
228
  const ffmpegArgs = [
178
229
  ['-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]]
230
+ ...(((_q = options.internalOptions) === null || _q === void 0 ? void 0 : _q.preEncodedFileLocation)
231
+ ? [['-i', (_r = options.internalOptions) === null || _r === void 0 ? void 0 : _r.preEncodedFileLocation]]
181
232
  : [
182
233
  ['-f', 'image2'],
183
234
  ['-s', `${options.width}x${options.height}`],
@@ -185,30 +236,35 @@ const spawnFfmpeg = async (options) => {
185
236
  ['-i', options.assetsInfo.imageSequenceName],
186
237
  ]),
187
238
  audio ? ['-i', audio] : null,
188
- ((_p = options.numberOfGifLoops) !== null && _p !== void 0 ? _p : null) === null
239
+ ((_s = options.numberOfGifLoops) !== null && _s !== void 0 ? _s : null) === null
189
240
  ? null
190
241
  : [
191
242
  '-loop',
192
- (0, convert_number_of_gif_loops_to_ffmpeg_1.convertNumberOfGifLoopsToFfmpegSyntax)((_q = options.numberOfGifLoops) !== null && _q !== void 0 ? _q : null),
243
+ (0, convert_number_of_gif_loops_to_ffmpeg_1.convertNumberOfGifLoopsToFfmpegSyntax)((_t = options.numberOfGifLoops) !== null && _t !== void 0 ? _t : null),
193
244
  ],
194
245
  // -c:v is the same as -vcodec as -codec:video
195
246
  // and specified the video codec.
196
247
  ['-c:v', encoderName],
197
- ...(((_r = options.internalOptions) === null || _r === void 0 ? void 0 : _r.preEncodedFileLocation)
248
+ ...(((_u = options.internalOptions) === null || _u === void 0 ? void 0 : _u.preEncodedFileLocation)
198
249
  ? []
199
250
  : [
200
251
  proResProfileName ? ['-profile:v', proResProfileName] : null,
201
- supportsCrf ? ['-crf', String(crf)] : null,
202
252
  ['-pix_fmt', pixelFormat],
203
253
  // Without explicitly disabling auto-alt-ref,
204
254
  // transparent WebM generation doesn't work
205
255
  pixelFormat === 'yuva420p' ? ['-auto-alt-ref', '0'] : null,
206
- ['-b:v', '1M'],
256
+ ...(0, crf_1.validateQualitySettings)({
257
+ crf: options.crf,
258
+ videoBitrate: options.videoBitrate,
259
+ codec,
260
+ }),
207
261
  ]),
208
262
  codec === 'h264' ? ['-movflags', 'faststart'] : null,
209
- audioCodecName ? ['-c:a', audioCodecName] : null,
263
+ resolvedAudioCodec
264
+ ? ['-c:a', (0, audio_codec_1.mapAudioCodecToFfmpegAudioCodecName)(resolvedAudioCodec)]
265
+ : null,
210
266
  // Set max bitrate up to 1024kbps, will choose lower if that's too much
211
- audioCodecName ? ['-b:a', '512K'] : null,
267
+ resolvedAudioCodec ? ['-b:a', options.audioBitrate || '512K'] : null,
212
268
  // Ignore metadata that may come from remote media
213
269
  ['-map_metadata', '-1'],
214
270
  [
@@ -217,22 +273,29 @@ const spawnFfmpeg = async (options) => {
217
273
  [`Made with Remotion`, packageJson ? packageJson.version : null].join(' '),
218
274
  ],
219
275
  options.force ? '-y' : null,
220
- (_s = options.outputLocation) !== null && _s !== void 0 ? _s : tempFile,
276
+ (_v = options.outputLocation) !== null && _v !== void 0 ? _v : tempFile,
221
277
  ];
222
278
  if (options.verbose) {
223
279
  console.log('Generated FFMPEG command:');
224
280
  console.log(ffmpegArgs);
225
281
  }
226
282
  const ffmpegString = ffmpegArgs.flat(2).filter(Boolean);
227
- const task = (0, execa_1.default)((_t = options.ffmpegExecutable) !== null && _t !== void 0 ? _t : 'ffmpeg', ffmpegString, {
283
+ const finalFfmpegString = options.ffmpegOverride
284
+ ? options.ffmpegOverride({ type: 'stitcher', args: ffmpegString })
285
+ : ffmpegString;
286
+ if (options.verbose && options.ffmpegOverride) {
287
+ console.log('Generated final FFMPEG command:');
288
+ console.log(finalFfmpegString);
289
+ }
290
+ 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
291
  cwd: options.dir,
229
292
  });
230
- (_u = options.cancelSignal) === null || _u === void 0 ? void 0 : _u.call(options, () => {
293
+ (_x = options.cancelSignal) === null || _x === void 0 ? void 0 : _x.call(options, () => {
231
294
  task.kill();
232
295
  });
233
296
  let ffmpegOutput = '';
234
297
  let isFinished = false;
235
- (_v = task.stderr) === null || _v === void 0 ? void 0 : _v.on('data', (data) => {
298
+ (_y = task.stderr) === null || _y === void 0 ? void 0 : _y.on('data', (data) => {
236
299
  var _a;
237
300
  const str = data.toString();
238
301
  ffmpegOutput += str;
@@ -261,7 +324,8 @@ const spawnFfmpeg = async (options) => {
261
324
  (0, delete_directory_1.deleteDirectory)(options.assetsInfo.downloadMap.stitchFrames);
262
325
  return null;
263
326
  }
264
- return (0, promises_1.readFile)(tempFile)
327
+ return fs_1.promises
328
+ .readFile(tempFile)
265
329
  .then((file) => {
266
330
  return Promise.all([
267
331
  file,
@@ -275,8 +339,13 @@ const spawnFfmpeg = async (options) => {
275
339
  };
276
340
  };
277
341
  exports.spawnFfmpeg = spawnFfmpeg;
342
+ /**
343
+ * @description Takes a series of images and audio information generated by renderFrames() and encodes it to a video.
344
+ * @see [Documentation](https://www.remotion.dev/docs/renderer/stitch-frames-to-video)
345
+ */
278
346
  const stitchFramesToVideo = async (options) => {
279
- const { task, getLogs } = await (0, exports.spawnFfmpeg)(options);
347
+ const remotionRoot = (0, find_closest_package_json_1.findRemotionRoot)();
348
+ const { task, getLogs } = await (0, exports.spawnFfmpeg)(options, remotionRoot);
280
349
  const happyPath = task.catch(() => {
281
350
  throw new Error(getLogs());
282
351
  });
@@ -285,7 +354,7 @@ const stitchFramesToVideo = async (options) => {
285
354
  new Promise((_resolve, reject) => {
286
355
  var _a;
287
356
  (_a = options.cancelSignal) === null || _a === void 0 ? void 0 : _a.call(options, () => {
288
- reject(new Error('stitchFramesToVideo() got cancelled'));
357
+ reject(new Error(make_cancel_signal_1.cancelErrorMessages.stitchFramesToVideo));
289
358
  });
290
359
  }),
291
360
  ]);
@@ -1,5 +1,5 @@
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 const stringifyFfmpegFilter: ({ trimLeft, trimRight, channels, startInVideo, volume, fps, playbackRate, durationInFrames, assetDuration, allowAmplificationDuringRender, }: {
3
3
  trimLeft: number;
4
4
  trimRight: number;
5
5
  channels: number;
@@ -9,4 +9,5 @@ export declare const stringifyFfmpegFilter: ({ trimLeft, trimRight, channels, st
9
9
  durationInFrames: number;
10
10
  playbackRate: number;
11
11
  assetDuration: number | null;
12
+ allowAmplificationDuringRender: boolean;
12
13
  }) => string | 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,13 +14,15 @@ 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
+ const audibleDuration = (actualTrimRight - trimLeft) / playbackRate;
25
+ const padAtEnd = chunkLength - audibleDuration - startInVideoSeconds;
24
26
  return (`[0:a]` +
25
27
  [
26
28
  `aformat=sample_fmts=s32:sample_rates=${sample_rate_1.DEFAULT_SAMPLE_RATE}`,
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]>;
@@ -0,0 +1,55 @@
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.tryToExtractFrameOfVideoFast = void 0;
7
+ const execa_1 = __importDefault(require("execa"));
8
+ const determine_resize_params_1 = require("./determine-resize-params");
9
+ const determine_vcodec_ffmpeg_flags_1 = require("./determine-vcodec-ffmpeg-flags");
10
+ const ffmpeg_flags_1 = require("./ffmpeg-flags");
11
+ const truthy_1 = require("./truthy");
12
+ const tryToExtractFrameOfVideoFast = async ({ ffmpegExecutable, remotionRoot, specialVCodecForTransparency, imageFormat, needsResize, src, actualOffset, }) => {
13
+ const { stdout, stderr } = (0, execa_1.default)(await (0, ffmpeg_flags_1.getExecutableBinary)(ffmpegExecutable, remotionRoot, 'ffmpeg'), [
14
+ '-ss',
15
+ actualOffset,
16
+ ...(0, determine_vcodec_ffmpeg_flags_1.determineVcodecFfmpegFlags)(specialVCodecForTransparency),
17
+ '-i',
18
+ src,
19
+ '-frames:v',
20
+ '1',
21
+ '-c:v',
22
+ imageFormat === 'jpeg' ? 'mjpeg' : 'png',
23
+ '-f',
24
+ 'image2pipe',
25
+ ...(0, determine_resize_params_1.determineResizeParams)(needsResize),
26
+ '-',
27
+ ].filter(truthy_1.truthy));
28
+ if (!stderr) {
29
+ throw new Error('unexpectedly did not get stderr');
30
+ }
31
+ if (!stdout) {
32
+ throw new Error('unexpectedly did not get stdout');
33
+ }
34
+ const stderrChunks = [];
35
+ const stdoutChunks = [];
36
+ const stdErrString = new Promise((resolve, reject) => {
37
+ stderr.on('data', (d) => stderrChunks.push(d));
38
+ stderr.on('error', (err) => reject(err));
39
+ stderr.on('end', () => resolve(Buffer.concat(stderrChunks).toString('utf-8')));
40
+ });
41
+ const stdoutChunk = new Promise((resolve, reject) => {
42
+ stdout.on('data', (d) => {
43
+ stdoutChunks.push(d);
44
+ });
45
+ stdout.on('error', (err) => {
46
+ reject(err);
47
+ });
48
+ stdout.on('end', () => {
49
+ resolve(Buffer.concat(stdoutChunks));
50
+ });
51
+ });
52
+ const [stdErr, stdoutBuffer] = await Promise.all([stdErrString, stdoutChunk]);
53
+ return [stdErr, stdoutBuffer];
54
+ };
55
+ exports.tryToExtractFrameOfVideoFast = tryToExtractFrameOfVideoFast;
package/dist/types.d.ts CHANGED
File without changes
package/dist/types.js CHANGED
File without changes
File without changes
@@ -8,17 +8,22 @@ const validateConcurrency = (value, setting) => {
8
8
  if (value === null) {
9
9
  return;
10
10
  }
11
- if (typeof value !== 'number') {
12
- throw new Error(setting + ' must be a number but is ' + value);
11
+ if (typeof value !== 'number' && typeof value !== 'string') {
12
+ throw new Error(setting + ' must a number or a string but is ' + value);
13
13
  }
14
- if (value % 1 !== 0) {
15
- throw new Error(setting + ' must be an integer, but is ' + value);
14
+ if (typeof value === 'number') {
15
+ if (value % 1 !== 0) {
16
+ throw new Error(setting + ' must be an integer, but is ' + value);
17
+ }
18
+ if (value < 1) {
19
+ throw new Error(setting + ' must be at least 1, but is ' + value);
20
+ }
21
+ if (value > require('os').cpus().length) {
22
+ throw new Error(`${setting} is set higher than the amount of CPU cores available. Available CPU cores: ${require('os').cpus().length}, value set: ${value}`);
23
+ }
16
24
  }
17
- if (value < 1) {
18
- throw new Error(setting + ' must be at least 1, but is ' + value);
19
- }
20
- if (value > require('os').cpus().length) {
21
- throw new Error(`${setting} is set higher than the amount of CPU cores available. Available CPU cores: ${require('os').cpus().length}, value set: ${value}`);
25
+ else if (!/^\d+(\.\d+)?%$/.test(value)) {
26
+ throw new Error(`${setting} must be a number or percentage, but is ${JSON.stringify(value)}`);
22
27
  }
23
28
  };
24
29
  exports.validateConcurrency = validateConcurrency;
File without changes
File without changes
@@ -1 +1,2 @@
1
- export declare const validateEveryNthFrame: (everyNthFrame: unknown) => void;
1
+ import type { Codec } from './codec';
2
+ export declare const validateEveryNthFrame: (everyNthFrame: unknown, codec: Codec) => 1 | undefined;