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

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 (594) hide show
  1. package/LICENSE.md +8 -8
  2. package/README.md +9 -0
  3. package/client.d.ts +1 -0
  4. package/client.js +1 -0
  5. package/dist/assets/calculate-asset-positions.d.ts +0 -0
  6. package/dist/assets/calculate-asset-positions.js +1 -0
  7. package/dist/assets/calculate-atempo.d.ts +0 -0
  8. package/dist/assets/calculate-atempo.js +0 -0
  9. package/dist/assets/convert-assets-to-file-urls.d.ts +0 -0
  10. package/dist/assets/convert-assets-to-file-urls.js +0 -0
  11. package/dist/assets/download-and-map-assets-to-file.d.ts +2 -1
  12. package/dist/assets/download-and-map-assets-to-file.js +64 -15
  13. package/dist/assets/download-file.d.ts +9 -6
  14. package/dist/assets/download-file.js +67 -9
  15. package/dist/assets/download-map.d.ts +5 -26
  16. package/dist/assets/download-map.js +15 -16
  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 -2
  22. package/dist/assets/get-audio-channels.js +5 -8
  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 +1 -1
  26. package/dist/assets/read-file.js +4 -6
  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 +2 -2
  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 +28 -0
  38. package/dist/audio-codec.js +83 -0
  39. package/dist/browser/Browser.d.ts +8 -6
  40. package/dist/browser/Browser.js +48 -45
  41. package/dist/browser/BrowserConnector.d.ts +0 -0
  42. package/dist/browser/BrowserConnector.js +0 -0
  43. package/dist/browser/BrowserFetcher.d.ts +15 -63
  44. package/dist/browser/BrowserFetcher.js +151 -237
  45. package/dist/browser/BrowserPage.d.ts +12 -6
  46. package/dist/browser/BrowserPage.js +8 -11
  47. package/dist/browser/BrowserRunner.d.ts +2 -5
  48. package/dist/browser/BrowserRunner.js +42 -92
  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 +5 -4
  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 +2 -6
  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 +1 -5
  72. package/dist/browser/LaunchOptions.js +0 -0
  73. package/dist/browser/Launcher.d.ts +9 -3
  74. package/dist/browser/Launcher.js +17 -387
  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 +5 -5
  83. package/dist/browser/Product.d.ts +0 -0
  84. package/dist/browser/Product.js +0 -0
  85. package/dist/browser/PuppeteerNode.d.ts +2 -5
  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 +2 -2
  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 +5 -1
  102. package/dist/browser/devtools-commands.js +0 -0
  103. package/dist/browser/devtools-types.d.ts +82 -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 +8 -8
  107. package/dist/browser/is-target-closed-err.d.ts +1 -0
  108. package/dist/browser/is-target-closed-err.js +9 -0
  109. package/dist/browser/mitt/index.d.ts +0 -0
  110. package/dist/browser/mitt/index.js +0 -0
  111. package/dist/browser/node.d.ts +0 -0
  112. package/dist/browser/node.js +0 -0
  113. package/dist/browser/revisions.d.ts +0 -1
  114. package/dist/browser/revisions.js +0 -1
  115. package/dist/browser/util.d.ts +2 -2
  116. package/dist/browser/util.js +0 -0
  117. package/dist/browser-executable.d.ts +0 -0
  118. package/dist/browser-executable.js +0 -0
  119. package/dist/browser-log.d.ts +0 -0
  120. package/dist/browser-log.js +0 -0
  121. package/dist/browser.d.ts +0 -0
  122. package/dist/browser.js +0 -0
  123. package/dist/calculate-ffmpeg-filters.d.ts +2 -1
  124. package/dist/calculate-ffmpeg-filters.js +1 -0
  125. package/dist/calculate-sar-dar-pixels.d.ts +0 -0
  126. package/dist/calculate-sar-dar-pixels.js +0 -0
  127. package/dist/call-ffmpeg.d.ts +14 -0
  128. package/dist/call-ffmpeg.js +42 -0
  129. package/dist/can-use-parallel-encoding.d.ts +0 -0
  130. package/dist/can-use-parallel-encoding.js +0 -0
  131. package/dist/chalk/index.d.ts +54 -0
  132. package/dist/chalk/index.js +135 -0
  133. package/dist/chalk/is-color-supported.d.ts +1 -0
  134. package/dist/chalk/is-color-supported.js +37 -0
  135. package/dist/check-apple-silicon.d.ts +1 -0
  136. package/dist/check-apple-silicon.js +12 -0
  137. package/dist/chunk.d.ts +0 -0
  138. package/dist/chunk.js +0 -0
  139. package/dist/client.d.ts +204 -0
  140. package/dist/client.js +49 -0
  141. package/dist/codec-supports-media.d.ts +2 -0
  142. package/dist/codec-supports-media.js +23 -1
  143. package/dist/codec.d.ts +0 -0
  144. package/dist/codec.js +0 -0
  145. package/dist/combine-videos.d.ts +6 -2
  146. package/dist/combine-videos.js +18 -18
  147. package/dist/compositor/compose.d.ts +17 -0
  148. package/dist/compositor/compose.js +71 -0
  149. package/dist/compositor/compositor.d.ts +11 -0
  150. package/dist/compositor/compositor.js +207 -0
  151. package/dist/compositor/get-executable-path.d.ts +1 -0
  152. package/dist/compositor/get-executable-path.js +57 -0
  153. package/dist/compositor/make-nonce.d.ts +1 -0
  154. package/dist/compositor/make-nonce.js +8 -0
  155. package/dist/compositor/payloads.d.ts +68 -0
  156. package/dist/compositor/payloads.js +2 -0
  157. package/dist/compress-assets.d.ts +0 -0
  158. package/dist/compress-assets.js +0 -0
  159. package/dist/convert-number-of-gif-loops-to-ffmpeg.d.ts +0 -0
  160. package/dist/convert-number-of-gif-loops-to-ffmpeg.js +0 -0
  161. package/dist/convert-to-positive-frame-index.d.ts +4 -0
  162. package/dist/convert-to-positive-frame-index.js +8 -0
  163. package/dist/create-ffmpeg-complex-filter.d.ts +6 -5
  164. package/dist/create-ffmpeg-complex-filter.js +6 -4
  165. package/dist/create-ffmpeg-merge-filter.d.ts +5 -1
  166. package/dist/create-ffmpeg-merge-filter.js +21 -13
  167. package/dist/create-silent-audio.d.ts +1 -3
  168. package/dist/create-silent-audio.js +3 -6
  169. package/dist/crf.d.ts +5 -1
  170. package/dist/crf.js +41 -8
  171. package/dist/cycle-browser-tabs.d.ts +2 -5
  172. package/dist/cycle-browser-tabs.js +5 -5
  173. package/dist/delay-render-embedded-stack.d.ts +0 -0
  174. package/dist/delay-render-embedded-stack.js +0 -0
  175. package/dist/delete-directory.d.ts +1 -1
  176. package/dist/delete-directory.js +43 -17
  177. package/dist/determine-resize-params.d.ts +1 -0
  178. package/dist/determine-resize-params.js +10 -0
  179. package/dist/determine-vcodec-ffmpeg-flags.d.ts +2 -0
  180. package/dist/determine-vcodec-ffmpeg-flags.js +13 -0
  181. package/dist/does-have-m2-bug.d.ts +3 -0
  182. package/dist/does-have-m2-bug.js +12 -0
  183. package/dist/ensure-ffmpeg.d.ts +18 -0
  184. package/dist/ensure-ffmpeg.js +58 -0
  185. package/dist/ensure-frames-in-order.d.ts +0 -0
  186. package/dist/ensure-frames-in-order.js +0 -0
  187. package/dist/ensure-output-directory.d.ts +0 -0
  188. package/dist/ensure-output-directory.js +5 -5
  189. package/dist/ensure-presentation-timestamp.d.ts +14 -1
  190. package/dist/ensure-presentation-timestamp.js +36 -17
  191. package/dist/error-handling/handle-javascript-exception.d.ts +0 -0
  192. package/dist/error-handling/handle-javascript-exception.js +10 -0
  193. package/dist/error-handling/symbolicate-error.d.ts +0 -0
  194. package/dist/error-handling/symbolicate-error.js +2 -1
  195. package/dist/error-handling/symbolicateable-error.d.ts +0 -0
  196. package/dist/error-handling/symbolicateable-error.js +0 -0
  197. package/dist/extract-frame-from-video.d.ts +1 -0
  198. package/dist/extract-frame-from-video.js +47 -110
  199. package/dist/ffmpeg-executable.d.ts +0 -0
  200. package/dist/ffmpeg-executable.js +0 -0
  201. package/dist/ffmpeg-filter-file.d.ts +6 -1
  202. package/dist/ffmpeg-filter-file.js +40 -8
  203. package/dist/ffmpeg-flags.d.ts +20 -2
  204. package/dist/ffmpeg-flags.js +205 -9
  205. package/dist/ffmpeg-override.d.ts +4 -0
  206. package/dist/ffmpeg-override.js +2 -0
  207. package/dist/file-extensions.d.ts +14 -0
  208. package/dist/file-extensions.js +76 -0
  209. package/dist/find-closest-package-json.d.ts +2 -0
  210. package/dist/find-closest-package-json.js +31 -0
  211. package/dist/frame-range.d.ts +0 -0
  212. package/dist/frame-range.js +0 -0
  213. package/dist/frame-to-ffmpeg-timestamp.d.ts +0 -0
  214. package/dist/frame-to-ffmpeg-timestamp.js +0 -0
  215. package/dist/get-browser-instance.d.ts +2 -2
  216. package/dist/get-browser-instance.js +1 -1
  217. package/dist/get-can-extract-frames-fast.d.ts +14 -0
  218. package/dist/get-can-extract-frames-fast.js +71 -0
  219. package/dist/get-codec-name.d.ts +0 -0
  220. package/dist/get-codec-name.js +0 -0
  221. package/dist/get-compositions.d.ts +14 -8
  222. package/dist/get-compositions.js +25 -7
  223. package/dist/get-concurrency.d.ts +1 -1
  224. package/dist/get-concurrency.js +11 -4
  225. package/dist/get-duration-from-frame-range.d.ts +0 -0
  226. package/dist/get-duration-from-frame-range.js +0 -0
  227. package/dist/get-extension-from-codec.d.ts +5 -1
  228. package/dist/get-extension-from-codec.js +56 -32
  229. package/dist/get-extension-of-filename.d.ts +0 -0
  230. package/dist/get-extension-of-filename.js +5 -1
  231. package/dist/get-frame-of-video-slow.d.ts +17 -0
  232. package/dist/get-frame-of-video-slow.js +72 -0
  233. package/dist/get-frame-padded-index.d.ts +2 -1
  234. package/dist/get-frame-padded-index.js +3 -2
  235. package/dist/get-frame-to-render.d.ts +0 -0
  236. package/dist/get-frame-to-render.js +1 -1
  237. package/dist/get-local-browser-executable.d.ts +0 -0
  238. package/dist/get-local-browser-executable.js +7 -17
  239. package/dist/get-port.d.ts +4 -1
  240. package/dist/get-port.js +8 -8
  241. package/dist/get-prores-profile-name.d.ts +0 -0
  242. package/dist/get-prores-profile-name.js +0 -0
  243. package/dist/get-video-info.d.ts +6 -1
  244. package/dist/get-video-info.js +19 -9
  245. package/dist/get-video-threads-flag.d.ts +0 -0
  246. package/dist/get-video-threads-flag.js +3 -3
  247. package/dist/guess-extension-for-media.d.ts +3 -1
  248. package/dist/guess-extension-for-media.js +5 -8
  249. package/dist/image-format.d.ts +12 -6
  250. package/dist/image-format.js +19 -13
  251. package/dist/index.d.ts +284 -51
  252. package/dist/index.js +50 -36
  253. package/dist/is-audio-codec.d.ts +0 -0
  254. package/dist/is-audio-codec.js +0 -0
  255. package/dist/is-beyond-last-frame.d.ts +0 -0
  256. package/dist/is-beyond-last-frame.js +0 -0
  257. package/dist/is-serve-url.d.ts +0 -0
  258. package/dist/is-serve-url.js +0 -0
  259. package/dist/jpeg-quality.d.ts +1 -0
  260. package/dist/jpeg-quality.js +21 -0
  261. package/dist/last-frame-from-video-cache.d.ts +1 -0
  262. package/dist/last-frame-from-video-cache.js +0 -0
  263. package/dist/legacy-webpack-config.d.ts +0 -0
  264. package/dist/legacy-webpack-config.js +0 -0
  265. package/dist/locks.d.ts +7 -0
  266. package/dist/locks.js +44 -0
  267. package/dist/log-level.d.ts +0 -0
  268. package/dist/log-level.js +0 -0
  269. package/dist/logger.d.ts +22 -0
  270. package/dist/logger.js +61 -0
  271. package/dist/make-cancel-signal.d.ts +11 -0
  272. package/dist/make-cancel-signal.js +24 -1
  273. package/dist/merge-audio-track.d.ts +3 -3
  274. package/dist/merge-audio-track.js +40 -34
  275. package/dist/mime-db.d.ts +0 -0
  276. package/dist/mime-db.js +0 -0
  277. package/dist/mime-types.d.ts +1 -0
  278. package/dist/mime-types.js +8 -3
  279. package/dist/normalize-serve-url.d.ts +0 -0
  280. package/dist/normalize-serve-url.js +0 -0
  281. package/dist/offthread-video-server.d.ts +12 -8
  282. package/dist/offthread-video-server.js +67 -47
  283. package/dist/open-browser.d.ts +8 -2
  284. package/dist/open-browser.js +16 -18
  285. package/dist/options/audio-bitrate.d.ts +2 -0
  286. package/dist/options/audio-bitrate.js +11 -0
  287. package/dist/options/crf.d.ts +2 -0
  288. package/dist/options/crf.js +11 -0
  289. package/dist/options/enforce-audio.d.ts +2 -0
  290. package/dist/options/enforce-audio.js +11 -0
  291. package/dist/options/jpeg-quality.d.ts +2 -0
  292. package/dist/options/jpeg-quality.js +11 -0
  293. package/dist/options/mute.d.ts +2 -0
  294. package/dist/options/mute.js +11 -0
  295. package/dist/options/option.d.ts +8 -0
  296. package/dist/options/option.js +2 -0
  297. package/dist/options/scale.d.ts +2 -0
  298. package/dist/options/scale.js +11 -0
  299. package/dist/options/video-bitrate.d.ts +2 -0
  300. package/dist/options/video-bitrate.js +11 -0
  301. package/dist/options/video-codec.d.ts +2 -0
  302. package/dist/options/video-codec.js +11 -0
  303. package/dist/overwrite.d.ts +0 -0
  304. package/dist/overwrite.js +0 -0
  305. package/dist/p-limit.d.ts +0 -0
  306. package/dist/p-limit.js +0 -0
  307. package/dist/parse-browser-error-stack.d.ts +0 -0
  308. package/dist/parse-browser-error-stack.js +0 -0
  309. package/dist/parse-ffmpeg-progress.d.ts +0 -0
  310. package/dist/parse-ffmpeg-progress.js +0 -0
  311. package/dist/perf.d.ts +1 -1
  312. package/dist/perf.js +9 -7
  313. package/dist/pixel-format.d.ts +1 -1
  314. package/dist/pixel-format.js +3 -0
  315. package/dist/pool.d.ts +0 -0
  316. package/dist/pool.js +0 -0
  317. package/dist/prepare-server.d.ts +8 -5
  318. package/dist/prepare-server.js +22 -13
  319. package/dist/preprocess-audio-track.d.ts +6 -4
  320. package/dist/preprocess-audio-track.js +7 -8
  321. package/dist/prespawn-ffmpeg.d.ts +10 -9
  322. package/dist/prespawn-ffmpeg.js +51 -28
  323. package/dist/prestitcher-memory-usage.d.ts +0 -4
  324. package/dist/prestitcher-memory-usage.js +4 -5
  325. package/dist/prores-profile.d.ts +5 -3
  326. package/dist/prores-profile.js +8 -8
  327. package/dist/provide-screenshot.d.ts +8 -4
  328. package/dist/provide-screenshot.js +5 -2
  329. package/dist/puppeteer-evaluate.d.ts +0 -0
  330. package/dist/puppeteer-evaluate.js +20 -12
  331. package/dist/puppeteer-screenshot.d.ts +12 -2
  332. package/dist/puppeteer-screenshot.js +19 -45
  333. package/dist/quality.d.ts +0 -0
  334. package/dist/quality.js +0 -0
  335. package/dist/redirect-status-codes.d.ts +1 -0
  336. package/dist/redirect-status-codes.js +6 -0
  337. package/dist/render-frames.d.ts +26 -22
  338. package/dist/render-frames.js +204 -109
  339. package/dist/render-media.d.ts +52 -19
  340. package/dist/render-media.js +162 -55
  341. package/dist/render-still.d.ts +26 -14
  342. package/dist/render-still.js +97 -46
  343. package/dist/replace-browser.d.ts +6 -0
  344. package/dist/replace-browser.js +47 -0
  345. package/dist/resolve-asset-src.d.ts +0 -0
  346. package/dist/resolve-asset-src.js +2 -2
  347. package/dist/sample-rate.d.ts +0 -0
  348. package/dist/sample-rate.js +0 -0
  349. package/dist/screenshot-dom-element.d.ts +8 -4
  350. package/dist/screenshot-dom-element.js +15 -4
  351. package/dist/screenshot-task.d.ts +12 -2
  352. package/dist/screenshot-task.js +44 -14
  353. package/dist/seek-to-frame.d.ts +1 -0
  354. package/dist/seek-to-frame.js +49 -3
  355. package/dist/select-composition.d.ts +33 -0
  356. package/dist/select-composition.js +119 -0
  357. package/dist/serve-handler/index.d.ts +1 -1
  358. package/dist/serve-handler/index.js +21 -19
  359. package/dist/serve-handler/is-path-inside.d.ts +0 -0
  360. package/dist/serve-handler/is-path-inside.js +3 -3
  361. package/dist/serve-handler/range-parser.d.ts +0 -0
  362. package/dist/serve-handler/range-parser.js +0 -0
  363. package/dist/serve-static.d.ts +6 -3
  364. package/dist/serve-static.js +86 -45
  365. package/dist/set-props-and-env.d.ts +7 -3
  366. package/dist/set-props-and-env.js +50 -16
  367. package/dist/stitch-frames-to-video.d.ts +16 -11
  368. package/dist/stitch-frames-to-video.js +165 -79
  369. package/dist/stringify-ffmpeg-filter.d.ts +10 -2
  370. package/dist/stringify-ffmpeg-filter.js +37 -34
  371. package/dist/symbolicate-stacktrace.d.ts +0 -0
  372. package/dist/symbolicate-stacktrace.js +0 -0
  373. package/dist/take-frame-and-compose.d.ts +22 -0
  374. package/dist/take-frame-and-compose.js +103 -0
  375. package/dist/tmp-dir.d.ts +0 -0
  376. package/dist/tmp-dir.js +7 -8
  377. package/dist/truthy.d.ts +0 -0
  378. package/dist/truthy.js +0 -0
  379. package/dist/try-to-extract-frame-of-video-fast.d.ts +12 -0
  380. package/dist/try-to-extract-frame-of-video-fast.js +55 -0
  381. package/dist/types.d.ts +0 -0
  382. package/dist/types.js +0 -0
  383. package/dist/validate-concurrency.d.ts +2 -0
  384. package/dist/validate-concurrency.js +21 -10
  385. package/dist/validate-even-dimensions-with-codec.d.ts +0 -0
  386. package/dist/validate-even-dimensions-with-codec.js +0 -0
  387. package/dist/validate-every-nth-frame.d.ts +2 -1
  388. package/dist/validate-every-nth-frame.js +8 -1
  389. package/dist/validate-ffmpeg-override.d.ts +2 -0
  390. package/dist/validate-ffmpeg-override.js +12 -0
  391. package/dist/validate-ffmpeg.d.ts +7 -2
  392. package/dist/validate-ffmpeg.js +48 -43
  393. package/dist/validate-number-of-gif-loops.d.ts +2 -0
  394. package/dist/validate-number-of-gif-loops.js +24 -0
  395. package/dist/validate-opengl-renderer.d.ts +0 -0
  396. package/dist/validate-opengl-renderer.js +0 -0
  397. package/dist/validate-output-filename.d.ts +7 -2
  398. package/dist/validate-output-filename.js +20 -51
  399. package/dist/validate-puppeteer-timeout.d.ts +0 -0
  400. package/dist/validate-puppeteer-timeout.js +2 -1
  401. package/dist/validate-scale.d.ts +0 -0
  402. package/dist/validate-scale.js +0 -0
  403. package/dist/validate-videobitrate.d.ts +1 -0
  404. package/dist/validate-videobitrate.js +20 -0
  405. package/dist/wait-for-symbolication-error-to-be-done.d.ts +0 -0
  406. package/dist/wait-for-symbolication-error-to-be-done.js +5 -31
  407. package/dist/warn-about-ffmpeg-version.d.ts +5 -0
  408. package/dist/warn-about-ffmpeg-version.js +37 -0
  409. package/dist/ws/ws-types.d.ts +0 -0
  410. package/dist/ws/ws-types.js +2 -1
  411. package/install-toolchain.mjs +36 -0
  412. package/package.json +70 -60
  413. package/types/ws/index.d.ts +5 -5
  414. package/.prettierrc.js +0 -14
  415. package/dist/add-silent-audio-if-necessary.d.ts +0 -8
  416. package/dist/add-silent-audio-if-necessary.d.ts.map +0 -1
  417. package/dist/add-silent-audio-if-necessary.js +0 -51
  418. package/dist/add-silent-audio-if-necessary.js.map +0 -1
  419. package/dist/assets/asset-is-used-at-time.d.ts +0 -3
  420. package/dist/assets/asset-is-used-at-time.d.ts.map +0 -1
  421. package/dist/assets/asset-is-used-at-time.js +0 -8
  422. package/dist/assets/asset-is-used-at-time.js.map +0 -1
  423. package/dist/assets/calculate-asset-positions.d.ts.map +0 -1
  424. package/dist/assets/calculate-asset-positions.js.map +0 -1
  425. package/dist/assets/calculate-atempo.d.ts.map +0 -1
  426. package/dist/assets/calculate-atempo.js.map +0 -1
  427. package/dist/assets/convert-assets-to-file-urls.d.ts.map +0 -1
  428. package/dist/assets/convert-assets-to-file-urls.js.map +0 -1
  429. package/dist/assets/download-and-map-assets-to-file.d.ts.map +0 -1
  430. package/dist/assets/download-and-map-assets-to-file.js.map +0 -1
  431. package/dist/assets/download-file.d.ts.map +0 -1
  432. package/dist/assets/download-file.js.map +0 -1
  433. package/dist/assets/ffmpeg-volume-expression.d.ts.map +0 -1
  434. package/dist/assets/ffmpeg-volume-expression.js.map +0 -1
  435. package/dist/assets/flatten-volume-array.d.ts.map +0 -1
  436. package/dist/assets/flatten-volume-array.js.map +0 -1
  437. package/dist/assets/get-asset-audio-details.d.ts +0 -5
  438. package/dist/assets/get-asset-audio-details.d.ts.map +0 -1
  439. package/dist/assets/get-asset-audio-details.js +0 -21
  440. package/dist/assets/get-asset-audio-details.js.map +0 -1
  441. package/dist/assets/get-audio-channels.d.ts.map +0 -1
  442. package/dist/assets/get-audio-channels.js.map +0 -1
  443. package/dist/assets/get-simulatenous-assets.d.ts +0 -3
  444. package/dist/assets/get-simulatenous-assets.d.ts.map +0 -1
  445. package/dist/assets/get-simulatenous-assets.js +0 -14
  446. package/dist/assets/get-simulatenous-assets.js.map +0 -1
  447. package/dist/assets/read-file.d.ts.map +0 -1
  448. package/dist/assets/read-file.js.map +0 -1
  449. package/dist/assets/round-volume-to-avoid-stack-overflow.d.ts.map +0 -1
  450. package/dist/assets/round-volume-to-avoid-stack-overflow.js.map +0 -1
  451. package/dist/assets/sanitize-filename.d.ts.map +0 -1
  452. package/dist/assets/sanitize-filename.js.map +0 -1
  453. package/dist/assets/sanitize-filepath.d.ts.map +0 -1
  454. package/dist/assets/sanitize-filepath.js.map +0 -1
  455. package/dist/assets/split-assets-into-segments.d.ts +0 -6
  456. package/dist/assets/split-assets-into-segments.d.ts.map +0 -1
  457. package/dist/assets/split-assets-into-segments.js +0 -89
  458. package/dist/assets/split-assets-into-segments.js.map +0 -1
  459. package/dist/assets/truncate-utf8-bytes.d.ts.map +0 -1
  460. package/dist/assets/truncate-utf8-bytes.js.map +0 -1
  461. package/dist/assets/types.d.ts.map +0 -1
  462. package/dist/assets/types.js.map +0 -1
  463. package/dist/assets-to-ffmpeg-inputs.d.ts +0 -7
  464. package/dist/assets-to-ffmpeg-inputs.d.ts.map +0 -1
  465. package/dist/assets-to-ffmpeg-inputs.js +0 -15
  466. package/dist/assets-to-ffmpeg-inputs.js.map +0 -1
  467. package/dist/browser-log.d.ts.map +0 -1
  468. package/dist/browser-log.js.map +0 -1
  469. package/dist/calculate-ffmpeg-filters.d.ts.map +0 -1
  470. package/dist/calculate-ffmpeg-filters.js.map +0 -1
  471. package/dist/can-use-parallel-encoding.d.ts.map +0 -1
  472. package/dist/can-use-parallel-encoding.js.map +0 -1
  473. package/dist/combine-videos.d.ts.map +0 -1
  474. package/dist/combine-videos.js.map +0 -1
  475. package/dist/convert-to-pcm.d.ts +0 -6
  476. package/dist/convert-to-pcm.js +0 -20
  477. package/dist/create-ffmpeg-complex-filter.d.ts.map +0 -1
  478. package/dist/create-ffmpeg-complex-filter.js.map +0 -1
  479. package/dist/cycle-browser-tabs.d.ts.map +0 -1
  480. package/dist/cycle-browser-tabs.js.map +0 -1
  481. package/dist/delay-render-embedded-stack.d.ts.map +0 -1
  482. package/dist/delay-render-embedded-stack.js.map +0 -1
  483. package/dist/delete-directory.d.ts.map +0 -1
  484. package/dist/delete-directory.js.map +0 -1
  485. package/dist/ensure-frames-in-order.d.ts.map +0 -1
  486. package/dist/ensure-frames-in-order.js.map +0 -1
  487. package/dist/ensure-output-directory.d.ts.map +0 -1
  488. package/dist/ensure-output-directory.js.map +0 -1
  489. package/dist/error-handling/handle-javascript-exception.d.ts.map +0 -1
  490. package/dist/error-handling/handle-javascript-exception.js.map +0 -1
  491. package/dist/error-handling/symbolicate-error.d.ts.map +0 -1
  492. package/dist/error-handling/symbolicate-error.js.map +0 -1
  493. package/dist/error-handling/symbolicateable-error.d.ts.map +0 -1
  494. package/dist/error-handling/symbolicateable-error.js.map +0 -1
  495. package/dist/ffmpeg-flags.d.ts.map +0 -1
  496. package/dist/ffmpeg-flags.js.map +0 -1
  497. package/dist/get-audio-codec-name.d.ts +0 -2
  498. package/dist/get-audio-codec-name.d.ts.map +0 -1
  499. package/dist/get-audio-codec-name.js +0 -28
  500. package/dist/get-audio-codec-name.js.map +0 -1
  501. package/dist/get-browser-instance.d.ts.map +0 -1
  502. package/dist/get-browser-instance.js.map +0 -1
  503. package/dist/get-codec-name.d.ts.map +0 -1
  504. package/dist/get-codec-name.js.map +0 -1
  505. package/dist/get-compositions.d.ts.map +0 -1
  506. package/dist/get-compositions.js.map +0 -1
  507. package/dist/get-concurrency.d.ts.map +0 -1
  508. package/dist/get-concurrency.js.map +0 -1
  509. package/dist/get-extension-from-codec.d.ts.map +0 -1
  510. package/dist/get-extension-from-codec.js.map +0 -1
  511. package/dist/get-frame-to-render.d.ts.map +0 -1
  512. package/dist/get-frame-to-render.js.map +0 -1
  513. package/dist/get-local-browser-executable.d.ts.map +0 -1
  514. package/dist/get-local-browser-executable.js.map +0 -1
  515. package/dist/get-port.d.ts.map +0 -1
  516. package/dist/get-port.js.map +0 -1
  517. package/dist/get-prores-profile-name.d.ts.map +0 -1
  518. package/dist/get-prores-profile-name.js.map +0 -1
  519. package/dist/image-format.d.ts.map +0 -1
  520. package/dist/image-format.js.map +0 -1
  521. package/dist/index.d.ts.map +0 -1
  522. package/dist/index.js.map +0 -1
  523. package/dist/is-serve-url.d.ts.map +0 -1
  524. package/dist/is-serve-url.js.map +0 -1
  525. package/dist/legacy-webpack-config.d.ts.map +0 -1
  526. package/dist/legacy-webpack-config.js.map +0 -1
  527. package/dist/make-assets-download-dir.d.ts +0 -1
  528. package/dist/make-assets-download-dir.d.ts.map +0 -1
  529. package/dist/make-assets-download-dir.js +0 -13
  530. package/dist/make-assets-download-dir.js.map +0 -1
  531. package/dist/normalize-serve-url.d.ts.map +0 -1
  532. package/dist/normalize-serve-url.js.map +0 -1
  533. package/dist/open-browser.d.ts.map +0 -1
  534. package/dist/open-browser.js.map +0 -1
  535. package/dist/parse-browser-error-stack.d.ts.map +0 -1
  536. package/dist/parse-browser-error-stack.js.map +0 -1
  537. package/dist/parse-ffmpeg-progress.d.ts.map +0 -1
  538. package/dist/parse-ffmpeg-progress.js.map +0 -1
  539. package/dist/pool.d.ts.map +0 -1
  540. package/dist/pool.js.map +0 -1
  541. package/dist/prepare-server.d.ts.map +0 -1
  542. package/dist/prepare-server.js.map +0 -1
  543. package/dist/provide-screenshot.d.ts.map +0 -1
  544. package/dist/provide-screenshot.js.map +0 -1
  545. package/dist/puppeteer-evaluate.d.ts.map +0 -1
  546. package/dist/puppeteer-evaluate.js.map +0 -1
  547. package/dist/puppeteer-screenshot.d.ts.map +0 -1
  548. package/dist/puppeteer-screenshot.js.map +0 -1
  549. package/dist/render-media.d.ts.map +0 -1
  550. package/dist/render-media.js.map +0 -1
  551. package/dist/render-still.d.ts.map +0 -1
  552. package/dist/render-still.js.map +0 -1
  553. package/dist/render.d.ts +0 -45
  554. package/dist/render.d.ts.map +0 -1
  555. package/dist/render.js +0 -245
  556. package/dist/render.js.map +0 -1
  557. package/dist/resolve-asset-src.d.ts.map +0 -1
  558. package/dist/resolve-asset-src.js.map +0 -1
  559. package/dist/sample-rate.d.ts.map +0 -1
  560. package/dist/sample-rate.js.map +0 -1
  561. package/dist/screenshot-dom-element.d.ts.map +0 -1
  562. package/dist/screenshot-dom-element.js.map +0 -1
  563. package/dist/screenshot-task.d.ts.map +0 -1
  564. package/dist/screenshot-task.js.map +0 -1
  565. package/dist/seek-to-frame.d.ts.map +0 -1
  566. package/dist/seek-to-frame.js.map +0 -1
  567. package/dist/serve-static.d.ts.map +0 -1
  568. package/dist/serve-static.js.map +0 -1
  569. package/dist/set-props-and-env.d.ts.map +0 -1
  570. package/dist/set-props-and-env.js.map +0 -1
  571. package/dist/stitcher.d.ts +0 -32
  572. package/dist/stitcher.d.ts.map +0 -1
  573. package/dist/stitcher.js +0 -204
  574. package/dist/stitcher.js.map +0 -1
  575. package/dist/stringify-ffmpeg-filter.d.ts.map +0 -1
  576. package/dist/stringify-ffmpeg-filter.js.map +0 -1
  577. package/dist/symbolicate-stacktrace.d.ts.map +0 -1
  578. package/dist/symbolicate-stacktrace.js.map +0 -1
  579. package/dist/tmp-dir.d.ts.map +0 -1
  580. package/dist/tmp-dir.js.map +0 -1
  581. package/dist/types.d.ts.map +0 -1
  582. package/dist/types.js.map +0 -1
  583. package/dist/validate-even-dimensions-with-codec.d.ts.map +0 -1
  584. package/dist/validate-even-dimensions-with-codec.js.map +0 -1
  585. package/dist/validate-ffmpeg.d.ts.map +0 -1
  586. package/dist/validate-ffmpeg.js.map +0 -1
  587. package/dist/validate-frame.d.ts +0 -1
  588. package/dist/validate-frame.js +0 -24
  589. package/dist/validate-puppeteer-timeout.d.ts.map +0 -1
  590. package/dist/validate-puppeteer-timeout.js.map +0 -1
  591. package/dist/validate-scale.d.ts.map +0 -1
  592. package/dist/validate-scale.js.map +0 -1
  593. package/tsconfig.json +0 -10
  594. 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
- exports.stitchFramesToVideo = exports.spawnFfmpeg = void 0;
7
- const execa_1 = __importDefault(require("execa"));
8
- const fs_1 = __importDefault(require("fs"));
9
- const promises_1 = require("fs/promises");
10
- const path_1 = __importDefault(require("path"));
29
+ exports.stitchFramesToVideo = void 0;
30
+ const node_fs_1 = __importStar(require("node:fs"));
31
+ const node_path_1 = __importDefault(require("node:path"));
11
32
  const remotion_1 = require("remotion");
12
33
  const calculate_asset_positions_1 = require("./assets/calculate-asset-positions");
13
34
  const convert_assets_to_file_urls_1 = require("./assets/convert-assets-to-file-urls");
14
35
  const download_and_map_assets_to_file_1 = require("./assets/download-and-map-assets-to-file");
36
+ const audio_codec_1 = require("./audio-codec");
37
+ const call_ffmpeg_1 = require("./call-ffmpeg");
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 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 logger_1 = require("./logger");
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
- const validate_ffmpeg_1 = require("./validate-ffmpeg");
31
- const packageJsonPath = path_1.default.join(__dirname, '..', 'package.json');
32
- const packageJson = fs_1.default.existsSync(packageJsonPath)
33
- ? JSON.parse(fs_1.default.readFileSync(packageJsonPath, 'utf-8'))
57
+ const validate_videobitrate_1 = require("./validate-videobitrate");
58
+ const packageJsonPath = node_path_1.default.join(__dirname, '..', 'package.json');
59
+ const packageJson = node_fs_1.default.existsSync(packageJsonPath)
60
+ ? JSON.parse(node_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, onProgress, downloadMap, remotionRoot, indent, }) => {
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),
@@ -40,18 +67,14 @@ const getAssetsData = async ({ assets, onDownload, fps, expectedFrames, verbose,
40
67
  });
41
68
  (0, download_and_map_assets_to_file_1.markAllAssetsAsDownloaded)(downloadMap);
42
69
  const assetPositions = (0, calculate_asset_positions_1.calculateAssetPositions)(fileUrlAssets);
43
- if (verbose) {
44
- console.log('asset positions', assetPositions);
45
- }
70
+ logger_1.Log.verboseAdvanced({ indent, logLevel: verbose ? 'verbose' : 'info', tag: 'audio' }, 'asset positions', JSON.stringify(assetPositions));
46
71
  const preprocessProgress = new Array(assetPositions.length).fill(0);
47
72
  const updateProgress = () => {
48
73
  onProgress(preprocessProgress.reduce((a, b) => a + b, 0) / assetPositions.length);
49
74
  };
50
75
  const preprocessed = (await Promise.all(assetPositions.map(async (asset, index) => {
51
- const filterFile = path_1.default.join(downloadMap.audioMixing, `${index}.wav`);
76
+ const filterFile = node_path_1.default.join(downloadMap.audioMixing, `${index}.wav`);
52
77
  const result = await (0, preprocess_audio_track_1.preprocessAudioTrack)({
53
- ffmpegExecutable: ffmpegExecutable !== null && ffmpegExecutable !== void 0 ? ffmpegExecutable : null,
54
- ffprobeExecutable: ffprobeExecutable !== null && ffprobeExecutable !== void 0 ? ffprobeExecutable : null,
55
78
  outName: filterFile,
56
79
  asset,
57
80
  expectedFrames,
@@ -62,23 +85,23 @@ const getAssetsData = async ({ assets, onDownload, fps, expectedFrames, verbose,
62
85
  updateProgress();
63
86
  return result;
64
87
  }))).filter(truthy_1.truthy);
65
- const outName = path_1.default.join(downloadMap.audioPreprocessing, `audio.wav`);
88
+ const outName = node_path_1.default.join(downloadMap.audioPreprocessing, `audio.wav`);
66
89
  await (0, merge_audio_track_1.mergeAudioTrack)({
67
- ffmpegExecutable: ffmpegExecutable !== null && ffmpegExecutable !== void 0 ? ffmpegExecutable : null,
68
90
  files: preprocessed,
69
91
  outName,
70
92
  numberOfSeconds: Number((expectedFrames / fps).toFixed(3)),
71
93
  downloadMap,
94
+ remotionRoot,
72
95
  });
73
- (0, delete_directory_1.deleteDirectory)(downloadMap.audioMixing);
74
96
  onProgress(1);
97
+ (0, delete_directory_1.deleteDirectory)(downloadMap.audioMixing);
75
98
  preprocessed.forEach((p) => {
76
- (0, delete_directory_1.deleteDirectory)(p);
99
+ (0, delete_directory_1.deleteDirectory)(p.outName);
77
100
  });
78
101
  return outName;
79
102
  };
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;
103
+ const spawnFfmpeg = async (options, remotionRoot) => {
104
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12;
82
105
  remotion_1.Internals.validateDimension(options.height, 'height', 'passed to `stitchFramesToVideo()`');
83
106
  remotion_1.Internals.validateDimension(options.width, 'width', 'passed to `stitchFramesToVideo()`');
84
107
  const codec = (_a = options.codec) !== null && _a !== void 0 ? _a : codec_1.DEFAULT_CODEC;
@@ -88,31 +111,72 @@ const spawnFfmpeg = async (options) => {
88
111
  codec,
89
112
  scale: 1,
90
113
  });
114
+ (0, prores_profile_1.validateSelectedCodecAndProResCombination)({
115
+ codec,
116
+ proResProfile: options.proResProfile,
117
+ });
118
+ (0, validate_videobitrate_1.validateBitrate)(options.audioBitrate, 'audioBitrate');
119
+ (0, validate_videobitrate_1.validateBitrate)(options.videoBitrate, 'videoBitrate');
91
120
  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);
121
+ const pixelFormat = (_b = options.pixelFormat) !== null && _b !== void 0 ? _b : pixel_format_1.DEFAULT_PIXEL_FORMAT;
95
122
  const encoderName = (0, get_codec_name_1.getCodecName)(codec);
96
- const audioCodecName = (0, get_audio_codec_name_1.getAudioCodecName)(codec);
97
123
  const proResProfileName = (0, get_prores_profile_name_1.getProResProfileName)(codec, options.proResProfile);
98
124
  const mediaSupport = (0, codec_supports_media_1.codecSupportsMedia)(codec);
99
- const supportsCrf = encoderName && codec !== 'prores';
125
+ const shouldRenderAudio = mediaSupport.audio &&
126
+ (options.assetsInfo.assets.flat(1).length > 0 ||
127
+ options.enforceAudioTrack) &&
128
+ !options.muted;
129
+ const shouldRenderVideo = mediaSupport.video;
130
+ if (!shouldRenderAudio && !shouldRenderVideo) {
131
+ 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.');
132
+ }
133
+ // Explanation: https://github.com/remotion-dev/remotion/issues/1647
134
+ const resolvedAudioCodec = ((_c = options.internalOptions) === null || _c === void 0 ? void 0 : _c.preferLossless)
135
+ ? (0, audio_codec_1.getDefaultAudioCodec)({ codec, preferLossless: true })
136
+ : (_d = options.audioCodec) !== null && _d !== void 0 ? _d : (0, audio_codec_1.getDefaultAudioCodec)({ codec, preferLossless: false });
100
137
  const tempFile = options.outputLocation
101
138
  ? null
102
- : path_1.default.join(options.assetsInfo.downloadMap.stitchFrames, `out.${(0, get_extension_from_codec_1.getFileExtensionFromCodec)(codec, 'final')}`);
103
- if (options.verbose) {
104
- console.log('[verbose] ffmpeg', (_e = options.ffmpegExecutable) !== null && _e !== void 0 ? _e : 'ffmpeg in PATH');
105
- console.log('[verbose] encoder', encoderName);
106
- console.log('[verbose] audioCodec', audioCodecName);
107
- console.log('[verbose] pixelFormat', pixelFormat);
108
- if (supportsCrf) {
109
- console.log('[verbose] crf', crf);
110
- }
111
- console.log('[verbose] codec', codec);
112
- console.log('[verbose] isAudioOnly', mediaSupport.audio && !mediaSupport.video);
113
- console.log('[verbose] proResProfileName', proResProfileName);
114
- }
115
- (0, crf_1.validateSelectedCrfAndCodecCombination)(crf, codec);
139
+ : node_path_1.default.join(options.assetsInfo.downloadMap.stitchFrames, `out.${(0, get_extension_from_codec_1.getFileExtensionFromCodec)(codec, resolvedAudioCodec)}`);
140
+ logger_1.Log.verboseAdvanced({
141
+ indent: (_f = (_e = options.internalOptions) === null || _e === void 0 ? void 0 : _e.indent) !== null && _f !== void 0 ? _f : false,
142
+ logLevel: options.verbose ? 'verbose' : 'info',
143
+ tag: 'encoder',
144
+ }, 'encoder', encoderName);
145
+ logger_1.Log.verboseAdvanced({
146
+ indent: (_h = (_g = options.internalOptions) === null || _g === void 0 ? void 0 : _g.indent) !== null && _h !== void 0 ? _h : false,
147
+ logLevel: options.verbose ? 'verbose' : 'info',
148
+ tag: 'encoder',
149
+ }, 'audioCodec', resolvedAudioCodec);
150
+ logger_1.Log.verboseAdvanced({
151
+ indent: (_k = (_j = options.internalOptions) === null || _j === void 0 ? void 0 : _j.indent) !== null && _k !== void 0 ? _k : false,
152
+ logLevel: options.verbose ? 'verbose' : 'info',
153
+ tag: 'encoder',
154
+ }, 'pixelFormat', pixelFormat);
155
+ logger_1.Log.verboseAdvanced({
156
+ indent: (_m = (_l = options.internalOptions) === null || _l === void 0 ? void 0 : _l.indent) !== null && _m !== void 0 ? _m : false,
157
+ logLevel: options.verbose ? 'verbose' : 'info',
158
+ tag: 'encoder',
159
+ }, 'codec', codec);
160
+ logger_1.Log.verboseAdvanced({
161
+ indent: (_p = (_o = options.internalOptions) === null || _o === void 0 ? void 0 : _o.indent) !== null && _p !== void 0 ? _p : false,
162
+ logLevel: options.verbose ? 'verbose' : 'info',
163
+ tag: 'encoder',
164
+ }, 'shouldRenderAudio', shouldRenderAudio);
165
+ logger_1.Log.verboseAdvanced({
166
+ indent: (_r = (_q = options.internalOptions) === null || _q === void 0 ? void 0 : _q.indent) !== null && _r !== void 0 ? _r : false,
167
+ logLevel: options.verbose ? 'verbose' : 'info',
168
+ tag: 'encoder',
169
+ }, 'shouldRenderVideo', shouldRenderVideo);
170
+ logger_1.Log.verboseAdvanced({
171
+ indent: (_t = (_s = options.internalOptions) === null || _s === void 0 ? void 0 : _s.indent) !== null && _t !== void 0 ? _t : false,
172
+ logLevel: options.verbose ? 'verbose' : 'info',
173
+ tag: 'encoder',
174
+ }, 'proResProfileName', proResProfileName);
175
+ (0, crf_1.validateQualitySettings)({
176
+ crf: options.crf,
177
+ codec,
178
+ videoBitrate: options.videoBitrate,
179
+ });
116
180
  (0, pixel_format_1.validateSelectedPixelFormatAndCodecCombination)(pixelFormat, codec);
117
181
  const expectedFrames = options.assetsInfo.assets.length;
118
182
  const updateProgress = (preStitchProgress, muxProgress) => {
@@ -120,45 +184,46 @@ const spawnFfmpeg = async (options) => {
120
184
  const totalFrameProgress = 0.5 * preStitchProgress * expectedFrames + muxProgress * 0.5;
121
185
  (_a = options.onProgress) === null || _a === void 0 ? void 0 : _a.call(options, Math.round(totalFrameProgress));
122
186
  };
123
- const audio = mediaSupport.audio
187
+ const audio = shouldRenderAudio
124
188
  ? await getAssetsData({
125
189
  assets: options.assetsInfo.assets,
126
190
  onDownload: options.onDownload,
127
191
  fps: options.fps,
128
192
  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,
193
+ verbose: (_u = options.verbose) !== null && _u !== void 0 ? _u : false,
132
194
  onProgress: (prog) => updateProgress(prog, 0),
133
195
  downloadMap: options.assetsInfo.downloadMap,
196
+ remotionRoot,
197
+ indent: (_w = (_v = options.internalOptions) === null || _v === void 0 ? void 0 : _v.indent) !== null && _w !== void 0 ? _w : false,
134
198
  })
135
199
  : null;
136
200
  if (mediaSupport.audio && !mediaSupport.video) {
137
- if (!audioCodecName) {
201
+ if (!resolvedAudioCodec) {
138
202
  throw new TypeError('exporting audio but has no audio codec name. Report this in the Remotion repo.');
139
203
  }
140
- const ffmpegTask = (0, execa_1.default)('ffmpeg', [
204
+ const ffmpegTask = (0, call_ffmpeg_1.callFf)('ffmpeg', [
141
205
  '-i',
142
206
  audio,
143
207
  '-c:a',
144
- audioCodecName,
208
+ (0, audio_codec_1.mapAudioCodecToFfmpegAudioCodecName)(resolvedAudioCodec),
145
209
  // Set bitrate up to 320k, for aac it might effectively be lower
146
210
  '-b:a',
147
- '320k',
211
+ (_x = options.audioBitrate) !== null && _x !== void 0 ? _x : '320k',
148
212
  options.force ? '-y' : null,
149
- (_j = options.outputLocation) !== null && _j !== void 0 ? _j : tempFile,
213
+ (_y = options.outputLocation) !== null && _y !== void 0 ? _y : tempFile,
150
214
  ].filter(remotion_1.Internals.truthy));
151
- (_k = options.cancelSignal) === null || _k === void 0 ? void 0 : _k.call(options, () => {
215
+ (_z = options.cancelSignal) === null || _z === void 0 ? void 0 : _z.call(options, () => {
152
216
  ffmpegTask.kill();
153
217
  });
154
218
  await ffmpegTask;
155
- (_l = options.onProgress) === null || _l === void 0 ? void 0 : _l.call(options, expectedFrames);
219
+ (_0 = options.onProgress) === null || _0 === void 0 ? void 0 : _0.call(options, expectedFrames);
156
220
  if (audio) {
157
- await (0, delete_directory_1.deleteDirectory)(path_1.default.dirname(audio));
221
+ (0, delete_directory_1.deleteDirectory)(node_path_1.default.dirname(audio));
158
222
  }
159
223
  const file = await new Promise((resolve, reject) => {
160
224
  if (tempFile) {
161
- (0, promises_1.readFile)(tempFile)
225
+ node_fs_1.promises
226
+ .readFile(tempFile)
162
227
  .then((f) => {
163
228
  return resolve(f);
164
229
  })
@@ -168,47 +233,52 @@ const spawnFfmpeg = async (options) => {
168
233
  resolve(null);
169
234
  }
170
235
  });
171
- await (0, delete_directory_1.deleteDirectory)(options.assetsInfo.downloadMap.stitchFrames);
236
+ (0, delete_directory_1.deleteDirectory)(options.assetsInfo.downloadMap.stitchFrames);
172
237
  return {
173
238
  getLogs: () => '',
174
239
  task: Promise.resolve(file),
175
240
  };
176
241
  }
177
242
  const ffmpegArgs = [
178
- ['-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]]
243
+ ...(((_1 = options.internalOptions) === null || _1 === void 0 ? void 0 : _1.preEncodedFileLocation)
244
+ ? [['-i', (_2 = options.internalOptions) === null || _2 === void 0 ? void 0 : _2.preEncodedFileLocation]]
181
245
  : [
246
+ ['-r', String(options.fps)],
182
247
  ['-f', 'image2'],
183
248
  ['-s', `${options.width}x${options.height}`],
184
249
  ['-start_number', String(options.assetsInfo.firstFrameIndex)],
185
250
  ['-i', options.assetsInfo.imageSequenceName],
186
251
  ]),
187
252
  audio ? ['-i', audio] : null,
188
- ((_p = options.numberOfGifLoops) !== null && _p !== void 0 ? _p : null) === null
253
+ ((_3 = options.numberOfGifLoops) !== null && _3 !== void 0 ? _3 : null) === null
189
254
  ? null
190
255
  : [
191
256
  '-loop',
192
- (0, convert_number_of_gif_loops_to_ffmpeg_1.convertNumberOfGifLoopsToFfmpegSyntax)((_q = options.numberOfGifLoops) !== null && _q !== void 0 ? _q : null),
257
+ (0, convert_number_of_gif_loops_to_ffmpeg_1.convertNumberOfGifLoopsToFfmpegSyntax)((_4 = options.numberOfGifLoops) !== null && _4 !== void 0 ? _4 : null),
193
258
  ],
194
259
  // -c:v is the same as -vcodec as -codec:video
195
260
  // and specified the video codec.
196
261
  ['-c:v', encoderName],
197
- ...(((_r = options.internalOptions) === null || _r === void 0 ? void 0 : _r.preEncodedFileLocation)
262
+ ...(((_5 = options.internalOptions) === null || _5 === void 0 ? void 0 : _5.preEncodedFileLocation)
198
263
  ? []
199
264
  : [
200
265
  proResProfileName ? ['-profile:v', proResProfileName] : null,
201
- supportsCrf ? ['-crf', String(crf)] : null,
202
266
  ['-pix_fmt', pixelFormat],
203
267
  // Without explicitly disabling auto-alt-ref,
204
268
  // transparent WebM generation doesn't work
205
269
  pixelFormat === 'yuva420p' ? ['-auto-alt-ref', '0'] : null,
206
- ['-b:v', '1M'],
270
+ ...(0, crf_1.validateQualitySettings)({
271
+ crf: options.crf,
272
+ videoBitrate: options.videoBitrate,
273
+ codec,
274
+ }),
207
275
  ]),
208
276
  codec === 'h264' ? ['-movflags', 'faststart'] : null,
209
- audioCodecName ? ['-c:a', audioCodecName] : null,
277
+ resolvedAudioCodec
278
+ ? ['-c:a', (0, audio_codec_1.mapAudioCodecToFfmpegAudioCodecName)(resolvedAudioCodec)]
279
+ : null,
210
280
  // Set max bitrate up to 1024kbps, will choose lower if that's too much
211
- audioCodecName ? ['-b:a', '512K'] : null,
281
+ resolvedAudioCodec ? ['-b:a', options.audioBitrate || '512K'] : null,
212
282
  // Ignore metadata that may come from remote media
213
283
  ['-map_metadata', '-1'],
214
284
  [
@@ -217,22 +287,31 @@ const spawnFfmpeg = async (options) => {
217
287
  [`Made with Remotion`, packageJson ? packageJson.version : null].join(' '),
218
288
  ],
219
289
  options.force ? '-y' : null,
220
- (_s = options.outputLocation) !== null && _s !== void 0 ? _s : tempFile,
290
+ (_6 = options.outputLocation) !== null && _6 !== void 0 ? _6 : tempFile,
221
291
  ];
222
- if (options.verbose) {
223
- console.log('Generated FFMPEG command:');
224
- console.log(ffmpegArgs);
225
- }
226
292
  const ffmpegString = ffmpegArgs.flat(2).filter(Boolean);
227
- const task = (0, execa_1.default)((_t = options.ffmpegExecutable) !== null && _t !== void 0 ? _t : 'ffmpeg', ffmpegString, {
293
+ const finalFfmpegString = options.ffmpegOverride
294
+ ? options.ffmpegOverride({ type: 'stitcher', args: ffmpegString })
295
+ : ffmpegString;
296
+ logger_1.Log.verboseAdvanced({
297
+ indent: (_8 = (_7 = options.internalOptions) === null || _7 === void 0 ? void 0 : _7.indent) !== null && _8 !== void 0 ? _8 : false,
298
+ logLevel: options.verbose ? 'verbose' : 'info',
299
+ tag: 'encoder',
300
+ }, 'Generated final FFMPEG command:');
301
+ logger_1.Log.verboseAdvanced({
302
+ indent: (_10 = (_9 = options.internalOptions) === null || _9 === void 0 ? void 0 : _9.indent) !== null && _10 !== void 0 ? _10 : false,
303
+ logLevel: options.verbose ? 'verbose' : 'info',
304
+ tag: 'encoder',
305
+ }, finalFfmpegString.join(' '));
306
+ const task = (0, call_ffmpeg_1.callFf)('ffmpeg', finalFfmpegString, {
228
307
  cwd: options.dir,
229
308
  });
230
- (_u = options.cancelSignal) === null || _u === void 0 ? void 0 : _u.call(options, () => {
309
+ (_11 = options.cancelSignal) === null || _11 === void 0 ? void 0 : _11.call(options, () => {
231
310
  task.kill();
232
311
  });
233
312
  let ffmpegOutput = '';
234
313
  let isFinished = false;
235
- (_v = task.stderr) === null || _v === void 0 ? void 0 : _v.on('data', (data) => {
314
+ (_12 = task.stderr) === null || _12 === void 0 ? void 0 : _12.on('data', (data) => {
236
315
  var _a;
237
316
  const str = data.toString();
238
317
  ffmpegOutput += str;
@@ -261,11 +340,12 @@ const spawnFfmpeg = async (options) => {
261
340
  (0, delete_directory_1.deleteDirectory)(options.assetsInfo.downloadMap.stitchFrames);
262
341
  return null;
263
342
  }
264
- return (0, promises_1.readFile)(tempFile)
343
+ return node_fs_1.promises
344
+ .readFile(tempFile)
265
345
  .then((file) => {
266
346
  return Promise.all([
267
347
  file,
268
- (0, delete_directory_1.deleteDirectory)(path_1.default.dirname(tempFile)),
348
+ (0, delete_directory_1.deleteDirectory)(node_path_1.default.dirname(tempFile)),
269
349
  (0, delete_directory_1.deleteDirectory)(options.assetsInfo.downloadMap.stitchFrames),
270
350
  ]);
271
351
  })
@@ -274,18 +354,24 @@ const spawnFfmpeg = async (options) => {
274
354
  getLogs: () => ffmpegOutput,
275
355
  };
276
356
  };
277
- exports.spawnFfmpeg = spawnFfmpeg;
357
+ /**
358
+ * @description Takes a series of images and audio information generated by renderFrames() and encodes it to a video.
359
+ * @see [Documentation](https://www.remotion.dev/docs/renderer/stitch-frames-to-video)
360
+ */
278
361
  const stitchFramesToVideo = async (options) => {
279
- const { task, getLogs } = await (0, exports.spawnFfmpeg)(options);
362
+ var _a, _b;
363
+ const remotionRoot = (0, find_closest_package_json_1.findRemotionRoot)();
364
+ const { task, getLogs } = await spawnFfmpeg(options, remotionRoot);
280
365
  const happyPath = task.catch(() => {
281
366
  throw new Error(getLogs());
282
367
  });
368
+ (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
369
  return Promise.race([
284
370
  happyPath,
285
371
  new Promise((_resolve, reject) => {
286
372
  var _a;
287
373
  (_a = options.cancelSignal) === null || _a === void 0 ? void 0 : _a.call(options, () => {
288
- reject(new Error('stitchFramesToVideo() got cancelled'));
374
+ reject(new Error(make_cancel_signal_1.cancelErrorMessages.stitchFramesToVideo));
289
375
  });
290
376
  }),
291
377
  ]);
@@ -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,22 @@
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 { Compositor } from './compositor/compositor';
6
+ import type { StillImageFormat, VideoImageFormat } from './image-format';
7
+ export declare const takeFrameAndCompose: ({ freePage, imageFormat, jpegQuality, frame, width, height, output, scale, downloadMap, wantsBuffer, compositor, }: {
8
+ freePage: Page;
9
+ imageFormat: VideoImageFormat | StillImageFormat;
10
+ jpegQuality: number | undefined;
11
+ frame: number;
12
+ height: number;
13
+ width: number;
14
+ output: string | null;
15
+ scale: number;
16
+ downloadMap: DownloadMap;
17
+ wantsBuffer: boolean;
18
+ compositor: Compositor;
19
+ }) => Promise<{
20
+ buffer: Buffer | null;
21
+ collectedAssets: TAsset[];
22
+ }>;