@remotion/renderer 4.0.0-fastlambda.8 → 4.0.0-forcepublish.7

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 (435) hide show
  1. package/dist/assets/calculate-asset-positions.d.ts +2 -2
  2. package/dist/assets/convert-assets-to-file-urls.d.ts +5 -4
  3. package/dist/assets/convert-assets-to-file-urls.js +2 -2
  4. package/dist/assets/download-and-map-assets-to-file.d.ts +15 -6
  5. package/dist/assets/download-and-map-assets-to-file.js +108 -44
  6. package/dist/assets/download-file.d.ts +10 -5
  7. package/dist/assets/download-file.js +18 -5
  8. package/dist/assets/download-map.d.ts +64 -0
  9. package/dist/assets/download-map.js +73 -0
  10. package/dist/assets/ffmpeg-volume-expression.d.ts +3 -3
  11. package/dist/assets/ffmpeg-volume-expression.js +16 -14
  12. package/dist/assets/flatten-volume-array.d.ts +1 -1
  13. package/dist/assets/get-audio-channels.d.ts +3 -4
  14. package/dist/assets/get-audio-channels.js +14 -4
  15. package/dist/assets/get-video-stream-duration.d.ts +4 -0
  16. package/dist/assets/get-video-stream-duration.js +59 -0
  17. package/dist/assets/read-file.js +4 -1
  18. package/dist/assets/types.d.ts +1 -1
  19. package/dist/browser/Browser.d.ts +60 -0
  20. package/dist/browser/Browser.js +218 -0
  21. package/dist/browser/BrowserConnector.d.ts +19 -0
  22. package/dist/browser/BrowserConnector.js +17 -0
  23. package/dist/browser/BrowserFetcher.d.ts +89 -0
  24. package/dist/browser/BrowserFetcher.js +510 -0
  25. package/dist/browser/BrowserPage.d.ts +74 -0
  26. package/dist/browser/BrowserPage.js +283 -0
  27. package/dist/browser/BrowserRunner.d.ts +39 -0
  28. package/dist/browser/BrowserRunner.js +308 -0
  29. package/dist/browser/Connection.d.ts +42 -0
  30. package/dist/browser/Connection.js +242 -0
  31. package/dist/browser/ConsoleMessage.d.ts +31 -0
  32. package/dist/browser/ConsoleMessage.js +48 -0
  33. package/dist/browser/DOMWorld.d.ts +52 -0
  34. package/dist/browser/DOMWorld.js +272 -0
  35. package/dist/browser/Errors.d.ts +25 -0
  36. package/dist/browser/Errors.js +35 -0
  37. package/dist/browser/EvalTypes.d.ts +27 -0
  38. package/dist/browser/EvalTypes.js +17 -0
  39. package/dist/browser/EventEmitter.d.ts +23 -0
  40. package/dist/browser/EventEmitter.js +53 -0
  41. package/dist/browser/ExecutionContext.d.ts +34 -0
  42. package/dist/browser/ExecutionContext.js +174 -0
  43. package/dist/browser/FrameManager.d.ts +93 -0
  44. package/dist/browser/FrameManager.js +496 -0
  45. package/dist/browser/HTTPRequest.d.ts +28 -0
  46. package/dist/browser/HTTPRequest.js +37 -0
  47. package/dist/browser/HTTPResponse.d.ts +21 -0
  48. package/dist/browser/HTTPResponse.js +41 -0
  49. package/dist/browser/JSHandle.d.ts +35 -0
  50. package/dist/browser/JSHandle.js +90 -0
  51. package/dist/browser/LaunchOptions.d.ts +37 -0
  52. package/dist/browser/LaunchOptions.js +17 -0
  53. package/dist/browser/Launcher.d.ts +9 -0
  54. package/dist/browser/Launcher.js +504 -0
  55. package/dist/browser/LifecycleWatcher.d.ts +29 -0
  56. package/dist/browser/LifecycleWatcher.js +180 -0
  57. package/dist/browser/NetworkEventManager.d.ts +33 -0
  58. package/dist/browser/NetworkEventManager.js +81 -0
  59. package/dist/browser/NetworkManager.d.ts +34 -0
  60. package/dist/browser/NetworkManager.js +231 -0
  61. package/dist/browser/NodeWebSocketTransport.d.ts +17 -0
  62. package/dist/browser/NodeWebSocketTransport.js +87 -0
  63. package/dist/browser/Product.d.ts +16 -0
  64. package/dist/browser/Product.js +17 -0
  65. package/dist/browser/PuppeteerNode.d.ts +40 -0
  66. package/dist/browser/PuppeteerNode.js +81 -0
  67. package/dist/browser/PuppeteerViewport.d.ts +5 -0
  68. package/dist/browser/PuppeteerViewport.js +2 -0
  69. package/dist/browser/ScreenshotOptions.d.ts +14 -0
  70. package/dist/browser/ScreenshotOptions.js +2 -0
  71. package/dist/browser/Target.d.ts +61 -0
  72. package/dist/browser/Target.js +146 -0
  73. package/dist/browser/TaskQueue.d.ts +20 -0
  74. package/dist/browser/TaskQueue.js +47 -0
  75. package/dist/browser/TimeoutSettings.d.ts +24 -0
  76. package/dist/browser/TimeoutSettings.js +62 -0
  77. package/dist/browser/assert.d.ts +1 -0
  78. package/dist/browser/assert.js +9 -0
  79. package/dist/browser/create-browser-fetcher.d.ts +17 -0
  80. package/dist/browser/create-browser-fetcher.js +119 -0
  81. package/dist/browser/devtools-commands.d.ts +270 -0
  82. package/dist/browser/devtools-commands.js +2 -0
  83. package/dist/browser/devtools-types.d.ts +1122 -0
  84. package/dist/browser/devtools-types.js +2 -0
  85. package/dist/browser/get-download-destination.d.ts +1 -0
  86. package/dist/browser/get-download-destination.js +38 -0
  87. package/dist/browser/mitt/index.d.ts +22 -0
  88. package/dist/browser/mitt/index.js +49 -0
  89. package/dist/browser/node.d.ts +2 -0
  90. package/dist/browser/node.js +9 -0
  91. package/dist/browser/revisions.d.ts +21 -0
  92. package/dist/browser/revisions.js +22 -0
  93. package/dist/browser/util.d.ts +47 -0
  94. package/dist/browser/util.js +169 -0
  95. package/dist/browser-executable.d.ts +1 -0
  96. package/dist/browser-executable.js +2 -0
  97. package/dist/browser-log.d.ts +1 -1
  98. package/dist/browser.d.ts +2 -0
  99. package/dist/browser.js +4 -0
  100. package/dist/calculate-ffmpeg-filters.d.ts +1 -1
  101. package/dist/calculate-ffmpeg-filters.js +2 -2
  102. package/dist/calculate-sar-dar-pixels.d.ts +9 -0
  103. package/dist/calculate-sar-dar-pixels.js +19 -0
  104. package/dist/can-use-parallel-encoding.d.ts +1 -1
  105. package/dist/can-use-parallel-encoding.js +2 -2
  106. package/dist/codec-supports-media.d.ts +7 -0
  107. package/dist/codec-supports-media.js +49 -0
  108. package/dist/codec.d.ts +4 -0
  109. package/dist/codec.js +16 -0
  110. package/dist/combine-videos.d.ts +4 -2
  111. package/dist/combine-videos.js +19 -5
  112. package/dist/compress-assets.d.ts +7 -0
  113. package/dist/compress-assets.js +25 -0
  114. package/dist/convert-number-of-gif-loops-to-ffmpeg.d.ts +1 -0
  115. package/dist/convert-number-of-gif-loops-to-ffmpeg.js +17 -0
  116. package/dist/convert-to-pcm.d.ts +1 -1
  117. package/dist/create-ffmpeg-complex-filter.d.ts +3 -5
  118. package/dist/create-ffmpeg-complex-filter.js +2 -11
  119. package/dist/create-ffmpeg-merge-filter.js +3 -3
  120. package/dist/create-silent-audio.d.ts +1 -1
  121. package/dist/crf.d.ts +5 -0
  122. package/dist/crf.js +64 -0
  123. package/dist/cycle-browser-tabs.d.ts +3 -2
  124. package/dist/cycle-browser-tabs.js +9 -2
  125. package/dist/delay-render-embedded-stack.d.ts +1 -1
  126. package/dist/ensure-frames-in-order.d.ts +1 -1
  127. package/dist/ensure-frames-in-order.js +3 -2
  128. package/dist/ensure-presentation-timestamp.d.ts +2 -0
  129. package/dist/ensure-presentation-timestamp.js +69 -0
  130. package/dist/error-handling/handle-javascript-exception.d.ts +2 -2
  131. package/dist/error-handling/handle-javascript-exception.js +3 -4
  132. package/dist/error-handling/symbolicate-error.d.ts +1 -1
  133. package/dist/error-handling/symbolicateable-error.d.ts +1 -1
  134. package/dist/extract-frame-from-video.d.ts +16 -0
  135. package/dist/extract-frame-from-video.js +254 -0
  136. package/dist/ffmpeg-executable.d.ts +1 -0
  137. package/dist/ffmpeg-executable.js +2 -0
  138. package/dist/ffmpeg-filter-file.d.ts +2 -1
  139. package/dist/ffmpeg-filter-file.js +4 -6
  140. package/dist/frame-range.d.ts +2 -0
  141. package/dist/frame-range.js +49 -0
  142. package/dist/frame-to-ffmpeg-timestamp.d.ts +1 -0
  143. package/dist/frame-to-ffmpeg-timestamp.js +8 -0
  144. package/dist/get-audio-codec-name.d.ts +1 -1
  145. package/dist/get-audio-codec-name.js +2 -2
  146. package/dist/get-browser-instance.d.ts +4 -3
  147. package/dist/get-browser-instance.js +2 -2
  148. package/dist/get-codec-name.d.ts +1 -1
  149. package/dist/get-codec-name.js +5 -2
  150. package/dist/get-compositions.d.ts +15 -5
  151. package/dist/get-compositions.js +35 -11
  152. package/dist/get-duration-from-frame-range.d.ts +1 -2
  153. package/dist/get-duration-from-frame-range.js +13 -9
  154. package/dist/get-extension-from-codec.d.ts +2 -2
  155. package/dist/get-extension-from-codec.js +5 -0
  156. package/dist/get-extension-of-filename.d.ts +1 -1
  157. package/dist/get-extension-of-filename.js +3 -0
  158. package/dist/get-frame-padded-index.d.ts +14 -0
  159. package/dist/get-frame-padded-index.js +33 -0
  160. package/dist/get-frame-to-render.d.ts +1 -1
  161. package/dist/get-local-browser-executable.d.ts +2 -1
  162. package/dist/get-local-browser-executable.js +7 -5
  163. package/dist/get-port.js +30 -37
  164. package/dist/get-prores-profile-name.d.ts +2 -1
  165. package/dist/get-video-info.d.ts +3 -0
  166. package/dist/get-video-info.js +49 -0
  167. package/dist/get-video-threads-flag.d.ts +1 -0
  168. package/dist/get-video-threads-flag.js +18 -0
  169. package/dist/guess-extension-for-media.d.ts +1 -0
  170. package/dist/guess-extension-for-media.js +27 -0
  171. package/dist/image-format.d.ts +6 -1
  172. package/dist/image-format.js +25 -1
  173. package/dist/index.d.ts +95 -20
  174. package/dist/index.js +93 -6
  175. package/dist/is-audio-codec.d.ts +2 -0
  176. package/dist/is-audio-codec.js +7 -0
  177. package/dist/is-beyond-last-frame.d.ts +3 -0
  178. package/dist/is-beyond-last-frame.js +12 -0
  179. package/dist/last-frame-from-video-cache.d.ts +17 -0
  180. package/dist/last-frame-from-video-cache.js +55 -0
  181. package/dist/log-level.d.ts +4 -0
  182. package/dist/log-level.js +15 -0
  183. package/dist/make-cancel-signal.d.ts +7 -0
  184. package/dist/make-cancel-signal.js +25 -0
  185. package/dist/merge-audio-track.d.ts +3 -1
  186. package/dist/merge-audio-track.js +14 -8
  187. package/dist/mime-db.d.ts +6 -0
  188. package/dist/mime-db.js +8636 -0
  189. package/dist/mime-types.d.ts +2 -0
  190. package/dist/mime-types.js +89 -0
  191. package/dist/offthread-video-server.d.ts +17 -0
  192. package/dist/offthread-video-server.js +86 -0
  193. package/dist/open-browser.d.ts +10 -8
  194. package/dist/open-browser.js +37 -32
  195. package/dist/overwrite.d.ts +1 -0
  196. package/dist/overwrite.js +4 -0
  197. package/dist/perf.d.ts +5 -0
  198. package/dist/perf.js +35 -0
  199. package/dist/pixel-format.d.ts +5 -0
  200. package/dist/pixel-format.js +26 -0
  201. package/dist/prepare-server.d.ts +14 -2
  202. package/dist/prepare-server.js +38 -5
  203. package/dist/preprocess-audio-track.d.ts +5 -2
  204. package/dist/preprocess-audio-track.js +3 -3
  205. package/dist/prespawn-ffmpeg.d.ts +7 -1
  206. package/dist/prespawn-ffmpeg.js +20 -16
  207. package/dist/prestitcher-memory-usage.d.ts +12 -0
  208. package/dist/prestitcher-memory-usage.js +30 -0
  209. package/dist/prores-profile.d.ts +5 -0
  210. package/dist/prores-profile.js +23 -0
  211. package/dist/provide-screenshot.d.ts +5 -4
  212. package/dist/provide-screenshot.js +1 -2
  213. package/dist/puppeteer-evaluate.d.ts +1 -1
  214. package/dist/puppeteer-evaluate.js +3 -4
  215. package/dist/puppeteer-screenshot.d.ts +4 -2
  216. package/dist/puppeteer-screenshot.js +7 -5
  217. package/dist/quality.d.ts +1 -0
  218. package/dist/quality.js +21 -0
  219. package/dist/render-frames.d.ts +24 -8
  220. package/dist/render-frames.js +137 -63
  221. package/dist/render-media.d.ts +36 -9
  222. package/dist/render-media.js +191 -70
  223. package/dist/render-still.d.ts +25 -7
  224. package/dist/render-still.js +75 -24
  225. package/dist/screenshot-dom-element.d.ts +7 -7
  226. package/dist/screenshot-dom-element.js +3 -6
  227. package/dist/screenshot-task.d.ts +4 -2
  228. package/dist/screenshot-task.js +36 -23
  229. package/dist/seek-to-frame.d.ts +2 -2
  230. package/dist/seek-to-frame.js +2 -2
  231. package/dist/serve-handler/index.d.ts +4 -0
  232. package/dist/serve-handler/index.js +204 -0
  233. package/dist/serve-handler/is-path-inside.d.ts +1 -0
  234. package/dist/serve-handler/is-path-inside.js +27 -0
  235. package/dist/serve-handler/range-parser.d.ts +13 -0
  236. package/dist/serve-handler/range-parser.js +57 -0
  237. package/dist/serve-static.d.ts +11 -3
  238. package/dist/serve-static.js +37 -7
  239. package/dist/set-props-and-env.d.ts +6 -2
  240. package/dist/set-props-and-env.js +48 -12
  241. package/dist/stitch-frames-to-video.d.ts +17 -5
  242. package/dist/stitch-frames-to-video.js +129 -45
  243. package/dist/stringify-ffmpeg-filter.d.ts +2 -2
  244. package/dist/stringify-ffmpeg-filter.js +12 -7
  245. package/dist/symbolicate-stacktrace.d.ts +1 -1
  246. package/dist/symbolicate-stacktrace.js +3 -3
  247. package/dist/tmp-dir.js +5 -1
  248. package/dist/truthy.d.ts +3 -0
  249. package/dist/truthy.js +7 -0
  250. package/dist/types.d.ts +1 -1
  251. package/dist/validate-concurrency.d.ts +1 -0
  252. package/dist/validate-concurrency.js +24 -0
  253. package/dist/validate-even-dimensions-with-codec.d.ts +1 -1
  254. package/dist/validate-even-dimensions-with-codec.js +2 -2
  255. package/dist/validate-every-nth-frame.d.ts +1 -0
  256. package/dist/validate-every-nth-frame.js +21 -0
  257. package/dist/validate-ffmpeg.js +2 -3
  258. package/dist/validate-frame.d.ts +1 -0
  259. package/dist/validate-frame.js +24 -0
  260. package/dist/validate-opengl-renderer.d.ts +5 -0
  261. package/dist/validate-opengl-renderer.js +15 -0
  262. package/dist/validate-output-filename.d.ts +1 -1
  263. package/dist/validate-output-filename.js +5 -0
  264. package/dist/wait-for-symbolication-error-to-be-done.d.ts +3 -0
  265. package/dist/wait-for-symbolication-error-to-be-done.js +34 -0
  266. package/dist/ws/ws-types.d.ts +14 -0
  267. package/dist/ws/ws-types.js +10 -0
  268. package/package.json +13 -16
  269. package/tsconfig.json +2 -2
  270. package/types/ws/index.d.ts +509 -0
  271. package/vitest.config.ts +8 -0
  272. package/dist/assets/calculate-asset-positions.d.ts.map +0 -1
  273. package/dist/assets/calculate-asset-positions.js.map +0 -1
  274. package/dist/assets/calculate-atempo.d.ts.map +0 -1
  275. package/dist/assets/calculate-atempo.js.map +0 -1
  276. package/dist/assets/convert-assets-to-file-urls.d.ts.map +0 -1
  277. package/dist/assets/convert-assets-to-file-urls.js.map +0 -1
  278. package/dist/assets/download-and-map-assets-to-file.d.ts.map +0 -1
  279. package/dist/assets/download-and-map-assets-to-file.js.map +0 -1
  280. package/dist/assets/download-file.d.ts.map +0 -1
  281. package/dist/assets/download-file.js.map +0 -1
  282. package/dist/assets/ffmpeg-volume-expression.d.ts.map +0 -1
  283. package/dist/assets/ffmpeg-volume-expression.js.map +0 -1
  284. package/dist/assets/flatten-volume-array.d.ts.map +0 -1
  285. package/dist/assets/flatten-volume-array.js.map +0 -1
  286. package/dist/assets/get-audio-channels.d.ts.map +0 -1
  287. package/dist/assets/get-audio-channels.js.map +0 -1
  288. package/dist/assets/read-file.d.ts.map +0 -1
  289. package/dist/assets/read-file.js.map +0 -1
  290. package/dist/assets/round-volume-to-avoid-stack-overflow.d.ts.map +0 -1
  291. package/dist/assets/round-volume-to-avoid-stack-overflow.js.map +0 -1
  292. package/dist/assets/sanitize-filename.d.ts.map +0 -1
  293. package/dist/assets/sanitize-filename.js.map +0 -1
  294. package/dist/assets/sanitize-filepath.d.ts.map +0 -1
  295. package/dist/assets/sanitize-filepath.js.map +0 -1
  296. package/dist/assets/truncate-utf8-bytes.d.ts.map +0 -1
  297. package/dist/assets/truncate-utf8-bytes.js.map +0 -1
  298. package/dist/assets/types.d.ts.map +0 -1
  299. package/dist/assets/types.js.map +0 -1
  300. package/dist/browser-log.d.ts.map +0 -1
  301. package/dist/browser-log.js.map +0 -1
  302. package/dist/calculate-ffmpeg-filters.d.ts.map +0 -1
  303. package/dist/calculate-ffmpeg-filters.js.map +0 -1
  304. package/dist/can-use-parallel-encoding.d.ts.map +0 -1
  305. package/dist/can-use-parallel-encoding.js.map +0 -1
  306. package/dist/chunk.d.ts.map +0 -1
  307. package/dist/chunk.js.map +0 -1
  308. package/dist/combine-videos.d.ts.map +0 -1
  309. package/dist/combine-videos.js.map +0 -1
  310. package/dist/convert-to-pcm.d.ts.map +0 -1
  311. package/dist/convert-to-pcm.js.map +0 -1
  312. package/dist/create-ffmpeg-complex-filter.d.ts.map +0 -1
  313. package/dist/create-ffmpeg-complex-filter.js.map +0 -1
  314. package/dist/create-ffmpeg-merge-filter.d.ts.map +0 -1
  315. package/dist/create-ffmpeg-merge-filter.js.map +0 -1
  316. package/dist/create-silent-audio.d.ts.map +0 -1
  317. package/dist/create-silent-audio.js.map +0 -1
  318. package/dist/cycle-browser-tabs.d.ts.map +0 -1
  319. package/dist/cycle-browser-tabs.js.map +0 -1
  320. package/dist/delay-render-embedded-stack.d.ts.map +0 -1
  321. package/dist/delay-render-embedded-stack.js.map +0 -1
  322. package/dist/delete-directory.d.ts.map +0 -1
  323. package/dist/delete-directory.js.map +0 -1
  324. package/dist/ensure-frames-in-order.d.ts.map +0 -1
  325. package/dist/ensure-frames-in-order.js.map +0 -1
  326. package/dist/ensure-output-directory.d.ts.map +0 -1
  327. package/dist/ensure-output-directory.js.map +0 -1
  328. package/dist/error-handling/handle-javascript-exception.d.ts.map +0 -1
  329. package/dist/error-handling/handle-javascript-exception.js.map +0 -1
  330. package/dist/error-handling/symbolicate-error.d.ts.map +0 -1
  331. package/dist/error-handling/symbolicate-error.js.map +0 -1
  332. package/dist/error-handling/symbolicateable-error.d.ts.map +0 -1
  333. package/dist/error-handling/symbolicateable-error.js.map +0 -1
  334. package/dist/ffmpeg-filter-file.d.ts.map +0 -1
  335. package/dist/ffmpeg-filter-file.js.map +0 -1
  336. package/dist/ffmpeg-flags.d.ts.map +0 -1
  337. package/dist/ffmpeg-flags.js.map +0 -1
  338. package/dist/get-audio-codec-name.d.ts.map +0 -1
  339. package/dist/get-audio-codec-name.js.map +0 -1
  340. package/dist/get-browser-instance.d.ts.map +0 -1
  341. package/dist/get-browser-instance.js.map +0 -1
  342. package/dist/get-codec-name.d.ts.map +0 -1
  343. package/dist/get-codec-name.js.map +0 -1
  344. package/dist/get-compositions.d.ts.map +0 -1
  345. package/dist/get-compositions.js.map +0 -1
  346. package/dist/get-concurrency.d.ts.map +0 -1
  347. package/dist/get-concurrency.js.map +0 -1
  348. package/dist/get-duration-from-frame-range.d.ts.map +0 -1
  349. package/dist/get-duration-from-frame-range.js.map +0 -1
  350. package/dist/get-extension-from-codec.d.ts.map +0 -1
  351. package/dist/get-extension-from-codec.js.map +0 -1
  352. package/dist/get-frame-to-render.d.ts.map +0 -1
  353. package/dist/get-frame-to-render.js.map +0 -1
  354. package/dist/get-local-browser-executable.d.ts.map +0 -1
  355. package/dist/get-local-browser-executable.js.map +0 -1
  356. package/dist/get-port.d.ts.map +0 -1
  357. package/dist/get-port.js.map +0 -1
  358. package/dist/get-prores-profile-name.d.ts.map +0 -1
  359. package/dist/get-prores-profile-name.js.map +0 -1
  360. package/dist/image-format.d.ts.map +0 -1
  361. package/dist/image-format.js.map +0 -1
  362. package/dist/index.d.ts.map +0 -1
  363. package/dist/index.js.map +0 -1
  364. package/dist/is-serve-url.d.ts.map +0 -1
  365. package/dist/is-serve-url.js.map +0 -1
  366. package/dist/legacy-webpack-config.d.ts.map +0 -1
  367. package/dist/legacy-webpack-config.js.map +0 -1
  368. package/dist/make-assets-download-dir.d.ts +0 -1
  369. package/dist/make-assets-download-dir.d.ts.map +0 -1
  370. package/dist/make-assets-download-dir.js +0 -8
  371. package/dist/make-assets-download-dir.js.map +0 -1
  372. package/dist/merge-audio-track.d.ts.map +0 -1
  373. package/dist/merge-audio-track.js.map +0 -1
  374. package/dist/normalize-serve-url.d.ts.map +0 -1
  375. package/dist/normalize-serve-url.js.map +0 -1
  376. package/dist/open-browser.d.ts.map +0 -1
  377. package/dist/open-browser.js.map +0 -1
  378. package/dist/p-limit.d.ts.map +0 -1
  379. package/dist/p-limit.js.map +0 -1
  380. package/dist/parse-browser-error-stack.d.ts.map +0 -1
  381. package/dist/parse-browser-error-stack.js.map +0 -1
  382. package/dist/parse-ffmpeg-progress.d.ts.map +0 -1
  383. package/dist/parse-ffmpeg-progress.js.map +0 -1
  384. package/dist/pool.d.ts.map +0 -1
  385. package/dist/pool.js.map +0 -1
  386. package/dist/prepare-server.d.ts.map +0 -1
  387. package/dist/prepare-server.js.map +0 -1
  388. package/dist/preprocess-audio-track.d.ts.map +0 -1
  389. package/dist/preprocess-audio-track.js.map +0 -1
  390. package/dist/prespawn-ffmpeg.d.ts.map +0 -1
  391. package/dist/prespawn-ffmpeg.js.map +0 -1
  392. package/dist/provide-screenshot.d.ts.map +0 -1
  393. package/dist/provide-screenshot.js.map +0 -1
  394. package/dist/puppeteer-evaluate.d.ts.map +0 -1
  395. package/dist/puppeteer-evaluate.js.map +0 -1
  396. package/dist/puppeteer-screenshot.d.ts.map +0 -1
  397. package/dist/puppeteer-screenshot.js.map +0 -1
  398. package/dist/render-frames.d.ts.map +0 -1
  399. package/dist/render-frames.js.map +0 -1
  400. package/dist/render-media.d.ts.map +0 -1
  401. package/dist/render-media.js.map +0 -1
  402. package/dist/render-still.d.ts.map +0 -1
  403. package/dist/render-still.js.map +0 -1
  404. package/dist/resolve-asset-src.d.ts.map +0 -1
  405. package/dist/resolve-asset-src.js.map +0 -1
  406. package/dist/sample-rate.d.ts.map +0 -1
  407. package/dist/sample-rate.js.map +0 -1
  408. package/dist/screenshot-dom-element.d.ts.map +0 -1
  409. package/dist/screenshot-dom-element.js.map +0 -1
  410. package/dist/screenshot-task.d.ts.map +0 -1
  411. package/dist/screenshot-task.js.map +0 -1
  412. package/dist/seek-to-frame.d.ts.map +0 -1
  413. package/dist/seek-to-frame.js.map +0 -1
  414. package/dist/serve-static.d.ts.map +0 -1
  415. package/dist/serve-static.js.map +0 -1
  416. package/dist/set-props-and-env.d.ts.map +0 -1
  417. package/dist/set-props-and-env.js.map +0 -1
  418. package/dist/stitch-frames-to-video.d.ts.map +0 -1
  419. package/dist/stitch-frames-to-video.js.map +0 -1
  420. package/dist/stringify-ffmpeg-filter.d.ts.map +0 -1
  421. package/dist/stringify-ffmpeg-filter.js.map +0 -1
  422. package/dist/symbolicate-stacktrace.d.ts.map +0 -1
  423. package/dist/symbolicate-stacktrace.js.map +0 -1
  424. package/dist/tmp-dir.d.ts.map +0 -1
  425. package/dist/tmp-dir.js.map +0 -1
  426. package/dist/types.d.ts.map +0 -1
  427. package/dist/types.js.map +0 -1
  428. package/dist/validate-even-dimensions-with-codec.d.ts.map +0 -1
  429. package/dist/validate-even-dimensions-with-codec.js.map +0 -1
  430. package/dist/validate-ffmpeg.d.ts.map +0 -1
  431. package/dist/validate-ffmpeg.js.map +0 -1
  432. package/dist/validate-puppeteer-timeout.d.ts.map +0 -1
  433. package/dist/validate-puppeteer-timeout.js.map +0 -1
  434. package/dist/validate-scale.d.ts.map +0 -1
  435. package/dist/validate-scale.js.map +0 -1
@@ -6,61 +6,71 @@ Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.stitchFramesToVideo = exports.spawnFfmpeg = void 0;
7
7
  const execa_1 = __importDefault(require("execa"));
8
8
  const fs_1 = __importDefault(require("fs"));
9
+ const promises_1 = require("fs/promises");
9
10
  const path_1 = __importDefault(require("path"));
10
11
  const remotion_1 = require("remotion");
11
12
  const calculate_asset_positions_1 = require("./assets/calculate-asset-positions");
12
13
  const convert_assets_to_file_urls_1 = require("./assets/convert-assets-to-file-urls");
13
14
  const download_and_map_assets_to_file_1 = require("./assets/download-and-map-assets-to-file");
15
+ const codec_1 = require("./codec");
16
+ const codec_supports_media_1 = require("./codec-supports-media");
17
+ const convert_number_of_gif_loops_to_ffmpeg_1 = require("./convert-number-of-gif-loops-to-ffmpeg");
18
+ const crf_1 = require("./crf");
14
19
  const delete_directory_1 = require("./delete-directory");
15
20
  const get_audio_codec_name_1 = require("./get-audio-codec-name");
16
21
  const get_codec_name_1 = require("./get-codec-name");
22
+ const get_extension_from_codec_1 = require("./get-extension-from-codec");
17
23
  const get_prores_profile_name_1 = require("./get-prores-profile-name");
18
24
  const merge_audio_track_1 = require("./merge-audio-track");
19
25
  const parse_ffmpeg_progress_1 = require("./parse-ffmpeg-progress");
26
+ const pixel_format_1 = require("./pixel-format");
20
27
  const preprocess_audio_track_1 = require("./preprocess-audio-track");
21
- const tmp_dir_1 = require("./tmp-dir");
28
+ const truthy_1 = require("./truthy");
22
29
  const validate_even_dimensions_with_codec_1 = require("./validate-even-dimensions-with-codec");
23
30
  const validate_ffmpeg_1 = require("./validate-ffmpeg");
24
31
  const packageJsonPath = path_1.default.join(__dirname, '..', 'package.json');
25
32
  const packageJson = fs_1.default.existsSync(packageJsonPath)
26
33
  ? JSON.parse(fs_1.default.readFileSync(packageJsonPath, 'utf-8'))
27
34
  : null;
28
- const getAssetsData = async ({ assets, downloadDir, onDownload, fps, expectedFrames, verbose, ffmpegExecutable, onProgress, }) => {
35
+ const getAssetsData = async ({ assets, onDownload, fps, expectedFrames, verbose, ffmpegExecutable, ffprobeExecutable, onProgress, downloadMap, }) => {
29
36
  const fileUrlAssets = await (0, convert_assets_to_file_urls_1.convertAssetsToFileUrls)({
30
37
  assets,
31
- downloadDir,
32
38
  onDownload: onDownload !== null && onDownload !== void 0 ? onDownload : (() => () => undefined),
39
+ downloadMap,
33
40
  });
34
- (0, download_and_map_assets_to_file_1.markAllAssetsAsDownloaded)();
41
+ (0, download_and_map_assets_to_file_1.markAllAssetsAsDownloaded)(downloadMap);
35
42
  const assetPositions = (0, calculate_asset_positions_1.calculateAssetPositions)(fileUrlAssets);
36
43
  if (verbose) {
37
44
  console.log('asset positions', assetPositions);
38
45
  }
39
- const tempPath = (0, tmp_dir_1.tmpDir)('remotion-audio-mixing');
40
46
  const preprocessProgress = new Array(assetPositions.length).fill(0);
41
47
  const updateProgress = () => {
42
48
  onProgress(preprocessProgress.reduce((a, b) => a + b, 0) / assetPositions.length);
43
49
  };
44
50
  const preprocessed = (await Promise.all(assetPositions.map(async (asset, index) => {
45
- const filterFile = path_1.default.join(tempPath, `${index}.wav`);
51
+ const filterFile = path_1.default.join(downloadMap.audioMixing, `${index}.wav`);
46
52
  const result = await (0, preprocess_audio_track_1.preprocessAudioTrack)({
47
53
  ffmpegExecutable: ffmpegExecutable !== null && ffmpegExecutable !== void 0 ? ffmpegExecutable : null,
54
+ ffprobeExecutable: ffprobeExecutable !== null && ffprobeExecutable !== void 0 ? ffprobeExecutable : null,
48
55
  outName: filterFile,
49
56
  asset,
50
57
  expectedFrames,
51
58
  fps,
59
+ downloadMap,
52
60
  });
53
61
  preprocessProgress[index] = 1;
54
62
  updateProgress();
55
63
  return result;
56
- }))).filter(remotion_1.Internals.truthy);
57
- const outName = path_1.default.join(tempPath, `audio.wav`);
64
+ }))).filter(truthy_1.truthy);
65
+ const outName = path_1.default.join(downloadMap.audioPreprocessing, `audio.wav`);
58
66
  await (0, merge_audio_track_1.mergeAudioTrack)({
59
67
  ffmpegExecutable: ffmpegExecutable !== null && ffmpegExecutable !== void 0 ? ffmpegExecutable : null,
60
68
  files: preprocessed,
61
69
  outName,
62
70
  numberOfSeconds: Number((expectedFrames / fps).toFixed(3)),
71
+ downloadMap,
63
72
  });
73
+ (0, delete_directory_1.deleteDirectory)(downloadMap.audioMixing);
64
74
  onProgress(1);
65
75
  preprocessed.forEach((p) => {
66
76
  (0, delete_directory_1.deleteDirectory)(p);
@@ -68,25 +78,36 @@ const getAssetsData = async ({ assets, downloadDir, onDownload, fps, expectedFra
68
78
  return outName;
69
79
  };
70
80
  const spawnFfmpeg = async (options) => {
71
- var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o;
81
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v;
72
82
  remotion_1.Internals.validateDimension(options.height, 'height', 'passed to `stitchFramesToVideo()`');
73
83
  remotion_1.Internals.validateDimension(options.width, 'width', 'passed to `stitchFramesToVideo()`');
74
- remotion_1.Internals.validateFps(options.fps, 'passed to `stitchFramesToVideo()`');
75
- const codec = (_a = options.codec) !== null && _a !== void 0 ? _a : remotion_1.Internals.DEFAULT_CODEC;
84
+ const codec = (_a = options.codec) !== null && _a !== void 0 ? _a : codec_1.DEFAULT_CODEC;
76
85
  (0, validate_even_dimensions_with_codec_1.validateEvenDimensionsWithCodec)({
77
86
  width: options.width,
78
87
  height: options.height,
79
88
  codec,
80
89
  scale: 1,
81
90
  });
82
- const crf = (_b = options.crf) !== null && _b !== void 0 ? _b : remotion_1.Internals.getDefaultCrfForCodec(codec);
83
- const pixelFormat = (_c = options.pixelFormat) !== null && _c !== void 0 ? _c : remotion_1.Internals.DEFAULT_PIXEL_FORMAT;
91
+ remotion_1.Internals.validateFps(options.fps, 'in `stitchFramesToVideo()`', false);
92
+ const crf = (_b = options.crf) !== null && _b !== void 0 ? _b : (0, crf_1.getDefaultCrfForCodec)(codec);
93
+ const pixelFormat = (_c = options.pixelFormat) !== null && _c !== void 0 ? _c : pixel_format_1.DEFAULT_PIXEL_FORMAT;
84
94
  await (0, validate_ffmpeg_1.validateFfmpeg)((_d = options.ffmpegExecutable) !== null && _d !== void 0 ? _d : null);
85
95
  const encoderName = (0, get_codec_name_1.getCodecName)(codec);
86
96
  const audioCodecName = (0, get_audio_codec_name_1.getAudioCodecName)(codec);
87
97
  const proResProfileName = (0, get_prores_profile_name_1.getProResProfileName)(codec, options.proResProfile);
88
- const isAudioOnly = encoderName === null;
98
+ const mediaSupport = (0, codec_supports_media_1.codecSupportsMedia)(codec);
89
99
  const supportsCrf = encoderName && codec !== 'prores';
100
+ const tempFile = options.outputLocation
101
+ ? null
102
+ : path_1.default.join(options.assetsInfo.downloadMap.stitchFrames, `out.${(0, get_extension_from_codec_1.getFileExtensionFromCodec)(codec, 'final')}`);
103
+ const shouldRenderAudio = mediaSupport.audio &&
104
+ (options.assetsInfo.assets.flat(1).length > 0 ||
105
+ options.enforceAudioTrack) &&
106
+ !options.muted;
107
+ const shouldRenderVideo = mediaSupport.video;
108
+ if (!shouldRenderAudio && !shouldRenderVideo) {
109
+ throw new Error('The output format has neither audio nor video. This can happen if you are rendering an audio codec and the output file has no audio or the muted flag was passed.');
110
+ }
90
111
  if (options.verbose) {
91
112
  console.log('[verbose] ffmpeg', (_e = options.ffmpegExecutable) !== null && _e !== void 0 ? _e : 'ffmpeg in PATH');
92
113
  console.log('[verbose] encoder', encoderName);
@@ -96,60 +117,93 @@ const spawnFfmpeg = async (options) => {
96
117
  console.log('[verbose] crf', crf);
97
118
  }
98
119
  console.log('[verbose] codec', codec);
99
- console.log('[verbose] isAudioOnly', isAudioOnly);
120
+ console.log('[verbose] shouldRenderAudio', shouldRenderAudio);
121
+ console.log('[verbose] shouldRenderVideo', shouldRenderVideo);
100
122
  console.log('[verbose] proResProfileName', proResProfileName);
101
123
  }
102
- remotion_1.Internals.validateSelectedCrfAndCodecCombination(crf, codec);
103
- remotion_1.Internals.validateSelectedPixelFormatAndCodecCombination(pixelFormat, codec);
124
+ (0, crf_1.validateSelectedCrfAndCodecCombination)(crf, codec);
125
+ (0, pixel_format_1.validateSelectedPixelFormatAndCodecCombination)(pixelFormat, codec);
104
126
  const expectedFrames = options.assetsInfo.assets.length;
105
127
  const updateProgress = (preStitchProgress, muxProgress) => {
106
128
  var _a;
107
129
  const totalFrameProgress = 0.5 * preStitchProgress * expectedFrames + muxProgress * 0.5;
108
130
  (_a = options.onProgress) === null || _a === void 0 ? void 0 : _a.call(options, Math.round(totalFrameProgress));
109
131
  };
110
- const audio = await getAssetsData({
111
- assets: options.assetsInfo.assets,
112
- downloadDir: options.assetsInfo.downloadDir,
113
- onDownload: options.onDownload,
114
- fps: options.fps,
115
- expectedFrames,
116
- verbose: (_f = options.verbose) !== null && _f !== void 0 ? _f : false,
117
- ffmpegExecutable: (_g = options.ffmpegExecutable) !== null && _g !== void 0 ? _g : null,
118
- onProgress: (prog) => updateProgress(prog, 0),
119
- });
120
- if (isAudioOnly) {
132
+ const audio = shouldRenderAudio
133
+ ? await getAssetsData({
134
+ assets: options.assetsInfo.assets,
135
+ onDownload: options.onDownload,
136
+ fps: options.fps,
137
+ expectedFrames,
138
+ verbose: (_f = options.verbose) !== null && _f !== void 0 ? _f : false,
139
+ ffmpegExecutable: (_g = options.ffmpegExecutable) !== null && _g !== void 0 ? _g : null,
140
+ ffprobeExecutable: (_h = options.ffprobeExecutable) !== null && _h !== void 0 ? _h : null,
141
+ onProgress: (prog) => updateProgress(prog, 0),
142
+ downloadMap: options.assetsInfo.downloadMap,
143
+ })
144
+ : null;
145
+ if (mediaSupport.audio && !mediaSupport.video) {
121
146
  if (!audioCodecName) {
122
147
  throw new TypeError('exporting audio but has no audio codec name. Report this in the Remotion repo.');
123
148
  }
124
- await (0, execa_1.default)('ffmpeg', [
149
+ const ffmpegTask = (0, execa_1.default)('ffmpeg', [
125
150
  '-i',
126
151
  audio,
127
152
  '-c:a',
128
153
  audioCodecName,
154
+ // Set bitrate up to 320k, for aac it might effectively be lower
155
+ '-b:a',
156
+ '320k',
129
157
  options.force ? '-y' : null,
130
- options.outputLocation,
158
+ (_j = options.outputLocation) !== null && _j !== void 0 ? _j : tempFile,
131
159
  ].filter(remotion_1.Internals.truthy));
132
- (_h = options.onProgress) === null || _h === void 0 ? void 0 : _h.call(options, expectedFrames);
160
+ (_k = options.cancelSignal) === null || _k === void 0 ? void 0 : _k.call(options, () => {
161
+ ffmpegTask.kill();
162
+ });
163
+ await ffmpegTask;
164
+ (_l = options.onProgress) === null || _l === void 0 ? void 0 : _l.call(options, expectedFrames);
165
+ if (audio) {
166
+ await (0, delete_directory_1.deleteDirectory)(path_1.default.dirname(audio));
167
+ }
168
+ const file = await new Promise((resolve, reject) => {
169
+ if (tempFile) {
170
+ (0, promises_1.readFile)(tempFile)
171
+ .then((f) => {
172
+ return resolve(f);
173
+ })
174
+ .catch((e) => reject(e));
175
+ }
176
+ else {
177
+ resolve(null);
178
+ }
179
+ });
180
+ await (0, delete_directory_1.deleteDirectory)(options.assetsInfo.downloadMap.stitchFrames);
133
181
  return {
134
182
  getLogs: () => '',
135
- task: Promise.resolve(),
183
+ task: Promise.resolve(file),
136
184
  };
137
185
  }
138
186
  const ffmpegArgs = [
139
187
  ['-r', String(options.fps)],
140
- ...(((_j = options.internalOptions) === null || _j === void 0 ? void 0 : _j.preEncodedFileLocation)
141
- ? [['-i', (_k = options.internalOptions) === null || _k === void 0 ? void 0 : _k.preEncodedFileLocation]]
188
+ ...(((_m = options.internalOptions) === null || _m === void 0 ? void 0 : _m.preEncodedFileLocation)
189
+ ? [['-i', (_o = options.internalOptions) === null || _o === void 0 ? void 0 : _o.preEncodedFileLocation]]
142
190
  : [
143
191
  ['-f', 'image2'],
144
192
  ['-s', `${options.width}x${options.height}`],
145
193
  ['-start_number', String(options.assetsInfo.firstFrameIndex)],
146
194
  ['-i', options.assetsInfo.imageSequenceName],
147
195
  ]),
148
- ['-i', audio],
196
+ audio ? ['-i', audio] : null,
197
+ ((_p = options.numberOfGifLoops) !== null && _p !== void 0 ? _p : null) === null
198
+ ? null
199
+ : [
200
+ '-loop',
201
+ (0, convert_number_of_gif_loops_to_ffmpeg_1.convertNumberOfGifLoopsToFfmpegSyntax)((_q = options.numberOfGifLoops) !== null && _q !== void 0 ? _q : null),
202
+ ],
149
203
  // -c:v is the same as -vcodec as -codec:video
150
204
  // and specified the video codec.
151
205
  ['-c:v', encoderName],
152
- ...(((_l = options.internalOptions) === null || _l === void 0 ? void 0 : _l.preEncodedFileLocation)
206
+ ...(((_r = options.internalOptions) === null || _r === void 0 ? void 0 : _r.preEncodedFileLocation)
153
207
  ? []
154
208
  : [
155
209
  proResProfileName ? ['-profile:v', proResProfileName] : null,
@@ -160,7 +214,10 @@ const spawnFfmpeg = async (options) => {
160
214
  pixelFormat === 'yuva420p' ? ['-auto-alt-ref', '0'] : null,
161
215
  ['-b:v', '1M'],
162
216
  ]),
217
+ codec === 'h264' ? ['-movflags', 'faststart'] : null,
163
218
  audioCodecName ? ['-c:a', audioCodecName] : null,
219
+ // Set max bitrate up to 1024kbps, will choose lower if that's too much
220
+ audioCodecName ? ['-b:a', '512K'] : null,
164
221
  // Ignore metadata that may come from remote media
165
222
  ['-map_metadata', '-1'],
166
223
  [
@@ -169,19 +226,22 @@ const spawnFfmpeg = async (options) => {
169
226
  [`Made with Remotion`, packageJson ? packageJson.version : null].join(' '),
170
227
  ],
171
228
  options.force ? '-y' : null,
172
- options.outputLocation,
229
+ (_s = options.outputLocation) !== null && _s !== void 0 ? _s : tempFile,
173
230
  ];
174
231
  if (options.verbose) {
175
232
  console.log('Generated FFMPEG command:');
176
233
  console.log(ffmpegArgs);
177
234
  }
178
235
  const ffmpegString = ffmpegArgs.flat(2).filter(Boolean);
179
- const task = (0, execa_1.default)((_m = options.ffmpegExecutable) !== null && _m !== void 0 ? _m : 'ffmpeg', ffmpegString, {
236
+ const task = (0, execa_1.default)((_t = options.ffmpegExecutable) !== null && _t !== void 0 ? _t : 'ffmpeg', ffmpegString, {
180
237
  cwd: options.dir,
181
238
  });
239
+ (_u = options.cancelSignal) === null || _u === void 0 ? void 0 : _u.call(options, () => {
240
+ task.kill();
241
+ });
182
242
  let ffmpegOutput = '';
183
243
  let isFinished = false;
184
- (_o = task.stderr) === null || _o === void 0 ? void 0 : _o.on('data', (data) => {
244
+ (_v = task.stderr) === null || _v === void 0 ? void 0 : _v.on('data', (data) => {
185
245
  var _a;
186
246
  const str = data.toString();
187
247
  ffmpegOutput += str;
@@ -203,16 +263,40 @@ const spawnFfmpeg = async (options) => {
203
263
  }
204
264
  }
205
265
  });
206
- return { task, getLogs: () => ffmpegOutput };
266
+ return {
267
+ task: task.then(() => {
268
+ (0, delete_directory_1.deleteDirectory)(options.assetsInfo.downloadMap.audioPreprocessing);
269
+ if (tempFile === null) {
270
+ (0, delete_directory_1.deleteDirectory)(options.assetsInfo.downloadMap.stitchFrames);
271
+ return null;
272
+ }
273
+ return (0, promises_1.readFile)(tempFile)
274
+ .then((file) => {
275
+ return Promise.all([
276
+ file,
277
+ (0, delete_directory_1.deleteDirectory)(path_1.default.dirname(tempFile)),
278
+ (0, delete_directory_1.deleteDirectory)(options.assetsInfo.downloadMap.stitchFrames),
279
+ ]);
280
+ })
281
+ .then(([file]) => file);
282
+ }),
283
+ getLogs: () => ffmpegOutput,
284
+ };
207
285
  };
208
286
  exports.spawnFfmpeg = spawnFfmpeg;
209
287
  const stitchFramesToVideo = async (options) => {
210
288
  const { task, getLogs } = await (0, exports.spawnFfmpeg)(options);
211
- try {
212
- await task;
213
- }
214
- catch (err) {
289
+ const happyPath = task.catch(() => {
215
290
  throw new Error(getLogs());
216
- }
291
+ });
292
+ return Promise.race([
293
+ happyPath,
294
+ new Promise((_resolve, reject) => {
295
+ var _a;
296
+ (_a = options.cancelSignal) === null || _a === void 0 ? void 0 : _a.call(options, () => {
297
+ reject(new Error('stitchFramesToVideo() got cancelled'));
298
+ });
299
+ }),
300
+ ]);
217
301
  };
218
302
  exports.stitchFramesToVideo = stitchFramesToVideo;
@@ -1,4 +1,4 @@
1
- import { AssetVolume } from './assets/types';
1
+ import type { AssetVolume } from './assets/types';
2
2
  export declare const stringifyFfmpegFilter: ({ trimLeft, trimRight, channels, startInVideo, volume, fps, playbackRate, durationInFrames, assetDuration, }: {
3
3
  trimLeft: number;
4
4
  trimRight: number;
@@ -9,4 +9,4 @@ export declare const stringifyFfmpegFilter: ({ trimLeft, trimRight, channels, st
9
9
  durationInFrames: number;
10
10
  playbackRate: number;
11
11
  assetDuration: number | null;
12
- }) => string;
12
+ }) => string | null;
@@ -1,16 +1,19 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.stringifyFfmpegFilter = void 0;
4
- const remotion_1 = require("remotion");
5
4
  const calculate_atempo_1 = require("./assets/calculate-atempo");
6
5
  const ffmpeg_volume_expression_1 = require("./assets/ffmpeg-volume-expression");
7
6
  const sample_rate_1 = require("./sample-rate");
7
+ const truthy_1 = require("./truthy");
8
8
  const stringifyFfmpegFilter = ({ trimLeft, trimRight, channels, startInVideo, volume, fps, playbackRate, durationInFrames, assetDuration, }) => {
9
9
  const startInVideoSeconds = startInVideo / fps;
10
+ if (assetDuration && trimLeft >= assetDuration) {
11
+ return null;
12
+ }
10
13
  const volumeFilter = (0, ffmpeg_volume_expression_1.ffmpegVolumeExpression)({
11
14
  volume,
12
- startInVideo,
13
15
  fps,
16
+ trimLeft,
14
17
  });
15
18
  // Avoid setting filters if possible, as combining them can create noise
16
19
  const chunkLength = durationInFrames / fps;
@@ -25,6 +28,12 @@ const stringifyFfmpegFilter = ({ trimLeft, trimRight, channels, startInVideo, vo
25
28
  `atrim=${trimLeft.toFixed(6)}:${actualTrimRight.toFixed(6)}`,
26
29
  // then set the tempo
27
30
  (0, calculate_atempo_1.calculateATempo)(playbackRate),
31
+ // set the volume if needed
32
+ // The timings for volume must include whatever is in atrim, unless the volume
33
+ // filter gets applied before atrim
34
+ volumeFilter.value === '1'
35
+ ? null
36
+ : `volume=${volumeFilter.value}:eval=${volumeFilter.eval}`,
28
37
  // For n channels, we delay n + 1 channels.
29
38
  // This is because `ffprobe` for some audio files reports the wrong amount
30
39
  // of channels.
@@ -36,16 +45,12 @@ const stringifyFfmpegFilter = ({ trimLeft, trimRight, channels, startInVideo, vo
36
45
  : `adelay=${new Array(channels + 1)
37
46
  .fill((startInVideoSeconds * 1000).toFixed(0))
38
47
  .join('|')}`,
39
- // set the volume if needed
40
- volumeFilter.value === '1'
41
- ? null
42
- : `volume=${volumeFilter.value}:eval=${volumeFilter.eval}`,
43
48
  // Only in the end, we pad to the full length.
44
49
  padAtEnd > 0.0000001
45
50
  ? 'apad=pad_len=' + Math.round(padAtEnd * sample_rate_1.DEFAULT_SAMPLE_RATE)
46
51
  : null,
47
52
  ]
48
- .filter(remotion_1.Internals.truthy)
53
+ .filter(truthy_1.truthy)
49
54
  .join(',') +
50
55
  `[a0]`);
51
56
  };
@@ -1,4 +1,4 @@
1
- import { UnsymbolicatedStackFrame } from './parse-browser-error-stack';
1
+ import type { UnsymbolicatedStackFrame } from './parse-browser-error-stack';
2
2
  declare type ScriptLine = {
3
3
  lineNumber: number;
4
4
  content: string;
@@ -1,9 +1,9 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.symbolicateStackTrace = void 0;
4
- const remotion_1 = require("remotion");
5
4
  const source_map_1 = require("source-map");
6
5
  const read_file_1 = require("./assets/read-file");
6
+ const truthy_1 = require("./truthy");
7
7
  function extractSourceMapUrl(fileContents) {
8
8
  const regex = /\/\/[#@] ?sourceMappingURL=([^\s'"]+)\s*$/gm;
9
9
  let match = null;
@@ -74,7 +74,7 @@ const symbolicateStackTrace = async (frames) => {
74
74
  ...new Set(frames
75
75
  .map((f) => f.fileName)
76
76
  .filter((f) => f.startsWith('http://') || f.startsWith('https://'))
77
- .filter(remotion_1.Internals.truthy)),
77
+ .filter(truthy_1.truthy)),
78
78
  ];
79
79
  const maps = await Promise.all(uniqueFileNames.map(async (fileName) => {
80
80
  const fileContents = await fetchUrl(fileName);
@@ -105,6 +105,6 @@ const symbolicateStackTrace = async (frames) => {
105
105
  originalScriptCode: scriptCode,
106
106
  };
107
107
  })
108
- .filter(remotion_1.Internals.truthy);
108
+ .filter(truthy_1.truthy);
109
109
  };
110
110
  exports.symbolicateStackTrace = symbolicateStackTrace;
package/dist/tmp-dir.js CHANGED
@@ -1,7 +1,11 @@
1
1
  "use strict";
2
2
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
3
  if (k2 === undefined) k2 = k;
4
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
5
9
  }) : (function(o, m, k, k2) {
6
10
  if (k2 === undefined) k2 = k;
7
11
  o[k2] = m[k];
@@ -0,0 +1,3 @@
1
+ declare type Truthy<T> = T extends false | '' | 0 | null | undefined ? never : T;
2
+ export declare function truthy<T>(value: T): value is Truthy<T>;
3
+ export {};
package/dist/truthy.js ADDED
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.truthy = void 0;
4
+ function truthy(value) {
5
+ return Boolean(value);
6
+ }
7
+ exports.truthy = truthy;
package/dist/types.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { RenderAssetInfo } from 'remotion';
1
+ import type { RenderAssetInfo } from './assets/download-map';
2
2
  export declare type RenderFramesOutput = {
3
3
  frameCount: number;
4
4
  assetsInfo: RenderAssetInfo;
@@ -0,0 +1 @@
1
+ export declare const validateConcurrency: (value: unknown, setting: string) => void;
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.validateConcurrency = void 0;
4
+ const validateConcurrency = (value, setting) => {
5
+ if (typeof value === 'undefined') {
6
+ return;
7
+ }
8
+ if (value === null) {
9
+ return;
10
+ }
11
+ if (typeof value !== 'number') {
12
+ throw new Error(setting + ' must be a number but is ' + value);
13
+ }
14
+ if (value % 1 !== 0) {
15
+ throw new Error(setting + ' must be an integer, but is ' + value);
16
+ }
17
+ if (value < 1) {
18
+ throw new Error(setting + ' must be at least 1, but is ' + value);
19
+ }
20
+ if (value > require('os').cpus().length) {
21
+ throw new Error(`${setting} is set higher than the amount of CPU cores available. Available CPU cores: ${require('os').cpus().length}, value set: ${value}`);
22
+ }
23
+ };
24
+ exports.validateConcurrency = validateConcurrency;
@@ -1,4 +1,4 @@
1
- import { Codec } from 'remotion';
1
+ import type { Codec } from './codec';
2
2
  export declare const validateEvenDimensionsWithCodec: ({ width, height, codec, scale, }: {
3
3
  width: number;
4
4
  height: number;
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.validateEvenDimensionsWithCodec = void 0;
4
- const remotion_1 = require("remotion");
4
+ const truthy_1 = require("./truthy");
5
5
  const validateEvenDimensionsWithCodec = ({ width, height, codec, scale, }) => {
6
6
  if (codec !== 'h264-mkv' && codec !== 'h264' && codec !== 'h265') {
7
7
  return;
@@ -17,7 +17,7 @@ const validateEvenDimensionsWithCodec = ({ width, height, codec, scale, }) => {
17
17
  ? `Change the width to ${Math.floor(width - 1)}px to fix this issue.`
18
18
  : `You have used the "scale" option which might be the reason for the problem: The original width is ${width} and the scale is ${scale}x, which was multiplied to get the actual width.`,
19
19
  ]
20
- .filter(remotion_1.Internals.truthy)
20
+ .filter(truthy_1.truthy)
21
21
  .join(' ');
22
22
  throw new Error(message);
23
23
  }
@@ -0,0 +1 @@
1
+ export declare const validateEveryNthFrame: (everyNthFrame: unknown) => void;
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.validateEveryNthFrame = void 0;
4
+ const validateEveryNthFrame = (everyNthFrame) => {
5
+ if (typeof everyNthFrame === 'undefined') {
6
+ throw new TypeError(`Argument missing for parameter "everyNthFrame"`);
7
+ }
8
+ if (typeof everyNthFrame !== 'number') {
9
+ throw new TypeError(`Argument passed to "everyNthFrame" is not a number: ${everyNthFrame}`);
10
+ }
11
+ if (everyNthFrame < 1) {
12
+ throw new RangeError(`The value for "everyNthFrame" cannot be below 1, but is ${everyNthFrame}`);
13
+ }
14
+ if (!Number.isFinite(everyNthFrame)) {
15
+ throw new RangeError(`"everyNthFrame" ${everyNthFrame} is not finite`);
16
+ }
17
+ if (everyNthFrame % 1 !== 0) {
18
+ throw new RangeError(`Argument for everyNthFrame must be an integer, but got ${everyNthFrame}`);
19
+ }
20
+ };
21
+ exports.validateEveryNthFrame = validateEveryNthFrame;
@@ -7,7 +7,6 @@ exports.validateFfmpeg = exports.binaryExists = void 0;
7
7
  const execa_1 = __importDefault(require("execa"));
8
8
  const fs_1 = require("fs");
9
9
  const os_1 = __importDefault(require("os"));
10
- const remotion_1 = require("remotion");
11
10
  const existsMap = {};
12
11
  const binaryExists = async (name, localFFmpeg) => {
13
12
  if (typeof existsMap[name] !== 'undefined') {
@@ -42,9 +41,9 @@ const isHomebrewInstalled = () => {
42
41
  const validateFfmpeg = async (customFfmpegBinary) => {
43
42
  const ffmpegExists = await (0, exports.binaryExists)('ffmpeg', customFfmpegBinary);
44
43
  if (!ffmpegExists) {
45
- if (remotion_1.Internals.getCustomFfmpegExecutable()) {
44
+ if (customFfmpegBinary) {
46
45
  console.error('FFmpeg executable not found:');
47
- console.error(remotion_1.Internals.getCustomFfmpegExecutable());
46
+ console.error(customFfmpegBinary);
48
47
  process.exit(1);
49
48
  }
50
49
  console.error('It looks like FFMPEG is not installed');
@@ -0,0 +1 @@
1
+ export declare const validateFrame: (frame: number, durationInFrames: number) => void;
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.validateFrame = void 0;
4
+ const validateFrame = (frame, durationInFrames) => {
5
+ if (typeof frame === 'undefined') {
6
+ throw new TypeError(`Argument missing for parameter "frame"`);
7
+ }
8
+ if (typeof frame !== 'number') {
9
+ throw new TypeError(`Argument passed for "frame" is not a number: ${frame}`);
10
+ }
11
+ if (frame < 0) {
12
+ throw new RangeError(`Frame ${frame} cannot be negative`);
13
+ }
14
+ if (!Number.isFinite(frame)) {
15
+ throw new RangeError(`Frame ${frame} is not finite`);
16
+ }
17
+ if (frame % 1 !== 0) {
18
+ throw new RangeError(`Argument for frame must be an integer, but got ${frame}`);
19
+ }
20
+ if (frame > durationInFrames - 1) {
21
+ throw new RangeError(`Cannot use frame ${frame}: Duration of composition is ${durationInFrames}, therefore the highest frame that can be rendered is ${durationInFrames - 1}`);
22
+ }
23
+ };
24
+ exports.validateFrame = validateFrame;
@@ -0,0 +1,5 @@
1
+ declare const validRenderers: readonly ["swangle", "angle", "egl", "swiftshader"];
2
+ export declare type OpenGlRenderer = typeof validRenderers[number];
3
+ export declare const DEFAULT_OPENGL_RENDERER: OpenGlRenderer | null;
4
+ export declare const validateOpenGlRenderer: (option: OpenGlRenderer | null) => OpenGlRenderer | null;
5
+ export {};
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.validateOpenGlRenderer = exports.DEFAULT_OPENGL_RENDERER = void 0;
4
+ const validRenderers = ['swangle', 'angle', 'egl', 'swiftshader'];
5
+ exports.DEFAULT_OPENGL_RENDERER = null;
6
+ const validateOpenGlRenderer = (option) => {
7
+ if (option === null) {
8
+ return null;
9
+ }
10
+ if (!validRenderers.includes(option)) {
11
+ throw new TypeError(`${option} is not a valid GL backend. Accepted values: ${validRenderers.join(', ')}`);
12
+ }
13
+ return option;
14
+ };
15
+ exports.validateOpenGlRenderer = validateOpenGlRenderer;
@@ -1,2 +1,2 @@
1
- import { Codec } from 'remotion';
1
+ import type { Codec } from './codec';
2
2
  export declare const validateOutputFilename: (codec: Codec, extension: string | null) => void;
@@ -48,5 +48,10 @@ const validateOutputFilename = (codec, extension) => {
48
48
  throw new TypeError("When using the 'wav' codec, the output location must end in .wav.");
49
49
  }
50
50
  }
51
+ if (codec === 'gif') {
52
+ if (extension !== 'gif') {
53
+ throw new TypeError('When using the GIF codec, the output filename must end in .gif.');
54
+ }
55
+ }
51
56
  };
52
57
  exports.validateOutputFilename = validateOutputFilename;
@@ -0,0 +1,3 @@
1
+ export declare const registerErrorSymbolicationLock: () => number;
2
+ export declare const unlockErrorSymbolicationLock: (id: number) => void;
3
+ export declare const waitForSymbolicationToBeDone: () => Promise<unknown>;