@remotion/renderer 3.1.6 → 3.1.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 (295) hide show
  1. package/dist/add-silent-audio-if-necessary.d.ts +8 -0
  2. package/dist/add-silent-audio-if-necessary.d.ts.map +1 -0
  3. package/dist/add-silent-audio-if-necessary.js +51 -0
  4. package/dist/add-silent-audio-if-necessary.js.map +1 -0
  5. package/dist/assets/asset-is-used-at-time.d.ts +3 -0
  6. package/dist/assets/asset-is-used-at-time.d.ts.map +1 -0
  7. package/dist/assets/asset-is-used-at-time.js +8 -0
  8. package/dist/assets/asset-is-used-at-time.js.map +1 -0
  9. package/dist/assets/calculate-asset-positions.d.ts.map +1 -0
  10. package/dist/assets/calculate-asset-positions.js.map +1 -0
  11. package/dist/assets/calculate-atempo.d.ts.map +1 -0
  12. package/dist/assets/calculate-atempo.js.map +1 -0
  13. package/dist/assets/convert-assets-to-file-urls.d.ts +3 -2
  14. package/dist/assets/convert-assets-to-file-urls.d.ts.map +1 -0
  15. package/dist/assets/convert-assets-to-file-urls.js +2 -2
  16. package/dist/assets/convert-assets-to-file-urls.js.map +1 -0
  17. package/dist/assets/download-and-map-assets-to-file.d.ts +6 -5
  18. package/dist/assets/download-and-map-assets-to-file.d.ts.map +1 -0
  19. package/dist/assets/download-and-map-assets-to-file.js +46 -47
  20. package/dist/assets/download-and-map-assets-to-file.js.map +1 -0
  21. package/dist/assets/download-file.d.ts.map +1 -0
  22. package/dist/assets/download-file.js.map +1 -0
  23. package/dist/assets/download-map.d.ts +64 -0
  24. package/dist/assets/download-map.js +73 -0
  25. package/dist/assets/ffmpeg-volume-expression.d.ts.map +1 -0
  26. package/dist/assets/ffmpeg-volume-expression.js.map +1 -0
  27. package/dist/assets/flatten-volume-array.d.ts.map +1 -0
  28. package/dist/assets/flatten-volume-array.js.map +1 -0
  29. package/dist/assets/get-asset-audio-details.d.ts +5 -0
  30. package/dist/assets/get-asset-audio-details.d.ts.map +1 -0
  31. package/dist/assets/get-asset-audio-details.js +21 -0
  32. package/dist/assets/get-asset-audio-details.js.map +1 -0
  33. package/dist/assets/get-audio-channels.d.ts +3 -7
  34. package/dist/assets/get-audio-channels.d.ts.map +1 -0
  35. package/dist/assets/get-audio-channels.js +6 -7
  36. package/dist/assets/get-audio-channels.js.map +1 -0
  37. package/dist/assets/get-simulatenous-assets.d.ts +3 -0
  38. package/dist/assets/get-simulatenous-assets.d.ts.map +1 -0
  39. package/dist/assets/get-simulatenous-assets.js +14 -0
  40. package/dist/assets/get-simulatenous-assets.js.map +1 -0
  41. package/dist/assets/get-video-stream-duration.d.ts +3 -6
  42. package/dist/assets/get-video-stream-duration.js +9 -8
  43. package/dist/assets/read-file.d.ts.map +1 -0
  44. package/dist/assets/read-file.js.map +1 -0
  45. package/dist/assets/round-volume-to-avoid-stack-overflow.d.ts.map +1 -0
  46. package/dist/assets/round-volume-to-avoid-stack-overflow.js.map +1 -0
  47. package/dist/assets/sanitize-filename.d.ts.map +1 -0
  48. package/dist/assets/sanitize-filename.js.map +1 -0
  49. package/dist/assets/sanitize-filepath.d.ts.map +1 -0
  50. package/dist/assets/sanitize-filepath.js.map +1 -0
  51. package/dist/assets/split-assets-into-segments.d.ts +6 -0
  52. package/dist/assets/split-assets-into-segments.d.ts.map +1 -0
  53. package/dist/assets/split-assets-into-segments.js +89 -0
  54. package/dist/assets/split-assets-into-segments.js.map +1 -0
  55. package/dist/assets/truncate-utf8-bytes.d.ts.map +1 -0
  56. package/dist/assets/truncate-utf8-bytes.js.map +1 -0
  57. package/dist/assets/types.d.ts.map +1 -0
  58. package/dist/assets/types.js.map +1 -0
  59. package/dist/assets-to-ffmpeg-inputs.d.ts +7 -0
  60. package/dist/assets-to-ffmpeg-inputs.d.ts.map +1 -0
  61. package/dist/assets-to-ffmpeg-inputs.js +15 -0
  62. package/dist/assets-to-ffmpeg-inputs.js.map +1 -0
  63. package/dist/browser/TimeoutSettings.d.ts +1 -0
  64. package/dist/browser/TimeoutSettings.js +4 -4
  65. package/dist/browser-executable.d.ts +1 -0
  66. package/dist/browser-executable.js +2 -0
  67. package/dist/browser-log.d.ts.map +1 -0
  68. package/dist/browser-log.js.map +1 -0
  69. package/dist/browser.d.ts +2 -0
  70. package/dist/browser.js +4 -0
  71. package/dist/calculate-ffmpeg-filters.d.ts.map +1 -0
  72. package/dist/calculate-ffmpeg-filters.js.map +1 -0
  73. package/dist/can-use-parallel-encoding.d.ts +1 -1
  74. package/dist/can-use-parallel-encoding.d.ts.map +1 -0
  75. package/dist/can-use-parallel-encoding.js +2 -2
  76. package/dist/can-use-parallel-encoding.js.map +1 -0
  77. package/dist/codec-supports-media.d.ts +1 -1
  78. package/dist/codec.d.ts +4 -0
  79. package/dist/codec.js +16 -0
  80. package/dist/combine-videos.d.ts +1 -1
  81. package/dist/combine-videos.d.ts.map +1 -0
  82. package/dist/combine-videos.js +7 -6
  83. package/dist/combine-videos.js.map +1 -0
  84. package/dist/compress-assets.d.ts +7 -0
  85. package/dist/compress-assets.js +25 -0
  86. package/dist/convert-to-pcm.d.ts +1 -1
  87. package/dist/create-ffmpeg-complex-filter.d.ts +6 -2
  88. package/dist/create-ffmpeg-complex-filter.d.ts.map +1 -0
  89. package/dist/create-ffmpeg-complex-filter.js +2 -11
  90. package/dist/create-ffmpeg-complex-filter.js.map +1 -0
  91. package/dist/create-ffmpeg-merge-filter.js +3 -3
  92. package/dist/create-silent-audio.d.ts +1 -1
  93. package/dist/crf.d.ts +5 -0
  94. package/dist/crf.js +64 -0
  95. package/dist/cycle-browser-tabs.d.ts.map +1 -0
  96. package/dist/cycle-browser-tabs.js.map +1 -0
  97. package/dist/delay-render-embedded-stack.d.ts.map +1 -0
  98. package/dist/delay-render-embedded-stack.js.map +1 -0
  99. package/dist/delete-directory.d.ts.map +1 -0
  100. package/dist/delete-directory.js.map +1 -0
  101. package/dist/ensure-frames-in-order.d.ts.map +1 -0
  102. package/dist/ensure-frames-in-order.js.map +1 -0
  103. package/dist/ensure-output-directory.d.ts.map +1 -0
  104. package/dist/ensure-output-directory.js.map +1 -0
  105. package/dist/ensure-presentation-timestamp.d.ts +2 -1
  106. package/dist/ensure-presentation-timestamp.js +9 -7
  107. package/dist/error-handling/handle-javascript-exception.d.ts.map +1 -0
  108. package/dist/error-handling/handle-javascript-exception.js.map +1 -0
  109. package/dist/error-handling/symbolicate-error.d.ts.map +1 -0
  110. package/dist/error-handling/symbolicate-error.js.map +1 -0
  111. package/dist/error-handling/symbolicateable-error.d.ts.map +1 -0
  112. package/dist/error-handling/symbolicateable-error.js.map +1 -0
  113. package/dist/extract-frame-from-video.d.ts +4 -1
  114. package/dist/extract-frame-from-video.js +21 -16
  115. package/dist/ffmpeg-executable.d.ts +1 -0
  116. package/dist/ffmpeg-executable.js +2 -0
  117. package/dist/ffmpeg-filter-file.d.ts +2 -1
  118. package/dist/ffmpeg-filter-file.js +4 -6
  119. package/dist/ffmpeg-flags.d.ts.map +1 -0
  120. package/dist/ffmpeg-flags.js.map +1 -0
  121. package/dist/frame-range.d.ts +2 -0
  122. package/dist/frame-range.js +49 -0
  123. package/dist/get-audio-codec-name.d.ts +1 -1
  124. package/dist/get-audio-codec-name.d.ts.map +1 -0
  125. package/dist/get-audio-codec-name.js +2 -2
  126. package/dist/get-audio-codec-name.js.map +1 -0
  127. package/dist/get-browser-instance.d.ts +1 -1
  128. package/dist/get-browser-instance.d.ts.map +1 -0
  129. package/dist/get-browser-instance.js +2 -2
  130. package/dist/get-browser-instance.js.map +1 -0
  131. package/dist/get-codec-name.d.ts +1 -1
  132. package/dist/get-codec-name.d.ts.map +1 -0
  133. package/dist/get-codec-name.js +2 -2
  134. package/dist/get-codec-name.js.map +1 -0
  135. package/dist/get-compositions.d.ts +8 -1
  136. package/dist/get-compositions.d.ts.map +1 -0
  137. package/dist/get-compositions.js +10 -6
  138. package/dist/get-compositions.js.map +1 -0
  139. package/dist/get-concurrency.d.ts.map +1 -0
  140. package/dist/get-concurrency.js.map +1 -0
  141. package/dist/get-extension-from-codec.d.ts +1 -1
  142. package/dist/get-extension-from-codec.d.ts.map +1 -0
  143. package/dist/get-extension-from-codec.js.map +1 -0
  144. package/dist/get-frame-to-render.d.ts +1 -1
  145. package/dist/get-frame-to-render.d.ts.map +1 -0
  146. package/dist/get-frame-to-render.js.map +1 -0
  147. package/dist/get-local-browser-executable.d.ts +2 -1
  148. package/dist/get-local-browser-executable.d.ts.map +1 -0
  149. package/dist/get-local-browser-executable.js.map +1 -0
  150. package/dist/get-port.d.ts.map +1 -0
  151. package/dist/get-port.js.map +1 -0
  152. package/dist/get-prores-profile-name.d.ts +2 -1
  153. package/dist/get-prores-profile-name.d.ts.map +1 -0
  154. package/dist/get-prores-profile-name.js.map +1 -0
  155. package/dist/get-video-info.d.ts +3 -8
  156. package/dist/get-video-info.js +7 -8
  157. package/dist/get-video-threads-flag.d.ts +1 -0
  158. package/dist/get-video-threads-flag.js +18 -0
  159. package/dist/image-format.d.ts +6 -1
  160. package/dist/image-format.d.ts.map +1 -0
  161. package/dist/image-format.js +25 -1
  162. package/dist/image-format.js.map +1 -0
  163. package/dist/index.d.ts +48 -9
  164. package/dist/index.d.ts.map +1 -0
  165. package/dist/index.js +71 -1
  166. package/dist/index.js.map +1 -0
  167. package/dist/is-audio-codec.d.ts +2 -0
  168. package/dist/is-audio-codec.js +7 -0
  169. package/dist/is-beyond-last-frame.d.ts +3 -2
  170. package/dist/is-beyond-last-frame.js +5 -5
  171. package/dist/is-serve-url.d.ts.map +1 -0
  172. package/dist/is-serve-url.js.map +1 -0
  173. package/dist/last-frame-from-video-cache.d.ts +5 -4
  174. package/dist/last-frame-from-video-cache.js +17 -17
  175. package/dist/legacy-webpack-config.d.ts.map +1 -0
  176. package/dist/legacy-webpack-config.js.map +1 -0
  177. package/dist/log-level.d.ts +4 -0
  178. package/dist/log-level.js +15 -0
  179. package/dist/make-assets-download-dir.d.ts.map +1 -0
  180. package/dist/make-assets-download-dir.js.map +1 -0
  181. package/dist/merge-audio-track.d.ts +3 -1
  182. package/dist/merge-audio-track.js +6 -4
  183. package/dist/normalize-serve-url.d.ts.map +1 -0
  184. package/dist/normalize-serve-url.js.map +1 -0
  185. package/dist/offthread-video-server.d.ts +5 -3
  186. package/dist/offthread-video-server.js +3 -2
  187. package/dist/open-browser.d.ts +1 -1
  188. package/dist/open-browser.d.ts.map +1 -0
  189. package/dist/open-browser.js +6 -5
  190. package/dist/open-browser.js.map +1 -0
  191. package/dist/overwrite.d.ts +1 -0
  192. package/dist/overwrite.js +4 -0
  193. package/dist/parse-browser-error-stack.d.ts.map +1 -0
  194. package/dist/parse-browser-error-stack.js.map +1 -0
  195. package/dist/parse-ffmpeg-progress.d.ts.map +1 -0
  196. package/dist/parse-ffmpeg-progress.js.map +1 -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/pool.d.ts.map +1 -0
  202. package/dist/pool.js.map +1 -0
  203. package/dist/prepare-server.d.ts +4 -3
  204. package/dist/prepare-server.d.ts.map +1 -0
  205. package/dist/prepare-server.js +3 -3
  206. package/dist/prepare-server.js.map +1 -0
  207. package/dist/preprocess-audio-track.d.ts +3 -1
  208. package/dist/preprocess-audio-track.js +3 -3
  209. package/dist/prespawn-ffmpeg.d.ts +5 -1
  210. package/dist/prespawn-ffmpeg.js +9 -6
  211. package/dist/prestitcher-memory-usage.d.ts +12 -0
  212. package/dist/prestitcher-memory-usage.js +30 -0
  213. package/dist/prores-profile.d.ts +5 -0
  214. package/dist/prores-profile.js +23 -0
  215. package/dist/provide-screenshot.d.ts +1 -1
  216. package/dist/provide-screenshot.d.ts.map +1 -0
  217. package/dist/provide-screenshot.js.map +1 -0
  218. package/dist/puppeteer-evaluate.d.ts.map +1 -0
  219. package/dist/puppeteer-evaluate.js.map +1 -0
  220. package/dist/puppeteer-screenshot.d.ts.map +1 -0
  221. package/dist/puppeteer-screenshot.js.map +1 -0
  222. package/dist/quality.d.ts +1 -0
  223. package/dist/quality.js +21 -0
  224. package/dist/render-frames.d.ts +10 -1
  225. package/dist/render-frames.js +22 -16
  226. package/dist/render-media.d.ts +13 -2
  227. package/dist/render-media.d.ts.map +1 -0
  228. package/dist/render-media.js +40 -14
  229. package/dist/render-media.js.map +1 -0
  230. package/dist/render-still.d.ts +9 -1
  231. package/dist/render-still.d.ts.map +1 -0
  232. package/dist/render-still.js +21 -11
  233. package/dist/render-still.js.map +1 -0
  234. package/dist/render.d.ts +45 -0
  235. package/dist/render.d.ts.map +1 -0
  236. package/dist/render.js +245 -0
  237. package/dist/render.js.map +1 -0
  238. package/dist/resolve-asset-src.d.ts.map +1 -0
  239. package/dist/resolve-asset-src.js.map +1 -0
  240. package/dist/sample-rate.d.ts.map +1 -0
  241. package/dist/sample-rate.js.map +1 -0
  242. package/dist/screenshot-dom-element.d.ts +1 -1
  243. package/dist/screenshot-dom-element.d.ts.map +1 -0
  244. package/dist/screenshot-dom-element.js.map +1 -0
  245. package/dist/screenshot-task.d.ts +1 -2
  246. package/dist/screenshot-task.d.ts.map +1 -0
  247. package/dist/screenshot-task.js +34 -19
  248. package/dist/screenshot-task.js.map +1 -0
  249. package/dist/seek-to-frame.d.ts.map +1 -0
  250. package/dist/seek-to-frame.js.map +1 -0
  251. package/dist/serve-static.d.ts +3 -2
  252. package/dist/serve-static.d.ts.map +1 -0
  253. package/dist/serve-static.js +3 -4
  254. package/dist/serve-static.js.map +1 -0
  255. package/dist/set-props-and-env.d.ts.map +1 -0
  256. package/dist/set-props-and-env.js +2 -2
  257. package/dist/set-props-and-env.js.map +1 -0
  258. package/dist/stitch-frames-to-video.d.ts +6 -1
  259. package/dist/stitch-frames-to-video.js +30 -43
  260. package/dist/stitcher.d.ts +32 -0
  261. package/dist/stitcher.d.ts.map +1 -0
  262. package/dist/stitcher.js +204 -0
  263. package/dist/stitcher.js.map +1 -0
  264. package/dist/stringify-ffmpeg-filter.d.ts.map +1 -0
  265. package/dist/stringify-ffmpeg-filter.js +2 -2
  266. package/dist/stringify-ffmpeg-filter.js.map +1 -0
  267. package/dist/symbolicate-stacktrace.d.ts.map +1 -0
  268. package/dist/symbolicate-stacktrace.js +3 -3
  269. package/dist/symbolicate-stacktrace.js.map +1 -0
  270. package/dist/tmp-dir.d.ts.map +1 -0
  271. package/dist/tmp-dir.js.map +1 -0
  272. package/dist/truthy.d.ts +3 -0
  273. package/dist/truthy.js +7 -0
  274. package/dist/types.d.ts +1 -1
  275. package/dist/types.d.ts.map +1 -0
  276. package/dist/types.js.map +1 -0
  277. package/dist/validate-even-dimensions-with-codec.d.ts +1 -1
  278. package/dist/validate-even-dimensions-with-codec.d.ts.map +1 -0
  279. package/dist/validate-even-dimensions-with-codec.js +2 -2
  280. package/dist/validate-even-dimensions-with-codec.js.map +1 -0
  281. package/dist/validate-every-nth-frame.d.ts +1 -0
  282. package/dist/validate-every-nth-frame.js +21 -0
  283. package/dist/validate-ffmpeg.d.ts.map +1 -0
  284. package/dist/validate-ffmpeg.js +2 -3
  285. package/dist/validate-ffmpeg.js.map +1 -0
  286. package/dist/validate-frame.d.ts +1 -0
  287. package/dist/validate-frame.js +24 -0
  288. package/dist/validate-opengl-renderer.d.ts +5 -0
  289. package/dist/validate-opengl-renderer.js +15 -0
  290. package/dist/validate-output-filename.d.ts +1 -1
  291. package/dist/validate-puppeteer-timeout.d.ts.map +1 -0
  292. package/dist/validate-puppeteer-timeout.js.map +1 -0
  293. package/dist/validate-scale.d.ts.map +1 -0
  294. package/dist/validate-scale.js.map +1 -0
  295. package/package.json +3 -3
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-audio-channels.js","sourceRoot":"","sources":["../../src/assets/get-audio-channels.ts"],"names":[],"mappings":";;;;;;AAAA,kDAA0B;AAEnB,KAAK,UAAU,gBAAgB,CAAC,IAAY;IAClD,MAAM,IAAI,GAAG;QACZ,CAAC,IAAI,EAAE,OAAO,CAAC;QACf,CAAC,eAAe,EAAE,iBAAiB,CAAC;QACpC,CAAC,KAAK,EAAE,cAAc,CAAC;QACvB,CAAC,IAAI,CAAC;KACN;SACC,MAAM,CAAoB,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;SAC5D,MAAM,CAAC,OAAO,CAAa,CAAC;IAE9B,MAAM,IAAI,GAAG,MAAM,IAAA,eAAK,EAAC,SAAS,EAAE,IAAI,CAAC,CAAC;IAC1C,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE;QACvC,OAAO,CAAC,CAAC;KACT;IAED,MAAM,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;IACpE,IAAI,KAAK,CAAC,QAAQ,CAAC,EAAE;QACpB,MAAM,IAAI,SAAS,CAAC,sDAAsD,CAAC,CAAC;KAC5E;IAED,OAAO,QAAQ,CAAC;AACjB,CAAC;AArBD,4CAqBC"}
@@ -0,0 +1,3 @@
1
+ import { Assets, MediaAsset } from './types';
2
+ export declare const getSimultaneousAssets: (allAssets: Assets, asset: MediaAsset) => MediaAsset[];
3
+ //# sourceMappingURL=get-simulatenous-assets.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-simulatenous-assets.d.ts","sourceRoot":"","sources":["../../src/assets/get-simulatenous-assets.ts"],"names":[],"mappings":"AAKA,OAAO,EAAC,MAAM,EAAE,UAAU,EAAC,MAAM,SAAS,CAAC;AAE3C,eAAO,MAAM,qBAAqB,6BAA8B,UAAU,iBAIzE,CAAC"}
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ // Determine how many other audio tracks are not being finished yet given
3
+ // an audio track. This includes audio tracks that will be played in the future.
4
+ // Because of split-assets-into-segments, we are guaranteed to have no overlapping
5
+ // audio tracks.
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.getSimultaneousAssets = void 0;
8
+ const getSimultaneousAssets = (allAssets, asset) => {
9
+ return allAssets.filter((a) => {
10
+ return a.startInVideo >= asset.startInVideo;
11
+ });
12
+ };
13
+ exports.getSimultaneousAssets = getSimultaneousAssets;
14
+ //# sourceMappingURL=get-simulatenous-assets.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-simulatenous-assets.js","sourceRoot":"","sources":["../../src/assets/get-simulatenous-assets.ts"],"names":[],"mappings":";AAAA,yEAAyE;AACzE,gFAAgF;AAChF,kFAAkF;AAClF,gBAAgB;;;AAIT,MAAM,qBAAqB,GAAG,CAAC,SAAiB,EAAE,KAAiB,EAAE,EAAE;IAC7E,OAAO,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE;QAC7B,OAAO,CAAC,CAAC,YAAY,IAAI,KAAK,CAAC,YAAY,CAAC;IAC7C,CAAC,CAAC,CAAC;AACJ,CAAC,CAAC;AAJW,QAAA,qBAAqB,yBAIhC"}
@@ -1,6 +1,3 @@
1
- import type { FfmpegExecutable } from 'remotion';
2
- declare type Result = {
3
- duration: number | null;
4
- };
5
- export declare const getVideoStreamDuration: (src: string, ffprobeExecutable: FfmpegExecutable) => Promise<Result>;
6
- export {};
1
+ import type { FfmpegExecutable } from '../ffmpeg-executable';
2
+ import type { DownloadMap, VideoDurationResult } from './download-map';
3
+ export declare const getVideoStreamDuration: (downloadMap: DownloadMap, src: string, ffprobeExecutable: FfmpegExecutable) => Promise<VideoDurationResult>;
@@ -6,29 +6,30 @@ Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.getVideoStreamDuration = void 0;
7
7
  const execa_1 = __importDefault(require("execa"));
8
8
  const p_limit_1 = require("../p-limit");
9
- const durationOfAssetCache = {};
10
9
  const limit = (0, p_limit_1.pLimit)(1);
11
- async function getVideoStreamDurationUnlimited(src, ffprobeExecutable) {
12
- if (durationOfAssetCache[src]) {
13
- return durationOfAssetCache[src];
10
+ async function getVideoStreamDurationUnlimited(downloadMap, src, ffprobeExecutable) {
11
+ if (downloadMap.videoDurationResultCache[src]) {
12
+ return downloadMap.videoDurationResultCache[src];
14
13
  }
15
14
  const args = [
16
15
  ['-v', 'error'],
17
16
  ['-select_streams', 'v:0'],
18
- ['-show_entries', 'stream=duration'],
17
+ ['-show_entries', 'stream=duration,r_frame_rate'],
19
18
  [src],
20
19
  ]
21
20
  .reduce((acc, val) => acc.concat(val), [])
22
21
  .filter(Boolean);
23
22
  const task = await (0, execa_1.default)(ffprobeExecutable !== null && ffprobeExecutable !== void 0 ? ffprobeExecutable : 'ffprobe', args);
24
23
  const duration = task.stdout.match(/duration=([0-9.]+)/);
24
+ const fps = task.stdout.match(/r_frame_rate=([0-9.]+)\/([0-9.]+)/);
25
25
  const result = {
26
26
  duration: duration ? parseFloat(duration[1]) : null,
27
+ fps: fps ? parseInt(fps[1], 10) / parseInt(fps[2], 10) : null,
27
28
  };
28
- durationOfAssetCache[src] = result;
29
+ downloadMap.videoDurationResultCache[src] = result;
29
30
  return result;
30
31
  }
31
- const getVideoStreamDuration = (src, ffprobeExecutable) => {
32
- return limit(() => getVideoStreamDurationUnlimited(src, ffprobeExecutable));
32
+ const getVideoStreamDuration = (downloadMap, src, ffprobeExecutable) => {
33
+ return limit(() => getVideoStreamDurationUnlimited(downloadMap, src, ffprobeExecutable));
33
34
  };
34
35
  exports.getVideoStreamDuration = getVideoStreamDuration;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"read-file.d.ts","sourceRoot":"","sources":["../../src/assets/read-file.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AAexB,eAAO,MAAM,QAAQ,QAAS,MAAM,KAAG,QAAQ,KAAK,eAAe,CAQlE,CAAC"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"read-file.js","sourceRoot":"","sources":["../../src/assets/read-file.ts"],"names":[],"mappings":";;;;;;AAAA,gDAAwB;AACxB,kDAA0B;AAE1B,MAAM,SAAS,GAAG,CAAC,GAAW,EAAE,EAAE;IACjC,IAAI,GAAG,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE;QAC/B,OAAO,eAAK,CAAC,GAAG,CAAC;KACjB;IAED,IAAI,GAAG,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE;QAC9B,OAAO,cAAI,CAAC,GAAG,CAAC;KAChB;IAED,MAAM,IAAI,KAAK,CAAC,0DAA0D,CAAC,CAAC;AAC7E,CAAC,CAAC;AAEK,MAAM,QAAQ,GAAG,CAAC,GAAW,EAAiC,EAAE;IACtE,OAAO,IAAI,OAAO,CAAuB,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QAC5D,SAAS,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE;YAC3B,OAAO,CAAC,GAAG,CAAC,CAAC;QACd,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;YACtB,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC;QACpB,CAAC,CAAC,CAAC;IACJ,CAAC,CAAC,CAAC;AACJ,CAAC,CAAC;AARW,QAAA,QAAQ,YAQnB"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"round-volume-to-avoid-stack-overflow.d.ts","sourceRoot":"","sources":["../../src/assets/round-volume-to-avoid-stack-overflow.ts"],"names":[],"mappings":"AASA,eAAO,MAAM,sBAAsB,KAAK,CAAC;AAEzC,eAAO,MAAM,+BAA+B,WAAY,MAAM,KAAG,MAOhE,CAAC"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"round-volume-to-avoid-stack-overflow.js","sourceRoot":"","sources":["../../src/assets/round-volume-to-avoid-stack-overflow.ts"],"names":[],"mappings":";AAAA,4DAA4D;AAC5D,wHAAwH;AACxH,iDAAiD;AACjD,4DAA4D;AAC5D,qEAAqE;AACrE,6CAA6C;AAC7C,kFAAkF;AAClF,iDAAiD;;;AAEpC,QAAA,sBAAsB,GAAG,EAAE,CAAC;AAElC,MAAM,+BAA+B,GAAG,CAAC,MAAc,EAAU,EAAE;IACzE,OAAO,MAAM,CACZ,CACC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,8BAAsB,GAAG,CAAC,CAAC,CAAC;QACjD,CAAC,8BAAsB,GAAG,CAAC,CAAC,CAC5B,CAAC,OAAO,CAAC,CAAC,CAAC,CACZ,CAAC;AACH,CAAC,CAAC;AAPW,QAAA,+BAA+B,mCAO1C"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sanitize-filename.d.ts","sourceRoot":"","sources":["../../src/assets/sanitize-filename.ts"],"names":[],"mappings":"AAoDA,eAAO,MAAM,gBAAgB,UAAW,MAAM,WAQ7C,CAAC"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sanitize-filename.js","sourceRoot":"","sources":["../../src/assets/sanitize-filename.ts"],"names":[],"mappings":";AAAA,sFAAsF;;;AAEtF,+DAAwD;AAExD;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,MAAM,SAAS,GAAG,eAAe,CAAC;AAClC,4CAA4C;AAC5C,MAAM,SAAS,GAAG,uBAAuB,CAAC;AAC1C,MAAM,UAAU,GAAG,OAAO,CAAC;AAC3B,MAAM,iBAAiB,GAAG,+CAA+C,CAAC;AAC1E,MAAM,iBAAiB,GAAG,QAAQ,CAAC;AAEnC,SAAS,QAAQ,CAAC,KAAa,EAAE,WAAmB;IACnD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;QAC9B,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;KACxC;IAED,MAAM,SAAS,GAAG,KAAK;SACrB,OAAO,CAAC,SAAS,EAAE,WAAW,CAAC;SAC/B,OAAO,CAAC,SAAS,EAAE,WAAW,CAAC;SAC/B,OAAO,CAAC,UAAU,EAAE,WAAW,CAAC;SAChC,OAAO,CAAC,iBAAiB,EAAE,WAAW,CAAC;SACvC,OAAO,CAAC,iBAAiB,EAAE,WAAW,CAAC,CAAC;IAC1C,OAAO,IAAA,uCAAiB,EAAC,SAAS,EAAE,GAAG,CAAC,CAAC;AAC1C,CAAC;AAEM,MAAM,gBAAgB,GAAG,CAAC,KAAa,EAAE,EAAE;IACjD,MAAM,WAAW,GAAG,EAAE,CAAC;IACvB,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;IAC5C,IAAI,WAAW,KAAK,EAAE,EAAE;QACvB,OAAO,MAAM,CAAC;KACd;IAED,OAAO,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;AAC7B,CAAC,CAAC;AARW,QAAA,gBAAgB,oBAQ3B"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sanitize-filepath.d.ts","sourceRoot":"","sources":["../../src/assets/sanitize-filepath.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,gBAAgB,mBAAoB,MAAM,WAKtD,CAAC"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sanitize-filepath.js","sourceRoot":"","sources":["../../src/assets/sanitize-filepath.ts"],"names":[],"mappings":";;;;;;AAAA,gDAAwB;AACxB,2DAAqD;AAErD,MAAM,cAAc,GAAG,OAAO,CAAC;AAExB,MAAM,gBAAgB,GAAG,CAAC,cAAsB,EAAE,EAAE;IAC1D,OAAO,cAAc;SACnB,KAAK,CAAC,cAAc,CAAC;SACrB,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAA,oCAAgB,EAAC,CAAC,CAAC,CAAC;SAC/B,IAAI,CAAC,cAAI,CAAC,GAAG,CAAC,CAAC;AAClB,CAAC,CAAC;AALW,QAAA,gBAAgB,oBAK3B"}
@@ -0,0 +1,6 @@
1
+ import { MediaAsset } from './types';
2
+ export declare const splitAssetsIntoSegments: ({ assets, duration, }: {
3
+ assets: MediaAsset[];
4
+ duration: number;
5
+ }) => MediaAsset[];
6
+ //# sourceMappingURL=split-assets-into-segments.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"split-assets-into-segments.d.ts","sourceRoot":"","sources":["../../src/assets/split-assets-into-segments.ts"],"names":[],"mappings":"AAMA,OAAO,EAAC,UAAU,EAAC,MAAM,SAAS,CAAC;AAQnC,eAAO,MAAM,uBAAuB;YAI3B,UAAU,EAAE;cACV,MAAM;MACb,UAAU,EAuFb,CAAC"}
@@ -0,0 +1,89 @@
1
+ "use strict";
2
+ // Because of how FFMPEG filters work, we might have to split 1 audio
3
+ // track into multiple filters to avoid unexpected volume changes.
4
+ Object.defineProperty(exports, "__esModule", { value: true });
5
+ exports.splitAssetsIntoSegments = void 0;
6
+ const remotion_1 = require("remotion");
7
+ const asset_is_used_at_time_1 = require("./asset-is-used-at-time");
8
+ const flatten_volume_array_1 = require("./flatten-volume-array");
9
+ // If there is a track from 0-10 seconds and one from 5-15 seconds
10
+ // we need to create the following segments:
11
+ // 1. Segment from 0-5 seconds with 1 audio source and volume=1
12
+ // 2. Segment from 5-10 seconds with 2 audio sources and volume=2 for each
13
+ // 3. Segment from 10-15 seconds with 1 audio source and volume=1
14
+ const splitAssetsIntoSegments = ({ assets, duration, }) => {
15
+ const timeIds = new Array(duration).fill(true).map((_, frame) => {
16
+ const sourcesAtThisTime = assets.filter((a) => {
17
+ return (0, asset_is_used_at_time_1.assetIsUsedAtTime)(a, frame);
18
+ });
19
+ return sourcesAtThisTime.map((s) => s.src).join(',');
20
+ });
21
+ const framesAtWhichToCut = [
22
+ 0,
23
+ ...timeIds
24
+ .map((t, i) => {
25
+ return {
26
+ timeId: t,
27
+ index: i,
28
+ };
29
+ })
30
+ .filter(({ index, timeId }) => {
31
+ return index > 0 && timeId !== timeIds[index - 1];
32
+ })
33
+ .map(({ index }) => index),
34
+ duration,
35
+ ];
36
+ return assets
37
+ .map((a) => {
38
+ return framesAtWhichToCut.map((cutEnd, i) => {
39
+ const cutStart = i === 0 ? 0 : framesAtWhichToCut[i - 1];
40
+ const assetStart = a.startInVideo;
41
+ const assetEnd = a.startInVideo + a.duration;
42
+ const amountOfFramesThatGetCut = cutStart - assetStart;
43
+ // Video goes beyond cut
44
+ if (assetStart < cutEnd && assetEnd > cutEnd) {
45
+ const newDuration = cutEnd - cutStart;
46
+ return {
47
+ ...a,
48
+ startInVideo: cutStart,
49
+ volume: typeof a.volume === 'number'
50
+ ? a.volume
51
+ : a.volume.slice(amountOfFramesThatGetCut, newDuration + amountOfFramesThatGetCut),
52
+ duration: cutEnd - cutStart,
53
+ trimLeft: a.trimLeft + amountOfFramesThatGetCut,
54
+ };
55
+ }
56
+ // Video starts before cut
57
+ if (assetStart < cutStart && assetEnd > cutStart) {
58
+ const newDuration = a.duration - amountOfFramesThatGetCut;
59
+ return {
60
+ ...a,
61
+ startInVideo: cutStart,
62
+ volume: typeof a.volume === 'number'
63
+ ? a.volume
64
+ : a.volume.slice(amountOfFramesThatGetCut, newDuration + amountOfFramesThatGetCut),
65
+ duration: newDuration,
66
+ trimLeft: a.trimLeft + amountOfFramesThatGetCut,
67
+ };
68
+ }
69
+ // Video is inside cut, leave
70
+ if (assetStart >= cutStart && assetEnd <= cutEnd) {
71
+ return a;
72
+ }
73
+ // Video is left from cut
74
+ if (assetStart <= cutStart && assetEnd <= cutStart) {
75
+ return null;
76
+ }
77
+ // Video is right from cut
78
+ if (assetStart >= cutStart && assetEnd >= cutStart) {
79
+ return null;
80
+ }
81
+ throw new Error('Unhandled');
82
+ });
83
+ })
84
+ .flat(2)
85
+ .filter(remotion_1.Internals.truthy)
86
+ .map((a) => (0, flatten_volume_array_1.convertAssetToFlattenedVolume)(a));
87
+ };
88
+ exports.splitAssetsIntoSegments = splitAssetsIntoSegments;
89
+ //# sourceMappingURL=split-assets-into-segments.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"split-assets-into-segments.js","sourceRoot":"","sources":["../../src/assets/split-assets-into-segments.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"truncate-utf8-bytes.d.ts","sourceRoot":"","sources":["../../src/assets/truncate-utf8-bytes.ts"],"names":[],"mappings":"AAUA,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,UAkCnE"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"truncate-utf8-bytes.js","sourceRoot":"","sources":["../../src/assets/truncate-utf8-bytes.ts"],"names":[],"mappings":";;;AAAA,SAAS,eAAe,CAAC,SAAiB;IACzC,OAAO,SAAS,IAAI,MAAM,IAAI,SAAS,IAAI,MAAM,CAAC;AACnD,CAAC;AAED,SAAS,cAAc,CAAC,SAAiB;IACxC,OAAO,SAAS,IAAI,MAAM,IAAI,SAAS,IAAI,MAAM,CAAC;AACnD,CAAC;AAED,MAAM,SAAS,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAEjD,SAAgB,iBAAiB,CAAC,MAAc,EAAE,UAAkB;IACnE,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE;QAC/B,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;KACxC;IAED,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC;IACjC,IAAI,aAAa,GAAG,CAAC,CAAC;IACtB,IAAI,SAAS,CAAC;IACd,IAAI,OAAO,CAAC;IAEZ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,IAAI,CAAC,EAAE;QACvC,SAAS,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QACjC,OAAO,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QAEpB,IACC,eAAe,CAAC,SAAS,CAAC;YAC1B,cAAc,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EACvC;YACD,CAAC,IAAI,CAAC,CAAC;YACP,OAAO,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC;SACrB;QAED,aAAa,IAAI,SAAS,CAAC,OAAO,CAAC,CAAC;QAEpC,IAAI,aAAa,KAAK,UAAU,EAAE;YACjC,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;SAC9B;QAED,IAAI,aAAa,GAAG,UAAU,EAAE;YAC/B,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;SAC/C;KACD;IAED,OAAO,MAAM,CAAC;AACf,CAAC;AAlCD,8CAkCC"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/assets/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,MAAM,EAAC,MAAM,UAAU,CAAC;AAKhC,oBAAY,WAAW,GAAG,IAAI,CAC7B,MAAM,EACN,OAAO,GAAG,IAAI,GAAG,QAAQ,GAAG,YAAY,CACxC,GAAG;IACH,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,EAAE,EAAE,MAAM,CAAC;IACX,YAAY,EAAE,MAAM,CAAC;CACrB,CAAC;AAIF,oBAAY,WAAW,GAAG,MAAM,GAAG,MAAM,EAAE,CAAC;AAE5C,oBAAY,UAAU,GAAG,IAAI,CAAC,WAAW,EAAE,UAAU,GAAG,QAAQ,CAAC,GAAG;IACnE,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,WAAW,CAAC;CACpB,CAAC;AAEF,eAAO,MAAM,oBAAoB,cACrB,MAAM,EAAE,qBACA,MAAM,KACvB,MAuBF,CAAC;AAEF,oBAAY,iBAAiB,GAAG;IAC/B,QAAQ,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,oBAAY,MAAM,GAAG,UAAU,EAAE,CAAC"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/assets/types.ts"],"names":[],"mappings":";;;AA0BO,MAAM,oBAAoB,GAAG,CACnC,SAAmB,EACnB,iBAAyB,EAChB,EAAE;IACX,MAAM,YAAY,GAAG,iBAAiB,CAAC,GAAG,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC;IAC3E,IAAI,CAAC,YAAY,EAAE;QAClB,OAAO,iBAAiB,CAAC;KACzB;IAED,MAAM,CAAC,EAAE,EAAE,EAAE,KAAK,CAAC,GAAG,YAAY,CAAC;IAEnC,MAAM,WAAW,GAAG,SAAS,CAAC,IAAI,CACjC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,KAAK,CAC/C,CAAC;IACF,IAAI,CAAC,WAAW,EAAE;QACjB,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;QAC/B,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACvB,MAAM,IAAI,SAAS,CAClB,6HAA6H,CAC7H,CAAC;KACF;IAED,OAAO;QACN,GAAG,iBAAiB;QACpB,GAAG,EAAE,WAAW,CAAC,GAAG;KACpB,CAAC;AACH,CAAC,CAAC;AA1BW,QAAA,oBAAoB,wBA0B/B"}
@@ -0,0 +1,7 @@
1
+ export declare const assetsToFfmpegInputs: ({ assets, isAudioOnly, frameCount, fps, }: {
2
+ assets: string[];
3
+ isAudioOnly: boolean;
4
+ frameCount: number;
5
+ fps: number;
6
+ }) => [string, string][];
7
+ //# sourceMappingURL=assets-to-ffmpeg-inputs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assets-to-ffmpeg-inputs.d.ts","sourceRoot":"","sources":["../src/assets-to-ffmpeg-inputs.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,oBAAoB;YAMxB,MAAM,EAAE;iBACH,OAAO;gBACR,MAAM;SACb,MAAM;MACR,CAAC,MAAM,EAAE,MAAM,CAAC,EAUnB,CAAC"}
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.assetsToFfmpegInputs = void 0;
4
+ const assetsToFfmpegInputs = ({ assets, isAudioOnly, frameCount, fps, }) => {
5
+ if (isAudioOnly && assets.length === 0) {
6
+ return [
7
+ ['-f', 'lavfi'],
8
+ ['-i', 'anullsrc'],
9
+ ['-t', (frameCount / fps).toFixed(4)],
10
+ ];
11
+ }
12
+ return assets.map((path) => ['-i', path]);
13
+ };
14
+ exports.assetsToFfmpegInputs = assetsToFfmpegInputs;
15
+ //# sourceMappingURL=assets-to-ffmpeg-inputs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assets-to-ffmpeg-inputs.js","sourceRoot":"","sources":["../src/assets-to-ffmpeg-inputs.ts"],"names":[],"mappings":";;;AAAO,MAAM,oBAAoB,GAAG,CAAC,EACpC,MAAM,EACN,WAAW,EACX,UAAU,EACV,GAAG,GAMH,EAAsB,EAAE;IACxB,IAAI,WAAW,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;QACvC,OAAO;YACN,CAAC,IAAI,EAAE,OAAO,CAAC;YACf,CAAC,IAAI,EAAE,UAAU,CAAC;YAClB,CAAC,IAAI,EAAE,CAAC,UAAU,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;SACrC,CAAC;KACF;IAED,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;AAC3C,CAAC,CAAC;AApBW,QAAA,oBAAoB,wBAoB/B"}
@@ -13,6 +13,7 @@
13
13
  * See the License for the specific language governing permissions and
14
14
  * limitations under the License.
15
15
  */
16
+ export declare const DEFAULT_TIMEOUT = 30000;
16
17
  export declare class TimeoutSettings {
17
18
  #private;
18
19
  constructor();
@@ -27,8 +27,8 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (
27
27
  };
28
28
  var _TimeoutSettings_defaultTimeout, _TimeoutSettings_defaultNavigationTimeout;
29
29
  Object.defineProperty(exports, "__esModule", { value: true });
30
- exports.TimeoutSettings = void 0;
31
- const DEFAULT_TIMEOUT = 30000;
30
+ exports.TimeoutSettings = exports.DEFAULT_TIMEOUT = void 0;
31
+ exports.DEFAULT_TIMEOUT = 30000;
32
32
  class TimeoutSettings {
33
33
  constructor() {
34
34
  _TimeoutSettings_defaultTimeout.set(this, void 0);
@@ -49,13 +49,13 @@ class TimeoutSettings {
49
49
  if (__classPrivateFieldGet(this, _TimeoutSettings_defaultTimeout, "f") !== null) {
50
50
  return __classPrivateFieldGet(this, _TimeoutSettings_defaultTimeout, "f");
51
51
  }
52
- return DEFAULT_TIMEOUT;
52
+ return exports.DEFAULT_TIMEOUT;
53
53
  }
54
54
  timeout() {
55
55
  if (__classPrivateFieldGet(this, _TimeoutSettings_defaultTimeout, "f") !== null) {
56
56
  return __classPrivateFieldGet(this, _TimeoutSettings_defaultTimeout, "f");
57
57
  }
58
- return DEFAULT_TIMEOUT;
58
+ return exports.DEFAULT_TIMEOUT;
59
59
  }
60
60
  }
61
61
  exports.TimeoutSettings = TimeoutSettings;
@@ -0,0 +1 @@
1
+ export declare type BrowserExecutable = string | null;
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1 @@
1
+ {"version":3,"file":"browser-log.d.ts","sourceRoot":"","sources":["../src/browser-log.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,sBAAsB,EAAE,kBAAkB,EAAC,MAAM,gBAAgB,CAAC;AAE1E,oBAAY,UAAU,GAAG;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,sBAAsB,EAAE,CAAC;IACrC,IAAI,EAAE,kBAAkB,CAAC;CACzB,CAAC"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"browser-log.js","sourceRoot":"","sources":["../src/browser-log.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export declare type Browser = 'chrome' | 'firefox';
2
+ export declare const DEFAULT_BROWSER: Browser;
@@ -0,0 +1,4 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DEFAULT_BROWSER = void 0;
4
+ exports.DEFAULT_BROWSER = 'chrome';
@@ -0,0 +1 @@
1
+ {"version":3,"file":"calculate-ffmpeg-filters.d.ts","sourceRoot":"","sources":["../src/calculate-ffmpeg-filters.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,iBAAiB,EAAE,MAAM,EAAC,MAAM,gBAAgB,CAAC;AAIzD,oBAAY,uBAAuB,GAAG;IACrC,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,eAAO,MAAM,sBAAsB;;uBAOf,IAAI,MAAM,EAAE,iBAAiB,CAAC;SAC5C,MAAM;qBACM,MAAM;MACpB,uBAAuB,EAqC1B,CAAC"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"calculate-ffmpeg-filters.js","sourceRoot":"","sources":["../src/calculate-ffmpeg-filters.ts"],"names":[],"mappings":";;;AAAA,8EAAuE;AAEvE,2DAAoD;AACpD,uEAAgE;AAOzD,MAAM,sBAAsB,GAAG,CAAC,EACtC,cAAc,EACd,iBAAiB,EACjB,GAAG,EACH,eAAe,GAMf,EAA6B,EAAE;IAC/B,MAAM,oBAAoB,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE;QAC1D,OAAO,CACL,iBAAiB,CAAC,GAAG,CAAC,IAAA,mCAAe,EAAC,GAAG,CAAC,GAAG,CAAC,CAAuB;aACpE,QAAQ,GAAG,CAAC,CACd,CAAC;IACH,CAAC,CAAC,CAAC;IACH,OAAO,oBAAoB,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;QACzC,MAAM,aAAa,GAAG,CAAC,KAAK,CAAC,QAAQ,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QACxD,MAAM,cAAc,GAAG,CACtB,CAAC,KAAK,CAAC,QAAQ,GAAG,KAAK,CAAC,QAAQ,GAAG,KAAK,CAAC,YAAY,CAAC;YACtD,GAAG,CACH,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QACb,MAAM,YAAY,GAAG,iBAAiB,CAAC,GAAG,CACzC,IAAA,mCAAe,EAAC,KAAK,CAAC,GAAG,CAAC,CACL,CAAC;QACvB,MAAM,kBAAkB,GAAG,IAAA,+CAAqB,EAC/C,oBAAoB,EACpB,KAAK,CACL,CAAC;QAEF,MAAM,WAAW,GAAG,cAAc,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,eAAe,CAAC;QACpE,OAAO;YACN,MAAM,EAAE,IAAA,+CAAqB,EAAC;gBAC7B,WAAW;gBACX,QAAQ,EAAE,YAAY,CAAC,QAAQ;gBAC/B,YAAY,EAAE,KAAK,CAAC,YAAY;gBAChC,QAAQ,EAAE,aAAa;gBACvB,SAAS,EAAE,cAAc;gBACzB,kBAAkB,EAAE,kBAAkB,CAAC,MAAM;gBAC7C,MAAM,EAAE,KAAK,CAAC,MAAM;gBACpB,GAAG;gBACH,YAAY,EAAE,KAAK,CAAC,YAAY;aAChC,CAAC;YACF,WAAW;SACX,CAAC;IACH,CAAC,CAAC,CAAC;AACJ,CAAC,CAAC;AA/CW,QAAA,sBAAsB,0BA+CjC"}
@@ -1,2 +1,2 @@
1
- import type { Codec } from 'remotion';
1
+ import type { Codec } from './codec';
2
2
  export declare const canUseParallelEncoding: (codec: Codec) => boolean;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"can-use-parallel-encoding.d.ts","sourceRoot":"","sources":["../src/can-use-parallel-encoding.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,KAAK,EAAY,MAAM,UAAU,CAAC;AAE1C,eAAO,MAAM,sBAAsB,UAAW,KAAK,YAMlD,CAAC"}
@@ -1,9 +1,9 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.canUseParallelEncoding = void 0;
4
- const remotion_1 = require("remotion");
4
+ const is_audio_codec_1 = require("./is-audio-codec");
5
5
  const canUseParallelEncoding = (codec) => {
6
- if (remotion_1.Internals.isAudioCodec(codec)) {
6
+ if ((0, is_audio_codec_1.isAudioCodec)(codec)) {
7
7
  return false;
8
8
  }
9
9
  return codec === 'h264' || codec === 'h264-mkv' || codec === 'h265';
@@ -0,0 +1 @@
1
+ {"version":3,"file":"can-use-parallel-encoding.js","sourceRoot":"","sources":["../src/can-use-parallel-encoding.ts"],"names":[],"mappings":";;;AAAA,uCAA0C;AAEnC,MAAM,sBAAsB,GAAG,CAAC,KAAY,EAAE,EAAE;IACtD,IAAI,oBAAS,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE;QAClC,OAAO,KAAK,CAAC;KACb;IAED,OAAO,KAAK,KAAK,MAAM,IAAI,KAAK,KAAK,UAAU,IAAI,KAAK,KAAK,MAAM,CAAC;AACrE,CAAC,CAAC;AANW,QAAA,sBAAsB,0BAMjC"}
@@ -1,4 +1,4 @@
1
- import type { Codec } from 'remotion';
1
+ import type { Codec } from './codec';
2
2
  declare type MediaSupport = {
3
3
  video: boolean;
4
4
  audio: boolean;
@@ -0,0 +1,4 @@
1
+ export declare const validCodecs: readonly ["h264", "h265", "vp8", "vp9", "mp3", "aac", "wav", "prores", "h264-mkv", "gif"];
2
+ export declare type Codec = typeof validCodecs[number];
3
+ export declare type CodecOrUndefined = Codec | undefined;
4
+ export declare const DEFAULT_CODEC: Codec;
package/dist/codec.js ADDED
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DEFAULT_CODEC = exports.validCodecs = void 0;
4
+ exports.validCodecs = [
5
+ 'h264',
6
+ 'h265',
7
+ 'vp8',
8
+ 'vp9',
9
+ 'mp3',
10
+ 'aac',
11
+ 'wav',
12
+ 'prores',
13
+ 'h264-mkv',
14
+ 'gif',
15
+ ];
16
+ exports.DEFAULT_CODEC = 'h264';
@@ -1,4 +1,4 @@
1
- import type { Codec } from 'remotion';
1
+ import type { Codec } from './codec';
2
2
  export declare const combineVideos: ({ files, filelistDir, output, onProgress, numberOfFrames, codec, fps, numberOfGifLoops, }: {
3
3
  files: string[];
4
4
  filelistDir: string;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"combine-videos.d.ts","sourceRoot":"","sources":["../src/combine-videos.ts"],"names":[],"mappings":"AAKA,OAAO,EAAC,KAAK,EAAY,MAAM,UAAU,CAAC;AAI1C,eAAO,MAAM,aAAa;WAQlB,MAAM,EAAE;iBACF,MAAM;YACX,MAAM;oBACE,MAAM,KAAK,IAAI;oBACf,MAAM;WACf,KAAK;mBA0CZ,CAAC"}
@@ -8,9 +8,10 @@ exports.combineVideos = void 0;
8
8
  const execa_1 = __importDefault(require("execa"));
9
9
  const fs_1 = require("fs");
10
10
  const path_1 = require("path");
11
- const remotion_1 = require("remotion");
12
11
  const get_audio_codec_name_1 = require("./get-audio-codec-name");
12
+ const is_audio_codec_1 = require("./is-audio-codec");
13
13
  const parse_ffmpeg_progress_1 = require("./parse-ffmpeg-progress");
14
+ const truthy_1 = require("./truthy");
14
15
  const combineVideos = async ({ files, filelistDir, output, onProgress, numberOfFrames, codec, fps, numberOfGifLoops, }) => {
15
16
  var _a;
16
17
  const fileList = files.map((p) => `file '${p}'`).join('\n');
@@ -18,8 +19,8 @@ const combineVideos = async ({ files, filelistDir, output, onProgress, numberOfF
18
19
  (0, fs_1.writeFileSync)(fileListTxt, fileList);
19
20
  try {
20
21
  const task = (0, execa_1.default)('ffmpeg', [
21
- remotion_1.Internals.isAudioCodec(codec) ? null : '-r',
22
- remotion_1.Internals.isAudioCodec(codec) ? null : String(fps),
22
+ (0, is_audio_codec_1.isAudioCodec)(codec) ? null : '-r',
23
+ (0, is_audio_codec_1.isAudioCodec)(codec) ? null : String(fps),
23
24
  '-f',
24
25
  'concat',
25
26
  '-safe',
@@ -32,8 +33,8 @@ const combineVideos = async ({ files, filelistDir, output, onProgress, numberOfF
32
33
  : typeof numberOfGifLoops === 'number'
33
34
  ? String(numberOfGifLoops)
34
35
  : '-1',
35
- remotion_1.Internals.isAudioCodec(codec) ? null : '-c:v',
36
- remotion_1.Internals.isAudioCodec(codec) ? null : codec === 'gif' ? 'gif' : 'copy',
36
+ (0, is_audio_codec_1.isAudioCodec)(codec) ? null : '-c:v',
37
+ (0, is_audio_codec_1.isAudioCodec)(codec) ? null : codec === 'gif' ? 'gif' : 'copy',
37
38
  '-c:a',
38
39
  (0, get_audio_codec_name_1.getAudioCodecName)(codec),
39
40
  // Set max bitrate up to 1024kbps, will choose lower if that's too much
@@ -44,7 +45,7 @@ const combineVideos = async ({ files, filelistDir, output, onProgress, numberOfF
44
45
  '-shortest',
45
46
  '-y',
46
47
  output,
47
- ].filter(remotion_1.Internals.truthy));
48
+ ].filter(truthy_1.truthy));
48
49
  (_a = task.stderr) === null || _a === void 0 ? void 0 : _a.on('data', (data) => {
49
50
  if (onProgress) {
50
51
  const parsed = (0, parse_ffmpeg_progress_1.parseFfmpegProgress)(data.toString());
@@ -0,0 +1 @@
1
+ {"version":3,"file":"combine-videos.js","sourceRoot":"","sources":["../src/combine-videos.ts"],"names":[],"mappings":";AAAA,oEAAoE;;;;;;AAEpE,kDAA0B;AAC1B,2BAAoD;AACpD,+BAA0B;AAC1B,uCAA0C;AAC1C,iEAAyD;AACzD,mEAA4D;AAErD,MAAM,aAAa,GAAG,KAAK,EAAE,EACnC,KAAK,EACL,WAAW,EACX,MAAM,EACN,UAAU,EACV,cAAc,EACd,KAAK,GAQL,EAAE,EAAE;;IACJ,MAAM,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAE5D,MAAM,WAAW,GAAG,IAAA,WAAI,EAAC,WAAW,EAAE,WAAW,CAAC,CAAC;IACnD,IAAA,kBAAa,EAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;IAErC,IAAI;QACH,MAAM,IAAI,GAAG,IAAA,eAAK,EACjB,QAAQ,EACR;YACC,IAAI;YACJ,QAAQ;YACR,OAAO;YACP,GAAG;YACH,IAAI;YACJ,WAAW;YACX,oBAAS,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM;YAC7C,oBAAS,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM;YAC7C,MAAM;YACN,IAAA,wCAAiB,EAAC,KAAK,CAAC;YACxB,WAAW;YACX,IAAI;YACJ,MAAM;SACN,CAAC,MAAM,CAAC,oBAAS,CAAC,MAAM,CAAC,CAC1B,CAAC;QACF,MAAA,IAAI,CAAC,MAAM,0CAAE,EAAE,CAAC,MAAM,EAAE,CAAC,IAAY,EAAE,EAAE;YACxC,IAAI,UAAU,EAAE;gBACf,MAAM,MAAM,GAAG,IAAA,2CAAmB,EAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;gBACpD,IAAI,MAAM,KAAK,SAAS,EAAE;oBACzB,UAAU,CAAC,MAAM,CAAC,CAAC;iBACnB;aACD;QACF,CAAC,CAAC,CAAC;QAEH,MAAM,IAAI,CAAC;QACX,UAAU,CAAC,cAAc,CAAC,CAAC;QAC3B,CAAC,WAAM,aAAN,WAAM,cAAN,WAAM,GAAI,cAAS,CAAC,CAAC,WAAW,EAAE,EAAC,SAAS,EAAE,IAAI,EAAC,CAAC,CAAC;KACtD;IAAC,OAAO,GAAG,EAAE;QACb,CAAC,WAAM,aAAN,WAAM,cAAN,WAAM,GAAI,cAAS,CAAC,CAAC,WAAW,EAAE,EAAC,SAAS,EAAE,IAAI,EAAC,CAAC,CAAC;QACtD,MAAM,GAAG,CAAC;KACV;AACF,CAAC,CAAC;AAvDW,QAAA,aAAa,iBAuDxB"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Since audio or video can be base64-encoded, those can be really long strings.
3
+ * Since we track the `src` property for every frame, Node.JS can run out of memory easily. Instead of duplicating the src for every frame, we save memory by replacing the full base 64 encoded data with a string `same-as-[asset-id]-[frame]` referencing a previous asset with the same src.
4
+ */
5
+ import type { TAsset } from 'remotion';
6
+ export declare const compressAsset: (previousAssets: TAsset[], newAsset: TAsset) => TAsset;
7
+ export declare const isAssetCompressed: (src: string) => boolean;
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+ /**
3
+ * Since audio or video can be base64-encoded, those can be really long strings.
4
+ * Since we track the `src` property for every frame, Node.JS can run out of memory easily. Instead of duplicating the src for every frame, we save memory by replacing the full base 64 encoded data with a string `same-as-[asset-id]-[frame]` referencing a previous asset with the same src.
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.isAssetCompressed = exports.compressAsset = void 0;
8
+ const compressAsset = (previousAssets, newAsset) => {
9
+ if (newAsset.src.length < 400) {
10
+ return newAsset;
11
+ }
12
+ const assetWithSameSrc = previousAssets.find((a) => a.src === newAsset.src);
13
+ if (!assetWithSameSrc) {
14
+ return newAsset;
15
+ }
16
+ return {
17
+ ...newAsset,
18
+ src: `same-as-${assetWithSameSrc.id}-${assetWithSameSrc.frame}`,
19
+ };
20
+ };
21
+ exports.compressAsset = compressAsset;
22
+ const isAssetCompressed = (src) => {
23
+ return src.startsWith('same-as');
24
+ };
25
+ exports.isAssetCompressed = isAssetCompressed;
@@ -1,4 +1,4 @@
1
- import type { FfmpegExecutable } from 'remotion';
1
+ import type { FfmpegExecutable } from './ffmpeg-executable';
2
2
  export declare const convertToPcm: ({ ffmpegExecutable, input, outName, }: {
3
3
  ffmpegExecutable: FfmpegExecutable;
4
4
  input: string;
@@ -1,4 +1,8 @@
1
- export declare const createFfmpegComplexFilter: (filters: number) => Promise<{
2
- complexFilterFlag: [string, string] | null;
1
+ import type { DownloadMap } from './assets/download-map';
2
+ export declare const createFfmpegComplexFilter: (filters: number, downloadMap: DownloadMap) => Promise<{
3
+ complexFilterFlag: [
4
+ string,
5
+ string
6
+ ] | null;
3
7
  cleanup: () => void;
4
8
  }>;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-ffmpeg-complex-filter.d.ts","sourceRoot":"","sources":["../src/create-ffmpeg-complex-filter.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,uBAAuB,EAAC,MAAM,4BAA4B,CAAC;AAoBnE,eAAO,MAAM,yBAAyB,YAC5B,uBAAuB,EAAE,KAChC,QAAQ;IACV,iBAAiB,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAAC;IAC3C,OAAO,EAAE,MAAM,IAAI,CAAC;CACpB,CAyBA,CAAC"}
@@ -1,23 +1,14 @@
1
1
  "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
2
  Object.defineProperty(exports, "__esModule", { value: true });
6
3
  exports.createFfmpegComplexFilter = void 0;
7
- const fs_1 = __importDefault(require("fs"));
8
- const path_1 = __importDefault(require("path"));
9
4
  const create_ffmpeg_merge_filter_1 = require("./create-ffmpeg-merge-filter");
10
5
  const ffmpeg_filter_file_1 = require("./ffmpeg-filter-file");
11
- const tmp_dir_1 = require("./tmp-dir");
12
- const createFfmpegComplexFilter = async (filters) => {
6
+ const createFfmpegComplexFilter = async (filters, downloadMap) => {
13
7
  if (filters === 0) {
14
8
  return { complexFilterFlag: null, cleanup: () => undefined };
15
9
  }
16
10
  const complexFilter = (0, create_ffmpeg_merge_filter_1.createFfmpegMergeFilter)(filters);
17
- const { file, cleanup } = await (0, ffmpeg_filter_file_1.makeFfmpegFilterFile)(complexFilter);
18
- const tempPath = (0, tmp_dir_1.tmpDir)('remotion-complex-filter-script');
19
- const filterFile = path_1.default.join(tempPath, 'complex-filter.txt');
20
- await fs_1.default.promises.writeFile(filterFile, complexFilter);
11
+ const { file, cleanup } = await (0, ffmpeg_filter_file_1.makeFfmpegFilterFile)(complexFilter, downloadMap);
21
12
  return {
22
13
  complexFilterFlag: ['-filter_complex_script', file],
23
14
  cleanup,
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-ffmpeg-complex-filter.js","sourceRoot":"","sources":["../src/create-ffmpeg-complex-filter.ts"],"names":[],"mappings":";;;;;;AAAA,4CAAoB;AACpB,gDAAwB;AAExB,uCAAiC;AAEjC,MAAM,SAAS,GAAG,CAAC,OAAkC,EAAE,EAAE;IACxD,MAAM,UAAU,GAAG,OAAO;SACxB,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;QACd,OAAO,KAAK,KAAK,CAAC,WAAW,GAAG,CAAC;IAClC,CAAC,CAAC;SACD,IAAI,CAAC,EAAE,CAAC,CAAC;IACX,MAAM,OAAO,GAAG;QACf,uCAAuC;QACvC,UAAU,OAAO,CAAC,MAAM,EAAE;QAC1B,qDAAqD;QACrD,sBAAsB;QACtB,8CAA8C;QAC9C,kBAAkB;KAClB,CAAC;IACF,OAAO,GAAG,UAAU,QAAQ,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;AACjD,CAAC,CAAC;AAEK,MAAM,yBAAyB,GAAG,KAAK,EAC7C,OAAkC,EAIhC,EAAE;IACJ,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;QACpB,OAAO,EAAC,iBAAiB,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,SAAS,EAAC,CAAC;KAC3D;IAED,MAAM,aAAa,GAAG;QACrB,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC;QAC/B,SAAS,CAAC,OAAO,CAAC;KAClB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACZ,MAAM,QAAQ,GAAG,IAAA,gBAAM,EAAC,yBAAyB,CAAC,CAAC;IACnD,MAAM,UAAU,GAAG,cAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,oBAAoB,CAAC,CAAC;IAC7D,MAAM,YAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;IAEvD,OAAO;QACN,iBAAiB,EAAE,CAAC,wBAAwB,EAAE,UAAU,CAAC;QACzD,OAAO,EAAE,GAAG,EAAE;;YACb,CAAC,MAAA,YAAE,CAAC,QAAQ,CAAC,EAAE,mCAAI,YAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,QAAQ,EAAE;gBAC/C,SAAS,EAAE,IAAI;aACf,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;gBAChB,OAAO,CAAC,KAAK,CAAC,8BAA8B,CAAC,CAAC;gBAC9C,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBACnB,OAAO,CAAC,KAAK,CAAC,4CAA4C,CAAC,CAAC;YAC7D,CAAC,CAAC,CAAC;QACJ,CAAC;KACD,CAAC;AACH,CAAC,CAAC;AA9BW,QAAA,yBAAyB,6BA8BpC"}
@@ -1,17 +1,17 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.createFfmpegMergeFilter = void 0;
4
- const remotion_1 = require("remotion");
4
+ const truthy_1 = require("./truthy");
5
5
  const createFfmpegMergeFilter = (inputs) => {
6
6
  const leftChannel = new Array(inputs * 2)
7
7
  .fill(true)
8
8
  .map((_, i) => (i % 2 === 0 ? `c${i}` : null))
9
- .filter(remotion_1.Internals.truthy)
9
+ .filter(truthy_1.truthy)
10
10
  .join('+');
11
11
  const rightChannel = new Array(inputs * 2)
12
12
  .fill(true)
13
13
  .map((_, i) => (i % 2 === 1 ? `c${i}` : null))
14
- .filter(remotion_1.Internals.truthy)
14
+ .filter(truthy_1.truthy)
15
15
  .join('+');
16
16
  return `[0:a][1:a]amerge=inputs=${inputs},pan=stereo|c0=${leftChannel}|c1=${rightChannel}[a]`;
17
17
  };
@@ -1,4 +1,4 @@
1
- import type { FfmpegExecutable } from 'remotion';
1
+ import type { FfmpegExecutable } from './ffmpeg-executable';
2
2
  export declare const createSilentAudio: ({ ffmpegExecutable, numberOfSeconds, outName, }: {
3
3
  ffmpegExecutable: FfmpegExecutable;
4
4
  numberOfSeconds: number;
package/dist/crf.d.ts ADDED
@@ -0,0 +1,5 @@
1
+ import type { Codec } from './codec';
2
+ export declare type Crf = number | undefined;
3
+ export declare const getDefaultCrfForCodec: (codec: Codec) => number;
4
+ export declare const getValidCrfRanges: (codec: Codec) => [number, number];
5
+ export declare const validateSelectedCrfAndCodecCombination: (crf: unknown, codec: Codec) => void;