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

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 (585) 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 +60 -11
  13. package/dist/assets/download-file.d.ts +7 -5
  14. package/dist/assets/download-file.js +49 -6
  15. package/dist/assets/download-map.d.ts +5 -26
  16. package/dist/assets/download-map.js +8 -9
  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 +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 +28 -0
  38. package/dist/audio-codec.js +83 -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 +15 -63
  44. package/dist/browser/BrowserFetcher.js +145 -231
  45. package/dist/browser/BrowserPage.d.ts +8 -2
  46. package/dist/browser/BrowserPage.js +8 -11
  47. package/dist/browser/BrowserRunner.d.ts +1 -4
  48. package/dist/browser/BrowserRunner.js +38 -75
  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 +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 -4
  72. package/dist/browser/LaunchOptions.js +0 -0
  73. package/dist/browser/Launcher.d.ts +7 -1
  74. package/dist/browser/Launcher.js +13 -375
  75. package/dist/browser/LifecycleWatcher.d.ts +0 -0
  76. package/dist/browser/LifecycleWatcher.js +0 -0
  77. package/dist/browser/NetworkEventManager.d.ts +0 -0
  78. package/dist/browser/NetworkEventManager.js +0 -0
  79. package/dist/browser/NetworkManager.d.ts +0 -0
  80. package/dist/browser/NetworkManager.js +0 -0
  81. package/dist/browser/NodeWebSocketTransport.d.ts +0 -0
  82. package/dist/browser/NodeWebSocketTransport.js +1 -1
  83. package/dist/browser/Product.d.ts +0 -0
  84. package/dist/browser/Product.js +0 -0
  85. package/dist/browser/PuppeteerNode.d.ts +0 -3
  86. package/dist/browser/PuppeteerNode.js +2 -14
  87. package/dist/browser/PuppeteerViewport.d.ts +0 -0
  88. package/dist/browser/PuppeteerViewport.js +0 -0
  89. package/dist/browser/ScreenshotOptions.d.ts +0 -14
  90. package/dist/browser/ScreenshotOptions.js +0 -1
  91. package/dist/browser/Target.d.ts +0 -0
  92. package/dist/browser/Target.js +0 -0
  93. package/dist/browser/TaskQueue.d.ts +0 -0
  94. package/dist/browser/TaskQueue.js +0 -0
  95. package/dist/browser/TimeoutSettings.d.ts +0 -0
  96. package/dist/browser/TimeoutSettings.js +0 -0
  97. package/dist/browser/assert.d.ts +0 -0
  98. package/dist/browser/assert.js +0 -0
  99. package/dist/browser/create-browser-fetcher.d.ts +0 -0
  100. package/dist/browser/create-browser-fetcher.js +34 -90
  101. package/dist/browser/devtools-commands.d.ts +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 +0 -0
  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 +0 -0
  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 +37 -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/check-apple-silicon.d.ts +1 -0
  132. package/dist/check-apple-silicon.js +12 -0
  133. package/dist/chunk.d.ts +0 -0
  134. package/dist/chunk.js +0 -0
  135. package/dist/client.d.ts +204 -0
  136. package/dist/client.js +49 -0
  137. package/dist/codec-supports-media.d.ts +2 -0
  138. package/dist/codec-supports-media.js +23 -1
  139. package/dist/codec.d.ts +0 -0
  140. package/dist/codec.js +0 -0
  141. package/dist/combine-videos.d.ts +6 -2
  142. package/dist/combine-videos.js +14 -14
  143. package/dist/compositor/compose.d.ts +15 -0
  144. package/dist/compositor/compose.js +67 -0
  145. package/dist/compositor/compositor.d.ts +12 -0
  146. package/dist/compositor/compositor.js +202 -0
  147. package/dist/compositor/get-executable-path.d.ts +1 -0
  148. package/dist/compositor/get-executable-path.js +66 -0
  149. package/dist/compositor/make-nonce.d.ts +1 -0
  150. package/dist/compositor/make-nonce.js +8 -0
  151. package/dist/compositor/payloads.d.ts +68 -0
  152. package/dist/compositor/payloads.js +2 -0
  153. package/dist/compress-assets.d.ts +0 -0
  154. package/dist/compress-assets.js +0 -0
  155. package/dist/convert-number-of-gif-loops-to-ffmpeg.d.ts +0 -0
  156. package/dist/convert-number-of-gif-loops-to-ffmpeg.js +0 -0
  157. package/dist/convert-to-positive-frame-index.d.ts +4 -0
  158. package/dist/convert-to-positive-frame-index.js +8 -0
  159. package/dist/create-ffmpeg-complex-filter.d.ts +5 -1
  160. package/dist/create-ffmpeg-complex-filter.js +6 -4
  161. package/dist/create-ffmpeg-merge-filter.d.ts +5 -1
  162. package/dist/create-ffmpeg-merge-filter.js +21 -13
  163. package/dist/create-silent-audio.d.ts +1 -3
  164. package/dist/create-silent-audio.js +3 -6
  165. package/dist/crf.d.ts +5 -1
  166. package/dist/crf.js +41 -8
  167. package/dist/cycle-browser-tabs.d.ts +2 -5
  168. package/dist/cycle-browser-tabs.js +5 -5
  169. package/dist/delay-render-embedded-stack.d.ts +0 -0
  170. package/dist/delay-render-embedded-stack.js +0 -0
  171. package/dist/delete-directory.d.ts +1 -1
  172. package/dist/delete-directory.js +43 -17
  173. package/dist/determine-resize-params.d.ts +1 -0
  174. package/dist/determine-resize-params.js +10 -0
  175. package/dist/determine-vcodec-ffmpeg-flags.d.ts +2 -0
  176. package/dist/determine-vcodec-ffmpeg-flags.js +13 -0
  177. package/dist/does-have-m2-bug.d.ts +3 -0
  178. package/dist/does-have-m2-bug.js +12 -0
  179. package/dist/ensure-ffmpeg.d.ts +18 -0
  180. package/dist/ensure-ffmpeg.js +58 -0
  181. package/dist/ensure-frames-in-order.d.ts +0 -0
  182. package/dist/ensure-frames-in-order.js +0 -0
  183. package/dist/ensure-output-directory.d.ts +0 -0
  184. package/dist/ensure-output-directory.js +0 -0
  185. package/dist/ensure-presentation-timestamp.d.ts +14 -1
  186. package/dist/ensure-presentation-timestamp.js +36 -17
  187. package/dist/error-handling/handle-javascript-exception.d.ts +0 -0
  188. package/dist/error-handling/handle-javascript-exception.js +10 -0
  189. package/dist/error-handling/symbolicate-error.d.ts +0 -0
  190. package/dist/error-handling/symbolicate-error.js +2 -1
  191. package/dist/error-handling/symbolicateable-error.d.ts +0 -0
  192. package/dist/error-handling/symbolicateable-error.js +0 -0
  193. package/dist/extract-frame-from-video.d.ts +2 -0
  194. package/dist/extract-frame-from-video.js +47 -110
  195. package/dist/ffmpeg-executable.d.ts +0 -0
  196. package/dist/ffmpeg-executable.js +0 -0
  197. package/dist/ffmpeg-filter-file.d.ts +6 -1
  198. package/dist/ffmpeg-filter-file.js +36 -4
  199. package/dist/ffmpeg-flags.d.ts +20 -2
  200. package/dist/ffmpeg-flags.js +205 -9
  201. package/dist/ffmpeg-override.d.ts +4 -0
  202. package/dist/ffmpeg-override.js +2 -0
  203. package/dist/file-extensions.d.ts +14 -0
  204. package/dist/file-extensions.js +76 -0
  205. package/dist/find-closest-package-json.d.ts +2 -0
  206. package/dist/find-closest-package-json.js +31 -0
  207. package/dist/frame-range.d.ts +0 -0
  208. package/dist/frame-range.js +0 -0
  209. package/dist/frame-to-ffmpeg-timestamp.d.ts +0 -0
  210. package/dist/frame-to-ffmpeg-timestamp.js +0 -0
  211. package/dist/get-browser-instance.d.ts +0 -0
  212. package/dist/get-browser-instance.js +1 -1
  213. package/dist/get-can-extract-frames-fast.d.ts +14 -0
  214. package/dist/get-can-extract-frames-fast.js +71 -0
  215. package/dist/get-codec-name.d.ts +0 -0
  216. package/dist/get-codec-name.js +0 -0
  217. package/dist/get-compositions.d.ts +7 -5
  218. package/dist/get-compositions.js +23 -7
  219. package/dist/get-concurrency.d.ts +1 -1
  220. package/dist/get-concurrency.js +8 -1
  221. package/dist/get-duration-from-frame-range.d.ts +0 -0
  222. package/dist/get-duration-from-frame-range.js +0 -0
  223. package/dist/get-extension-from-codec.d.ts +5 -1
  224. package/dist/get-extension-from-codec.js +56 -32
  225. package/dist/get-extension-of-filename.d.ts +0 -0
  226. package/dist/get-extension-of-filename.js +5 -1
  227. package/dist/get-frame-of-video-slow.d.ts +15 -0
  228. package/dist/get-frame-of-video-slow.js +72 -0
  229. package/dist/get-frame-padded-index.d.ts +2 -1
  230. package/dist/get-frame-padded-index.js +3 -2
  231. package/dist/get-frame-to-render.d.ts +0 -0
  232. package/dist/get-frame-to-render.js +1 -1
  233. package/dist/get-local-browser-executable.d.ts +0 -0
  234. package/dist/get-local-browser-executable.js +4 -14
  235. package/dist/get-port.d.ts +4 -1
  236. package/dist/get-port.js +8 -8
  237. package/dist/get-prores-profile-name.d.ts +0 -0
  238. package/dist/get-prores-profile-name.js +0 -0
  239. package/dist/get-video-info.d.ts +6 -1
  240. package/dist/get-video-info.js +19 -9
  241. package/dist/get-video-threads-flag.d.ts +0 -0
  242. package/dist/get-video-threads-flag.js +0 -0
  243. package/dist/guess-extension-for-media.d.ts +3 -1
  244. package/dist/guess-extension-for-media.js +5 -8
  245. package/dist/image-format.d.ts +12 -6
  246. package/dist/image-format.js +19 -13
  247. package/dist/index.d.ts +201 -48
  248. package/dist/index.js +37 -36
  249. package/dist/is-audio-codec.d.ts +0 -0
  250. package/dist/is-audio-codec.js +0 -0
  251. package/dist/is-beyond-last-frame.d.ts +0 -0
  252. package/dist/is-beyond-last-frame.js +0 -0
  253. package/dist/is-serve-url.d.ts +0 -0
  254. package/dist/is-serve-url.js +0 -0
  255. package/dist/jpeg-quality.d.ts +1 -0
  256. package/dist/jpeg-quality.js +21 -0
  257. package/dist/last-frame-from-video-cache.d.ts +2 -0
  258. package/dist/last-frame-from-video-cache.js +0 -0
  259. package/dist/legacy-webpack-config.d.ts +0 -0
  260. package/dist/legacy-webpack-config.js +0 -0
  261. package/dist/locks.d.ts +7 -0
  262. package/dist/locks.js +44 -0
  263. package/dist/log-level.d.ts +0 -0
  264. package/dist/log-level.js +0 -0
  265. package/dist/make-cancel-signal.d.ts +11 -0
  266. package/dist/make-cancel-signal.js +24 -1
  267. package/dist/merge-audio-track.d.ts +3 -3
  268. package/dist/merge-audio-track.js +39 -33
  269. package/dist/mime-db.d.ts +0 -0
  270. package/dist/mime-db.js +0 -0
  271. package/dist/mime-types.d.ts +1 -0
  272. package/dist/mime-types.js +6 -1
  273. package/dist/normalize-serve-url.d.ts +0 -0
  274. package/dist/normalize-serve-url.js +0 -0
  275. package/dist/offthread-video-server.d.ts +8 -7
  276. package/dist/offthread-video-server.js +64 -45
  277. package/dist/open-browser.d.ts +6 -0
  278. package/dist/open-browser.js +16 -18
  279. package/dist/options/audio-bitrate.d.ts +2 -0
  280. package/dist/options/audio-bitrate.js +11 -0
  281. package/dist/options/crf.d.ts +2 -0
  282. package/dist/options/crf.js +11 -0
  283. package/dist/options/enforce-audio.d.ts +2 -0
  284. package/dist/options/enforce-audio.js +11 -0
  285. package/dist/options/jpeg-quality.d.ts +2 -0
  286. package/dist/options/jpeg-quality.js +11 -0
  287. package/dist/options/mute.d.ts +2 -0
  288. package/dist/options/mute.js +11 -0
  289. package/dist/options/option.d.ts +8 -0
  290. package/dist/options/option.js +2 -0
  291. package/dist/options/scale.d.ts +2 -0
  292. package/dist/options/scale.js +11 -0
  293. package/dist/options/video-bitrate.d.ts +2 -0
  294. package/dist/options/video-bitrate.js +11 -0
  295. package/dist/options/video-codec.d.ts +2 -0
  296. package/dist/options/video-codec.js +11 -0
  297. package/dist/overwrite.d.ts +0 -0
  298. package/dist/overwrite.js +0 -0
  299. package/dist/p-limit.d.ts +0 -0
  300. package/dist/p-limit.js +0 -0
  301. package/dist/parse-browser-error-stack.d.ts +0 -0
  302. package/dist/parse-browser-error-stack.js +0 -0
  303. package/dist/parse-ffmpeg-progress.d.ts +0 -0
  304. package/dist/parse-ffmpeg-progress.js +0 -0
  305. package/dist/perf.d.ts +1 -1
  306. package/dist/perf.js +9 -7
  307. package/dist/pixel-format.d.ts +1 -1
  308. package/dist/pixel-format.js +3 -0
  309. package/dist/pool.d.ts +0 -0
  310. package/dist/pool.js +0 -0
  311. package/dist/prepare-server.d.ts +5 -5
  312. package/dist/prepare-server.js +12 -7
  313. package/dist/preprocess-audio-track.d.ts +6 -4
  314. package/dist/preprocess-audio-track.js +7 -8
  315. package/dist/prespawn-ffmpeg.d.ts +9 -9
  316. package/dist/prespawn-ffmpeg.js +17 -17
  317. package/dist/prestitcher-memory-usage.d.ts +0 -4
  318. package/dist/prestitcher-memory-usage.js +2 -3
  319. package/dist/prores-profile.d.ts +5 -3
  320. package/dist/prores-profile.js +8 -8
  321. package/dist/provide-screenshot.d.ts +8 -5
  322. package/dist/provide-screenshot.js +5 -2
  323. package/dist/puppeteer-evaluate.d.ts +0 -0
  324. package/dist/puppeteer-evaluate.js +19 -11
  325. package/dist/puppeteer-screenshot.d.ts +12 -3
  326. package/dist/puppeteer-screenshot.js +18 -44
  327. package/dist/quality.d.ts +0 -0
  328. package/dist/quality.js +0 -0
  329. package/dist/redirect-status-codes.d.ts +1 -0
  330. package/dist/redirect-status-codes.js +6 -0
  331. package/dist/render-frames.d.ts +19 -19
  332. package/dist/render-frames.js +186 -105
  333. package/dist/render-media.d.ts +46 -16
  334. package/dist/render-media.js +128 -42
  335. package/dist/render-still.d.ts +17 -11
  336. package/dist/render-still.js +79 -43
  337. package/dist/replace-browser.d.ts +6 -0
  338. package/dist/replace-browser.js +47 -0
  339. package/dist/resolve-asset-src.d.ts +0 -0
  340. package/dist/resolve-asset-src.js +0 -0
  341. package/dist/sample-rate.d.ts +0 -0
  342. package/dist/sample-rate.js +0 -0
  343. package/dist/screenshot-dom-element.d.ts +8 -5
  344. package/dist/screenshot-dom-element.js +15 -4
  345. package/dist/screenshot-task.d.ts +11 -2
  346. package/dist/screenshot-task.js +43 -13
  347. package/dist/seek-to-frame.d.ts +1 -0
  348. package/dist/seek-to-frame.js +49 -3
  349. package/dist/serve-handler/index.d.ts +0 -0
  350. package/dist/serve-handler/index.js +6 -4
  351. package/dist/serve-handler/is-path-inside.d.ts +0 -0
  352. package/dist/serve-handler/is-path-inside.js +0 -0
  353. package/dist/serve-handler/range-parser.d.ts +0 -0
  354. package/dist/serve-handler/range-parser.js +0 -0
  355. package/dist/serve-static.d.ts +3 -3
  356. package/dist/serve-static.js +84 -44
  357. package/dist/set-props-and-env.d.ts +3 -1
  358. package/dist/set-props-and-env.js +39 -15
  359. package/dist/stitch-frames-to-video.d.ts +15 -12
  360. package/dist/stitch-frames-to-video.js +120 -57
  361. package/dist/stringify-ffmpeg-filter.d.ts +10 -2
  362. package/dist/stringify-ffmpeg-filter.js +37 -34
  363. package/dist/symbolicate-stacktrace.d.ts +0 -0
  364. package/dist/symbolicate-stacktrace.js +0 -0
  365. package/dist/take-frame-and-compose.d.ts +19 -0
  366. package/dist/take-frame-and-compose.js +102 -0
  367. package/dist/tmp-dir.d.ts +0 -0
  368. package/dist/tmp-dir.js +1 -2
  369. package/dist/truthy.d.ts +0 -0
  370. package/dist/truthy.js +0 -0
  371. package/dist/try-to-extract-frame-of-video-fast.d.ts +13 -0
  372. package/dist/try-to-extract-frame-of-video-fast.js +55 -0
  373. package/dist/types.d.ts +0 -0
  374. package/dist/types.js +0 -0
  375. package/dist/validate-concurrency.d.ts +2 -0
  376. package/dist/validate-concurrency.js +21 -10
  377. package/dist/validate-even-dimensions-with-codec.d.ts +0 -0
  378. package/dist/validate-even-dimensions-with-codec.js +0 -0
  379. package/dist/validate-every-nth-frame.d.ts +2 -1
  380. package/dist/validate-every-nth-frame.js +8 -1
  381. package/dist/validate-ffmpeg-override.d.ts +2 -0
  382. package/dist/validate-ffmpeg-override.js +12 -0
  383. package/dist/validate-ffmpeg.d.ts +7 -2
  384. package/dist/validate-ffmpeg.js +48 -43
  385. package/dist/validate-number-of-gif-loops.d.ts +2 -0
  386. package/dist/validate-number-of-gif-loops.js +24 -0
  387. package/dist/validate-opengl-renderer.d.ts +0 -0
  388. package/dist/validate-opengl-renderer.js +0 -0
  389. package/dist/validate-output-filename.d.ts +7 -2
  390. package/dist/validate-output-filename.js +20 -51
  391. package/dist/validate-puppeteer-timeout.d.ts +0 -0
  392. package/dist/validate-puppeteer-timeout.js +2 -1
  393. package/dist/validate-scale.d.ts +0 -0
  394. package/dist/validate-scale.js +0 -0
  395. package/dist/validate-videobitrate.d.ts +1 -0
  396. package/dist/validate-videobitrate.js +20 -0
  397. package/dist/wait-for-symbolication-error-to-be-done.d.ts +0 -0
  398. package/dist/wait-for-symbolication-error-to-be-done.js +5 -31
  399. package/dist/warn-about-ffmpeg-version.d.ts +5 -0
  400. package/dist/warn-about-ffmpeg-version.js +37 -0
  401. package/dist/ws/ws-types.d.ts +0 -0
  402. package/dist/ws/ws-types.js +2 -1
  403. package/install-toolchain.mjs +36 -0
  404. package/package.json +69 -60
  405. package/.prettierrc.js +0 -14
  406. package/dist/add-silent-audio-if-necessary.d.ts +0 -8
  407. package/dist/add-silent-audio-if-necessary.d.ts.map +0 -1
  408. package/dist/add-silent-audio-if-necessary.js +0 -51
  409. package/dist/add-silent-audio-if-necessary.js.map +0 -1
  410. package/dist/assets/asset-is-used-at-time.d.ts +0 -3
  411. package/dist/assets/asset-is-used-at-time.d.ts.map +0 -1
  412. package/dist/assets/asset-is-used-at-time.js +0 -8
  413. package/dist/assets/asset-is-used-at-time.js.map +0 -1
  414. package/dist/assets/calculate-asset-positions.d.ts.map +0 -1
  415. package/dist/assets/calculate-asset-positions.js.map +0 -1
  416. package/dist/assets/calculate-atempo.d.ts.map +0 -1
  417. package/dist/assets/calculate-atempo.js.map +0 -1
  418. package/dist/assets/convert-assets-to-file-urls.d.ts.map +0 -1
  419. package/dist/assets/convert-assets-to-file-urls.js.map +0 -1
  420. package/dist/assets/download-and-map-assets-to-file.d.ts.map +0 -1
  421. package/dist/assets/download-and-map-assets-to-file.js.map +0 -1
  422. package/dist/assets/download-file.d.ts.map +0 -1
  423. package/dist/assets/download-file.js.map +0 -1
  424. package/dist/assets/ffmpeg-volume-expression.d.ts.map +0 -1
  425. package/dist/assets/ffmpeg-volume-expression.js.map +0 -1
  426. package/dist/assets/flatten-volume-array.d.ts.map +0 -1
  427. package/dist/assets/flatten-volume-array.js.map +0 -1
  428. package/dist/assets/get-asset-audio-details.d.ts +0 -5
  429. package/dist/assets/get-asset-audio-details.d.ts.map +0 -1
  430. package/dist/assets/get-asset-audio-details.js +0 -21
  431. package/dist/assets/get-asset-audio-details.js.map +0 -1
  432. package/dist/assets/get-audio-channels.d.ts.map +0 -1
  433. package/dist/assets/get-audio-channels.js.map +0 -1
  434. package/dist/assets/get-simulatenous-assets.d.ts +0 -3
  435. package/dist/assets/get-simulatenous-assets.d.ts.map +0 -1
  436. package/dist/assets/get-simulatenous-assets.js +0 -14
  437. package/dist/assets/get-simulatenous-assets.js.map +0 -1
  438. package/dist/assets/read-file.d.ts.map +0 -1
  439. package/dist/assets/read-file.js.map +0 -1
  440. package/dist/assets/round-volume-to-avoid-stack-overflow.d.ts.map +0 -1
  441. package/dist/assets/round-volume-to-avoid-stack-overflow.js.map +0 -1
  442. package/dist/assets/sanitize-filename.d.ts.map +0 -1
  443. package/dist/assets/sanitize-filename.js.map +0 -1
  444. package/dist/assets/sanitize-filepath.d.ts.map +0 -1
  445. package/dist/assets/sanitize-filepath.js.map +0 -1
  446. package/dist/assets/split-assets-into-segments.d.ts +0 -6
  447. package/dist/assets/split-assets-into-segments.d.ts.map +0 -1
  448. package/dist/assets/split-assets-into-segments.js +0 -89
  449. package/dist/assets/split-assets-into-segments.js.map +0 -1
  450. package/dist/assets/truncate-utf8-bytes.d.ts.map +0 -1
  451. package/dist/assets/truncate-utf8-bytes.js.map +0 -1
  452. package/dist/assets/types.d.ts.map +0 -1
  453. package/dist/assets/types.js.map +0 -1
  454. package/dist/assets-to-ffmpeg-inputs.d.ts +0 -7
  455. package/dist/assets-to-ffmpeg-inputs.d.ts.map +0 -1
  456. package/dist/assets-to-ffmpeg-inputs.js +0 -15
  457. package/dist/assets-to-ffmpeg-inputs.js.map +0 -1
  458. package/dist/browser-log.d.ts.map +0 -1
  459. package/dist/browser-log.js.map +0 -1
  460. package/dist/calculate-ffmpeg-filters.d.ts.map +0 -1
  461. package/dist/calculate-ffmpeg-filters.js.map +0 -1
  462. package/dist/can-use-parallel-encoding.d.ts.map +0 -1
  463. package/dist/can-use-parallel-encoding.js.map +0 -1
  464. package/dist/combine-videos.d.ts.map +0 -1
  465. package/dist/combine-videos.js.map +0 -1
  466. package/dist/convert-to-pcm.d.ts +0 -6
  467. package/dist/convert-to-pcm.js +0 -20
  468. package/dist/create-ffmpeg-complex-filter.d.ts.map +0 -1
  469. package/dist/create-ffmpeg-complex-filter.js.map +0 -1
  470. package/dist/cycle-browser-tabs.d.ts.map +0 -1
  471. package/dist/cycle-browser-tabs.js.map +0 -1
  472. package/dist/delay-render-embedded-stack.d.ts.map +0 -1
  473. package/dist/delay-render-embedded-stack.js.map +0 -1
  474. package/dist/delete-directory.d.ts.map +0 -1
  475. package/dist/delete-directory.js.map +0 -1
  476. package/dist/ensure-frames-in-order.d.ts.map +0 -1
  477. package/dist/ensure-frames-in-order.js.map +0 -1
  478. package/dist/ensure-output-directory.d.ts.map +0 -1
  479. package/dist/ensure-output-directory.js.map +0 -1
  480. package/dist/error-handling/handle-javascript-exception.d.ts.map +0 -1
  481. package/dist/error-handling/handle-javascript-exception.js.map +0 -1
  482. package/dist/error-handling/symbolicate-error.d.ts.map +0 -1
  483. package/dist/error-handling/symbolicate-error.js.map +0 -1
  484. package/dist/error-handling/symbolicateable-error.d.ts.map +0 -1
  485. package/dist/error-handling/symbolicateable-error.js.map +0 -1
  486. package/dist/ffmpeg-flags.d.ts.map +0 -1
  487. package/dist/ffmpeg-flags.js.map +0 -1
  488. package/dist/get-audio-codec-name.d.ts +0 -2
  489. package/dist/get-audio-codec-name.d.ts.map +0 -1
  490. package/dist/get-audio-codec-name.js +0 -28
  491. package/dist/get-audio-codec-name.js.map +0 -1
  492. package/dist/get-browser-instance.d.ts.map +0 -1
  493. package/dist/get-browser-instance.js.map +0 -1
  494. package/dist/get-codec-name.d.ts.map +0 -1
  495. package/dist/get-codec-name.js.map +0 -1
  496. package/dist/get-compositions.d.ts.map +0 -1
  497. package/dist/get-compositions.js.map +0 -1
  498. package/dist/get-concurrency.d.ts.map +0 -1
  499. package/dist/get-concurrency.js.map +0 -1
  500. package/dist/get-extension-from-codec.d.ts.map +0 -1
  501. package/dist/get-extension-from-codec.js.map +0 -1
  502. package/dist/get-frame-to-render.d.ts.map +0 -1
  503. package/dist/get-frame-to-render.js.map +0 -1
  504. package/dist/get-local-browser-executable.d.ts.map +0 -1
  505. package/dist/get-local-browser-executable.js.map +0 -1
  506. package/dist/get-port.d.ts.map +0 -1
  507. package/dist/get-port.js.map +0 -1
  508. package/dist/get-prores-profile-name.d.ts.map +0 -1
  509. package/dist/get-prores-profile-name.js.map +0 -1
  510. package/dist/image-format.d.ts.map +0 -1
  511. package/dist/image-format.js.map +0 -1
  512. package/dist/index.d.ts.map +0 -1
  513. package/dist/index.js.map +0 -1
  514. package/dist/is-serve-url.d.ts.map +0 -1
  515. package/dist/is-serve-url.js.map +0 -1
  516. package/dist/legacy-webpack-config.d.ts.map +0 -1
  517. package/dist/legacy-webpack-config.js.map +0 -1
  518. package/dist/make-assets-download-dir.d.ts +0 -1
  519. package/dist/make-assets-download-dir.d.ts.map +0 -1
  520. package/dist/make-assets-download-dir.js +0 -13
  521. package/dist/make-assets-download-dir.js.map +0 -1
  522. package/dist/normalize-serve-url.d.ts.map +0 -1
  523. package/dist/normalize-serve-url.js.map +0 -1
  524. package/dist/open-browser.d.ts.map +0 -1
  525. package/dist/open-browser.js.map +0 -1
  526. package/dist/parse-browser-error-stack.d.ts.map +0 -1
  527. package/dist/parse-browser-error-stack.js.map +0 -1
  528. package/dist/parse-ffmpeg-progress.d.ts.map +0 -1
  529. package/dist/parse-ffmpeg-progress.js.map +0 -1
  530. package/dist/pool.d.ts.map +0 -1
  531. package/dist/pool.js.map +0 -1
  532. package/dist/prepare-server.d.ts.map +0 -1
  533. package/dist/prepare-server.js.map +0 -1
  534. package/dist/provide-screenshot.d.ts.map +0 -1
  535. package/dist/provide-screenshot.js.map +0 -1
  536. package/dist/puppeteer-evaluate.d.ts.map +0 -1
  537. package/dist/puppeteer-evaluate.js.map +0 -1
  538. package/dist/puppeteer-screenshot.d.ts.map +0 -1
  539. package/dist/puppeteer-screenshot.js.map +0 -1
  540. package/dist/render-media.d.ts.map +0 -1
  541. package/dist/render-media.js.map +0 -1
  542. package/dist/render-still.d.ts.map +0 -1
  543. package/dist/render-still.js.map +0 -1
  544. package/dist/render.d.ts +0 -45
  545. package/dist/render.d.ts.map +0 -1
  546. package/dist/render.js +0 -245
  547. package/dist/render.js.map +0 -1
  548. package/dist/resolve-asset-src.d.ts.map +0 -1
  549. package/dist/resolve-asset-src.js.map +0 -1
  550. package/dist/sample-rate.d.ts.map +0 -1
  551. package/dist/sample-rate.js.map +0 -1
  552. package/dist/screenshot-dom-element.d.ts.map +0 -1
  553. package/dist/screenshot-dom-element.js.map +0 -1
  554. package/dist/screenshot-task.d.ts.map +0 -1
  555. package/dist/screenshot-task.js.map +0 -1
  556. package/dist/seek-to-frame.d.ts.map +0 -1
  557. package/dist/seek-to-frame.js.map +0 -1
  558. package/dist/serve-static.d.ts.map +0 -1
  559. package/dist/serve-static.js.map +0 -1
  560. package/dist/set-props-and-env.d.ts.map +0 -1
  561. package/dist/set-props-and-env.js.map +0 -1
  562. package/dist/stitcher.d.ts +0 -32
  563. package/dist/stitcher.d.ts.map +0 -1
  564. package/dist/stitcher.js +0 -204
  565. package/dist/stitcher.js.map +0 -1
  566. package/dist/stringify-ffmpeg-filter.d.ts.map +0 -1
  567. package/dist/stringify-ffmpeg-filter.js.map +0 -1
  568. package/dist/symbolicate-stacktrace.d.ts.map +0 -1
  569. package/dist/symbolicate-stacktrace.js.map +0 -1
  570. package/dist/tmp-dir.d.ts.map +0 -1
  571. package/dist/tmp-dir.js.map +0 -1
  572. package/dist/types.d.ts.map +0 -1
  573. package/dist/types.js.map +0 -1
  574. package/dist/validate-even-dimensions-with-codec.d.ts.map +0 -1
  575. package/dist/validate-even-dimensions-with-codec.js.map +0 -1
  576. package/dist/validate-ffmpeg.d.ts.map +0 -1
  577. package/dist/validate-ffmpeg.js.map +0 -1
  578. package/dist/validate-frame.d.ts +0 -1
  579. package/dist/validate-frame.js +0 -24
  580. package/dist/validate-puppeteer-timeout.d.ts.map +0 -1
  581. package/dist/validate-puppeteer-timeout.js.map +0 -1
  582. package/dist/validate-scale.d.ts.map +0 -1
  583. package/dist/validate-scale.js.map +0 -1
  584. package/tsconfig.json +0 -10
  585. package/vitest.config.ts +0 -8
@@ -10,6 +10,7 @@ const path_1 = __importDefault(require("path"));
10
10
  const remotion_1 = require("remotion");
11
11
  const download_map_1 = require("./assets/download-map");
12
12
  const can_use_parallel_encoding_1 = require("./can-use-parallel-encoding");
13
+ const codec_supports_media_1 = require("./codec-supports-media");
13
14
  const crf_1 = require("./crf");
14
15
  const delete_directory_1 = require("./delete-directory");
15
16
  const ensure_frames_in_order_1 = require("./ensure-frames-in-order");
@@ -18,36 +19,62 @@ const get_duration_from_frame_range_1 = require("./get-duration-from-frame-range
18
19
  const get_extension_from_codec_1 = require("./get-extension-from-codec");
19
20
  const get_extension_of_filename_1 = require("./get-extension-of-filename");
20
21
  const get_frame_to_render_1 = require("./get-frame-to-render");
21
- const legacy_webpack_config_1 = require("./legacy-webpack-config");
22
+ const image_format_1 = require("./image-format");
23
+ const is_audio_codec_1 = require("./is-audio-codec");
24
+ const jpeg_quality_1 = require("./jpeg-quality");
22
25
  const make_cancel_signal_1 = require("./make-cancel-signal");
23
26
  const overwrite_1 = require("./overwrite");
24
27
  const perf_1 = require("./perf");
28
+ const pixel_format_1 = require("./pixel-format");
25
29
  const prespawn_ffmpeg_1 = require("./prespawn-ffmpeg");
26
30
  const prestitcher_memory_usage_1 = require("./prestitcher-memory-usage");
27
- const quality_1 = require("./quality");
31
+ const prores_profile_1 = require("./prores-profile");
28
32
  const render_frames_1 = require("./render-frames");
29
33
  const stitch_frames_to_video_1 = require("./stitch-frames-to-video");
30
34
  const validate_even_dimensions_with_codec_1 = require("./validate-even-dimensions-with-codec");
35
+ const validate_every_nth_frame_1 = require("./validate-every-nth-frame");
36
+ const validate_ffmpeg_override_1 = require("./validate-ffmpeg-override");
37
+ const validate_number_of_gif_loops_1 = require("./validate-number-of-gif-loops");
31
38
  const validate_output_filename_1 = require("./validate-output-filename");
32
39
  const validate_scale_1 = require("./validate-scale");
40
+ const validate_videobitrate_1 = require("./validate-videobitrate");
41
+ const SLOWEST_FRAME_COUNT = 10;
33
42
  /**
34
43
  *
35
44
  * @description Render a video from a composition
36
- * @link https://www.remotion.dev/docs/renderer/render-media
45
+ * @see [Documentation](https://www.remotion.dev/docs/renderer/render-media)
37
46
  */
38
- const renderMedia = ({ parallelism, proResProfile, crf, composition, imageFormat, ffmpegExecutable, ffprobeExecutable, inputProps, pixelFormat, codec, envVariables, quality, frameRange, puppeteerInstance, outputLocation, onProgress, overwrite, onDownload, dumpBrowserLogs, onBrowserLog, onStart, timeoutInMilliseconds, chromiumOptions, scale, browserExecutable, port, cancelSignal, ...options }) => {
39
- var _a, _b, _c;
40
- (0, quality_1.validateQuality)(quality);
41
- if (typeof crf !== 'undefined' && crf !== null) {
42
- (0, crf_1.validateSelectedCrfAndCodecCombination)(crf, codec);
47
+ const renderMedia = ({ proResProfile, crf, composition, inputProps, pixelFormat, codec, envVariables, frameRange, puppeteerInstance, outputLocation, onProgress, overwrite, onDownload, dumpBrowserLogs, onBrowserLog, onStart, timeoutInMilliseconds, chromiumOptions, scale, browserExecutable, port, cancelSignal, muted, enforceAudioTrack, ffmpegOverride, audioBitrate, videoBitrate, audioCodec, ...options }) => {
48
+ var _a, _b, _c, _d, _e, _f, _g, _h;
49
+ if (options.quality) {
50
+ throw new Error(`The "quality" option has been renamed. Please use "jpegQuality" instead.`);
43
51
  }
52
+ (0, jpeg_quality_1.validateJpegQuality)(options.jpegQuality);
53
+ (0, crf_1.validateQualitySettings)({ crf, codec, videoBitrate });
54
+ (0, validate_videobitrate_1.validateBitrate)(audioBitrate, 'audioBitrate');
55
+ (0, validate_videobitrate_1.validateBitrate)(videoBitrate, 'videoBitrate');
56
+ (0, prores_profile_1.validateSelectedCodecAndProResCombination)({
57
+ codec,
58
+ proResProfile,
59
+ });
60
+ (0, pixel_format_1.validateSelectedPixelFormatAndCodecCombination)(pixelFormat, codec);
44
61
  if (outputLocation) {
45
- (0, validate_output_filename_1.validateOutputFilename)(codec, (0, get_extension_of_filename_1.getExtensionOfFilename)(outputLocation));
62
+ (0, validate_output_filename_1.validateOutputFilename)({
63
+ codec,
64
+ audioCodec: audioCodec !== null && audioCodec !== void 0 ? audioCodec : null,
65
+ extension: (0, get_extension_of_filename_1.getExtensionOfFilename)(outputLocation),
66
+ preferLossless: (_a = options.preferLossless) !== null && _a !== void 0 ? _a : false,
67
+ });
46
68
  }
69
+ const absoluteOutputLocation = outputLocation
70
+ ? path_1.default.resolve(process.cwd(), outputLocation)
71
+ : null;
47
72
  (0, validate_scale_1.validateScale)(scale);
48
- const everyNthFrame = (_a = options.everyNthFrame) !== null && _a !== void 0 ? _a : 1;
49
- const numberOfGifLoops = (_b = options.numberOfGifLoops) !== null && _b !== void 0 ? _b : null;
50
- const serveUrl = (0, legacy_webpack_config_1.getServeUrlWithFallback)(options);
73
+ (0, validate_ffmpeg_override_1.validateFfmpegOverride)(ffmpegOverride);
74
+ const everyNthFrame = (_b = options.everyNthFrame) !== null && _b !== void 0 ? _b : 1;
75
+ (0, validate_every_nth_frame_1.validateEveryNthFrame)(everyNthFrame, codec);
76
+ const numberOfGifLoops = (_c = options.numberOfGifLoops) !== null && _c !== void 0 ? _c : null;
77
+ (0, validate_number_of_gif_loops_1.validateNumberOfGifLoops)(numberOfGifLoops, codec);
51
78
  let stitchStage = 'encoding';
52
79
  let stitcherFfmpeg;
53
80
  let preStitcher = null;
@@ -57,29 +84,40 @@ const renderMedia = ({ parallelism, proResProfile, crf, composition, imageFormat
57
84
  let encodedDoneIn = null;
58
85
  let cancelled = false;
59
86
  const renderStart = Date.now();
60
- const downloadMap = (_c = options.downloadMap) !== null && _c !== void 0 ? _c : (0, download_map_1.makeDownloadMap)();
87
+ const downloadMap = (_e = (_d = options.internal) === null || _d === void 0 ? void 0 : _d.downloadMap) !== null && _e !== void 0 ? _e : (0, download_map_1.makeDownloadMap)();
61
88
  const { estimatedUsage, freeMemory, hasEnoughMemory } = (0, prestitcher_memory_usage_1.shouldUseParallelEncoding)({
62
89
  height: composition.height,
63
90
  width: composition.width,
64
91
  });
65
- const parallelEncoding = hasEnoughMemory && (0, can_use_parallel_encoding_1.canUseParallelEncoding)(codec);
92
+ const parallelEncoding = !options.disallowParallelEncoding &&
93
+ hasEnoughMemory &&
94
+ (0, can_use_parallel_encoding_1.canUseParallelEncoding)(codec);
66
95
  if (options.verbose) {
67
- console.log('[PRESTITCHER] Free memory:', freeMemory, 'Estimated usage parallel encoding', estimatedUsage);
68
- console.log('[PRESTICHER]: Codec supports parallel rendering:', (0, can_use_parallel_encoding_1.canUseParallelEncoding)(codec));
96
+ const log = (_f = options.printLog) !== null && _f !== void 0 ? _f : console.log;
97
+ log('[PRESTITCHER] Free memory:', freeMemory, 'Estimated usage parallel encoding', estimatedUsage);
98
+ log('[PRESTITCHER]: Codec supports parallel rendering:', (0, can_use_parallel_encoding_1.canUseParallelEncoding)(codec));
99
+ log('[PRESTITCHER]: User disallowed parallel encoding:', Boolean(options.disallowParallelEncoding));
69
100
  if (parallelEncoding) {
70
- console.log('[PRESTICHER] Parallel encoding is enabled.');
101
+ log('[PRESTITCHER] Parallel encoding is enabled.');
71
102
  }
72
103
  else {
73
- console.log('[PRESTITCHER] Parallel encoding is disabled.');
104
+ log('[PRESTITCHER] Parallel encoding is disabled.');
74
105
  }
75
106
  }
76
- const actualImageFormat = imageFormat !== null && imageFormat !== void 0 ? imageFormat : 'jpeg';
107
+ const imageFormat = (0, is_audio_codec_1.isAudioCodec)(codec)
108
+ ? 'none'
109
+ : (_g = options.imageFormat) !== null && _g !== void 0 ? _g : 'jpeg';
110
+ const jpegQuality = imageFormat === 'jpeg' ? options.jpegQuality : undefined;
111
+ (0, image_format_1.validateSelectedPixelFormatAndImageFormatCombination)(pixelFormat, imageFormat);
77
112
  const preEncodedFileLocation = parallelEncoding
78
- ? path_1.default.join(downloadMap.preEncode, 'pre-encode.' + (0, get_extension_from_codec_1.getFileExtensionFromCodec)(codec, 'chunk'))
113
+ ? path_1.default.join(downloadMap.preEncode, 'pre-encode.' + (0, get_extension_from_codec_1.getFileExtensionFromCodec)(codec, audioCodec !== null && audioCodec !== void 0 ? audioCodec : null))
79
114
  : null;
80
115
  const outputDir = parallelEncoding
81
116
  ? null
82
117
  : fs_1.default.mkdtempSync(path_1.default.join(os_1.default.tmpdir(), 'react-motion-render'));
118
+ if (((_h = options.internal) === null || _h === void 0 ? void 0 : _h.onCtrlCExit) && outputDir) {
119
+ options.internal.onCtrlCExit(() => (0, delete_directory_1.deleteDirectory)(outputDir));
120
+ }
83
121
  (0, validate_even_dimensions_with_codec_1.validateEvenDimensionsWithCodec)({
84
122
  codec,
85
123
  height: composition.height,
@@ -93,6 +131,9 @@ const renderMedia = ({ parallelism, proResProfile, crf, composition, imageFormat
93
131
  renderedDoneIn,
94
132
  renderedFrames,
95
133
  stitchStage,
134
+ progress: Math.round(((0.7 * renderedFrames + 0.3 * encodedFrames) /
135
+ composition.durationInFrames) *
136
+ 100) / 100,
96
137
  });
97
138
  };
98
139
  const realFrameRange = (0, get_frame_to_render_1.getRealFrameRange)(composition.durationInFrames, frameRange !== null && frameRange !== void 0 ? frameRange : null);
@@ -105,10 +146,10 @@ const renderMedia = ({ parallelism, proResProfile, crf, composition, imageFormat
105
146
  const { waitForRightTimeOfFrameToBeInserted, setFrameToStitch, waitForFinish } = (0, ensure_frames_in_order_1.ensureFramesInOrder)(realFrameRange);
106
147
  const fps = composition.fps / (everyNthFrame !== null && everyNthFrame !== void 0 ? everyNthFrame : 1);
107
148
  remotion_1.Internals.validateFps(fps, 'in "renderMedia()"', codec === 'gif');
108
- const createPrestitcherIfNecessary = async () => {
149
+ const createPrestitcherIfNecessary = () => {
109
150
  var _a;
110
151
  if (preEncodedFileLocation) {
111
- preStitcher = await (0, prespawn_ffmpeg_1.prespawnFfmpeg)({
152
+ preStitcher = (0, prespawn_ffmpeg_1.prespawnFfmpeg)({
112
153
  width: composition.width * (scale !== null && scale !== void 0 ? scale : 1),
113
154
  height: composition.height * (scale !== null && scale !== void 0 ? scale : 1),
114
155
  fps,
@@ -122,9 +163,10 @@ const renderMedia = ({ parallelism, proResProfile, crf, composition, imageFormat
122
163
  callUpdate();
123
164
  },
124
165
  verbose: (_a = options.verbose) !== null && _a !== void 0 ? _a : false,
125
- ffmpegExecutable,
126
- imageFormat: actualImageFormat,
166
+ imageFormat,
127
167
  signal: cancelPrestitcher.cancelSignal,
168
+ ffmpegOverride: ffmpegOverride !== null && ffmpegOverride !== void 0 ? ffmpegOverride : (({ args }) => args),
169
+ videoBitrate: videoBitrate !== null && videoBitrate !== void 0 ? videoBitrate : null,
128
170
  });
129
171
  stitcherFfmpeg = preStitcher.task;
130
172
  }
@@ -142,15 +184,43 @@ const renderMedia = ({ parallelism, proResProfile, crf, composition, imageFormat
142
184
  }
143
185
  }
144
186
  };
145
- const happyPath = createPrestitcherIfNecessary()
187
+ const mediaSupport = (0, codec_supports_media_1.codecSupportsMedia)(codec);
188
+ const disableAudio = !mediaSupport.audio || muted;
189
+ const slowestFrames = [];
190
+ let maxTime = 0;
191
+ let minTime = 0;
192
+ const recordFrameTime = (frameIndex, time) => {
193
+ var _a, _b;
194
+ const frameTime = { frame: frameIndex, time };
195
+ if (time < minTime && slowestFrames.length === SLOWEST_FRAME_COUNT) {
196
+ return;
197
+ }
198
+ if (time > maxTime) {
199
+ // add at starting;
200
+ slowestFrames.unshift(frameTime);
201
+ maxTime = time;
202
+ }
203
+ else {
204
+ // add frame at appropriate position
205
+ const index = slowestFrames.findIndex(({ time: indexTime }) => indexTime < time);
206
+ slowestFrames.splice(index, 0, frameTime);
207
+ }
208
+ if (slowestFrames.length > SLOWEST_FRAME_COUNT) {
209
+ slowestFrames.pop();
210
+ }
211
+ minTime = (_b = (_a = slowestFrames[slowestFrames.length - 1]) === null || _a === void 0 ? void 0 : _a.time) !== null && _b !== void 0 ? _b : minTime;
212
+ };
213
+ const happyPath = Promise.resolve(createPrestitcherIfNecessary())
146
214
  .then(() => {
215
+ var _a;
147
216
  const renderFramesProc = (0, render_frames_1.renderFrames)({
148
- config: composition,
149
- onFrameUpdate: (frame) => {
217
+ composition,
218
+ onFrameUpdate: (frame, frameIndex, timeToRenderInMilliseconds) => {
150
219
  renderedFrames = frame;
151
220
  callUpdate();
221
+ recordFrameTime(frameIndex, timeToRenderInMilliseconds);
152
222
  },
153
- parallelism,
223
+ concurrency: options.concurrency,
154
224
  outputDir,
155
225
  onStart: (data) => {
156
226
  renderedFrames = 0;
@@ -159,8 +229,8 @@ const renderMedia = ({ parallelism, proResProfile, crf, composition, imageFormat
159
229
  },
160
230
  inputProps,
161
231
  envVariables,
162
- imageFormat: actualImageFormat,
163
- quality,
232
+ imageFormat,
233
+ jpegQuality,
164
234
  frameRange: frameRange !== null && frameRange !== void 0 ? frameRange : null,
165
235
  puppeteerInstance,
166
236
  everyNthFrame,
@@ -177,19 +247,19 @@ const renderMedia = ({ parallelism, proResProfile, crf, composition, imageFormat
177
247
  setFrameToStitch(Math.min(realFrameRange[1] + 1, frame + everyNthFrame));
178
248
  }
179
249
  : undefined,
180
- serveUrl,
250
+ serveUrl: options.serveUrl,
181
251
  dumpBrowserLogs,
182
252
  onBrowserLog,
183
253
  onDownload,
184
254
  timeoutInMilliseconds,
185
255
  chromiumOptions,
186
256
  scale,
187
- ffmpegExecutable,
188
- ffprobeExecutable,
189
257
  browserExecutable,
190
258
  port,
191
259
  cancelSignal: cancelRenderFrames.cancelSignal,
192
260
  downloadMap,
261
+ muted: disableAudio,
262
+ verbose: (_a = options.verbose) !== null && _a !== void 0 ? _a : false,
193
263
  });
194
264
  return renderFramesProc;
195
265
  })
@@ -197,10 +267,11 @@ const renderMedia = ({ parallelism, proResProfile, crf, composition, imageFormat
197
267
  return Promise.all([renderFramesReturn, waitForPrestitcherIfNecessary()]);
198
268
  })
199
269
  .then(([{ assetsInfo }]) => {
270
+ var _a;
200
271
  renderedDoneIn = Date.now() - renderStart;
201
272
  callUpdate();
202
- if (outputLocation) {
203
- (0, ensure_output_directory_1.ensureOutputDirectory)(outputLocation);
273
+ if (absoluteOutputLocation) {
274
+ (0, ensure_output_directory_1.ensureOutputDirectory)(absoluteOutputLocation);
204
275
  }
205
276
  const stitchStart = Date.now();
206
277
  return Promise.all([
@@ -208,10 +279,11 @@ const renderMedia = ({ parallelism, proResProfile, crf, composition, imageFormat
208
279
  width: composition.width * (scale !== null && scale !== void 0 ? scale : 1),
209
280
  height: composition.height * (scale !== null && scale !== void 0 ? scale : 1),
210
281
  fps,
211
- outputLocation,
282
+ outputLocation: absoluteOutputLocation,
212
283
  internalOptions: {
213
284
  preEncodedFileLocation,
214
- imageFormat: actualImageFormat,
285
+ imageFormat,
286
+ preferLossless: (_a = options.preferLossless) !== null && _a !== void 0 ? _a : false,
215
287
  },
216
288
  force: overwrite !== null && overwrite !== void 0 ? overwrite : overwrite_1.DEFAULT_OVERWRITE,
217
289
  pixelFormat,
@@ -219,8 +291,6 @@ const renderMedia = ({ parallelism, proResProfile, crf, composition, imageFormat
219
291
  proResProfile,
220
292
  crf,
221
293
  assetsInfo,
222
- ffmpegExecutable,
223
- ffprobeExecutable,
224
294
  onProgress: (frame) => {
225
295
  stitchStage = 'muxing';
226
296
  encodedFrames = frame;
@@ -231,6 +301,12 @@ const renderMedia = ({ parallelism, proResProfile, crf, composition, imageFormat
231
301
  verbose: options.verbose,
232
302
  dir: outputDir !== null && outputDir !== void 0 ? outputDir : undefined,
233
303
  cancelSignal: cancelStitcher.cancelSignal,
304
+ muted: disableAudio,
305
+ enforceAudioTrack,
306
+ ffmpegOverride,
307
+ audioBitrate,
308
+ videoBitrate,
309
+ audioCodec: audioCodec !== null && audioCodec !== void 0 ? audioCodec : null,
234
310
  }),
235
311
  stitchStart,
236
312
  ]);
@@ -239,7 +315,12 @@ const renderMedia = ({ parallelism, proResProfile, crf, composition, imageFormat
239
315
  encodedFrames = (0, get_duration_from_frame_range_1.getFramesToRender)(realFrameRange, everyNthFrame).length;
240
316
  encodedDoneIn = Date.now() - stitchStart;
241
317
  callUpdate();
242
- return buffer;
318
+ slowestFrames.sort((a, b) => b.time - a.time);
319
+ const result = {
320
+ buffer,
321
+ slowestFrames,
322
+ };
323
+ return result;
243
324
  })
244
325
  .catch((err) => {
245
326
  /**
@@ -265,20 +346,25 @@ const renderMedia = ({ parallelism, proResProfile, crf, composition, imageFormat
265
346
  throw err;
266
347
  })
267
348
  .finally(() => {
349
+ var _a;
268
350
  if (preEncodedFileLocation !== null &&
269
351
  fs_1.default.existsSync(preEncodedFileLocation)) {
270
352
  (0, delete_directory_1.deleteDirectory)(path_1.default.dirname(preEncodedFileLocation));
271
353
  }
272
354
  // Clean download map if it was not passed in
273
- if (!(options === null || options === void 0 ? void 0 : options.downloadMap)) {
355
+ if (!((_a = options.internal) === null || _a === void 0 ? void 0 : _a.downloadMap)) {
274
356
  (0, download_map_1.cleanDownloadMap)(downloadMap);
275
357
  }
358
+ // Clean temporary image frames when rendering ends or fails
359
+ if (outputDir && fs_1.default.existsSync(outputDir)) {
360
+ (0, delete_directory_1.deleteDirectory)(outputDir);
361
+ }
276
362
  });
277
363
  return Promise.race([
278
364
  happyPath,
279
365
  new Promise((_resolve, reject) => {
280
366
  cancelSignal === null || cancelSignal === void 0 ? void 0 : cancelSignal(() => {
281
- reject(new Error('renderMedia() got cancelled'));
367
+ reject(new Error(make_cancel_signal_1.cancelErrorMessages.renderMedia));
282
368
  });
283
369
  }),
284
370
  ]);
@@ -1,20 +1,23 @@
1
- import type { SmallTCompMetadata } from 'remotion';
1
+ /// <reference types="node" />
2
+ import type { AnySmallCompMetadata } from 'remotion';
2
3
  import type { RenderMediaOnDownload } from './assets/download-and-map-assets-to-file';
3
4
  import type { DownloadMap } from './assets/download-map';
4
5
  import type { BrowserExecutable } from './browser-executable';
5
6
  import type { Browser as PuppeteerBrowser } from './browser/Browser';
6
- import type { FfmpegExecutable } from './ffmpeg-executable';
7
7
  import type { StillImageFormat } from './image-format';
8
- import type { ServeUrlOrWebpackBundle } from './legacy-webpack-config';
9
8
  import type { CancelSignal } from './make-cancel-signal';
10
9
  import type { ChromiumOptions } from './open-browser';
11
10
  declare type InnerStillOptions = {
12
- composition: SmallTCompMetadata;
13
- output: string;
11
+ composition: AnySmallCompMetadata;
12
+ output?: string | null;
14
13
  frame?: number;
15
14
  inputProps?: unknown;
16
15
  imageFormat?: StillImageFormat;
17
- quality?: number;
16
+ /**
17
+ * @deprecated Renamed to `jpegQuality`
18
+ */
19
+ quality?: never;
20
+ jpegQuality?: number;
18
21
  puppeteerInstance?: PuppeteerBrowser;
19
22
  dumpBrowserLogs?: boolean;
20
23
  envVariables?: Record<string, string>;
@@ -25,20 +28,23 @@ declare type InnerStillOptions = {
25
28
  scale?: number;
26
29
  onDownload?: RenderMediaOnDownload;
27
30
  cancelSignal?: CancelSignal;
28
- ffmpegExecutable?: FfmpegExecutable;
29
- ffprobeExecutable?: FfmpegExecutable;
30
31
  /**
31
32
  * @deprecated Only for Remotion internal usage
32
33
  */
33
34
  downloadMap?: DownloadMap;
35
+ verbose?: boolean;
36
+ };
37
+ declare type RenderStillReturnValue = {
38
+ buffer: Buffer | null;
34
39
  };
35
- declare type RenderStillOptions = InnerStillOptions & ServeUrlOrWebpackBundle & {
40
+ export declare type RenderStillOptions = InnerStillOptions & {
41
+ serveUrl: string;
36
42
  port?: number | null;
37
43
  };
38
44
  /**
39
45
  *
40
46
  * @description Render a still frame from a composition
41
- * @link https://www.remotion.dev/docs/renderer/render-still
47
+ * @see [Documentation](https://www.remotion.dev/docs/renderer/render-still)
42
48
  */
43
- export declare const renderStill: (options: RenderStillOptions) => Promise<void>;
49
+ export declare const renderStill: (options: RenderStillOptions) => Promise<RenderStillReturnValue>;
44
50
  export {};
@@ -32,47 +32,63 @@ const path_1 = __importDefault(require("path"));
32
32
  const remotion_1 = require("remotion");
33
33
  const download_map_1 = require("./assets/download-map");
34
34
  const browser_1 = require("./browser");
35
+ const convert_to_positive_frame_index_1 = require("./convert-to-positive-frame-index");
35
36
  const ensure_output_directory_1 = require("./ensure-output-directory");
36
37
  const handle_javascript_exception_1 = require("./error-handling/handle-javascript-exception");
38
+ const find_closest_package_json_1 = require("./find-closest-package-json");
37
39
  const image_format_1 = require("./image-format");
38
- const legacy_webpack_config_1 = require("./legacy-webpack-config");
40
+ const jpeg_quality_1 = require("./jpeg-quality");
41
+ const make_cancel_signal_1 = require("./make-cancel-signal");
39
42
  const open_browser_1 = require("./open-browser");
40
43
  const prepare_server_1 = require("./prepare-server");
41
- const provide_screenshot_1 = require("./provide-screenshot");
42
44
  const puppeteer_evaluate_1 = require("./puppeteer-evaluate");
43
- const quality_1 = require("./quality");
44
45
  const seek_to_frame_1 = require("./seek-to-frame");
45
46
  const set_props_and_env_1 = require("./set-props-and-env");
46
- const validate_frame_1 = require("./validate-frame");
47
+ const take_frame_and_compose_1 = require("./take-frame-and-compose");
47
48
  const validate_puppeteer_timeout_1 = require("./validate-puppeteer-timeout");
48
49
  const validate_scale_1 = require("./validate-scale");
49
- const innerRenderStill = async ({ composition, quality, imageFormat = 'png', serveUrl, puppeteerInstance, dumpBrowserLogs = false, onError, inputProps, envVariables, output, frame = 0, overwrite = true, browserExecutable, timeoutInMilliseconds, chromiumOptions, scale, proxyPort, cancelSignal, }) => {
50
+ const innerRenderStill = async ({ composition, quality, imageFormat = image_format_1.DEFAULT_STILL_IMAGE_FORMAT, serveUrl, puppeteerInstance, dumpBrowserLogs = false, onError, inputProps, envVariables, output, frame = 0, overwrite = true, browserExecutable, timeoutInMilliseconds, chromiumOptions, scale = 1, proxyPort, cancelSignal, downloadMap, jpegQuality, }) => {
51
+ if (quality) {
52
+ throw new Error('quality has been renamed to jpegQuality. Please rename the option.');
53
+ }
50
54
  remotion_1.Internals.validateDimension(composition.height, 'height', 'in the `config` object passed to `renderStill()`');
51
55
  remotion_1.Internals.validateDimension(composition.width, 'width', 'in the `config` object passed to `renderStill()`');
52
56
  remotion_1.Internals.validateFps(composition.fps, 'in the `config` object of `renderStill()`', false);
53
- remotion_1.Internals.validateDurationInFrames(composition.durationInFrames, 'in the `config` object passed to `renderStill()`');
54
- (0, image_format_1.validateNonNullImageFormat)(imageFormat);
55
- (0, validate_frame_1.validateFrame)(frame, composition.durationInFrames);
57
+ remotion_1.Internals.validateDurationInFrames({
58
+ durationInFrames: composition.durationInFrames,
59
+ component: 'in the `config` object passed to `renderStill()`',
60
+ allowFloats: false,
61
+ });
62
+ (0, image_format_1.validateStillImageFormat)(imageFormat);
63
+ remotion_1.Internals.validateFrame({
64
+ frame,
65
+ durationInFrames: composition.durationInFrames,
66
+ allowFloats: false,
67
+ });
68
+ const stillFrame = (0, convert_to_positive_frame_index_1.convertToPositiveFrameIndex)({
69
+ durationInFrames: composition.durationInFrames,
70
+ frame,
71
+ });
56
72
  (0, validate_puppeteer_timeout_1.validatePuppeteerTimeout)(timeoutInMilliseconds);
57
73
  (0, validate_scale_1.validateScale)(scale);
58
- if (typeof output !== 'string') {
59
- throw new TypeError('`output` parameter was not passed or is not a string');
60
- }
61
- output = path_1.default.resolve(process.cwd(), output);
62
- if (quality !== undefined && imageFormat !== 'jpeg') {
74
+ output =
75
+ typeof output === 'string' ? path_1.default.resolve(process.cwd(), output) : null;
76
+ if (jpegQuality !== undefined && imageFormat !== 'jpeg') {
63
77
  throw new Error("You can only pass the `quality` option if `imageFormat` is 'jpeg'.");
64
78
  }
65
- (0, quality_1.validateQuality)(quality);
66
- if (fs_1.default.existsSync(output)) {
67
- if (!overwrite) {
68
- throw new Error(`Cannot render still - "overwrite" option was set to false, but the output destination ${output} already exists.`);
69
- }
70
- const stat = (0, fs_1.statSync)(output);
71
- if (!stat.isFile()) {
72
- throw new Error(`The output location ${output} already exists, but is not a file, but something else (e.g. folder). Cannot save to it.`);
79
+ (0, jpeg_quality_1.validateJpegQuality)(jpegQuality);
80
+ if (output) {
81
+ if (fs_1.default.existsSync(output)) {
82
+ if (!overwrite) {
83
+ throw new Error(`Cannot render still - "overwrite" option was set to false, but the output destination ${output} already exists.`);
84
+ }
85
+ const stat = (0, fs_1.statSync)(output);
86
+ if (!stat.isFile()) {
87
+ throw new Error(`The output location ${output} already exists, but is not a file, but something else (e.g. folder). Cannot save to it.`);
88
+ }
73
89
  }
90
+ (0, ensure_output_directory_1.ensureOutputDirectory)(output);
74
91
  }
75
- (0, ensure_output_directory_1.ensureOutputDirectory)(output);
76
92
  const browserInstance = puppeteerInstance !== null && puppeteerInstance !== void 0 ? puppeteerInstance : (await (0, open_browser_1.openBrowser)(browser_1.DEFAULT_BROWSER, {
77
93
  browserExecutable,
78
94
  shouldDumpIo: dumpBrowserLogs,
@@ -100,7 +116,7 @@ const innerRenderStill = async ({ composition, quality, imageFormat = 'png', ser
100
116
  await page.close();
101
117
  }
102
118
  else {
103
- browserInstance.close().catch((err) => {
119
+ browserInstance.close(true).catch((err) => {
104
120
  console.log('Unable to close browser', err);
105
121
  });
106
122
  }
@@ -113,56 +129,75 @@ const innerRenderStill = async ({ composition, quality, imageFormat = 'png', ser
113
129
  envVariables,
114
130
  page,
115
131
  serveUrl,
116
- initialFrame: frame,
132
+ initialFrame: stillFrame,
117
133
  timeoutInMilliseconds,
118
134
  proxyPort,
119
135
  retriesRemaining: 2,
136
+ audioEnabled: false,
137
+ videoEnabled: true,
120
138
  });
121
139
  await (0, puppeteer_evaluate_1.puppeteerEvaluateWithCatch)({
122
- pageFunction: (id) => {
140
+ // eslint-disable-next-line max-params
141
+ pageFunction: (id, defaultProps, durationInFrames, fps, height, width) => {
123
142
  window.setBundleMode({
124
143
  type: 'composition',
125
144
  compositionName: id,
145
+ compositionDefaultProps: defaultProps,
146
+ compositionDurationInFrames: durationInFrames,
147
+ compositionFps: fps,
148
+ compositionHeight: height,
149
+ compositionWidth: width,
126
150
  });
127
151
  },
128
- args: [composition.id],
152
+ args: [
153
+ composition.id,
154
+ composition.defaultProps,
155
+ composition.durationInFrames,
156
+ composition.fps,
157
+ composition.height,
158
+ composition.width,
159
+ ],
129
160
  frame: null,
130
161
  page,
131
162
  });
132
- await (0, seek_to_frame_1.seekToFrame)({ frame, page });
133
- await (0, provide_screenshot_1.provideScreenshot)({
134
- page,
163
+ await (0, seek_to_frame_1.seekToFrame)({ frame: stillFrame, page });
164
+ const { buffer } = await (0, take_frame_and_compose_1.takeFrameAndCompose)({
165
+ downloadMap,
166
+ frame: stillFrame,
167
+ freePage: page,
168
+ height: composition.height,
169
+ width: composition.width,
135
170
  imageFormat,
136
- quality,
137
- options: {
138
- frame,
139
- output,
140
- },
171
+ scale,
172
+ output,
173
+ jpegQuality,
174
+ wantsBuffer: !output,
141
175
  });
142
176
  await cleanup();
177
+ return { buffer: output ? null : buffer };
143
178
  };
144
179
  /**
145
180
  *
146
181
  * @description Render a still frame from a composition
147
- * @link https://www.remotion.dev/docs/renderer/render-still
182
+ * @see [Documentation](https://www.remotion.dev/docs/renderer/render-still)
148
183
  */
149
184
  const renderStill = (options) => {
150
185
  var _a, _b;
151
- const selectedServeUrl = (0, legacy_webpack_config_1.getServeUrlWithFallback)(options);
152
186
  const downloadMap = (_a = options.downloadMap) !== null && _a !== void 0 ? _a : (0, download_map_1.makeDownloadMap)();
153
187
  const onDownload = (_b = options.onDownload) !== null && _b !== void 0 ? _b : (() => () => undefined);
154
188
  const happyPath = new Promise((resolve, reject) => {
155
- var _a, _b, _c;
189
+ var _a, _b;
156
190
  const onError = (err) => reject(err);
157
191
  let close = null;
158
192
  (0, prepare_server_1.prepareServer)({
159
- webpackConfigOrServeUrl: selectedServeUrl,
193
+ webpackConfigOrServeUrl: options.serveUrl,
160
194
  onDownload,
161
195
  onError,
162
- ffmpegExecutable: (_a = options.ffmpegExecutable) !== null && _a !== void 0 ? _a : null,
163
- ffprobeExecutable: (_b = options.ffprobeExecutable) !== null && _b !== void 0 ? _b : null,
164
- port: (_c = options.port) !== null && _c !== void 0 ? _c : null,
196
+ port: (_a = options.port) !== null && _a !== void 0 ? _a : null,
165
197
  downloadMap,
198
+ remotionRoot: (0, find_closest_package_json_1.findRemotionRoot)(),
199
+ concurrency: 1,
200
+ verbose: (_b = options.verbose) !== null && _b !== void 0 ? _b : false,
166
201
  })
167
202
  .then(({ serveUrl, closeServer, offthreadPort }) => {
168
203
  close = closeServer;
@@ -171,6 +206,7 @@ const renderStill = (options) => {
171
206
  serveUrl,
172
207
  onError: (err) => reject(err),
173
208
  proxyPort: offthreadPort,
209
+ downloadMap,
174
210
  });
175
211
  })
176
212
  .then((res) => resolve(res))
@@ -180,7 +216,7 @@ const renderStill = (options) => {
180
216
  if (!(options === null || options === void 0 ? void 0 : options.downloadMap)) {
181
217
  (0, download_map_1.cleanDownloadMap)(downloadMap);
182
218
  }
183
- return close === null || close === void 0 ? void 0 : close();
219
+ return close === null || close === void 0 ? void 0 : close(false);
184
220
  });
185
221
  });
186
222
  return Promise.race([
@@ -188,7 +224,7 @@ const renderStill = (options) => {
188
224
  new Promise((_resolve, reject) => {
189
225
  var _a;
190
226
  (_a = options.cancelSignal) === null || _a === void 0 ? void 0 : _a.call(options, () => {
191
- reject(new Error('renderStill() got cancelled'));
227
+ reject(new Error(make_cancel_signal_1.cancelErrorMessages.renderStill));
192
228
  });
193
229
  }),
194
230
  ]);
@@ -0,0 +1,6 @@
1
+ import type { Browser } from './browser/Browser';
2
+ export declare type BrowserReplacer = {
3
+ getBrowser: () => Browser;
4
+ replaceBrowser: (make: () => Promise<Browser>, makeNewPages: () => Promise<void>) => Promise<Browser>;
5
+ };
6
+ export declare const handleBrowserCrash: (instance: Browser) => BrowserReplacer;