@remotion/renderer 4.0.0-offthread.9 → 4.0.0-prefetch.10

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 (429) 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 +16 -12
  5. package/dist/assets/download-and-map-assets-to-file.js +145 -65
  6. package/dist/assets/download-file.d.ts +10 -5
  7. package/dist/assets/download-file.js +20 -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 +2 -3
  11. package/dist/assets/ffmpeg-volume-expression.js +2 -3
  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 +8 -0
  107. package/dist/codec-supports-media.js +56 -0
  108. package/dist/codec.d.ts +4 -0
  109. package/dist/codec.js +16 -0
  110. package/dist/combine-videos.d.ts +3 -2
  111. package/dist/combine-videos.js +17 -7
  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 +2 -1
  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 +1 -1
  124. package/dist/delay-render-embedded-stack.d.ts +1 -1
  125. package/dist/ensure-frames-in-order.d.ts +1 -1
  126. package/dist/ensure-frames-in-order.js +3 -2
  127. package/dist/ensure-presentation-timestamp.d.ts +2 -0
  128. package/dist/ensure-presentation-timestamp.js +69 -0
  129. package/dist/error-handling/handle-javascript-exception.d.ts +2 -2
  130. package/dist/error-handling/handle-javascript-exception.js +3 -4
  131. package/dist/error-handling/symbolicate-error.d.ts +1 -1
  132. package/dist/error-handling/symbolicateable-error.d.ts +1 -1
  133. package/dist/extract-frame-from-video.d.ts +8 -4
  134. package/dist/extract-frame-from-video.js +173 -55
  135. package/dist/ffmpeg-executable.d.ts +1 -0
  136. package/dist/ffmpeg-executable.js +2 -0
  137. package/dist/ffmpeg-filter-file.d.ts +2 -1
  138. package/dist/ffmpeg-filter-file.js +4 -6
  139. package/dist/frame-range.d.ts +2 -0
  140. package/dist/frame-range.js +49 -0
  141. package/dist/get-audio-codec-name.d.ts +1 -1
  142. package/dist/get-audio-codec-name.js +2 -2
  143. package/dist/get-browser-instance.d.ts +4 -3
  144. package/dist/get-browser-instance.js +2 -2
  145. package/dist/get-codec-name.d.ts +1 -1
  146. package/dist/get-codec-name.js +5 -2
  147. package/dist/get-compositions.d.ts +12 -4
  148. package/dist/get-compositions.js +18 -11
  149. package/dist/get-duration-from-frame-range.d.ts +1 -2
  150. package/dist/get-duration-from-frame-range.js +13 -9
  151. package/dist/get-extension-from-codec.d.ts +2 -2
  152. package/dist/get-extension-from-codec.js +5 -0
  153. package/dist/get-extension-of-filename.d.ts +1 -1
  154. package/dist/get-extension-of-filename.js +3 -0
  155. package/dist/get-frame-padded-index.d.ts +14 -0
  156. package/dist/get-frame-padded-index.js +33 -0
  157. package/dist/get-frame-to-render.d.ts +1 -1
  158. package/dist/get-local-browser-executable.d.ts +2 -1
  159. package/dist/get-local-browser-executable.js +7 -5
  160. package/dist/get-port.js +30 -37
  161. package/dist/get-prores-profile-name.d.ts +2 -1
  162. package/dist/get-video-info.d.ts +3 -0
  163. package/dist/get-video-info.js +49 -0
  164. package/dist/get-video-threads-flag.d.ts +1 -0
  165. package/dist/get-video-threads-flag.js +18 -0
  166. package/dist/guess-extension-for-media.d.ts +1 -0
  167. package/dist/guess-extension-for-media.js +27 -0
  168. package/dist/image-format.d.ts +6 -1
  169. package/dist/image-format.js +25 -1
  170. package/dist/index.d.ts +89 -14
  171. package/dist/index.js +91 -2
  172. package/dist/is-audio-codec.d.ts +2 -0
  173. package/dist/is-audio-codec.js +7 -0
  174. package/dist/is-beyond-last-frame.d.ts +3 -2
  175. package/dist/is-beyond-last-frame.js +5 -5
  176. package/dist/last-frame-from-video-cache.d.ts +9 -4
  177. package/dist/last-frame-from-video-cache.js +24 -21
  178. package/dist/log-level.d.ts +4 -0
  179. package/dist/log-level.js +15 -0
  180. package/dist/merge-audio-track.d.ts +3 -1
  181. package/dist/merge-audio-track.js +12 -6
  182. package/dist/mime-db.d.ts +6 -0
  183. package/dist/mime-db.js +8636 -0
  184. package/dist/mime-types.d.ts +3 -0
  185. package/dist/mime-types.js +94 -0
  186. package/dist/offthread-video-server.d.ts +9 -5
  187. package/dist/offthread-video-server.js +31 -10
  188. package/dist/open-browser.d.ts +5 -3
  189. package/dist/open-browser.js +15 -15
  190. package/dist/overwrite.d.ts +1 -0
  191. package/dist/overwrite.js +4 -0
  192. package/dist/perf.d.ts +5 -0
  193. package/dist/perf.js +35 -0
  194. package/dist/pixel-format.d.ts +5 -0
  195. package/dist/pixel-format.js +26 -0
  196. package/dist/prepare-server.d.ts +6 -4
  197. package/dist/prepare-server.js +21 -5
  198. package/dist/preprocess-audio-track.d.ts +5 -2
  199. package/dist/preprocess-audio-track.js +3 -3
  200. package/dist/prespawn-ffmpeg.d.ts +6 -2
  201. package/dist/prespawn-ffmpeg.js +10 -7
  202. package/dist/prestitcher-memory-usage.d.ts +12 -0
  203. package/dist/prestitcher-memory-usage.js +30 -0
  204. package/dist/prores-profile.d.ts +5 -0
  205. package/dist/prores-profile.js +23 -0
  206. package/dist/provide-screenshot.d.ts +5 -4
  207. package/dist/provide-screenshot.js +0 -1
  208. package/dist/puppeteer-evaluate.d.ts +1 -1
  209. package/dist/puppeteer-evaluate.js +3 -4
  210. package/dist/puppeteer-screenshot.d.ts +3 -2
  211. package/dist/puppeteer-screenshot.js +2 -4
  212. package/dist/quality.d.ts +1 -0
  213. package/dist/quality.js +21 -0
  214. package/dist/render-frames.d.ts +21 -9
  215. package/dist/render-frames.js +111 -82
  216. package/dist/render-media.d.ts +33 -10
  217. package/dist/render-media.js +83 -25
  218. package/dist/render-still.d.ts +18 -7
  219. package/dist/render-still.js +44 -16
  220. package/dist/screenshot-dom-element.d.ts +6 -7
  221. package/dist/screenshot-dom-element.js +3 -6
  222. package/dist/screenshot-task.d.ts +3 -2
  223. package/dist/screenshot-task.js +36 -23
  224. package/dist/seek-to-frame.d.ts +2 -2
  225. package/dist/seek-to-frame.js +2 -2
  226. package/dist/serve-handler/index.d.ts +4 -0
  227. package/dist/serve-handler/index.js +204 -0
  228. package/dist/serve-handler/is-path-inside.d.ts +1 -0
  229. package/dist/serve-handler/is-path-inside.js +27 -0
  230. package/dist/serve-handler/range-parser.d.ts +13 -0
  231. package/dist/serve-handler/range-parser.js +57 -0
  232. package/dist/serve-static.d.ts +5 -3
  233. package/dist/serve-static.js +19 -8
  234. package/dist/set-props-and-env.d.ts +4 -2
  235. package/dist/set-props-and-env.js +42 -11
  236. package/dist/stitch-frames-to-video.d.ts +16 -6
  237. package/dist/stitch-frames-to-video.js +112 -42
  238. package/dist/stringify-ffmpeg-filter.d.ts +2 -2
  239. package/dist/stringify-ffmpeg-filter.js +11 -9
  240. package/dist/symbolicate-stacktrace.d.ts +1 -1
  241. package/dist/symbolicate-stacktrace.js +3 -3
  242. package/dist/truthy.d.ts +3 -0
  243. package/dist/truthy.js +7 -0
  244. package/dist/types.d.ts +1 -1
  245. package/dist/validate-concurrency.d.ts +1 -0
  246. package/dist/validate-concurrency.js +24 -0
  247. package/dist/validate-even-dimensions-with-codec.d.ts +1 -1
  248. package/dist/validate-even-dimensions-with-codec.js +2 -2
  249. package/dist/validate-every-nth-frame.d.ts +1 -0
  250. package/dist/validate-every-nth-frame.js +21 -0
  251. package/dist/validate-ffmpeg.js +2 -3
  252. package/dist/validate-frame.d.ts +1 -0
  253. package/dist/validate-frame.js +24 -0
  254. package/dist/validate-opengl-renderer.d.ts +5 -0
  255. package/dist/validate-opengl-renderer.js +15 -0
  256. package/dist/validate-output-filename.d.ts +1 -1
  257. package/dist/validate-output-filename.js +5 -0
  258. package/dist/wait-for-symbolication-error-to-be-done.d.ts +3 -0
  259. package/dist/wait-for-symbolication-error-to-be-done.js +34 -0
  260. package/dist/ws/ws-types.d.ts +14 -0
  261. package/dist/ws/ws-types.js +10 -0
  262. package/package.json +13 -15
  263. package/tsconfig.json +2 -2
  264. package/types/ws/index.d.ts +509 -0
  265. package/vitest.config.ts +8 -0
  266. package/dist/assets/calculate-asset-positions.d.ts.map +0 -1
  267. package/dist/assets/calculate-asset-positions.js.map +0 -1
  268. package/dist/assets/calculate-atempo.d.ts.map +0 -1
  269. package/dist/assets/calculate-atempo.js.map +0 -1
  270. package/dist/assets/convert-assets-to-file-urls.d.ts.map +0 -1
  271. package/dist/assets/convert-assets-to-file-urls.js.map +0 -1
  272. package/dist/assets/download-and-map-assets-to-file.d.ts.map +0 -1
  273. package/dist/assets/download-and-map-assets-to-file.js.map +0 -1
  274. package/dist/assets/download-file.d.ts.map +0 -1
  275. package/dist/assets/download-file.js.map +0 -1
  276. package/dist/assets/ffmpeg-volume-expression.d.ts.map +0 -1
  277. package/dist/assets/ffmpeg-volume-expression.js.map +0 -1
  278. package/dist/assets/flatten-volume-array.d.ts.map +0 -1
  279. package/dist/assets/flatten-volume-array.js.map +0 -1
  280. package/dist/assets/get-audio-channels.d.ts.map +0 -1
  281. package/dist/assets/get-audio-channels.js.map +0 -1
  282. package/dist/assets/read-file.d.ts.map +0 -1
  283. package/dist/assets/read-file.js.map +0 -1
  284. package/dist/assets/round-volume-to-avoid-stack-overflow.d.ts.map +0 -1
  285. package/dist/assets/round-volume-to-avoid-stack-overflow.js.map +0 -1
  286. package/dist/assets/sanitize-filename.d.ts.map +0 -1
  287. package/dist/assets/sanitize-filename.js.map +0 -1
  288. package/dist/assets/sanitize-filepath.d.ts.map +0 -1
  289. package/dist/assets/sanitize-filepath.js.map +0 -1
  290. package/dist/assets/truncate-utf8-bytes.d.ts.map +0 -1
  291. package/dist/assets/truncate-utf8-bytes.js.map +0 -1
  292. package/dist/assets/types.d.ts.map +0 -1
  293. package/dist/assets/types.js.map +0 -1
  294. package/dist/browser-log.d.ts.map +0 -1
  295. package/dist/browser-log.js.map +0 -1
  296. package/dist/calculate-ffmpeg-filters.d.ts.map +0 -1
  297. package/dist/calculate-ffmpeg-filters.js.map +0 -1
  298. package/dist/can-use-parallel-encoding.d.ts.map +0 -1
  299. package/dist/can-use-parallel-encoding.js.map +0 -1
  300. package/dist/chunk.d.ts.map +0 -1
  301. package/dist/chunk.js.map +0 -1
  302. package/dist/combine-videos.d.ts.map +0 -1
  303. package/dist/combine-videos.js.map +0 -1
  304. package/dist/convert-to-pcm.d.ts.map +0 -1
  305. package/dist/convert-to-pcm.js.map +0 -1
  306. package/dist/create-ffmpeg-complex-filter.d.ts.map +0 -1
  307. package/dist/create-ffmpeg-complex-filter.js.map +0 -1
  308. package/dist/create-ffmpeg-merge-filter.d.ts.map +0 -1
  309. package/dist/create-ffmpeg-merge-filter.js.map +0 -1
  310. package/dist/create-silent-audio.d.ts.map +0 -1
  311. package/dist/create-silent-audio.js.map +0 -1
  312. package/dist/cycle-browser-tabs.d.ts.map +0 -1
  313. package/dist/cycle-browser-tabs.js.map +0 -1
  314. package/dist/delay-render-embedded-stack.d.ts.map +0 -1
  315. package/dist/delay-render-embedded-stack.js.map +0 -1
  316. package/dist/delete-directory.d.ts.map +0 -1
  317. package/dist/delete-directory.js.map +0 -1
  318. package/dist/ensure-frames-in-order.d.ts.map +0 -1
  319. package/dist/ensure-frames-in-order.js.map +0 -1
  320. package/dist/ensure-output-directory.d.ts.map +0 -1
  321. package/dist/ensure-output-directory.js.map +0 -1
  322. package/dist/error-handling/handle-javascript-exception.d.ts.map +0 -1
  323. package/dist/error-handling/handle-javascript-exception.js.map +0 -1
  324. package/dist/error-handling/symbolicate-error.d.ts.map +0 -1
  325. package/dist/error-handling/symbolicate-error.js.map +0 -1
  326. package/dist/error-handling/symbolicateable-error.d.ts.map +0 -1
  327. package/dist/error-handling/symbolicateable-error.js.map +0 -1
  328. package/dist/ffmpeg-filter-file.d.ts.map +0 -1
  329. package/dist/ffmpeg-filter-file.js.map +0 -1
  330. package/dist/ffmpeg-flags.d.ts.map +0 -1
  331. package/dist/ffmpeg-flags.js.map +0 -1
  332. package/dist/get-audio-codec-name.d.ts.map +0 -1
  333. package/dist/get-audio-codec-name.js.map +0 -1
  334. package/dist/get-browser-instance.d.ts.map +0 -1
  335. package/dist/get-browser-instance.js.map +0 -1
  336. package/dist/get-codec-name.d.ts.map +0 -1
  337. package/dist/get-codec-name.js.map +0 -1
  338. package/dist/get-compositions.d.ts.map +0 -1
  339. package/dist/get-compositions.js.map +0 -1
  340. package/dist/get-concurrency.d.ts.map +0 -1
  341. package/dist/get-concurrency.js.map +0 -1
  342. package/dist/get-duration-from-frame-range.d.ts.map +0 -1
  343. package/dist/get-duration-from-frame-range.js.map +0 -1
  344. package/dist/get-extension-from-codec.d.ts.map +0 -1
  345. package/dist/get-extension-from-codec.js.map +0 -1
  346. package/dist/get-frame-to-render.d.ts.map +0 -1
  347. package/dist/get-frame-to-render.js.map +0 -1
  348. package/dist/get-local-browser-executable.d.ts.map +0 -1
  349. package/dist/get-local-browser-executable.js.map +0 -1
  350. package/dist/get-port.d.ts.map +0 -1
  351. package/dist/get-port.js.map +0 -1
  352. package/dist/get-prores-profile-name.d.ts.map +0 -1
  353. package/dist/get-prores-profile-name.js.map +0 -1
  354. package/dist/image-format.d.ts.map +0 -1
  355. package/dist/image-format.js.map +0 -1
  356. package/dist/index.d.ts.map +0 -1
  357. package/dist/index.js.map +0 -1
  358. package/dist/is-serve-url.d.ts.map +0 -1
  359. package/dist/is-serve-url.js.map +0 -1
  360. package/dist/legacy-webpack-config.d.ts.map +0 -1
  361. package/dist/legacy-webpack-config.js.map +0 -1
  362. package/dist/make-assets-download-dir.d.ts +0 -1
  363. package/dist/make-assets-download-dir.d.ts.map +0 -1
  364. package/dist/make-assets-download-dir.js +0 -8
  365. package/dist/make-assets-download-dir.js.map +0 -1
  366. package/dist/merge-audio-track.d.ts.map +0 -1
  367. package/dist/merge-audio-track.js.map +0 -1
  368. package/dist/normalize-serve-url.d.ts.map +0 -1
  369. package/dist/normalize-serve-url.js.map +0 -1
  370. package/dist/open-browser.d.ts.map +0 -1
  371. package/dist/open-browser.js.map +0 -1
  372. package/dist/p-limit.d.ts.map +0 -1
  373. package/dist/p-limit.js.map +0 -1
  374. package/dist/parse-browser-error-stack.d.ts.map +0 -1
  375. package/dist/parse-browser-error-stack.js.map +0 -1
  376. package/dist/parse-ffmpeg-progress.d.ts.map +0 -1
  377. package/dist/parse-ffmpeg-progress.js.map +0 -1
  378. package/dist/pool.d.ts.map +0 -1
  379. package/dist/pool.js.map +0 -1
  380. package/dist/prepare-server.d.ts.map +0 -1
  381. package/dist/prepare-server.js.map +0 -1
  382. package/dist/preprocess-audio-track.d.ts.map +0 -1
  383. package/dist/preprocess-audio-track.js.map +0 -1
  384. package/dist/prespawn-ffmpeg.d.ts.map +0 -1
  385. package/dist/prespawn-ffmpeg.js.map +0 -1
  386. package/dist/provide-screenshot.d.ts.map +0 -1
  387. package/dist/provide-screenshot.js.map +0 -1
  388. package/dist/puppeteer-evaluate.d.ts.map +0 -1
  389. package/dist/puppeteer-evaluate.js.map +0 -1
  390. package/dist/puppeteer-screenshot.d.ts.map +0 -1
  391. package/dist/puppeteer-screenshot.js.map +0 -1
  392. package/dist/render-frames.d.ts.map +0 -1
  393. package/dist/render-frames.js.map +0 -1
  394. package/dist/render-media.d.ts.map +0 -1
  395. package/dist/render-media.js.map +0 -1
  396. package/dist/render-still.d.ts.map +0 -1
  397. package/dist/render-still.js.map +0 -1
  398. package/dist/resolve-asset-src.d.ts.map +0 -1
  399. package/dist/resolve-asset-src.js.map +0 -1
  400. package/dist/sample-rate.d.ts.map +0 -1
  401. package/dist/sample-rate.js.map +0 -1
  402. package/dist/screenshot-dom-element.d.ts.map +0 -1
  403. package/dist/screenshot-dom-element.js.map +0 -1
  404. package/dist/screenshot-task.d.ts.map +0 -1
  405. package/dist/screenshot-task.js.map +0 -1
  406. package/dist/seek-to-frame.d.ts.map +0 -1
  407. package/dist/seek-to-frame.js.map +0 -1
  408. package/dist/serve-static.d.ts.map +0 -1
  409. package/dist/serve-static.js.map +0 -1
  410. package/dist/set-props-and-env.d.ts.map +0 -1
  411. package/dist/set-props-and-env.js.map +0 -1
  412. package/dist/stitch-frames-to-video.d.ts.map +0 -1
  413. package/dist/stitch-frames-to-video.js.map +0 -1
  414. package/dist/stringify-ffmpeg-filter.d.ts.map +0 -1
  415. package/dist/stringify-ffmpeg-filter.js.map +0 -1
  416. package/dist/symbolicate-stacktrace.d.ts.map +0 -1
  417. package/dist/symbolicate-stacktrace.js.map +0 -1
  418. package/dist/tmp-dir.d.ts.map +0 -1
  419. package/dist/tmp-dir.js.map +0 -1
  420. package/dist/types.d.ts.map +0 -1
  421. package/dist/types.js.map +0 -1
  422. package/dist/validate-even-dimensions-with-codec.d.ts.map +0 -1
  423. package/dist/validate-even-dimensions-with-codec.js.map +0 -1
  424. package/dist/validate-ffmpeg.d.ts.map +0 -1
  425. package/dist/validate-ffmpeg.js.map +0 -1
  426. package/dist/validate-puppeteer-timeout.d.ts.map +0 -1
  427. package/dist/validate-puppeteer-timeout.js.map +0 -1
  428. package/dist/validate-scale.d.ts.map +0 -1
  429. package/dist/validate-scale.js.map +0 -1
@@ -0,0 +1,3 @@
1
+ export declare const getExt: (contentType: string) => string | null;
2
+ export declare function mimeLookup(path: string): string | false;
3
+ export declare function mimeContentType(str: string): false | string;
@@ -0,0 +1,94 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.mimeContentType = exports.mimeLookup = exports.getExt = void 0;
4
+ const path_1 = require("path");
5
+ const mime_db_1 = require("./mime-db");
6
+ const extensions = {};
7
+ const types = {};
8
+ // Populate the extensions/types maps
9
+ populateMaps(extensions, {});
10
+ const getExt = (contentType) => {
11
+ var _a, _b, _c;
12
+ return (_c = (_b = (_a = mime_db_1.mimeDb[contentType.toLowerCase()]) === null || _a === void 0 ? void 0 : _a.extensions) === null || _b === void 0 ? void 0 : _b[0]) !== null && _c !== void 0 ? _c : null;
13
+ };
14
+ exports.getExt = getExt;
15
+ function mimeLookup(path) {
16
+ if (!path || typeof path !== 'string') {
17
+ return false;
18
+ }
19
+ // get the extension ("ext" or ".ext" or full path)
20
+ const ext = (0, path_1.extname)('.' + path)
21
+ .toLowerCase()
22
+ .substr(1);
23
+ if (!ext) {
24
+ return false;
25
+ }
26
+ return types[ext] || false;
27
+ }
28
+ exports.mimeLookup = mimeLookup;
29
+ /**
30
+ * Populate the extensions and types maps.
31
+ * @private
32
+ */
33
+ function populateMaps(exts, _types) {
34
+ // source preference (least -> most)
35
+ const preference = ['nginx', 'apache', undefined, 'iana'];
36
+ Object.keys(mime_db_1.mimeDb).forEach((type) => {
37
+ const mime = mime_db_1.mimeDb[type];
38
+ const _exts = mime.extensions;
39
+ if (!_exts || !_exts.length) {
40
+ return;
41
+ }
42
+ // mime -> extensions
43
+ exts[type] = _exts;
44
+ // extension -> mime
45
+ for (let i = 0; i < _exts.length; i++) {
46
+ const _ext = _exts[i];
47
+ if (_types[_ext]) {
48
+ const from = preference.indexOf(mime_db_1.mimeDb[_types[_ext]].source);
49
+ const to = preference.indexOf(mime.source);
50
+ if (_types[_ext] !== 'application/octet-stream' &&
51
+ (from > to ||
52
+ (from === to && _types[_ext].substr(0, 12) === 'application/'))) {
53
+ // skip the remapping
54
+ continue;
55
+ }
56
+ }
57
+ // set the extension -> mime
58
+ types[_ext] = type;
59
+ }
60
+ });
61
+ }
62
+ function mimeContentType(str) {
63
+ if (!str || typeof str !== 'string') {
64
+ return false;
65
+ }
66
+ let mime = str.indexOf('/') === -1 ? mimeLookup(str) : str;
67
+ if (!mime) {
68
+ return false;
69
+ }
70
+ if (mime.indexOf('charset') === -1) {
71
+ const _charset = charset(mime);
72
+ if (_charset)
73
+ mime += '; charset=' + _charset.toLowerCase();
74
+ }
75
+ return mime;
76
+ }
77
+ exports.mimeContentType = mimeContentType;
78
+ const EXTRACT_TYPE_REGEXP = /^\s*([^;\s]*)(?:;|\s|$)/;
79
+ const TEXT_TYPE_REGEXP = /^text\//i;
80
+ function charset(type) {
81
+ if (!type || typeof type !== 'string') {
82
+ return false;
83
+ }
84
+ const match = EXTRACT_TYPE_REGEXP.exec(type);
85
+ const mime = match && mime_db_1.mimeDb[match[1].toLowerCase()];
86
+ if (mime === null || mime === void 0 ? void 0 : mime.charset) {
87
+ return mime.charset;
88
+ }
89
+ // default text/* to utf-8
90
+ if (match && TEXT_TYPE_REGEXP.test(match[1])) {
91
+ return 'UTF-8';
92
+ }
93
+ return false;
94
+ }
@@ -1,13 +1,17 @@
1
- import { RequestListener } from 'http';
2
- import { FfmpegExecutable } from 'remotion';
3
- import { RenderMediaOnDownload } from './assets/download-and-map-assets-to-file';
1
+ import type { RequestListener } from 'http';
2
+ import type { OffthreadVideoImageFormat } from 'remotion';
3
+ import type { RenderMediaOnDownload } from './assets/download-and-map-assets-to-file';
4
+ import type { DownloadMap } from './assets/download-map';
5
+ import type { FfmpegExecutable } from './ffmpeg-executable';
4
6
  export declare const extractUrlAndSourceFromUrl: (url: string) => {
5
7
  src: string;
6
8
  time: number;
9
+ imageFormat: OffthreadVideoImageFormat;
7
10
  };
8
- export declare const startOffthreadVideoServer: ({ ffmpegExecutable, downloadDir, onDownload, onError, }: {
11
+ export declare const startOffthreadVideoServer: ({ ffmpegExecutable, ffprobeExecutable, onDownload, onError, downloadMap, }: {
9
12
  ffmpegExecutable: FfmpegExecutable;
10
- downloadDir: string;
13
+ ffprobeExecutable: FfmpegExecutable;
11
14
  onDownload: RenderMediaOnDownload;
12
15
  onError: (err: Error) => void;
16
+ downloadMap: DownloadMap;
13
17
  }) => RequestListener;
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.startOffthreadVideoServer = exports.extractUrlAndSourceFromUrl = void 0;
4
+ const remotion_1 = require("remotion");
4
5
  const url_1 = require("url");
5
6
  const download_and_map_assets_to_file_1 = require("./assets/download-and-map-assets-to-file");
6
7
  const extract_frame_from_video_1 = require("./extract-frame-from-video");
@@ -19,10 +20,19 @@ const extractUrlAndSourceFromUrl = (url) => {
19
20
  if (!time) {
20
21
  throw new Error('Did not get `time` parameter');
21
22
  }
22
- return { src, time: parseFloat(time) };
23
+ const imageFormat = params.get('imageFormat');
24
+ if (!imageFormat) {
25
+ throw new TypeError('Did not get `imageFormat` parameter');
26
+ }
27
+ remotion_1.Internals.validateOffthreadVideoImageFormat(imageFormat);
28
+ return {
29
+ src,
30
+ time: parseFloat(time),
31
+ imageFormat: imageFormat,
32
+ };
23
33
  };
24
34
  exports.extractUrlAndSourceFromUrl = extractUrlAndSourceFromUrl;
25
- const startOffthreadVideoServer = ({ ffmpegExecutable, downloadDir, onDownload, onError, }) => {
35
+ const startOffthreadVideoServer = ({ ffmpegExecutable, ffprobeExecutable, onDownload, onError, downloadMap, }) => {
26
36
  return (req, res) => {
27
37
  if (!req.url) {
28
38
  throw new Error('Request came in without URL');
@@ -32,19 +42,29 @@ const startOffthreadVideoServer = ({ ffmpegExecutable, downloadDir, onDownload,
32
42
  res.end();
33
43
  return;
34
44
  }
45
+ const { src, time, imageFormat } = (0, exports.extractUrlAndSourceFromUrl)(req.url);
35
46
  res.setHeader('access-control-allow-origin', '*');
36
- res.setHeader('content-type', 'image/jpg');
37
- const { src, time } = (0, exports.extractUrlAndSourceFromUrl)(req.url);
38
- const to = (0, download_and_map_assets_to_file_1.getSanitizedFilenameForAssetUrl)({ downloadDir, src });
39
- (0, download_and_map_assets_to_file_1.startDownloadForSrc)({ src, downloadDir, onDownload }).catch((err) => {
40
- onError(new Error(`Error while downloading asset: ${err.stack}`));
41
- });
42
- (0, download_and_map_assets_to_file_1.waitForAssetToBeDownloaded)(src, to)
43
- .then(() => {
47
+ res.setHeader('content-type', `image/${imageFormat === 'jpeg' ? 'jpg' : 'png'}`);
48
+ // Handling this case on Lambda:
49
+ // https://support.google.com/chrome/a/answer/7679408?hl=en
50
+ // Chrome sends Private Network Access preflights for subresources
51
+ if (req.method === 'OPTIONS') {
52
+ res.statusCode = 200;
53
+ if (req.headers['access-control-request-private-network']) {
54
+ res.setHeader('Access-Control-Allow-Private-Network', 'true');
55
+ }
56
+ res.end();
57
+ return;
58
+ }
59
+ (0, download_and_map_assets_to_file_1.downloadAsset)({ src, onDownload, downloadMap })
60
+ .then((to) => {
44
61
  return (0, extract_frame_from_video_1.extractFrameFromVideo)({
45
62
  time,
46
63
  src: to,
47
64
  ffmpegExecutable,
65
+ ffprobeExecutable,
66
+ imageFormat,
67
+ downloadMap,
48
68
  });
49
69
  })
50
70
  .then((readable) => {
@@ -58,6 +78,7 @@ const startOffthreadVideoServer = ({ ffmpegExecutable, downloadDir, onDownload,
58
78
  .catch((err) => {
59
79
  res.writeHead(500);
60
80
  res.end();
81
+ onError(err);
61
82
  console.log('Error occurred', err);
62
83
  });
63
84
  };
@@ -1,5 +1,6 @@
1
- import puppeteer from 'puppeteer-core';
2
- import { Browser } from 'remotion';
1
+ import type { Browser } from './browser';
2
+ import type { Browser as PuppeteerBrowser } from './browser/Browser';
3
+ import type { Viewport } from './browser/PuppeteerViewport';
3
4
  declare const validRenderers: readonly ["swangle", "angle", "egl", "swiftshader"];
4
5
  declare type OpenGlRenderer = typeof validRenderers[number];
5
6
  export declare type ChromiumOptions = {
@@ -14,5 +15,6 @@ export declare const openBrowser: (browser: Browser, options?: {
14
15
  browserExecutable?: string | null;
15
16
  chromiumOptions?: ChromiumOptions;
16
17
  forceDeviceScaleFactor?: number;
17
- }) => Promise<puppeteer.Browser>;
18
+ viewport?: Viewport;
19
+ }) => Promise<PuppeteerBrowser>;
18
20
  export {};
@@ -7,13 +7,14 @@ exports.openBrowser = exports.killAllBrowsers = void 0;
7
7
  const fs_1 = __importDefault(require("fs"));
8
8
  const os_1 = __importDefault(require("os"));
9
9
  const path_1 = __importDefault(require("path"));
10
- const puppeteer_core_1 = __importDefault(require("puppeteer-core"));
11
- const remotion_1 = require("remotion");
10
+ const node_1 = require("./browser/node");
12
11
  const get_local_browser_executable_1 = require("./get-local-browser-executable");
12
+ const get_video_threads_flag_1 = require("./get-video-threads-flag");
13
+ const validate_opengl_renderer_1 = require("./validate-opengl-renderer");
13
14
  const validRenderers = ['swangle', 'angle', 'egl', 'swiftshader'];
14
15
  const getOpenGlRenderer = (option) => {
15
- const renderer = option !== null && option !== void 0 ? option : remotion_1.Internals.DEFAULT_OPENGL_RENDERER;
16
- remotion_1.Internals.validateOpenGlRenderer(renderer);
16
+ const renderer = option !== null && option !== void 0 ? option : validate_opengl_renderer_1.DEFAULT_OPENGL_RENDERER;
17
+ (0, validate_opengl_renderer_1.validateOpenGlRenderer)(renderer);
17
18
  if (renderer === 'swangle') {
18
19
  return [`--use-gl=angle`, `--use-angle=swiftshader`];
19
20
  }
@@ -33,18 +34,17 @@ const killAllBrowsers = async () => {
33
34
  };
34
35
  exports.killAllBrowsers = killAllBrowsers;
35
36
  const openBrowser = async (browser, options) => {
36
- var _a, _b, _c, _d, _e, _f, _g, _h, _j;
37
- if (browser === 'firefox' && !remotion_1.Internals.FEATURE_FLAG_FIREFOX_SUPPORT) {
37
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
38
+ if (browser === 'firefox') {
38
39
  throw new TypeError('Firefox supported is not yet turned on. Stay tuned for the future.');
39
40
  }
40
41
  await (0, get_local_browser_executable_1.ensureLocalBrowser)(browser, (_a = options === null || options === void 0 ? void 0 : options.browserExecutable) !== null && _a !== void 0 ? _a : null);
41
42
  const executablePath = (0, get_local_browser_executable_1.getLocalBrowserExecutable)(browser, (_b = options === null || options === void 0 ? void 0 : options.browserExecutable) !== null && _b !== void 0 ? _b : null);
42
43
  const customGlRenderer = getOpenGlRenderer((_d = (_c = options === null || options === void 0 ? void 0 : options.chromiumOptions) === null || _c === void 0 ? void 0 : _c.gl) !== null && _d !== void 0 ? _d : null);
43
- const browserInstance = await puppeteer_core_1.default.launch({
44
+ const browserInstance = await node_1.puppeteer.launch({
44
45
  executablePath,
45
46
  product: browser,
46
47
  dumpio: (_e = options === null || options === void 0 ? void 0 : options.shouldDumpIo) !== null && _e !== void 0 ? _e : false,
47
- ignoreDefaultArgs: true,
48
48
  args: [
49
49
  'about:blank',
50
50
  '--allow-pre-commit-input',
@@ -61,9 +61,6 @@ const openBrowser = async (browser, options) => {
61
61
  '--no-proxy-server',
62
62
  "--proxy-server='direct://'",
63
63
  '--proxy-bypass-list=*',
64
- // TODO: remove AvoidUnnecessaryBeforeUnloadCheckSync below
65
- // once crbug.com/1324138 is fixed and released.
66
- '--disable-features=Translate,BackForwardCache,AvoidUnnecessaryBeforeUnloadCheckSync',
67
64
  '--disable-hang-monitor',
68
65
  '--disable-ipc-flooding-protection',
69
66
  '--disable-popup-blocking',
@@ -73,12 +70,10 @@ const openBrowser = async (browser, options) => {
73
70
  '--force-color-profile=srgb',
74
71
  '--metrics-recording-only',
75
72
  '--no-first-run',
76
- '--video-threads=16',
73
+ '--video-threads=' + (0, get_video_threads_flag_1.getIdealVideoThreadsFlag)(),
77
74
  '--enable-automation',
78
75
  '--password-store=basic',
79
76
  '--use-mock-keychain',
80
- // TODO(sadym): remove '--enable-blink-features=IdleDetection'
81
- // once IdleDetection is turned on by default.
82
77
  '--enable-blink-features=IdleDetection',
83
78
  '--export-tagged-pdf',
84
79
  '--intensive-wake-up-throttling-policy=0',
@@ -91,7 +86,7 @@ const openBrowser = async (browser, options) => {
91
86
  '--allow-running-insecure-content',
92
87
  '--disable-component-update',
93
88
  '--disable-domain-reliability',
94
- '--disable-features=AudioServiceOutOfProcess,IsolateOrigins,site-per-process',
89
+ '--disable-features=AudioServiceOutOfProcess,IsolateOrigins,site-per-process,Translate,BackForwardCache,AvoidUnnecessaryBeforeUnloadCheckSync,IntensiveWakeUpThrottling',
95
90
  '--disable-print-preview',
96
91
  '--disable-site-isolation-trials',
97
92
  '--disk-cache-size=268435456',
@@ -114,6 +109,11 @@ const openBrowser = async (browser, options) => {
114
109
  ]
115
110
  : []),
116
111
  ].filter(Boolean),
112
+ defaultViewport: (_k = options === null || options === void 0 ? void 0 : options.viewport) !== null && _k !== void 0 ? _k : {
113
+ height: 720,
114
+ width: 1280,
115
+ deviceScaleFactor: 1,
116
+ },
117
117
  });
118
118
  const pages = await browserInstance.pages();
119
119
  await pages[0].close();
@@ -0,0 +1 @@
1
+ export declare const DEFAULT_OVERWRITE = true;
@@ -0,0 +1,4 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DEFAULT_OVERWRITE = void 0;
4
+ exports.DEFAULT_OVERWRITE = true;
package/dist/perf.d.ts ADDED
@@ -0,0 +1,5 @@
1
+ declare type PerfId = 'activate-target' | 'capture' | 'save' | 'extract-frame' | 'piping';
2
+ export declare const startPerfMeasure: (marker: PerfId) => number;
3
+ export declare const stopPerfMeasure: (id: number) => void;
4
+ export declare const logPerf: () => void;
5
+ export {};
package/dist/perf.js ADDED
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.logPerf = exports.stopPerfMeasure = exports.startPerfMeasure = void 0;
4
+ const perf = {
5
+ 'activate-target': [],
6
+ capture: [],
7
+ save: [],
8
+ 'extract-frame': [],
9
+ piping: [],
10
+ };
11
+ const map = {};
12
+ const startPerfMeasure = (marker) => {
13
+ const id = Math.random();
14
+ map[id] = {
15
+ id,
16
+ marker,
17
+ start: Date.now(),
18
+ };
19
+ return id;
20
+ };
21
+ exports.startPerfMeasure = startPerfMeasure;
22
+ const stopPerfMeasure = (id) => {
23
+ const now = Date.now();
24
+ const diff = now - map[id].start;
25
+ perf[map[id].marker].push(diff);
26
+ delete map[id];
27
+ };
28
+ exports.stopPerfMeasure = stopPerfMeasure;
29
+ const logPerf = () => {
30
+ console.log('Render performance:');
31
+ Object.keys(perf).forEach((p) => {
32
+ console.log(` ${p} => ${perf[p].reduce((a, b) => a + b, 0) / perf[p].length} (n = ${perf[p].length})`);
33
+ });
34
+ };
35
+ exports.logPerf = logPerf;
@@ -0,0 +1,5 @@
1
+ import type { Codec } from './codec';
2
+ export declare const validPixelFormats: readonly ["yuv420p", "yuva420p", "yuv422p", "yuv444p", "yuv420p10le", "yuv422p10le", "yuv444p10le", "yuva444p10le"];
3
+ export declare type PixelFormat = typeof validPixelFormats[number];
4
+ export declare const DEFAULT_PIXEL_FORMAT: PixelFormat;
5
+ export declare const validateSelectedPixelFormatAndCodecCombination: (pixelFormat: PixelFormat, codec: Codec) => void;
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.validateSelectedPixelFormatAndCodecCombination = exports.DEFAULT_PIXEL_FORMAT = exports.validPixelFormats = void 0;
4
+ exports.validPixelFormats = [
5
+ 'yuv420p',
6
+ 'yuva420p',
7
+ 'yuv422p',
8
+ 'yuv444p',
9
+ 'yuv420p10le',
10
+ 'yuv422p10le',
11
+ 'yuv444p10le',
12
+ 'yuva444p10le',
13
+ ];
14
+ exports.DEFAULT_PIXEL_FORMAT = 'yuv420p';
15
+ const validateSelectedPixelFormatAndCodecCombination = (pixelFormat, codec) => {
16
+ if (!exports.validPixelFormats.includes(pixelFormat)) {
17
+ throw new TypeError(`Value ${pixelFormat} is not valid as a pixel format.`);
18
+ }
19
+ if (pixelFormat !== 'yuva420p') {
20
+ return;
21
+ }
22
+ if (codec !== 'vp8' && codec !== 'vp9') {
23
+ throw new TypeError("Pixel format was set to 'yuva420p' but codec is not 'vp8' or 'vp9'. To render videos with alpha channel, you must choose a codec that supports it.");
24
+ }
25
+ };
26
+ exports.validateSelectedPixelFormatAndCodecCombination = validateSelectedPixelFormatAndCodecCombination;
@@ -1,12 +1,14 @@
1
- import { FfmpegExecutable } from 'remotion';
2
- import { RenderMediaOnDownload } from './assets/download-and-map-assets-to-file';
3
- export declare const prepareServer: ({ downloadDir, ffmpegExecutable, onDownload, onError, webpackConfigOrServeUrl, port, }: {
1
+ import type { RenderMediaOnDownload } from './assets/download-and-map-assets-to-file';
2
+ import type { DownloadMap } from './assets/download-map';
3
+ import type { FfmpegExecutable } from './ffmpeg-executable';
4
+ export declare const prepareServer: ({ ffmpegExecutable, ffprobeExecutable, onDownload, onError, webpackConfigOrServeUrl, port, downloadMap, }: {
4
5
  webpackConfigOrServeUrl: string;
5
- downloadDir: string;
6
6
  onDownload: RenderMediaOnDownload;
7
7
  onError: (err: Error) => void;
8
8
  ffmpegExecutable: FfmpegExecutable;
9
+ ffprobeExecutable: FfmpegExecutable;
9
10
  port: number | null;
11
+ downloadMap: DownloadMap;
10
12
  }) => Promise<{
11
13
  serveUrl: string;
12
14
  closeServer: () => Promise<unknown>;
@@ -1,33 +1,49 @@
1
1
  "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
2
5
  Object.defineProperty(exports, "__esModule", { value: true });
3
6
  exports.prepareServer = void 0;
7
+ const fs_1 = require("fs");
8
+ const path_1 = __importDefault(require("path"));
4
9
  const is_serve_url_1 = require("./is-serve-url");
5
10
  const serve_static_1 = require("./serve-static");
6
- const prepareServer = async ({ downloadDir, ffmpegExecutable, onDownload, onError, webpackConfigOrServeUrl, port, }) => {
11
+ const wait_for_symbolication_error_to_be_done_1 = require("./wait-for-symbolication-error-to-be-done");
12
+ const prepareServer = async ({ ffmpegExecutable, ffprobeExecutable, onDownload, onError, webpackConfigOrServeUrl, port, downloadMap, }) => {
7
13
  if ((0, is_serve_url_1.isServeUrl)(webpackConfigOrServeUrl)) {
8
14
  const { port: offthreadPort, close: closeProxy } = await (0, serve_static_1.serveStatic)(null, {
9
- downloadDir,
10
15
  onDownload,
11
16
  onError,
12
17
  ffmpegExecutable,
18
+ ffprobeExecutable,
13
19
  port,
20
+ downloadMap,
14
21
  });
15
22
  return Promise.resolve({
16
23
  serveUrl: webpackConfigOrServeUrl,
17
- closeServer: () => closeProxy(),
24
+ closeServer: () => {
25
+ return closeProxy();
26
+ },
18
27
  offthreadPort,
19
28
  });
20
29
  }
30
+ // Check if the path has a `index.html` file
31
+ const indexFile = path_1.default.join(webpackConfigOrServeUrl, 'index.html');
32
+ const exists = (0, fs_1.existsSync)(indexFile);
33
+ if (!exists) {
34
+ throw new Error(`Tried to serve the Webpack bundle on a HTTP server, but the file ${indexFile} does not exist. Is this a valid path to a Webpack bundle?`);
35
+ }
21
36
  const { port: serverPort, close } = await (0, serve_static_1.serveStatic)(webpackConfigOrServeUrl, {
22
- downloadDir,
23
37
  onDownload,
24
38
  onError,
25
39
  ffmpegExecutable,
40
+ ffprobeExecutable,
26
41
  port,
42
+ downloadMap,
27
43
  });
28
44
  return Promise.resolve({
29
45
  closeServer: () => {
30
- return close();
46
+ return (0, wait_for_symbolication_error_to_be_done_1.waitForSymbolicationToBeDone)().then(() => close());
31
47
  },
32
48
  serveUrl: `http://localhost:${serverPort}`,
33
49
  offthreadPort: serverPort,
@@ -1,11 +1,14 @@
1
- import { FfmpegExecutable } from 'remotion';
2
- import { MediaAsset } from './assets/types';
1
+ import type { DownloadMap } from './assets/download-map';
2
+ import type { MediaAsset } from './assets/types';
3
+ import type { FfmpegExecutable } from './ffmpeg-executable';
3
4
  declare type Options = {
4
5
  ffmpegExecutable: FfmpegExecutable;
6
+ ffprobeExecutable: FfmpegExecutable;
5
7
  outName: string;
6
8
  asset: MediaAsset;
7
9
  expectedFrames: number;
8
10
  fps: number;
11
+ downloadMap: DownloadMap;
9
12
  };
10
13
  export declare const preprocessAudioTrack: (options: Options) => Promise<string | null>;
11
14
  export {};
@@ -10,8 +10,8 @@ const calculate_ffmpeg_filters_1 = require("./calculate-ffmpeg-filters");
10
10
  const ffmpeg_filter_file_1 = require("./ffmpeg-filter-file");
11
11
  const p_limit_1 = require("./p-limit");
12
12
  const resolve_asset_src_1 = require("./resolve-asset-src");
13
- const preprocessAudioTrackUnlimited = async ({ ffmpegExecutable, outName, asset, expectedFrames, fps, }) => {
14
- const { channels, duration } = await (0, get_audio_channels_1.getAudioChannelsAndDuration)((0, resolve_asset_src_1.resolveAssetSrc)(asset.src));
13
+ const preprocessAudioTrackUnlimited = async ({ ffmpegExecutable, ffprobeExecutable, outName, asset, expectedFrames, fps, downloadMap, }) => {
14
+ const { channels, duration } = await (0, get_audio_channels_1.getAudioChannelsAndDuration)(downloadMap, (0, resolve_asset_src_1.resolveAssetSrc)(asset.src), ffprobeExecutable);
15
15
  const filter = (0, calculate_ffmpeg_filters_1.calculateFfmpegFilter)({
16
16
  asset,
17
17
  durationInFrames: expectedFrames,
@@ -22,7 +22,7 @@ const preprocessAudioTrackUnlimited = async ({ ffmpegExecutable, outName, asset,
22
22
  if (filter === null) {
23
23
  return null;
24
24
  }
25
- const { cleanup, file } = await (0, ffmpeg_filter_file_1.makeFfmpegFilterFile)(filter);
25
+ const { cleanup, file } = await (0, ffmpeg_filter_file_1.makeFfmpegFilterFile)(filter, downloadMap);
26
26
  const args = [
27
27
  ['-i', (0, resolve_asset_src_1.resolveAssetSrc)(asset.src)],
28
28
  ['-ac', '2'],
@@ -1,6 +1,10 @@
1
1
  import execa from 'execa';
2
- import { Codec, FfmpegExecutable, ImageFormat, PixelFormat, ProResProfile } from 'remotion';
3
- import { CancelSignal } from './make-cancel-signal';
2
+ import type { Codec } from './codec';
3
+ import type { FfmpegExecutable } from './ffmpeg-executable';
4
+ import type { ImageFormat } from './image-format';
5
+ import type { CancelSignal } from './make-cancel-signal';
6
+ import type { PixelFormat } from './pixel-format';
7
+ import type { ProResProfile } from './prores-profile';
4
8
  declare type PreSticherOptions = {
5
9
  fps: number;
6
10
  width: number;
@@ -6,25 +6,28 @@ Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.prespawnFfmpeg = void 0;
7
7
  const execa_1 = __importDefault(require("execa"));
8
8
  const remotion_1 = require("remotion");
9
+ const codec_1 = require("./codec");
10
+ const crf_1 = require("./crf");
9
11
  const get_codec_name_1 = require("./get-codec-name");
10
12
  const get_prores_profile_name_1 = require("./get-prores-profile-name");
11
13
  const parse_ffmpeg_progress_1 = require("./parse-ffmpeg-progress");
14
+ const pixel_format_1 = require("./pixel-format");
12
15
  const validate_even_dimensions_with_codec_1 = require("./validate-even-dimensions-with-codec");
13
16
  const validate_ffmpeg_1 = require("./validate-ffmpeg");
14
17
  const prespawnFfmpeg = async (options) => {
15
18
  var _a, _b, _c, _d, _e, _f, _g;
16
19
  remotion_1.Internals.validateDimension(options.height, 'height', 'passed to `stitchFramesToVideo()`');
17
20
  remotion_1.Internals.validateDimension(options.width, 'width', 'passed to `stitchFramesToVideo()`');
18
- remotion_1.Internals.validateFps(options.fps, 'passed to `stitchFramesToVideo()`');
19
- const codec = (_a = options.codec) !== null && _a !== void 0 ? _a : remotion_1.Internals.DEFAULT_CODEC;
21
+ const codec = (_a = options.codec) !== null && _a !== void 0 ? _a : codec_1.DEFAULT_CODEC;
22
+ remotion_1.Internals.validateFps(options.fps, 'in `stitchFramesToVideo()`', codec === 'gif');
20
23
  (0, validate_even_dimensions_with_codec_1.validateEvenDimensionsWithCodec)({
21
24
  width: options.width,
22
25
  height: options.height,
23
26
  codec,
24
27
  scale: 1,
25
28
  });
26
- const crf = (_b = options.crf) !== null && _b !== void 0 ? _b : remotion_1.Internals.getDefaultCrfForCodec(codec);
27
- const pixelFormat = (_c = options.pixelFormat) !== null && _c !== void 0 ? _c : remotion_1.Internals.DEFAULT_PIXEL_FORMAT;
29
+ const crf = (_b = options.crf) !== null && _b !== void 0 ? _b : (0, crf_1.getDefaultCrfForCodec)(codec);
30
+ const pixelFormat = (_c = options.pixelFormat) !== null && _c !== void 0 ? _c : pixel_format_1.DEFAULT_PIXEL_FORMAT;
28
31
  await (0, validate_ffmpeg_1.validateFfmpeg)((_d = options.ffmpegExecutable) !== null && _d !== void 0 ? _d : null);
29
32
  const encoderName = (0, get_codec_name_1.getCodecName)(codec);
30
33
  const proResProfileName = (0, get_prores_profile_name_1.getProResProfileName)(codec, options.proResProfile);
@@ -42,10 +45,10 @@ const prespawnFfmpeg = async (options) => {
42
45
  console.log('[verbose] codec', codec);
43
46
  console.log('[verbose] proResProfileName', proResProfileName);
44
47
  }
45
- remotion_1.Internals.validateSelectedCrfAndCodecCombination(crf, codec);
46
- remotion_1.Internals.validateSelectedPixelFormatAndCodecCombination(pixelFormat, codec);
48
+ (0, crf_1.validateSelectedCrfAndCodecCombination)(crf, codec);
49
+ (0, pixel_format_1.validateSelectedPixelFormatAndCodecCombination)(pixelFormat, codec);
47
50
  const ffmpegArgs = [
48
- ['-r', String(options.fps)],
51
+ ['-r', options.fps.toFixed(2)],
49
52
  ...[
50
53
  ['-f', 'image2pipe'],
51
54
  ['-s', `${options.width}x${options.height}`],
@@ -0,0 +1,12 @@
1
+ export declare const estimateMemoryUsageForPrestitcher: ({ width, height, }: {
2
+ width: number;
3
+ height: number;
4
+ }) => number;
5
+ export declare const shouldUseParallelEncoding: ({ width, height, }: {
6
+ width: number;
7
+ height: number;
8
+ }) => {
9
+ hasEnoughMemory: boolean;
10
+ freeMemory: number;
11
+ estimatedUsage: number;
12
+ };
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.shouldUseParallelEncoding = exports.estimateMemoryUsageForPrestitcher = void 0;
7
+ const os_1 = __importDefault(require("os"));
8
+ const estimateMemoryUsageForPrestitcher = ({ width, height, }) => {
9
+ // Empirically we detected that per 1 million pixels, FFMPEG uses around 1GB of memory, relatively independent of
10
+ // the duration of the video.
11
+ const memoryUsageFor4K = 1000000000;
12
+ const memoryUsageOfPixel = memoryUsageFor4K / 1000000;
13
+ return memoryUsageOfPixel * width * height;
14
+ };
15
+ exports.estimateMemoryUsageForPrestitcher = estimateMemoryUsageForPrestitcher;
16
+ const shouldUseParallelEncoding = ({ width, height, }) => {
17
+ const freeMemory = os_1.default.freemem();
18
+ const estimatedUsage = (0, exports.estimateMemoryUsageForPrestitcher)({
19
+ height,
20
+ width,
21
+ });
22
+ const hasEnoughMemory = freeMemory - estimatedUsage > 2000000000 &&
23
+ estimatedUsage / freeMemory < 0.5;
24
+ return {
25
+ hasEnoughMemory,
26
+ freeMemory,
27
+ estimatedUsage,
28
+ };
29
+ };
30
+ exports.shouldUseParallelEncoding = shouldUseParallelEncoding;
@@ -0,0 +1,5 @@
1
+ import type { Codec } from './codec';
2
+ declare const proResProfileOptions: readonly ["4444-xq", "4444", "hq", "standard", "light", "proxy"];
3
+ export declare type ProResProfile = typeof proResProfileOptions[number];
4
+ export declare const validateSelectedCodecAndProResCombination: (actualCodec: Codec, actualProResProfile: ProResProfile | undefined) => void;
5
+ export {};
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.validateSelectedCodecAndProResCombination = void 0;
4
+ const proResProfileOptions = [
5
+ '4444-xq',
6
+ '4444',
7
+ 'hq',
8
+ 'standard',
9
+ 'light',
10
+ 'proxy',
11
+ ];
12
+ const validateSelectedCodecAndProResCombination = (actualCodec, actualProResProfile) => {
13
+ if (typeof actualProResProfile !== 'undefined' && actualCodec !== 'prores') {
14
+ throw new TypeError('You have set a ProRes profile but the codec is not "prores". Set the codec to "prores" or remove the ProRes profile.');
15
+ }
16
+ if (actualProResProfile !== undefined &&
17
+ !proResProfileOptions.includes(actualProResProfile)) {
18
+ throw new TypeError(`The ProRes profile "${actualProResProfile}" is not valid. Valid options are ${proResProfileOptions
19
+ .map((p) => `"${p}"`)
20
+ .join(', ')}`);
21
+ }
22
+ };
23
+ exports.validateSelectedCodecAndProResCombination = validateSelectedCodecAndProResCombination;