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

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