@remotion/renderer 4.0.0-webhook.27 → 4.0.1
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/LICENSE.md +8 -8
- package/README.md +9 -0
- package/client.d.ts +1 -0
- package/client.js +1 -0
- package/dist/assets/calculate-asset-positions.d.ts +0 -0
- package/dist/assets/calculate-asset-positions.js +1 -0
- package/dist/assets/calculate-atempo.d.ts +0 -0
- package/dist/assets/calculate-atempo.js +0 -0
- package/dist/assets/convert-assets-to-file-urls.d.ts +0 -0
- package/dist/assets/convert-assets-to-file-urls.js +0 -0
- package/dist/assets/download-and-map-assets-to-file.d.ts +6 -4
- package/dist/assets/download-and-map-assets-to-file.js +49 -19
- package/dist/assets/download-file.d.ts +8 -5
- package/dist/assets/download-file.js +71 -8
- package/dist/assets/download-map.d.ts +8 -29
- package/dist/assets/download-map.js +15 -16
- package/dist/assets/ffmpeg-volume-expression.d.ts +4 -3
- package/dist/assets/ffmpeg-volume-expression.js +5 -3
- package/dist/assets/flatten-volume-array.d.ts +0 -0
- package/dist/assets/flatten-volume-array.js +0 -0
- package/dist/assets/get-audio-channels.d.ts +2 -2
- package/dist/assets/get-audio-channels.js +14 -12
- package/dist/assets/read-file.d.ts +1 -1
- package/dist/assets/read-file.js +5 -7
- package/dist/assets/round-volume-to-avoid-stack-overflow.d.ts +0 -0
- package/dist/assets/round-volume-to-avoid-stack-overflow.js +0 -0
- package/dist/assets/sanitize-filename.d.ts +0 -0
- package/dist/assets/sanitize-filename.js +0 -0
- package/dist/assets/sanitize-filepath.d.ts +0 -0
- package/dist/assets/sanitize-filepath.js +2 -2
- package/dist/assets/truncate-utf8-bytes.d.ts +0 -0
- package/dist/assets/truncate-utf8-bytes.js +0 -0
- package/dist/assets/types.d.ts +5 -4
- package/dist/assets/types.js +0 -0
- package/dist/audio-codec.d.ts +28 -0
- package/dist/audio-codec.js +83 -0
- package/dist/browser/Browser.d.ts +19 -16
- package/dist/browser/Browser.js +72 -75
- package/dist/browser/BrowserConnector.d.ts +0 -0
- package/dist/browser/BrowserConnector.js +0 -0
- package/dist/browser/BrowserFetcher.d.ts +16 -64
- package/dist/browser/BrowserFetcher.js +147 -235
- package/dist/browser/BrowserPage.d.ts +32 -6
- package/dist/browser/BrowserPage.js +90 -26
- package/dist/browser/BrowserRunner.d.ts +1 -1
- package/dist/browser/BrowserRunner.js +32 -22
- package/dist/browser/Connection.d.ts +9 -3
- package/dist/browser/Connection.js +12 -4
- package/dist/browser/ConsoleMessage.d.ts +9 -2
- package/dist/browser/ConsoleMessage.js +2 -1
- package/dist/browser/DOMWorld.d.ts +5 -4
- package/dist/browser/DOMWorld.js +16 -9
- package/dist/browser/Errors.d.ts +0 -0
- package/dist/browser/Errors.js +0 -0
- package/dist/browser/EvalTypes.d.ts +7 -7
- package/dist/browser/EvalTypes.js +0 -0
- package/dist/browser/EventEmitter.d.ts +0 -0
- package/dist/browser/EventEmitter.js +0 -0
- package/dist/browser/ExecutionContext.d.ts +0 -0
- package/dist/browser/ExecutionContext.js +4 -4
- package/dist/browser/FrameManager.d.ts +0 -2
- package/dist/browser/FrameManager.js +15 -19
- package/dist/browser/HTTPRequest.d.ts +0 -0
- package/dist/browser/HTTPRequest.js +0 -0
- package/dist/browser/HTTPResponse.d.ts +0 -0
- package/dist/browser/HTTPResponse.js +0 -0
- package/dist/browser/JSHandle.d.ts +0 -0
- package/dist/browser/JSHandle.js +14 -14
- package/dist/browser/LaunchOptions.d.ts +4 -2
- package/dist/browser/LaunchOptions.js +0 -0
- package/dist/browser/Launcher.d.ts +9 -3
- package/dist/browser/Launcher.js +17 -29
- package/dist/browser/LifecycleWatcher.d.ts +1 -1
- package/dist/browser/LifecycleWatcher.js +0 -0
- package/dist/browser/NetworkEventManager.d.ts +4 -4
- package/dist/browser/NetworkEventManager.js +0 -0
- package/dist/browser/NetworkManager.d.ts +4 -1
- package/dist/browser/NetworkManager.js +0 -0
- package/dist/browser/NodeWebSocketTransport.d.ts +0 -0
- package/dist/browser/NodeWebSocketTransport.js +21 -21
- package/dist/browser/Product.d.ts +1 -1
- package/dist/browser/Product.js +0 -0
- package/dist/browser/PuppeteerNode.d.ts +2 -5
- package/dist/browser/PuppeteerNode.js +2 -11
- package/dist/browser/PuppeteerViewport.d.ts +0 -0
- package/dist/browser/PuppeteerViewport.js +0 -0
- package/dist/browser/ScreenshotOptions.d.ts +0 -14
- package/dist/browser/ScreenshotOptions.js +0 -1
- package/dist/browser/Target.d.ts +5 -3
- package/dist/browser/Target.js +10 -2
- package/dist/browser/TaskQueue.d.ts +0 -0
- package/dist/browser/TaskQueue.js +0 -0
- package/dist/browser/TimeoutSettings.d.ts +0 -0
- package/dist/browser/TimeoutSettings.js +0 -0
- package/dist/browser/assert.d.ts +0 -0
- package/dist/browser/assert.js +0 -0
- package/dist/browser/create-browser-fetcher.d.ts +0 -0
- package/dist/browser/create-browser-fetcher.js +34 -48
- package/dist/browser/devtools-commands.d.ts +5 -1
- package/dist/browser/devtools-commands.js +0 -0
- package/dist/browser/devtools-types.d.ts +151 -10
- package/dist/browser/devtools-types.js +0 -0
- package/dist/browser/get-download-destination.d.ts +0 -0
- package/dist/browser/get-download-destination.js +8 -8
- package/dist/browser/is-target-closed-err.d.ts +1 -0
- package/dist/browser/is-target-closed-err.js +9 -0
- package/dist/browser/mitt/index.d.ts +6 -6
- package/dist/browser/mitt/index.js +0 -0
- package/dist/browser/node.d.ts +0 -0
- package/dist/browser/node.js +0 -0
- package/dist/browser/revisions.d.ts +1 -1
- package/dist/browser/revisions.js +0 -0
- package/dist/browser/should-log-message.d.ts +24 -0
- package/dist/browser/should-log-message.js +80 -0
- package/dist/browser/util.d.ts +2 -2
- package/dist/browser/util.js +0 -0
- package/dist/browser-executable.d.ts +1 -1
- package/dist/browser-executable.js +0 -0
- package/dist/browser-log.d.ts +1 -1
- package/dist/browser-log.js +0 -0
- package/dist/browser.d.ts +1 -1
- package/dist/browser.js +0 -0
- package/dist/calculate-ffmpeg-filters.d.ts +2 -1
- package/dist/calculate-ffmpeg-filters.js +1 -0
- package/dist/call-ffmpeg.d.ts +14 -0
- package/dist/call-ffmpeg.js +42 -0
- package/dist/can-use-parallel-encoding.d.ts +0 -0
- package/dist/can-use-parallel-encoding.js +0 -0
- package/dist/chalk/index.d.ts +55 -0
- package/dist/chalk/index.js +130 -0
- package/dist/chalk/is-color-supported.d.ts +1 -0
- package/dist/chalk/is-color-supported.js +45 -0
- package/dist/check-apple-silicon.d.ts +1 -1
- package/dist/check-apple-silicon.js +8 -47
- package/dist/chunk.d.ts +0 -0
- package/dist/chunk.js +0 -0
- package/dist/client.d.ts +204 -0
- package/dist/client.js +49 -0
- package/dist/codec-supports-media.d.ts +3 -2
- package/dist/codec-supports-media.js +20 -5
- package/dist/codec.d.ts +2 -2
- package/dist/codec.js +0 -0
- package/dist/combine-videos.d.ts +6 -2
- package/dist/combine-videos.js +17 -17
- package/dist/compositor/compose.d.ts +26 -0
- package/dist/compositor/compose.js +87 -0
- package/dist/compositor/compositor.d.ts +12 -0
- package/dist/compositor/compositor.js +219 -0
- package/dist/compositor/get-executable-path.d.ts +1 -0
- package/dist/compositor/get-executable-path.js +57 -0
- package/dist/compositor/make-nonce.d.ts +1 -0
- package/dist/compositor/make-nonce.js +8 -0
- package/dist/compositor/payloads.d.ts +68 -0
- package/dist/{ffmpeg-executable.js → compositor/payloads.js} +0 -0
- package/dist/compress-assets.d.ts +0 -0
- package/dist/compress-assets.js +0 -0
- package/dist/convert-number-of-gif-loops-to-ffmpeg.d.ts +0 -0
- package/dist/convert-number-of-gif-loops-to-ffmpeg.js +0 -0
- package/dist/convert-to-positive-frame-index.d.ts +0 -0
- package/dist/convert-to-positive-frame-index.js +0 -0
- package/dist/create-ffmpeg-complex-filter.d.ts +5 -1
- package/dist/create-ffmpeg-complex-filter.js +6 -4
- package/dist/create-ffmpeg-merge-filter.d.ts +5 -1
- package/dist/create-ffmpeg-merge-filter.js +20 -13
- package/dist/create-silent-audio.d.ts +1 -3
- package/dist/create-silent-audio.js +3 -6
- package/dist/crf.d.ts +6 -2
- package/dist/crf.js +41 -8
- package/dist/cycle-browser-tabs.d.ts +3 -5
- package/dist/cycle-browser-tabs.js +7 -7
- package/dist/delay-render-embedded-stack.d.ts +0 -0
- package/dist/delay-render-embedded-stack.js +0 -0
- package/dist/delete-directory.d.ts +1 -1
- package/dist/delete-directory.js +43 -17
- package/dist/does-have-m2-bug.d.ts +3 -0
- package/dist/does-have-m2-bug.js +12 -0
- package/dist/ensure-frames-in-order.d.ts +0 -0
- package/dist/ensure-frames-in-order.js +0 -0
- package/dist/ensure-output-directory.d.ts +0 -0
- package/dist/ensure-output-directory.js +5 -5
- package/dist/error-handling/handle-javascript-exception.d.ts +0 -0
- package/dist/error-handling/handle-javascript-exception.js +10 -0
- package/dist/error-handling/symbolicate-error.d.ts +0 -0
- package/dist/error-handling/symbolicate-error.js +6 -3
- package/dist/error-handling/symbolicateable-error.d.ts +0 -0
- package/dist/error-handling/symbolicateable-error.js +0 -0
- package/dist/ffmpeg-filter-file.d.ts +6 -1
- package/dist/ffmpeg-filter-file.js +40 -8
- package/dist/ffmpeg-override.d.ts +1 -1
- package/dist/ffmpeg-override.js +0 -0
- package/dist/file-extensions.d.ts +14 -0
- package/dist/file-extensions.js +76 -0
- package/dist/find-closest-package-json.d.ts +2 -0
- package/dist/find-closest-package-json.js +31 -0
- package/dist/format-logs.d.ts +3 -0
- package/dist/format-logs.js +201 -0
- package/dist/frame-range.d.ts +1 -1
- package/dist/frame-range.js +0 -0
- package/dist/get-browser-instance.d.ts +9 -3
- package/dist/get-browser-instance.js +10 -5
- package/dist/get-codec-name.d.ts +0 -0
- package/dist/get-codec-name.js +0 -0
- package/dist/get-compositions.d.ts +28 -14
- package/dist/get-compositions.js +74 -40
- package/dist/get-concurrency.d.ts +1 -1
- package/dist/get-concurrency.js +11 -4
- package/dist/get-duration-from-frame-range.d.ts +0 -0
- package/dist/get-duration-from-frame-range.js +0 -0
- package/dist/get-extension-from-codec.d.ts +5 -1
- package/dist/get-extension-from-codec.js +56 -32
- package/dist/get-extension-of-filename.d.ts +0 -0
- package/dist/get-extension-of-filename.js +5 -1
- package/dist/get-frame-padded-index.d.ts +3 -2
- package/dist/get-frame-padded-index.js +3 -2
- package/dist/get-frame-to-render.d.ts +0 -0
- package/dist/get-frame-to-render.js +1 -1
- package/dist/get-local-browser-executable.d.ts +0 -0
- package/dist/get-local-browser-executable.js +7 -15
- package/dist/get-port.d.ts +4 -1
- package/dist/get-port.js +8 -8
- package/dist/get-prores-profile-name.d.ts +0 -0
- package/dist/get-prores-profile-name.js +0 -0
- package/dist/get-video-threads-flag.d.ts +0 -0
- package/dist/get-video-threads-flag.js +3 -3
- package/dist/guess-extension-for-media.d.ts +3 -1
- package/dist/guess-extension-for-media.js +4 -7
- package/dist/image-format.d.ts +12 -6
- package/dist/image-format.js +19 -13
- package/dist/index.d.ts +369 -49
- package/dist/index.js +67 -46
- package/dist/is-audio-codec.d.ts +0 -0
- package/dist/is-audio-codec.js +0 -0
- package/dist/is-serve-url.d.ts +0 -0
- package/dist/is-serve-url.js +0 -0
- package/dist/jpeg-quality.d.ts +2 -0
- package/dist/jpeg-quality.js +22 -0
- package/dist/locks.d.ts +7 -0
- package/dist/locks.js +44 -0
- package/dist/log-level.d.ts +1 -1
- package/dist/log-level.js +0 -0
- package/dist/logger.d.ts +23 -0
- package/dist/logger.js +63 -0
- package/dist/make-cancel-signal.d.ts +13 -2
- package/dist/make-cancel-signal.js +24 -1
- package/dist/merge-audio-track.d.ts +4 -4
- package/dist/merge-audio-track.js +38 -33
- package/dist/mime-db.d.ts +0 -0
- package/dist/mime-db.js +0 -0
- package/dist/mime-types.d.ts +0 -0
- package/dist/mime-types.js +3 -3
- package/dist/normalize-serve-url.d.ts +0 -0
- package/dist/normalize-serve-url.js +0 -0
- package/dist/offthread-video-server.d.ts +48 -11
- package/dist/offthread-video-server.js +112 -58
- package/dist/open-browser.d.ts +22 -6
- package/dist/open-browser.js +40 -17
- package/dist/options/audio-bitrate.d.ts +2 -0
- package/dist/options/audio-bitrate.js +11 -0
- package/dist/options/crf.d.ts +2 -0
- package/dist/options/crf.js +11 -0
- package/dist/options/enforce-audio.d.ts +2 -0
- package/dist/options/enforce-audio.js +11 -0
- package/dist/options/jpeg-quality.d.ts +2 -0
- package/dist/options/jpeg-quality.js +11 -0
- package/dist/options/mute.d.ts +2 -0
- package/dist/options/mute.js +11 -0
- package/dist/options/option.d.ts +8 -0
- package/dist/options/option.js +2 -0
- package/dist/options/scale.d.ts +2 -0
- package/dist/options/scale.js +11 -0
- package/dist/options/video-bitrate.d.ts +2 -0
- package/dist/options/video-bitrate.js +11 -0
- package/dist/options/video-codec.d.ts +2 -0
- package/dist/options/video-codec.js +11 -0
- package/dist/overwrite.d.ts +0 -0
- package/dist/overwrite.js +0 -0
- package/dist/p-limit.d.ts +0 -0
- package/dist/p-limit.js +0 -0
- package/dist/parse-browser-error-stack.d.ts +1 -1
- package/dist/parse-browser-error-stack.js +0 -0
- package/dist/parse-ffmpeg-progress.d.ts +0 -0
- package/dist/parse-ffmpeg-progress.js +0 -0
- package/dist/perf.d.ts +2 -2
- package/dist/perf.js +11 -7
- package/dist/pixel-format.d.ts +2 -2
- package/dist/pixel-format.js +3 -0
- package/dist/pool.d.ts +0 -0
- package/dist/pool.js +0 -0
- package/dist/prepare-server.d.ts +26 -10
- package/dist/prepare-server.js +71 -18
- package/dist/preprocess-audio-track.d.ts +7 -5
- package/dist/preprocess-audio-track.js +7 -8
- package/dist/prespawn-ffmpeg.d.ts +22 -11
- package/dist/prespawn-ffmpeg.js +41 -31
- package/dist/prestitcher-memory-usage.d.ts +0 -4
- package/dist/prestitcher-memory-usage.js +4 -5
- package/dist/prores-profile.d.ts +6 -4
- package/dist/prores-profile.js +8 -8
- package/dist/provide-screenshot.d.ts +8 -4
- package/dist/provide-screenshot.js +5 -2
- package/dist/puppeteer-evaluate.d.ts +4 -1
- package/dist/puppeteer-evaluate.js +23 -15
- package/dist/puppeteer-screenshot.d.ts +12 -2
- package/dist/puppeteer-screenshot.js +18 -45
- package/dist/redirect-status-codes.d.ts +1 -0
- package/dist/redirect-status-codes.js +6 -0
- package/dist/render-frames.d.ts +59 -35
- package/dist/render-frames.js +256 -147
- package/dist/render-media.d.ts +82 -28
- package/dist/render-media.js +322 -195
- package/dist/render-still.d.ts +52 -19
- package/dist/render-still.js +132 -74
- package/dist/replace-browser.d.ts +7 -0
- package/dist/replace-browser.js +47 -0
- package/dist/resolve-asset-src.d.ts +0 -0
- package/dist/resolve-asset-src.js +2 -2
- package/dist/sample-rate.d.ts +0 -0
- package/dist/sample-rate.js +0 -0
- package/dist/screenshot-dom-element.d.ts +8 -4
- package/dist/screenshot-dom-element.js +15 -4
- package/dist/screenshot-task.d.ts +11 -2
- package/dist/screenshot-task.js +45 -13
- package/dist/seek-to-frame.d.ts +3 -1
- package/dist/seek-to-frame.js +53 -7
- package/dist/select-composition.d.ts +46 -0
- package/dist/select-composition.js +157 -0
- package/dist/serve-handler/index.d.ts +1 -1
- package/dist/serve-handler/index.js +21 -19
- package/dist/serve-handler/is-path-inside.d.ts +0 -0
- package/dist/serve-handler/is-path-inside.js +3 -3
- package/dist/serve-handler/range-parser.d.ts +0 -0
- package/dist/serve-handler/range-parser.js +0 -0
- package/dist/serve-static.d.ts +9 -6
- package/dist/serve-static.js +85 -59
- package/dist/set-props-and-env.d.ts +5 -3
- package/dist/set-props-and-env.js +20 -12
- package/dist/stitch-frames-to-video.d.ts +40 -16
- package/dist/stitch-frames-to-video.js +200 -121
- package/dist/stringify-ffmpeg-filter.d.ts +10 -2
- package/dist/stringify-ffmpeg-filter.js +37 -34
- package/dist/symbolicate-stacktrace.d.ts +16 -3
- package/dist/symbolicate-stacktrace.js +49 -24
- package/dist/take-frame-and-compose.d.ts +22 -0
- package/dist/take-frame-and-compose.js +103 -0
- package/dist/tmp-dir.d.ts +0 -0
- package/dist/tmp-dir.js +7 -8
- package/dist/truthy.d.ts +1 -1
- package/dist/truthy.js +0 -0
- package/dist/types.d.ts +2 -2
- package/dist/types.js +0 -0
- package/dist/validate-concurrency.d.ts +2 -0
- package/dist/validate-concurrency.js +21 -10
- package/dist/validate-even-dimensions-with-codec.d.ts +0 -0
- package/dist/validate-even-dimensions-with-codec.js +0 -0
- package/dist/validate-every-nth-frame.d.ts +2 -1
- package/dist/validate-every-nth-frame.js +8 -1
- package/dist/validate-ffmpeg-override.d.ts +0 -0
- package/dist/validate-ffmpeg-override.js +0 -0
- package/dist/validate-number-of-gif-loops.d.ts +2 -0
- package/dist/validate-number-of-gif-loops.js +24 -0
- package/dist/validate-opengl-renderer.d.ts +1 -1
- package/dist/validate-opengl-renderer.js +0 -0
- package/dist/validate-output-filename.d.ts +7 -2
- package/dist/validate-output-filename.js +20 -51
- package/dist/validate-puppeteer-timeout.d.ts +0 -0
- package/dist/validate-puppeteer-timeout.js +1 -0
- package/dist/validate-scale.d.ts +0 -0
- package/dist/validate-scale.js +0 -0
- package/dist/validate-videobitrate.d.ts +1 -0
- package/dist/validate-videobitrate.js +20 -0
- package/dist/wait-for-symbolication-error-to-be-done.d.ts +0 -0
- package/dist/wait-for-symbolication-error-to-be-done.js +5 -31
- package/dist/ws/ws-types.d.ts +0 -0
- package/dist/ws/ws-types.js +2 -1
- package/install-toolchain.mjs +36 -0
- package/package.json +70 -60
- package/types/ws/index.d.ts +5 -5
- package/.prettierrc.js +0 -14
- package/dist/assets/dl-browser.d.ts +0 -1
- package/dist/assets/dl-browser.js +0 -38
- package/dist/assets/get-video-stream-duration.d.ts +0 -4
- package/dist/assets/get-video-stream-duration.js +0 -59
- package/dist/calculate-sar-dar-pixels.d.ts +0 -9
- package/dist/calculate-sar-dar-pixels.js +0 -19
- package/dist/convert-to-pcm.d.ts +0 -6
- package/dist/convert-to-pcm.js +0 -20
- package/dist/ensure-presentation-timestamp.d.ts +0 -2
- package/dist/ensure-presentation-timestamp.js +0 -69
- package/dist/extract-frame-from-video.d.ts +0 -16
- package/dist/extract-frame-from-video.js +0 -277
- package/dist/ffmpeg-executable.d.ts +0 -1
- package/dist/ffmpeg-flags.d.ts +0 -12
- package/dist/ffmpeg-flags.js +0 -45
- package/dist/frame-to-ffmpeg-timestamp.d.ts +0 -1
- package/dist/frame-to-ffmpeg-timestamp.js +0 -8
- package/dist/get-audio-codec-name.d.ts +0 -2
- package/dist/get-audio-codec-name.js +0 -28
- package/dist/get-video-info.d.ts +0 -3
- package/dist/get-video-info.js +0 -49
- package/dist/is-beyond-last-frame.d.ts +0 -3
- package/dist/is-beyond-last-frame.js +0 -12
- package/dist/last-frame-from-video-cache.d.ts +0 -17
- package/dist/last-frame-from-video-cache.js +0 -55
- package/dist/legacy-webpack-config.d.ts +0 -9
- package/dist/legacy-webpack-config.js +0 -13
- package/dist/quality.d.ts +0 -1
- package/dist/quality.js +0 -21
- package/dist/validate-ffmpeg.d.ts +0 -2
- package/dist/validate-ffmpeg.js +0 -72
- package/dist/validate-frame.d.ts +0 -1
- package/dist/validate-frame.js +0 -24
- package/tsconfig.json +0 -10
- package/vitest.config.ts +0 -8
|
@@ -1,38 +1,65 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
2
25
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
26
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
27
|
};
|
|
5
28
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.stitchFramesToVideo = exports.
|
|
7
|
-
const
|
|
8
|
-
const
|
|
9
|
-
const promises_1 = require("fs/promises");
|
|
10
|
-
const path_1 = __importDefault(require("path"));
|
|
29
|
+
exports.stitchFramesToVideo = exports.internalStitchFramesToVideo = void 0;
|
|
30
|
+
const node_fs_1 = __importStar(require("node:fs"));
|
|
31
|
+
const node_path_1 = __importDefault(require("node:path"));
|
|
11
32
|
const remotion_1 = require("remotion");
|
|
12
33
|
const calculate_asset_positions_1 = require("./assets/calculate-asset-positions");
|
|
13
34
|
const convert_assets_to_file_urls_1 = require("./assets/convert-assets-to-file-urls");
|
|
14
35
|
const download_and_map_assets_to_file_1 = require("./assets/download-and-map-assets-to-file");
|
|
36
|
+
const audio_codec_1 = require("./audio-codec");
|
|
37
|
+
const call_ffmpeg_1 = require("./call-ffmpeg");
|
|
15
38
|
const codec_1 = require("./codec");
|
|
16
39
|
const codec_supports_media_1 = require("./codec-supports-media");
|
|
17
40
|
const convert_number_of_gif_loops_to_ffmpeg_1 = require("./convert-number-of-gif-loops-to-ffmpeg");
|
|
18
41
|
const crf_1 = require("./crf");
|
|
19
42
|
const delete_directory_1 = require("./delete-directory");
|
|
20
|
-
const
|
|
43
|
+
const does_have_m2_bug_1 = require("./does-have-m2-bug");
|
|
44
|
+
const find_closest_package_json_1 = require("./find-closest-package-json");
|
|
21
45
|
const get_codec_name_1 = require("./get-codec-name");
|
|
22
46
|
const get_extension_from_codec_1 = require("./get-extension-from-codec");
|
|
23
47
|
const get_prores_profile_name_1 = require("./get-prores-profile-name");
|
|
48
|
+
const logger_1 = require("./logger");
|
|
49
|
+
const make_cancel_signal_1 = require("./make-cancel-signal");
|
|
24
50
|
const merge_audio_track_1 = require("./merge-audio-track");
|
|
25
51
|
const parse_ffmpeg_progress_1 = require("./parse-ffmpeg-progress");
|
|
26
52
|
const pixel_format_1 = require("./pixel-format");
|
|
27
53
|
const preprocess_audio_track_1 = require("./preprocess-audio-track");
|
|
54
|
+
const prores_profile_1 = require("./prores-profile");
|
|
28
55
|
const truthy_1 = require("./truthy");
|
|
29
56
|
const validate_even_dimensions_with_codec_1 = require("./validate-even-dimensions-with-codec");
|
|
30
|
-
const
|
|
31
|
-
const packageJsonPath =
|
|
32
|
-
const packageJson =
|
|
33
|
-
? JSON.parse(
|
|
57
|
+
const validate_videobitrate_1 = require("./validate-videobitrate");
|
|
58
|
+
const packageJsonPath = node_path_1.default.join(__dirname, '..', 'package.json');
|
|
59
|
+
const packageJson = node_fs_1.default.existsSync(packageJsonPath)
|
|
60
|
+
? JSON.parse(node_fs_1.default.readFileSync(packageJsonPath, 'utf-8'))
|
|
34
61
|
: null;
|
|
35
|
-
const getAssetsData = async ({ assets, onDownload, fps, expectedFrames,
|
|
62
|
+
const getAssetsData = async ({ assets, onDownload, fps, expectedFrames, logLevel, onProgress, downloadMap, remotionRoot, indent, }) => {
|
|
36
63
|
const fileUrlAssets = await (0, convert_assets_to_file_urls_1.convertAssetsToFileUrls)({
|
|
37
64
|
assets,
|
|
38
65
|
onDownload: onDownload !== null && onDownload !== void 0 ? onDownload : (() => () => undefined),
|
|
@@ -40,18 +67,14 @@ const getAssetsData = async ({ assets, onDownload, fps, expectedFrames, verbose,
|
|
|
40
67
|
});
|
|
41
68
|
(0, download_and_map_assets_to_file_1.markAllAssetsAsDownloaded)(downloadMap);
|
|
42
69
|
const assetPositions = (0, calculate_asset_positions_1.calculateAssetPositions)(fileUrlAssets);
|
|
43
|
-
|
|
44
|
-
console.log('asset positions', assetPositions);
|
|
45
|
-
}
|
|
70
|
+
logger_1.Log.verboseAdvanced({ indent, logLevel, tag: 'audio' }, 'asset positions', JSON.stringify(assetPositions));
|
|
46
71
|
const preprocessProgress = new Array(assetPositions.length).fill(0);
|
|
47
72
|
const updateProgress = () => {
|
|
48
73
|
onProgress(preprocessProgress.reduce((a, b) => a + b, 0) / assetPositions.length);
|
|
49
74
|
};
|
|
50
75
|
const preprocessed = (await Promise.all(assetPositions.map(async (asset, index) => {
|
|
51
|
-
const filterFile =
|
|
76
|
+
const filterFile = node_path_1.default.join(downloadMap.audioMixing, `${index}.wav`);
|
|
52
77
|
const result = await (0, preprocess_audio_track_1.preprocessAudioTrack)({
|
|
53
|
-
ffmpegExecutable: ffmpegExecutable !== null && ffmpegExecutable !== void 0 ? ffmpegExecutable : null,
|
|
54
|
-
ffprobeExecutable: ffprobeExecutable !== null && ffprobeExecutable !== void 0 ? ffprobeExecutable : null,
|
|
55
78
|
outName: filterFile,
|
|
56
79
|
asset,
|
|
57
80
|
expectedFrames,
|
|
@@ -62,115 +85,131 @@ const getAssetsData = async ({ assets, onDownload, fps, expectedFrames, verbose,
|
|
|
62
85
|
updateProgress();
|
|
63
86
|
return result;
|
|
64
87
|
}))).filter(truthy_1.truthy);
|
|
65
|
-
const outName =
|
|
88
|
+
const outName = node_path_1.default.join(downloadMap.audioPreprocessing, `audio.wav`);
|
|
66
89
|
await (0, merge_audio_track_1.mergeAudioTrack)({
|
|
67
|
-
ffmpegExecutable: ffmpegExecutable !== null && ffmpegExecutable !== void 0 ? ffmpegExecutable : null,
|
|
68
90
|
files: preprocessed,
|
|
69
91
|
outName,
|
|
70
92
|
numberOfSeconds: Number((expectedFrames / fps).toFixed(3)),
|
|
71
93
|
downloadMap,
|
|
94
|
+
remotionRoot,
|
|
72
95
|
});
|
|
73
|
-
(0, delete_directory_1.deleteDirectory)(downloadMap.audioMixing);
|
|
74
96
|
onProgress(1);
|
|
97
|
+
(0, delete_directory_1.deleteDirectory)(downloadMap.audioMixing);
|
|
75
98
|
preprocessed.forEach((p) => {
|
|
76
|
-
(0, delete_directory_1.deleteDirectory)(p);
|
|
99
|
+
(0, delete_directory_1.deleteDirectory)(p.outName);
|
|
77
100
|
});
|
|
78
101
|
return outName;
|
|
79
102
|
};
|
|
80
|
-
const
|
|
81
|
-
var _a
|
|
82
|
-
remotion_1.Internals.validateDimension(
|
|
83
|
-
remotion_1.Internals.validateDimension(
|
|
84
|
-
const codec = (_a = options.codec) !== null && _a !== void 0 ? _a : codec_1.DEFAULT_CODEC;
|
|
103
|
+
const innerStitchFramesToVideo = async ({ assetsInfo, audioBitrate, audioCodec, cancelSignal, codec, crf, dir, enforceAudioTrack, ffmpegOverride, force, fps, height, indent, muted, onDownload, outputLocation, pixelFormat, preEncodedFileLocation, preferLossless, proResProfile, logLevel, videoBitrate, width, numberOfGifLoops, onProgress, }, remotionRoot) => {
|
|
104
|
+
var _a;
|
|
105
|
+
remotion_1.Internals.validateDimension(height, 'height', 'passed to `stitchFramesToVideo()`');
|
|
106
|
+
remotion_1.Internals.validateDimension(width, 'width', 'passed to `stitchFramesToVideo()`');
|
|
85
107
|
(0, validate_even_dimensions_with_codec_1.validateEvenDimensionsWithCodec)({
|
|
86
|
-
width
|
|
87
|
-
height
|
|
108
|
+
width,
|
|
109
|
+
height,
|
|
88
110
|
codec,
|
|
89
111
|
scale: 1,
|
|
90
112
|
});
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
113
|
+
(0, prores_profile_1.validateSelectedCodecAndProResCombination)({
|
|
114
|
+
codec,
|
|
115
|
+
proResProfile,
|
|
116
|
+
});
|
|
117
|
+
(0, validate_videobitrate_1.validateBitrate)(audioBitrate, 'audioBitrate');
|
|
118
|
+
(0, validate_videobitrate_1.validateBitrate)(videoBitrate, 'videoBitrate');
|
|
119
|
+
remotion_1.Internals.validateFps(fps, 'in `stitchFramesToVideo()`', false);
|
|
95
120
|
const encoderName = (0, get_codec_name_1.getCodecName)(codec);
|
|
96
|
-
const
|
|
97
|
-
const proResProfileName = (0, get_prores_profile_name_1.getProResProfileName)(codec, options.proResProfile);
|
|
121
|
+
const proResProfileName = (0, get_prores_profile_name_1.getProResProfileName)(codec, proResProfile);
|
|
98
122
|
const mediaSupport = (0, codec_supports_media_1.codecSupportsMedia)(codec);
|
|
99
|
-
const supportsCrf = (0, codec_supports_media_1.codecSupportsCrf)(codec);
|
|
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
123
|
const shouldRenderAudio = mediaSupport.audio &&
|
|
104
|
-
(
|
|
105
|
-
|
|
106
|
-
!options.muted;
|
|
124
|
+
(assetsInfo.assets.flat(1).length > 0 || enforceAudioTrack) &&
|
|
125
|
+
!muted;
|
|
107
126
|
const shouldRenderVideo = mediaSupport.video;
|
|
108
127
|
if (!shouldRenderAudio && !shouldRenderVideo) {
|
|
109
128
|
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
129
|
}
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
130
|
+
// Explanation: https://github.com/remotion-dev/remotion/issues/1647
|
|
131
|
+
const resolvedAudioCodec = preferLossless
|
|
132
|
+
? (0, audio_codec_1.getDefaultAudioCodec)({ codec, preferLossless: true })
|
|
133
|
+
: audioCodec !== null && audioCodec !== void 0 ? audioCodec : (0, audio_codec_1.getDefaultAudioCodec)({ codec, preferLossless: false });
|
|
134
|
+
const tempFile = outputLocation
|
|
135
|
+
? null
|
|
136
|
+
: node_path_1.default.join(assetsInfo.downloadMap.stitchFrames, `out.${(0, get_extension_from_codec_1.getFileExtensionFromCodec)(codec, resolvedAudioCodec)}`);
|
|
137
|
+
logger_1.Log.verboseAdvanced({
|
|
138
|
+
indent,
|
|
139
|
+
logLevel,
|
|
140
|
+
tag: 'stitchFramesToVideo()',
|
|
141
|
+
}, 'audioCodec', resolvedAudioCodec);
|
|
142
|
+
logger_1.Log.verboseAdvanced({
|
|
143
|
+
indent,
|
|
144
|
+
logLevel,
|
|
145
|
+
tag: 'stitchFramesToVideo()',
|
|
146
|
+
}, 'pixelFormat', pixelFormat);
|
|
147
|
+
logger_1.Log.verboseAdvanced({
|
|
148
|
+
indent,
|
|
149
|
+
logLevel,
|
|
150
|
+
tag: 'stitchFramesToVideo()',
|
|
151
|
+
}, 'codec', codec);
|
|
152
|
+
logger_1.Log.verboseAdvanced({
|
|
153
|
+
indent,
|
|
154
|
+
logLevel,
|
|
155
|
+
tag: 'stitchFramesToVideo()',
|
|
156
|
+
}, 'shouldRenderAudio', shouldRenderAudio);
|
|
157
|
+
logger_1.Log.verboseAdvanced({
|
|
158
|
+
indent,
|
|
159
|
+
logLevel,
|
|
160
|
+
tag: 'stitchFramesToVideo()',
|
|
161
|
+
}, 'shouldRenderVideo', shouldRenderVideo);
|
|
162
|
+
(0, crf_1.validateQualitySettings)({
|
|
163
|
+
crf,
|
|
164
|
+
codec,
|
|
165
|
+
videoBitrate,
|
|
166
|
+
});
|
|
128
167
|
(0, pixel_format_1.validateSelectedPixelFormatAndCodecCombination)(pixelFormat, codec);
|
|
129
|
-
const expectedFrames =
|
|
168
|
+
const expectedFrames = assetsInfo.assets.length;
|
|
130
169
|
const updateProgress = (preStitchProgress, muxProgress) => {
|
|
131
|
-
var _a;
|
|
132
170
|
const totalFrameProgress = 0.5 * preStitchProgress * expectedFrames + muxProgress * 0.5;
|
|
133
|
-
|
|
171
|
+
onProgress === null || onProgress === void 0 ? void 0 : onProgress(Math.round(totalFrameProgress));
|
|
134
172
|
};
|
|
135
173
|
const audio = shouldRenderAudio
|
|
136
174
|
? await getAssetsData({
|
|
137
|
-
assets:
|
|
138
|
-
onDownload
|
|
139
|
-
fps
|
|
175
|
+
assets: assetsInfo.assets,
|
|
176
|
+
onDownload,
|
|
177
|
+
fps,
|
|
140
178
|
expectedFrames,
|
|
141
|
-
|
|
142
|
-
ffmpegExecutable: (_g = options.ffmpegExecutable) !== null && _g !== void 0 ? _g : null,
|
|
143
|
-
ffprobeExecutable: (_h = options.ffprobeExecutable) !== null && _h !== void 0 ? _h : null,
|
|
179
|
+
logLevel,
|
|
144
180
|
onProgress: (prog) => updateProgress(prog, 0),
|
|
145
|
-
downloadMap:
|
|
181
|
+
downloadMap: assetsInfo.downloadMap,
|
|
182
|
+
remotionRoot,
|
|
183
|
+
indent,
|
|
146
184
|
})
|
|
147
185
|
: null;
|
|
148
186
|
if (mediaSupport.audio && !mediaSupport.video) {
|
|
149
|
-
if (!
|
|
187
|
+
if (!resolvedAudioCodec) {
|
|
150
188
|
throw new TypeError('exporting audio but has no audio codec name. Report this in the Remotion repo.');
|
|
151
189
|
}
|
|
152
|
-
const ffmpegTask = (0,
|
|
190
|
+
const ffmpegTask = (0, call_ffmpeg_1.callFf)('ffmpeg', [
|
|
153
191
|
'-i',
|
|
154
192
|
audio,
|
|
155
193
|
'-c:a',
|
|
156
|
-
|
|
194
|
+
(0, audio_codec_1.mapAudioCodecToFfmpegAudioCodecName)(resolvedAudioCodec),
|
|
157
195
|
// Set bitrate up to 320k, for aac it might effectively be lower
|
|
158
196
|
'-b:a',
|
|
159
|
-
'320k',
|
|
160
|
-
|
|
161
|
-
|
|
197
|
+
audioBitrate !== null && audioBitrate !== void 0 ? audioBitrate : '320k',
|
|
198
|
+
force ? '-y' : null,
|
|
199
|
+
outputLocation !== null && outputLocation !== void 0 ? outputLocation : tempFile,
|
|
162
200
|
].filter(remotion_1.Internals.truthy));
|
|
163
|
-
|
|
201
|
+
cancelSignal === null || cancelSignal === void 0 ? void 0 : cancelSignal(() => {
|
|
164
202
|
ffmpegTask.kill();
|
|
165
203
|
});
|
|
166
204
|
await ffmpegTask;
|
|
167
|
-
|
|
205
|
+
onProgress === null || onProgress === void 0 ? void 0 : onProgress(expectedFrames);
|
|
168
206
|
if (audio) {
|
|
169
|
-
|
|
207
|
+
(0, delete_directory_1.deleteDirectory)(node_path_1.default.dirname(audio));
|
|
170
208
|
}
|
|
171
209
|
const file = await new Promise((resolve, reject) => {
|
|
172
210
|
if (tempFile) {
|
|
173
|
-
|
|
211
|
+
node_fs_1.promises
|
|
212
|
+
.readFile(tempFile)
|
|
174
213
|
.then((f) => {
|
|
175
214
|
return resolve(f);
|
|
176
215
|
})
|
|
@@ -180,47 +219,49 @@ const spawnFfmpeg = async (options) => {
|
|
|
180
219
|
resolve(null);
|
|
181
220
|
}
|
|
182
221
|
});
|
|
183
|
-
|
|
222
|
+
(0, delete_directory_1.deleteDirectory)(assetsInfo.downloadMap.stitchFrames);
|
|
184
223
|
return {
|
|
185
224
|
getLogs: () => '',
|
|
186
225
|
task: Promise.resolve(file),
|
|
187
226
|
};
|
|
188
227
|
}
|
|
189
228
|
const ffmpegArgs = [
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
? [['-i', (_o = options.internalOptions) === null || _o === void 0 ? void 0 : _o.preEncodedFileLocation]]
|
|
229
|
+
...(preEncodedFileLocation
|
|
230
|
+
? [['-i', preEncodedFileLocation]]
|
|
193
231
|
: [
|
|
232
|
+
['-r', String(fps)],
|
|
194
233
|
['-f', 'image2'],
|
|
195
|
-
['-s', `${
|
|
196
|
-
['-start_number', String(
|
|
197
|
-
['-i',
|
|
234
|
+
['-s', `${width}x${height}`],
|
|
235
|
+
['-start_number', String(assetsInfo.firstFrameIndex)],
|
|
236
|
+
['-i', assetsInfo.imageSequenceName],
|
|
198
237
|
]),
|
|
199
238
|
audio ? ['-i', audio] : null,
|
|
200
|
-
|
|
239
|
+
numberOfGifLoops === null
|
|
201
240
|
? null
|
|
202
|
-
: [
|
|
203
|
-
'-loop',
|
|
204
|
-
(0, convert_number_of_gif_loops_to_ffmpeg_1.convertNumberOfGifLoopsToFfmpegSyntax)((_q = options.numberOfGifLoops) !== null && _q !== void 0 ? _q : null),
|
|
205
|
-
],
|
|
241
|
+
: ['-loop', (0, convert_number_of_gif_loops_to_ffmpeg_1.convertNumberOfGifLoopsToFfmpegSyntax)(numberOfGifLoops)],
|
|
206
242
|
// -c:v is the same as -vcodec as -codec:video
|
|
207
243
|
// and specified the video codec.
|
|
208
244
|
['-c:v', encoderName],
|
|
209
|
-
...(
|
|
245
|
+
...(preEncodedFileLocation
|
|
210
246
|
? []
|
|
211
247
|
: [
|
|
212
248
|
proResProfileName ? ['-profile:v', proResProfileName] : null,
|
|
213
|
-
supportsCrf ? ['-crf', String(crf)] : null,
|
|
214
249
|
['-pix_fmt', pixelFormat],
|
|
215
250
|
// Without explicitly disabling auto-alt-ref,
|
|
216
251
|
// transparent WebM generation doesn't work
|
|
217
252
|
pixelFormat === 'yuva420p' ? ['-auto-alt-ref', '0'] : null,
|
|
218
|
-
|
|
253
|
+
...(0, crf_1.validateQualitySettings)({
|
|
254
|
+
crf,
|
|
255
|
+
videoBitrate,
|
|
256
|
+
codec,
|
|
257
|
+
}),
|
|
219
258
|
]),
|
|
220
259
|
codec === 'h264' ? ['-movflags', 'faststart'] : null,
|
|
221
|
-
|
|
260
|
+
resolvedAudioCodec
|
|
261
|
+
? ['-c:a', (0, audio_codec_1.mapAudioCodecToFfmpegAudioCodecName)(resolvedAudioCodec)]
|
|
262
|
+
: null,
|
|
222
263
|
// Set max bitrate up to 1024kbps, will choose lower if that's too much
|
|
223
|
-
|
|
264
|
+
resolvedAudioCodec ? ['-b:a', audioBitrate || '512K'] : null,
|
|
224
265
|
// Ignore metadata that may come from remote media
|
|
225
266
|
['-map_metadata', '-1'],
|
|
226
267
|
[
|
|
@@ -228,34 +269,36 @@ const spawnFfmpeg = async (options) => {
|
|
|
228
269
|
`comment=` +
|
|
229
270
|
[`Made with Remotion`, packageJson ? packageJson.version : null].join(' '),
|
|
230
271
|
],
|
|
231
|
-
|
|
232
|
-
|
|
272
|
+
force ? '-y' : null,
|
|
273
|
+
outputLocation !== null && outputLocation !== void 0 ? outputLocation : tempFile,
|
|
233
274
|
];
|
|
234
|
-
if (options.verbose) {
|
|
235
|
-
console.log('Generated FFMPEG command:');
|
|
236
|
-
console.log(ffmpegArgs);
|
|
237
|
-
}
|
|
238
275
|
const ffmpegString = ffmpegArgs.flat(2).filter(Boolean);
|
|
239
|
-
const finalFfmpegString =
|
|
240
|
-
?
|
|
276
|
+
const finalFfmpegString = ffmpegOverride
|
|
277
|
+
? ffmpegOverride({ type: 'stitcher', args: ffmpegString })
|
|
241
278
|
: ffmpegString;
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
279
|
+
logger_1.Log.verboseAdvanced({
|
|
280
|
+
indent: indent !== null && indent !== void 0 ? indent : false,
|
|
281
|
+
logLevel,
|
|
282
|
+
tag: 'stitchFramesToVideo()',
|
|
283
|
+
}, 'Generated final FFMPEG command:');
|
|
284
|
+
logger_1.Log.verboseAdvanced({
|
|
285
|
+
indent,
|
|
286
|
+
logLevel,
|
|
287
|
+
tag: 'stitchFramesToVideo()',
|
|
288
|
+
}, finalFfmpegString.join(' '));
|
|
289
|
+
const task = (0, call_ffmpeg_1.callFf)('ffmpeg', finalFfmpegString, {
|
|
290
|
+
cwd: dir,
|
|
248
291
|
});
|
|
249
|
-
|
|
292
|
+
cancelSignal === null || cancelSignal === void 0 ? void 0 : cancelSignal(() => {
|
|
250
293
|
task.kill();
|
|
251
294
|
});
|
|
252
295
|
let ffmpegOutput = '';
|
|
253
296
|
let isFinished = false;
|
|
254
|
-
(
|
|
297
|
+
(_a = task.stderr) === null || _a === void 0 ? void 0 : _a.on('data', (data) => {
|
|
255
298
|
var _a;
|
|
256
299
|
const str = data.toString();
|
|
257
300
|
ffmpegOutput += str;
|
|
258
|
-
if (
|
|
301
|
+
if (onProgress) {
|
|
259
302
|
const parsed = (0, parse_ffmpeg_progress_1.parseFfmpegProgress)(str);
|
|
260
303
|
// FFMPEG bug: In some cases, FFMPEG does hang after it is finished with it's job
|
|
261
304
|
// Example repo: https://github.com/JonnyBurger/ffmpeg-repro (access can be given upon request)
|
|
@@ -275,17 +318,18 @@ const spawnFfmpeg = async (options) => {
|
|
|
275
318
|
});
|
|
276
319
|
return {
|
|
277
320
|
task: task.then(() => {
|
|
278
|
-
(0, delete_directory_1.deleteDirectory)(
|
|
321
|
+
(0, delete_directory_1.deleteDirectory)(assetsInfo.downloadMap.audioPreprocessing);
|
|
279
322
|
if (tempFile === null) {
|
|
280
|
-
(0, delete_directory_1.deleteDirectory)(
|
|
323
|
+
(0, delete_directory_1.deleteDirectory)(assetsInfo.downloadMap.stitchFrames);
|
|
281
324
|
return null;
|
|
282
325
|
}
|
|
283
|
-
return
|
|
326
|
+
return node_fs_1.promises
|
|
327
|
+
.readFile(tempFile)
|
|
284
328
|
.then((file) => {
|
|
285
329
|
return Promise.all([
|
|
286
330
|
file,
|
|
287
|
-
(0, delete_directory_1.deleteDirectory)(
|
|
288
|
-
(0, delete_directory_1.deleteDirectory)(
|
|
331
|
+
(0, delete_directory_1.deleteDirectory)(node_path_1.default.dirname(tempFile)),
|
|
332
|
+
(0, delete_directory_1.deleteDirectory)(assetsInfo.downloadMap.stitchFrames),
|
|
289
333
|
]);
|
|
290
334
|
})
|
|
291
335
|
.then(([file]) => file);
|
|
@@ -293,9 +337,10 @@ const spawnFfmpeg = async (options) => {
|
|
|
293
337
|
getLogs: () => ffmpegOutput,
|
|
294
338
|
};
|
|
295
339
|
};
|
|
296
|
-
|
|
297
|
-
const
|
|
298
|
-
|
|
340
|
+
const internalStitchFramesToVideo = async (options) => {
|
|
341
|
+
const remotionRoot = (0, find_closest_package_json_1.findRemotionRoot)();
|
|
342
|
+
(0, does_have_m2_bug_1.warnAboutM2Bug)(options.codec, options.pixelFormat);
|
|
343
|
+
const { task, getLogs } = await innerStitchFramesToVideo(options, remotionRoot);
|
|
299
344
|
const happyPath = task.catch(() => {
|
|
300
345
|
throw new Error(getLogs());
|
|
301
346
|
});
|
|
@@ -304,9 +349,43 @@ const stitchFramesToVideo = async (options) => {
|
|
|
304
349
|
new Promise((_resolve, reject) => {
|
|
305
350
|
var _a;
|
|
306
351
|
(_a = options.cancelSignal) === null || _a === void 0 ? void 0 : _a.call(options, () => {
|
|
307
|
-
reject(new Error(
|
|
352
|
+
reject(new Error(make_cancel_signal_1.cancelErrorMessages.stitchFramesToVideo));
|
|
308
353
|
});
|
|
309
354
|
}),
|
|
310
355
|
]);
|
|
311
356
|
};
|
|
357
|
+
exports.internalStitchFramesToVideo = internalStitchFramesToVideo;
|
|
358
|
+
/**
|
|
359
|
+
* @description Takes a series of images and audio information generated by renderFrames() and encodes it to a video.
|
|
360
|
+
* @see [Documentation](https://www.remotion.dev/docs/renderer/stitch-frames-to-video)
|
|
361
|
+
*/
|
|
362
|
+
const stitchFramesToVideo = ({ assetsInfo, force, fps, height, width, audioBitrate, audioCodec, cancelSignal, codec, crf, dir, enforceAudioTrack, ffmpegOverride, muted, numberOfGifLoops, onDownload, onProgress, outputLocation, pixelFormat, proResProfile, verbose, videoBitrate, }) => {
|
|
363
|
+
return (0, exports.internalStitchFramesToVideo)({
|
|
364
|
+
assetsInfo,
|
|
365
|
+
audioBitrate: audioBitrate !== null && audioBitrate !== void 0 ? audioBitrate : null,
|
|
366
|
+
audioCodec: audioCodec !== null && audioCodec !== void 0 ? audioCodec : null,
|
|
367
|
+
cancelSignal: cancelSignal !== null && cancelSignal !== void 0 ? cancelSignal : null,
|
|
368
|
+
codec: codec !== null && codec !== void 0 ? codec : codec_1.DEFAULT_CODEC,
|
|
369
|
+
crf: crf !== null && crf !== void 0 ? crf : null,
|
|
370
|
+
dir,
|
|
371
|
+
enforceAudioTrack: enforceAudioTrack !== null && enforceAudioTrack !== void 0 ? enforceAudioTrack : false,
|
|
372
|
+
ffmpegOverride: ffmpegOverride !== null && ffmpegOverride !== void 0 ? ffmpegOverride : null,
|
|
373
|
+
force,
|
|
374
|
+
fps,
|
|
375
|
+
height,
|
|
376
|
+
indent: false,
|
|
377
|
+
muted: muted !== null && muted !== void 0 ? muted : false,
|
|
378
|
+
numberOfGifLoops: numberOfGifLoops !== null && numberOfGifLoops !== void 0 ? numberOfGifLoops : null,
|
|
379
|
+
onDownload: onDownload !== null && onDownload !== void 0 ? onDownload : undefined,
|
|
380
|
+
onProgress,
|
|
381
|
+
outputLocation: outputLocation !== null && outputLocation !== void 0 ? outputLocation : null,
|
|
382
|
+
pixelFormat: pixelFormat !== null && pixelFormat !== void 0 ? pixelFormat : pixel_format_1.DEFAULT_PIXEL_FORMAT,
|
|
383
|
+
proResProfile,
|
|
384
|
+
logLevel: verbose ? 'verbose' : 'info',
|
|
385
|
+
videoBitrate: videoBitrate !== null && videoBitrate !== void 0 ? videoBitrate : null,
|
|
386
|
+
width,
|
|
387
|
+
preEncodedFileLocation: null,
|
|
388
|
+
preferLossless: false,
|
|
389
|
+
});
|
|
390
|
+
};
|
|
312
391
|
exports.stitchFramesToVideo = stitchFramesToVideo;
|
|
@@ -1,5 +1,12 @@
|
|
|
1
1
|
import type { AssetVolume } from './assets/types';
|
|
2
|
-
export
|
|
2
|
+
export type FilterWithoutPaddingApplied = ProcessedTrack & {
|
|
3
|
+
filter: string;
|
|
4
|
+
};
|
|
5
|
+
export type ProcessedTrack = {
|
|
6
|
+
pad_start: string | null;
|
|
7
|
+
pad_end: string | null;
|
|
8
|
+
};
|
|
9
|
+
export declare const stringifyFfmpegFilter: ({ trimLeft, trimRight, channels, startInVideo, volume, fps, playbackRate, durationInFrames, assetDuration, allowAmplificationDuringRender, }: {
|
|
3
10
|
trimLeft: number;
|
|
4
11
|
trimRight: number;
|
|
5
12
|
channels: number;
|
|
@@ -9,4 +16,5 @@ export declare const stringifyFfmpegFilter: ({ trimLeft, trimRight, channels, st
|
|
|
9
16
|
durationInFrames: number;
|
|
10
17
|
playbackRate: number;
|
|
11
18
|
assetDuration: number | null;
|
|
12
|
-
|
|
19
|
+
allowAmplificationDuringRender: boolean;
|
|
20
|
+
}) => FilterWithoutPaddingApplied | null;
|
|
@@ -5,7 +5,7 @@ const calculate_atempo_1 = require("./assets/calculate-atempo");
|
|
|
5
5
|
const ffmpeg_volume_expression_1 = require("./assets/ffmpeg-volume-expression");
|
|
6
6
|
const sample_rate_1 = require("./sample-rate");
|
|
7
7
|
const truthy_1 = require("./truthy");
|
|
8
|
-
const stringifyFfmpegFilter = ({ trimLeft, trimRight, channels, startInVideo, volume, fps, playbackRate, durationInFrames, assetDuration, }) => {
|
|
8
|
+
const stringifyFfmpegFilter = ({ trimLeft, trimRight, channels, startInVideo, volume, fps, playbackRate, durationInFrames, assetDuration, allowAmplificationDuringRender, }) => {
|
|
9
9
|
const startInVideoSeconds = startInVideo / fps;
|
|
10
10
|
if (assetDuration && trimLeft >= assetDuration) {
|
|
11
11
|
return null;
|
|
@@ -14,44 +14,47 @@ const stringifyFfmpegFilter = ({ trimLeft, trimRight, channels, startInVideo, vo
|
|
|
14
14
|
volume,
|
|
15
15
|
fps,
|
|
16
16
|
trimLeft,
|
|
17
|
+
allowAmplificationDuringRender,
|
|
17
18
|
});
|
|
18
19
|
// Avoid setting filters if possible, as combining them can create noise
|
|
19
20
|
const chunkLength = durationInFrames / fps;
|
|
20
21
|
const actualTrimRight = assetDuration
|
|
21
22
|
? Math.min(trimRight, assetDuration)
|
|
22
23
|
: trimRight;
|
|
23
|
-
const
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
24
|
+
const audibleDuration = (actualTrimRight - trimLeft) / playbackRate;
|
|
25
|
+
const padAtEnd = chunkLength - audibleDuration - startInVideoSeconds;
|
|
26
|
+
return {
|
|
27
|
+
filter: `[0:a]` +
|
|
28
|
+
[
|
|
29
|
+
`aformat=sample_fmts=s32:sample_rates=${sample_rate_1.DEFAULT_SAMPLE_RATE}`,
|
|
30
|
+
// Order matters! First trim the audio
|
|
31
|
+
`atrim=${trimLeft.toFixed(6)}:${actualTrimRight.toFixed(6)}`,
|
|
32
|
+
// then set the tempo
|
|
33
|
+
(0, calculate_atempo_1.calculateATempo)(playbackRate),
|
|
34
|
+
// set the volume if needed
|
|
35
|
+
// The timings for volume must include whatever is in atrim, unless the volume
|
|
36
|
+
// filter gets applied before atrim
|
|
37
|
+
volumeFilter.value === '1'
|
|
38
|
+
? null
|
|
39
|
+
: `volume=${volumeFilter.value}:eval=${volumeFilter.eval}`,
|
|
40
|
+
// For n channels, we delay n + 1 channels.
|
|
41
|
+
// This is because `ffprobe` for some audio files reports the wrong amount
|
|
42
|
+
// of channels.
|
|
43
|
+
// This should be fine because FFMPEG documentation states:
|
|
44
|
+
// "Unused delays will be silently ignored."
|
|
45
|
+
// https://ffmpeg.org/ffmpeg-filters.html#adelay
|
|
46
|
+
]
|
|
47
|
+
.filter(truthy_1.truthy)
|
|
48
|
+
.join(',') +
|
|
49
|
+
`[a0]`,
|
|
50
|
+
pad_end: padAtEnd > 0.0000001
|
|
51
|
+
? 'apad=pad_len=' + Math.round(padAtEnd * sample_rate_1.DEFAULT_SAMPLE_RATE)
|
|
52
|
+
: null,
|
|
53
|
+
pad_start: startInVideoSeconds === 0
|
|
54
|
+
? null
|
|
55
|
+
: `adelay=${new Array(channels + 1)
|
|
56
|
+
.fill((startInVideoSeconds * 1000).toFixed(0))
|
|
57
|
+
.join('|')}`,
|
|
58
|
+
};
|
|
56
59
|
};
|
|
57
60
|
exports.stringifyFfmpegFilter = stringifyFfmpegFilter;
|
|
@@ -1,15 +1,28 @@
|
|
|
1
|
+
import type { BasicSourceMapConsumer, IndexedSourceMapConsumer } from 'source-map';
|
|
2
|
+
import { SourceMapConsumer } from 'source-map';
|
|
1
3
|
import type { UnsymbolicatedStackFrame } from './parse-browser-error-stack';
|
|
2
|
-
|
|
4
|
+
type ScriptLine = {
|
|
3
5
|
lineNumber: number;
|
|
4
6
|
content: string;
|
|
5
7
|
highlight: boolean;
|
|
6
8
|
};
|
|
7
|
-
export
|
|
9
|
+
export type SymbolicatedStackFrame = {
|
|
8
10
|
originalFunctionName: string | null;
|
|
9
11
|
originalFileName: string | null;
|
|
10
12
|
originalLineNumber: number | null;
|
|
11
13
|
originalColumnNumber: number | null;
|
|
12
14
|
originalScriptCode: ScriptLine[] | null;
|
|
13
15
|
};
|
|
14
|
-
export declare const
|
|
16
|
+
export declare const symbolicateStackTraceFromRemoteFrames: (frames: UnsymbolicatedStackFrame[]) => Promise<SymbolicatedStackFrame[]>;
|
|
17
|
+
export declare const symbolicateFromSources: (frames: UnsymbolicatedStackFrame[], mapValues: Record<string, SourceMapConsumer | null>) => SymbolicatedStackFrame[];
|
|
18
|
+
export declare const symbolicateStackFrame: (frame: UnsymbolicatedStackFrame, map: SourceMapConsumer) => {
|
|
19
|
+
originalColumnNumber: number | null;
|
|
20
|
+
originalFileName: string | null;
|
|
21
|
+
originalFunctionName: string | null;
|
|
22
|
+
originalLineNumber: number | null;
|
|
23
|
+
originalScriptCode: ScriptLine[] | null;
|
|
24
|
+
};
|
|
25
|
+
export declare const getSourceMapFromRemoteFile: (fileName: string) => Promise<IndexedSourceMapConsumer | null>;
|
|
26
|
+
export declare const getSourceMapFromLocalFile: (fileName: string) => Promise<IndexedSourceMapConsumer | null>;
|
|
27
|
+
export type AnySourceMapConsumer = BasicSourceMapConsumer | IndexedSourceMapConsumer;
|
|
15
28
|
export {};
|