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