@remotion/renderer 4.0.0-alpha.4 → 4.0.0-audio-mixing.4
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 +47 -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 +2 -1
- package/dist/assets/download-and-map-assets-to-file.js +54 -11
- package/dist/assets/download-file.d.ts +7 -5
- package/dist/assets/download-file.js +49 -6
- package/dist/assets/download-map.d.ts +8 -3
- package/dist/assets/download-map.js +8 -4
- package/dist/assets/ffmpeg-volume-expression.d.ts +2 -1
- 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 +1 -1
- package/dist/assets/get-audio-channels.js +5 -4
- package/dist/assets/get-video-stream-duration.d.ts +7 -1
- package/dist/assets/get-video-stream-duration.js +50 -14
- package/dist/assets/read-file.d.ts +0 -0
- package/dist/assets/read-file.js +2 -4
- 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 +0 -0
- 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 +1 -0
- package/dist/assets/types.js +0 -0
- package/dist/audio-codec.d.ts +27 -0
- package/dist/audio-codec.js +89 -0
- package/dist/browser/Browser.d.ts +4 -2
- package/dist/browser/Browser.js +15 -12
- package/dist/browser/BrowserConnector.d.ts +0 -0
- package/dist/browser/BrowserConnector.js +0 -0
- package/dist/browser/BrowserFetcher.d.ts +1 -0
- package/dist/browser/BrowserFetcher.js +24 -21
- package/dist/browser/BrowserPage.d.ts +8 -2
- package/dist/browser/BrowserPage.js +8 -11
- package/dist/browser/BrowserRunner.d.ts +1 -4
- package/dist/browser/BrowserRunner.js +30 -73
- package/dist/browser/Connection.d.ts +0 -0
- package/dist/browser/Connection.js +1 -1
- package/dist/browser/ConsoleMessage.d.ts +0 -0
- package/dist/browser/ConsoleMessage.js +0 -0
- package/dist/browser/DOMWorld.d.ts +2 -1
- package/dist/browser/DOMWorld.js +8 -1
- package/dist/browser/Errors.d.ts +0 -0
- package/dist/browser/Errors.js +0 -0
- package/dist/browser/EvalTypes.d.ts +0 -0
- 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 +0 -0
- package/dist/browser/FrameManager.d.ts +0 -2
- package/dist/browser/FrameManager.js +0 -3
- 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 +0 -0
- package/dist/browser/LaunchOptions.d.ts +0 -4
- package/dist/browser/LaunchOptions.js +0 -0
- package/dist/browser/Launcher.d.ts +7 -1
- package/dist/browser/Launcher.js +10 -368
- package/dist/browser/LifecycleWatcher.d.ts +0 -0
- package/dist/browser/LifecycleWatcher.js +0 -0
- package/dist/browser/NetworkEventManager.d.ts +0 -0
- package/dist/browser/NetworkEventManager.js +0 -0
- package/dist/browser/NetworkManager.d.ts +0 -0
- package/dist/browser/NetworkManager.js +0 -0
- package/dist/browser/NodeWebSocketTransport.d.ts +0 -0
- package/dist/browser/NodeWebSocketTransport.js +1 -1
- package/dist/browser/Product.d.ts +0 -0
- package/dist/browser/Product.js +0 -0
- package/dist/browser/PuppeteerNode.d.ts +0 -0
- package/dist/browser/PuppeteerNode.js +2 -9
- 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 +0 -0
- package/dist/browser/Target.js +0 -0
- 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 +2 -44
- package/dist/browser/devtools-commands.d.ts +0 -0
- package/dist/browser/devtools-commands.js +0 -0
- package/dist/browser/devtools-types.d.ts +4 -0
- 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 +0 -0
- package/dist/browser/mitt/index.d.ts +0 -0
- 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 +0 -1
- package/dist/browser/revisions.js +0 -1
- package/dist/browser/util.d.ts +0 -0
- package/dist/browser/util.js +0 -0
- package/dist/browser-executable.d.ts +0 -0
- package/dist/browser-executable.js +0 -0
- package/dist/browser-log.d.ts +0 -0
- package/dist/browser-log.js +0 -0
- package/dist/browser.d.ts +0 -0
- package/dist/browser.js +0 -0
- package/dist/calculate-ffmpeg-filters.d.ts +0 -0
- package/dist/calculate-ffmpeg-filters.js +1 -0
- package/dist/calculate-sar-dar-pixels.d.ts +0 -0
- package/dist/calculate-sar-dar-pixels.js +0 -0
- package/dist/can-use-parallel-encoding.d.ts +0 -0
- package/dist/can-use-parallel-encoding.js +0 -0
- package/dist/check-apple-silicon.d.ts +1 -0
- package/dist/check-apple-silicon.js +55 -0
- package/dist/chunk.d.ts +0 -0
- package/dist/chunk.js +0 -0
- package/dist/client.d.ts +179 -0
- package/dist/client.js +23 -0
- package/dist/codec-supports-media.d.ts +1 -0
- package/dist/codec-supports-media.js +8 -1
- package/dist/codec.d.ts +0 -0
- package/dist/codec.js +0 -0
- package/dist/combine-videos.d.ts +9 -2
- package/dist/combine-videos.js +12 -8
- package/dist/compositor/compose.d.ts +13 -0
- package/dist/compositor/compose.js +47 -0
- package/dist/compositor/get-executable-path.d.ts +1 -0
- package/dist/compositor/get-executable-path.js +47 -0
- package/dist/compositor/payloads.d.ts +41 -0
- package/dist/compositor/payloads.js +2 -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-pcm.d.ts +2 -1
- package/dist/convert-to-pcm.js +3 -2
- package/dist/convert-to-positive-frame-index.d.ts +4 -0
- package/dist/convert-to-positive-frame-index.js +8 -0
- package/dist/create-ffmpeg-complex-filter.d.ts +1 -4
- package/dist/create-ffmpeg-complex-filter.js +0 -0
- package/dist/create-ffmpeg-merge-filter.d.ts +0 -0
- package/dist/create-ffmpeg-merge-filter.js +1 -12
- package/dist/create-silent-audio.d.ts +2 -1
- package/dist/create-silent-audio.js +3 -2
- package/dist/crf.d.ts +5 -1
- package/dist/crf.js +33 -6
- package/dist/cycle-browser-tabs.d.ts +2 -5
- package/dist/cycle-browser-tabs.js +5 -5
- 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 +31 -5
- package/dist/determine-resize-params.d.ts +1 -0
- package/dist/determine-resize-params.js +10 -0
- package/dist/determine-vcodec-ffmpeg-flags.d.ts +2 -0
- package/dist/determine-vcodec-ffmpeg-flags.js +13 -0
- package/dist/ensure-ffmpeg.d.ts +18 -0
- package/dist/ensure-ffmpeg.js +58 -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 +0 -0
- package/dist/ensure-presentation-timestamp.d.ts +14 -1
- package/dist/ensure-presentation-timestamp.js +36 -17
- 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 +2 -1
- package/dist/error-handling/symbolicateable-error.d.ts +0 -0
- package/dist/error-handling/symbolicateable-error.js +0 -0
- package/dist/extract-frame-from-video.d.ts +2 -0
- package/dist/extract-frame-from-video.js +47 -110
- package/dist/ffmpeg-executable.d.ts +0 -0
- package/dist/ffmpeg-executable.js +0 -0
- package/dist/ffmpeg-filter-file.d.ts +0 -0
- package/dist/ffmpeg-filter-file.js +0 -0
- package/dist/ffmpeg-flags.d.ts +20 -2
- package/dist/ffmpeg-flags.js +205 -9
- package/dist/ffmpeg-override.d.ts +4 -0
- package/dist/ffmpeg-override.js +2 -0
- package/dist/file-extensions.d.ts +25 -0
- package/dist/file-extensions.js +88 -0
- package/dist/find-closest-package-json.d.ts +2 -0
- package/dist/find-closest-package-json.js +31 -0
- package/dist/frame-range.d.ts +0 -0
- package/dist/frame-range.js +0 -0
- package/dist/frame-to-ffmpeg-timestamp.d.ts +0 -0
- package/dist/frame-to-ffmpeg-timestamp.js +0 -0
- package/dist/get-browser-instance.d.ts +0 -0
- package/dist/get-browser-instance.js +1 -1
- package/dist/get-can-extract-frames-fast.d.ts +14 -0
- package/dist/get-can-extract-frames-fast.js +71 -0
- package/dist/get-codec-name.d.ts +0 -0
- package/dist/get-codec-name.js +0 -0
- package/dist/get-compositions.d.ts +4 -0
- package/dist/get-compositions.js +26 -7
- package/dist/get-concurrency.d.ts +1 -1
- package/dist/get-concurrency.js +8 -1
- 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-of-video-slow.d.ts +15 -0
- package/dist/get-frame-of-video-slow.js +72 -0
- package/dist/get-frame-padded-index.d.ts +1 -1
- 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 +0 -0
- package/dist/get-local-browser-executable.d.ts +0 -0
- package/dist/get-local-browser-executable.js +1 -3
- 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-info.d.ts +6 -1
- package/dist/get-video-info.js +19 -9
- package/dist/get-video-threads-flag.d.ts +0 -0
- package/dist/get-video-threads-flag.js +0 -0
- package/dist/guess-extension-for-media.d.ts +5 -1
- package/dist/guess-extension-for-media.js +4 -3
- package/dist/image-format.d.ts +1 -1
- package/dist/image-format.js +3 -0
- package/dist/index.d.ts +187 -41
- package/dist/index.js +31 -28
- package/dist/is-audio-codec.d.ts +0 -0
- package/dist/is-audio-codec.js +0 -0
- package/dist/is-beyond-last-frame.d.ts +0 -0
- package/dist/is-beyond-last-frame.js +0 -0
- package/dist/is-serve-url.d.ts +0 -0
- package/dist/is-serve-url.js +0 -0
- package/dist/last-frame-from-video-cache.d.ts +2 -0
- package/dist/last-frame-from-video-cache.js +0 -0
- package/dist/legacy-webpack-config.d.ts +0 -0
- package/dist/legacy-webpack-config.js +0 -0
- package/dist/locks.d.ts +7 -0
- package/dist/locks.js +44 -0
- package/dist/log-level.d.ts +0 -0
- package/dist/log-level.js +0 -0
- package/dist/make-cancel-signal.d.ts +11 -0
- package/dist/make-cancel-signal.js +24 -1
- package/dist/merge-audio-track.d.ts +1 -0
- package/dist/merge-audio-track.js +28 -18
- package/dist/mime-db.d.ts +0 -0
- package/dist/mime-db.js +0 -0
- package/dist/mime-types.d.ts +1 -0
- package/dist/mime-types.js +6 -1
- package/dist/normalize-serve-url.d.ts +0 -0
- package/dist/normalize-serve-url.js +0 -0
- package/dist/offthread-video-server.d.ts +2 -1
- package/dist/offthread-video-server.js +13 -1
- package/dist/open-browser.d.ts +4 -0
- package/dist/open-browser.js +7 -13
- 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 +0 -0
- 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 +0 -0
- package/dist/perf.js +0 -0
- package/dist/pixel-format.d.ts +1 -1
- 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 +3 -2
- package/dist/prepare-server.js +8 -3
- package/dist/preprocess-audio-track.d.ts +1 -0
- package/dist/preprocess-audio-track.js +4 -3
- package/dist/prespawn-ffmpeg.d.ts +4 -1
- package/dist/prespawn-ffmpeg.js +17 -12
- package/dist/prestitcher-memory-usage.d.ts +0 -0
- package/dist/prestitcher-memory-usage.js +0 -0
- package/dist/prores-profile.d.ts +4 -1
- package/dist/prores-profile.js +6 -6
- package/dist/provide-screenshot.d.ts +5 -1
- package/dist/provide-screenshot.js +4 -1
- package/dist/puppeteer-evaluate.d.ts +0 -0
- package/dist/puppeteer-evaluate.js +19 -11
- package/dist/puppeteer-screenshot.d.ts +11 -2
- package/dist/puppeteer-screenshot.js +11 -14
- package/dist/quality.d.ts +0 -0
- package/dist/quality.js +0 -0
- package/dist/redirect-status-codes.d.ts +1 -0
- package/dist/redirect-status-codes.js +6 -0
- package/dist/render-frames.d.ts +15 -3
- package/dist/render-frames.js +176 -84
- package/dist/render-media.d.ts +38 -6
- package/dist/render-media.js +123 -27
- package/dist/render-still.d.ts +8 -4
- package/dist/render-still.js +62 -31
- package/dist/replace-browser.d.ts +6 -0
- package/dist/replace-browser.js +47 -0
- package/dist/resolve-asset-src.d.ts +0 -0
- package/dist/resolve-asset-src.js +0 -0
- package/dist/sample-rate.d.ts +0 -0
- package/dist/sample-rate.js +0 -0
- package/dist/screenshot-dom-element.d.ts +5 -1
- package/dist/screenshot-dom-element.js +10 -2
- package/dist/screenshot-task.d.ts +12 -2
- package/dist/screenshot-task.js +24 -9
- package/dist/seek-to-frame.d.ts +1 -0
- package/dist/seek-to-frame.js +49 -3
- package/dist/serve-handler/index.d.ts +0 -0
- package/dist/serve-handler/index.js +0 -0
- package/dist/serve-handler/is-path-inside.d.ts +0 -0
- package/dist/serve-handler/is-path-inside.js +0 -0
- 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 +1 -0
- package/dist/serve-static.js +77 -41
- package/dist/set-props-and-env.d.ts +3 -1
- package/dist/set-props-and-env.js +39 -15
- package/dist/stitch-frames-to-video.d.ts +14 -1
- package/dist/stitch-frames-to-video.js +118 -49
- package/dist/stringify-ffmpeg-filter.d.ts +2 -1
- package/dist/stringify-ffmpeg-filter.js +4 -2
- package/dist/symbolicate-stacktrace.d.ts +0 -0
- package/dist/symbolicate-stacktrace.js +0 -0
- package/dist/take-frame-and-compose.d.ts +20 -0
- package/dist/take-frame-and-compose.js +96 -0
- package/dist/tmp-dir.d.ts +0 -0
- package/dist/tmp-dir.js +0 -0
- package/dist/truthy.d.ts +0 -0
- package/dist/truthy.js +0 -0
- package/dist/try-to-extract-frame-of-video-fast.d.ts +13 -0
- package/dist/try-to-extract-frame-of-video-fast.js +55 -0
- package/dist/types.d.ts +0 -0
- package/dist/types.js +0 -0
- package/dist/validate-concurrency.d.ts +0 -0
- package/dist/validate-concurrency.js +14 -9
- 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 +2 -0
- package/dist/validate-ffmpeg-override.js +12 -0
- package/dist/validate-ffmpeg.d.ts +7 -2
- package/dist/validate-ffmpeg.js +48 -43
- 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 +0 -0
- 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 -1
- 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/warn-about-ffmpeg-version.d.ts +5 -0
- package/dist/warn-about-ffmpeg-version.js +37 -0
- package/dist/ws/ws-types.d.ts +0 -0
- package/dist/ws/ws-types.js +2 -1
- package/package.json +21 -11
- package/.prettierrc.js +0 -14
- package/dist/add-silent-audio-if-necessary.d.ts +0 -8
- package/dist/add-silent-audio-if-necessary.d.ts.map +0 -1
- package/dist/add-silent-audio-if-necessary.js +0 -51
- package/dist/add-silent-audio-if-necessary.js.map +0 -1
- package/dist/assets/asset-is-used-at-time.d.ts +0 -3
- package/dist/assets/asset-is-used-at-time.d.ts.map +0 -1
- package/dist/assets/asset-is-used-at-time.js +0 -8
- package/dist/assets/asset-is-used-at-time.js.map +0 -1
- 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-asset-audio-details.d.ts +0 -5
- package/dist/assets/get-asset-audio-details.d.ts.map +0 -1
- package/dist/assets/get-asset-audio-details.js +0 -21
- package/dist/assets/get-asset-audio-details.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/get-simulatenous-assets.d.ts +0 -3
- package/dist/assets/get-simulatenous-assets.d.ts.map +0 -1
- package/dist/assets/get-simulatenous-assets.js +0 -14
- package/dist/assets/get-simulatenous-assets.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/split-assets-into-segments.d.ts +0 -6
- package/dist/assets/split-assets-into-segments.d.ts.map +0 -1
- package/dist/assets/split-assets-into-segments.js +0 -89
- package/dist/assets/split-assets-into-segments.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/assets-to-ffmpeg-inputs.d.ts +0 -7
- package/dist/assets-to-ffmpeg-inputs.d.ts.map +0 -1
- package/dist/assets-to-ffmpeg-inputs.js +0 -15
- package/dist/assets-to-ffmpeg-inputs.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/combine-videos.d.ts.map +0 -1
- package/dist/combine-videos.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/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-flags.d.ts.map +0 -1
- package/dist/ffmpeg-flags.js.map +0 -1
- package/dist/get-audio-codec-name.d.ts +0 -2
- package/dist/get-audio-codec-name.d.ts.map +0 -1
- package/dist/get-audio-codec-name.js +0 -28
- 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-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 -13
- package/dist/make-assets-download-dir.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/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/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-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/render.d.ts +0 -45
- package/dist/render.d.ts.map +0 -1
- package/dist/render.js +0 -245
- package/dist/render.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/stitcher.d.ts +0 -32
- package/dist/stitcher.d.ts.map +0 -1
- package/dist/stitcher.js +0 -204
- package/dist/stitcher.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-frame.d.ts +0 -1
- package/dist/validate-frame.js +0 -24
- 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
- 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
29
|
exports.stitchFramesToVideo = exports.spawnFfmpeg = void 0;
|
|
7
30
|
const execa_1 = __importDefault(require("execa"));
|
|
8
|
-
const fs_1 =
|
|
9
|
-
const promises_1 = require("fs/promises");
|
|
31
|
+
const fs_1 = __importStar(require("fs"));
|
|
10
32
|
const path_1 = __importDefault(require("path"));
|
|
11
33
|
const remotion_1 = require("remotion");
|
|
12
34
|
const calculate_asset_positions_1 = require("./assets/calculate-asset-positions");
|
|
13
35
|
const convert_assets_to_file_urls_1 = require("./assets/convert-assets-to-file-urls");
|
|
14
36
|
const download_and_map_assets_to_file_1 = require("./assets/download-and-map-assets-to-file");
|
|
37
|
+
const audio_codec_1 = require("./audio-codec");
|
|
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 ffmpeg_flags_1 = require("./ffmpeg-flags");
|
|
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 make_cancel_signal_1 = require("./make-cancel-signal");
|
|
24
49
|
const merge_audio_track_1 = require("./merge-audio-track");
|
|
25
50
|
const parse_ffmpeg_progress_1 = require("./parse-ffmpeg-progress");
|
|
26
51
|
const pixel_format_1 = require("./pixel-format");
|
|
27
52
|
const preprocess_audio_track_1 = require("./preprocess-audio-track");
|
|
53
|
+
const prores_profile_1 = require("./prores-profile");
|
|
28
54
|
const truthy_1 = require("./truthy");
|
|
29
55
|
const validate_even_dimensions_with_codec_1 = require("./validate-even-dimensions-with-codec");
|
|
30
56
|
const validate_ffmpeg_1 = require("./validate-ffmpeg");
|
|
57
|
+
const validate_videobitrate_1 = require("./validate-videobitrate");
|
|
31
58
|
const packageJsonPath = path_1.default.join(__dirname, '..', 'package.json');
|
|
32
59
|
const packageJson = fs_1.default.existsSync(packageJsonPath)
|
|
33
60
|
? JSON.parse(fs_1.default.readFileSync(packageJsonPath, 'utf-8'))
|
|
34
61
|
: null;
|
|
35
|
-
const getAssetsData = async ({ assets, onDownload, fps, expectedFrames, verbose, ffmpegExecutable, ffprobeExecutable, onProgress, downloadMap, }) => {
|
|
62
|
+
const getAssetsData = async ({ assets, onDownload, fps, expectedFrames, verbose, ffmpegExecutable, ffprobeExecutable, onProgress, downloadMap, remotionRoot, }) => {
|
|
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),
|
|
@@ -57,6 +84,7 @@ const getAssetsData = async ({ assets, onDownload, fps, expectedFrames, verbose,
|
|
|
57
84
|
expectedFrames,
|
|
58
85
|
fps,
|
|
59
86
|
downloadMap,
|
|
87
|
+
remotionRoot,
|
|
60
88
|
});
|
|
61
89
|
preprocessProgress[index] = 1;
|
|
62
90
|
updateProgress();
|
|
@@ -69,16 +97,17 @@ const getAssetsData = async ({ assets, onDownload, fps, expectedFrames, verbose,
|
|
|
69
97
|
outName,
|
|
70
98
|
numberOfSeconds: Number((expectedFrames / fps).toFixed(3)),
|
|
71
99
|
downloadMap,
|
|
100
|
+
remotionRoot,
|
|
72
101
|
});
|
|
73
|
-
(0, delete_directory_1.deleteDirectory)(downloadMap.audioMixing);
|
|
74
102
|
onProgress(1);
|
|
103
|
+
(0, delete_directory_1.deleteDirectory)(downloadMap.audioMixing);
|
|
75
104
|
preprocessed.forEach((p) => {
|
|
76
105
|
(0, delete_directory_1.deleteDirectory)(p);
|
|
77
106
|
});
|
|
78
107
|
return outName;
|
|
79
108
|
};
|
|
80
|
-
const spawnFfmpeg = async (options) => {
|
|
81
|
-
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v;
|
|
109
|
+
const spawnFfmpeg = async (options, remotionRoot) => {
|
|
110
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y;
|
|
82
111
|
remotion_1.Internals.validateDimension(options.height, 'height', 'passed to `stitchFramesToVideo()`');
|
|
83
112
|
remotion_1.Internals.validateDimension(options.width, 'width', 'passed to `stitchFramesToVideo()`');
|
|
84
113
|
const codec = (_a = options.codec) !== null && _a !== void 0 ? _a : codec_1.DEFAULT_CODEC;
|
|
@@ -88,31 +117,51 @@ const spawnFfmpeg = async (options) => {
|
|
|
88
117
|
codec,
|
|
89
118
|
scale: 1,
|
|
90
119
|
});
|
|
120
|
+
(0, prores_profile_1.validateSelectedCodecAndProResCombination)({
|
|
121
|
+
codec,
|
|
122
|
+
proResProfile: options.proResProfile,
|
|
123
|
+
});
|
|
124
|
+
(0, validate_videobitrate_1.validateBitrate)(options.audioBitrate, 'audioBitrate');
|
|
125
|
+
(0, validate_videobitrate_1.validateBitrate)(options.videoBitrate, 'videoBitrate');
|
|
91
126
|
remotion_1.Internals.validateFps(options.fps, 'in `stitchFramesToVideo()`', false);
|
|
92
|
-
const
|
|
93
|
-
|
|
94
|
-
await (0, validate_ffmpeg_1.validateFfmpeg)((_d = options.ffmpegExecutable) !== null && _d !== void 0 ? _d : null);
|
|
127
|
+
const pixelFormat = (_b = options.pixelFormat) !== null && _b !== void 0 ? _b : pixel_format_1.DEFAULT_PIXEL_FORMAT;
|
|
128
|
+
await (0, validate_ffmpeg_1.validateFfmpeg)((_c = options.ffmpegExecutable) !== null && _c !== void 0 ? _c : null, remotionRoot, 'ffmpeg');
|
|
95
129
|
const encoderName = (0, get_codec_name_1.getCodecName)(codec);
|
|
96
|
-
const audioCodecName = (0, get_audio_codec_name_1.getAudioCodecName)(codec);
|
|
97
130
|
const proResProfileName = (0, get_prores_profile_name_1.getProResProfileName)(codec, options.proResProfile);
|
|
98
131
|
const mediaSupport = (0, codec_supports_media_1.codecSupportsMedia)(codec);
|
|
99
|
-
const
|
|
132
|
+
const shouldRenderAudio = mediaSupport.audio &&
|
|
133
|
+
(options.assetsInfo.assets.flat(1).length > 0 ||
|
|
134
|
+
options.enforceAudioTrack) &&
|
|
135
|
+
!options.muted;
|
|
136
|
+
const shouldRenderVideo = mediaSupport.video;
|
|
137
|
+
if (!shouldRenderAudio && !shouldRenderVideo) {
|
|
138
|
+
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.');
|
|
139
|
+
}
|
|
140
|
+
// Explanation: https://github.com/remotion-dev/remotion/issues/1647
|
|
141
|
+
const resolvedAudioCodec = ((_d = options.internalOptions) === null || _d === void 0 ? void 0 : _d.preferLossless)
|
|
142
|
+
? (0, audio_codec_1.getDefaultAudioCodec)({ codec, preferLossless: true })
|
|
143
|
+
: (_e = options.audioCodec) !== null && _e !== void 0 ? _e : (0, audio_codec_1.getDefaultAudioCodec)({ codec, preferLossless: false });
|
|
100
144
|
const tempFile = options.outputLocation
|
|
101
145
|
? null
|
|
102
|
-
: path_1.default.join(options.assetsInfo.downloadMap.stitchFrames, `out.${(0, get_extension_from_codec_1.getFileExtensionFromCodec)(codec,
|
|
146
|
+
: path_1.default.join(options.assetsInfo.downloadMap.stitchFrames, `out.${(0, get_extension_from_codec_1.getFileExtensionFromCodec)(codec, resolvedAudioCodec)}`);
|
|
103
147
|
if (options.verbose) {
|
|
104
|
-
console.log('[verbose] ffmpeg', (
|
|
148
|
+
console.log('[verbose] ffmpeg', (_f = options.ffmpegExecutable) !== null && _f !== void 0 ? _f : 'ffmpeg in PATH');
|
|
105
149
|
console.log('[verbose] encoder', encoderName);
|
|
106
|
-
console.log('[verbose] audioCodec',
|
|
150
|
+
console.log('[verbose] audioCodec', resolvedAudioCodec);
|
|
107
151
|
console.log('[verbose] pixelFormat', pixelFormat);
|
|
108
|
-
if (
|
|
109
|
-
console.log('[verbose]
|
|
152
|
+
if (options.ffmpegOverride) {
|
|
153
|
+
console.log('[verbose] ffmpegOverride', options.ffmpegOverride);
|
|
110
154
|
}
|
|
111
155
|
console.log('[verbose] codec', codec);
|
|
112
|
-
console.log('[verbose]
|
|
156
|
+
console.log('[verbose] shouldRenderAudio', shouldRenderAudio);
|
|
157
|
+
console.log('[verbose] shouldRenderVideo', shouldRenderVideo);
|
|
113
158
|
console.log('[verbose] proResProfileName', proResProfileName);
|
|
114
159
|
}
|
|
115
|
-
(0, crf_1.
|
|
160
|
+
(0, crf_1.validateQualitySettings)({
|
|
161
|
+
crf: options.crf,
|
|
162
|
+
codec,
|
|
163
|
+
videoBitrate: options.videoBitrate,
|
|
164
|
+
});
|
|
116
165
|
(0, pixel_format_1.validateSelectedPixelFormatAndCodecCombination)(pixelFormat, codec);
|
|
117
166
|
const expectedFrames = options.assetsInfo.assets.length;
|
|
118
167
|
const updateProgress = (preStitchProgress, muxProgress) => {
|
|
@@ -120,45 +169,47 @@ const spawnFfmpeg = async (options) => {
|
|
|
120
169
|
const totalFrameProgress = 0.5 * preStitchProgress * expectedFrames + muxProgress * 0.5;
|
|
121
170
|
(_a = options.onProgress) === null || _a === void 0 ? void 0 : _a.call(options, Math.round(totalFrameProgress));
|
|
122
171
|
};
|
|
123
|
-
const audio =
|
|
172
|
+
const audio = shouldRenderAudio
|
|
124
173
|
? await getAssetsData({
|
|
125
174
|
assets: options.assetsInfo.assets,
|
|
126
175
|
onDownload: options.onDownload,
|
|
127
176
|
fps: options.fps,
|
|
128
177
|
expectedFrames,
|
|
129
|
-
verbose: (
|
|
130
|
-
ffmpegExecutable: (
|
|
131
|
-
ffprobeExecutable: (
|
|
178
|
+
verbose: (_g = options.verbose) !== null && _g !== void 0 ? _g : false,
|
|
179
|
+
ffmpegExecutable: (_h = options.ffmpegExecutable) !== null && _h !== void 0 ? _h : null,
|
|
180
|
+
ffprobeExecutable: (_j = options.ffprobeExecutable) !== null && _j !== void 0 ? _j : null,
|
|
132
181
|
onProgress: (prog) => updateProgress(prog, 0),
|
|
133
182
|
downloadMap: options.assetsInfo.downloadMap,
|
|
183
|
+
remotionRoot,
|
|
134
184
|
})
|
|
135
185
|
: null;
|
|
136
186
|
if (mediaSupport.audio && !mediaSupport.video) {
|
|
137
|
-
if (!
|
|
187
|
+
if (!resolvedAudioCodec) {
|
|
138
188
|
throw new TypeError('exporting audio but has no audio codec name. Report this in the Remotion repo.');
|
|
139
189
|
}
|
|
140
|
-
const ffmpegTask = (0, execa_1.default)('ffmpeg', [
|
|
190
|
+
const ffmpegTask = (0, execa_1.default)(await (0, ffmpeg_flags_1.getExecutableBinary)((_k = options.ffmpegExecutable) !== null && _k !== void 0 ? _k : null, remotionRoot, 'ffmpeg'), [
|
|
141
191
|
'-i',
|
|
142
192
|
audio,
|
|
143
193
|
'-c:a',
|
|
144
|
-
|
|
194
|
+
(0, audio_codec_1.mapAudioCodecToFfmpegAudioCodecName)(resolvedAudioCodec),
|
|
145
195
|
// Set bitrate up to 320k, for aac it might effectively be lower
|
|
146
196
|
'-b:a',
|
|
147
|
-
'320k',
|
|
197
|
+
(_l = options.audioBitrate) !== null && _l !== void 0 ? _l : '320k',
|
|
148
198
|
options.force ? '-y' : null,
|
|
149
|
-
(
|
|
199
|
+
(_m = options.outputLocation) !== null && _m !== void 0 ? _m : tempFile,
|
|
150
200
|
].filter(remotion_1.Internals.truthy));
|
|
151
|
-
(
|
|
201
|
+
(_o = options.cancelSignal) === null || _o === void 0 ? void 0 : _o.call(options, () => {
|
|
152
202
|
ffmpegTask.kill();
|
|
153
203
|
});
|
|
154
204
|
await ffmpegTask;
|
|
155
|
-
(
|
|
205
|
+
(_p = options.onProgress) === null || _p === void 0 ? void 0 : _p.call(options, expectedFrames);
|
|
156
206
|
if (audio) {
|
|
157
|
-
|
|
207
|
+
(0, delete_directory_1.deleteDirectory)(path_1.default.dirname(audio));
|
|
158
208
|
}
|
|
159
209
|
const file = await new Promise((resolve, reject) => {
|
|
160
210
|
if (tempFile) {
|
|
161
|
-
|
|
211
|
+
fs_1.promises
|
|
212
|
+
.readFile(tempFile)
|
|
162
213
|
.then((f) => {
|
|
163
214
|
return resolve(f);
|
|
164
215
|
})
|
|
@@ -168,7 +219,7 @@ const spawnFfmpeg = async (options) => {
|
|
|
168
219
|
resolve(null);
|
|
169
220
|
}
|
|
170
221
|
});
|
|
171
|
-
|
|
222
|
+
(0, delete_directory_1.deleteDirectory)(options.assetsInfo.downloadMap.stitchFrames);
|
|
172
223
|
return {
|
|
173
224
|
getLogs: () => '',
|
|
174
225
|
task: Promise.resolve(file),
|
|
@@ -176,8 +227,8 @@ const spawnFfmpeg = async (options) => {
|
|
|
176
227
|
}
|
|
177
228
|
const ffmpegArgs = [
|
|
178
229
|
['-r', String(options.fps)],
|
|
179
|
-
...(((
|
|
180
|
-
? [['-i', (
|
|
230
|
+
...(((_q = options.internalOptions) === null || _q === void 0 ? void 0 : _q.preEncodedFileLocation)
|
|
231
|
+
? [['-i', (_r = options.internalOptions) === null || _r === void 0 ? void 0 : _r.preEncodedFileLocation]]
|
|
181
232
|
: [
|
|
182
233
|
['-f', 'image2'],
|
|
183
234
|
['-s', `${options.width}x${options.height}`],
|
|
@@ -185,30 +236,35 @@ const spawnFfmpeg = async (options) => {
|
|
|
185
236
|
['-i', options.assetsInfo.imageSequenceName],
|
|
186
237
|
]),
|
|
187
238
|
audio ? ['-i', audio] : null,
|
|
188
|
-
((
|
|
239
|
+
((_s = options.numberOfGifLoops) !== null && _s !== void 0 ? _s : null) === null
|
|
189
240
|
? null
|
|
190
241
|
: [
|
|
191
242
|
'-loop',
|
|
192
|
-
(0, convert_number_of_gif_loops_to_ffmpeg_1.convertNumberOfGifLoopsToFfmpegSyntax)((
|
|
243
|
+
(0, convert_number_of_gif_loops_to_ffmpeg_1.convertNumberOfGifLoopsToFfmpegSyntax)((_t = options.numberOfGifLoops) !== null && _t !== void 0 ? _t : null),
|
|
193
244
|
],
|
|
194
245
|
// -c:v is the same as -vcodec as -codec:video
|
|
195
246
|
// and specified the video codec.
|
|
196
247
|
['-c:v', encoderName],
|
|
197
|
-
...(((
|
|
248
|
+
...(((_u = options.internalOptions) === null || _u === void 0 ? void 0 : _u.preEncodedFileLocation)
|
|
198
249
|
? []
|
|
199
250
|
: [
|
|
200
251
|
proResProfileName ? ['-profile:v', proResProfileName] : null,
|
|
201
|
-
supportsCrf ? ['-crf', String(crf)] : null,
|
|
202
252
|
['-pix_fmt', pixelFormat],
|
|
203
253
|
// Without explicitly disabling auto-alt-ref,
|
|
204
254
|
// transparent WebM generation doesn't work
|
|
205
255
|
pixelFormat === 'yuva420p' ? ['-auto-alt-ref', '0'] : null,
|
|
206
|
-
|
|
256
|
+
...(0, crf_1.validateQualitySettings)({
|
|
257
|
+
crf: options.crf,
|
|
258
|
+
videoBitrate: options.videoBitrate,
|
|
259
|
+
codec,
|
|
260
|
+
}),
|
|
207
261
|
]),
|
|
208
262
|
codec === 'h264' ? ['-movflags', 'faststart'] : null,
|
|
209
|
-
|
|
263
|
+
resolvedAudioCodec
|
|
264
|
+
? ['-c:a', (0, audio_codec_1.mapAudioCodecToFfmpegAudioCodecName)(resolvedAudioCodec)]
|
|
265
|
+
: null,
|
|
210
266
|
// Set max bitrate up to 1024kbps, will choose lower if that's too much
|
|
211
|
-
|
|
267
|
+
resolvedAudioCodec ? ['-b:a', options.audioBitrate || '512K'] : null,
|
|
212
268
|
// Ignore metadata that may come from remote media
|
|
213
269
|
['-map_metadata', '-1'],
|
|
214
270
|
[
|
|
@@ -217,22 +273,29 @@ const spawnFfmpeg = async (options) => {
|
|
|
217
273
|
[`Made with Remotion`, packageJson ? packageJson.version : null].join(' '),
|
|
218
274
|
],
|
|
219
275
|
options.force ? '-y' : null,
|
|
220
|
-
(
|
|
276
|
+
(_v = options.outputLocation) !== null && _v !== void 0 ? _v : tempFile,
|
|
221
277
|
];
|
|
222
278
|
if (options.verbose) {
|
|
223
279
|
console.log('Generated FFMPEG command:');
|
|
224
280
|
console.log(ffmpegArgs);
|
|
225
281
|
}
|
|
226
282
|
const ffmpegString = ffmpegArgs.flat(2).filter(Boolean);
|
|
227
|
-
const
|
|
283
|
+
const finalFfmpegString = options.ffmpegOverride
|
|
284
|
+
? options.ffmpegOverride({ type: 'stitcher', args: ffmpegString })
|
|
285
|
+
: ffmpegString;
|
|
286
|
+
if (options.verbose && options.ffmpegOverride) {
|
|
287
|
+
console.log('Generated final FFMPEG command:');
|
|
288
|
+
console.log(finalFfmpegString);
|
|
289
|
+
}
|
|
290
|
+
const task = (0, execa_1.default)(await (0, ffmpeg_flags_1.getExecutableBinary)((_w = options.ffmpegExecutable) !== null && _w !== void 0 ? _w : null, remotionRoot, 'ffmpeg'), finalFfmpegString, {
|
|
228
291
|
cwd: options.dir,
|
|
229
292
|
});
|
|
230
|
-
(
|
|
293
|
+
(_x = options.cancelSignal) === null || _x === void 0 ? void 0 : _x.call(options, () => {
|
|
231
294
|
task.kill();
|
|
232
295
|
});
|
|
233
296
|
let ffmpegOutput = '';
|
|
234
297
|
let isFinished = false;
|
|
235
|
-
(
|
|
298
|
+
(_y = task.stderr) === null || _y === void 0 ? void 0 : _y.on('data', (data) => {
|
|
236
299
|
var _a;
|
|
237
300
|
const str = data.toString();
|
|
238
301
|
ffmpegOutput += str;
|
|
@@ -261,7 +324,8 @@ const spawnFfmpeg = async (options) => {
|
|
|
261
324
|
(0, delete_directory_1.deleteDirectory)(options.assetsInfo.downloadMap.stitchFrames);
|
|
262
325
|
return null;
|
|
263
326
|
}
|
|
264
|
-
return
|
|
327
|
+
return fs_1.promises
|
|
328
|
+
.readFile(tempFile)
|
|
265
329
|
.then((file) => {
|
|
266
330
|
return Promise.all([
|
|
267
331
|
file,
|
|
@@ -275,8 +339,13 @@ const spawnFfmpeg = async (options) => {
|
|
|
275
339
|
};
|
|
276
340
|
};
|
|
277
341
|
exports.spawnFfmpeg = spawnFfmpeg;
|
|
342
|
+
/**
|
|
343
|
+
* @description Takes a series of images and audio information generated by renderFrames() and encodes it to a video.
|
|
344
|
+
* @see [Documentation](https://www.remotion.dev/docs/renderer/stitch-frames-to-video)
|
|
345
|
+
*/
|
|
278
346
|
const stitchFramesToVideo = async (options) => {
|
|
279
|
-
const
|
|
347
|
+
const remotionRoot = (0, find_closest_package_json_1.findRemotionRoot)();
|
|
348
|
+
const { task, getLogs } = await (0, exports.spawnFfmpeg)(options, remotionRoot);
|
|
280
349
|
const happyPath = task.catch(() => {
|
|
281
350
|
throw new Error(getLogs());
|
|
282
351
|
});
|
|
@@ -285,7 +354,7 @@ const stitchFramesToVideo = async (options) => {
|
|
|
285
354
|
new Promise((_resolve, reject) => {
|
|
286
355
|
var _a;
|
|
287
356
|
(_a = options.cancelSignal) === null || _a === void 0 ? void 0 : _a.call(options, () => {
|
|
288
|
-
reject(new Error(
|
|
357
|
+
reject(new Error(make_cancel_signal_1.cancelErrorMessages.stitchFramesToVideo));
|
|
289
358
|
});
|
|
290
359
|
}),
|
|
291
360
|
]);
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { AssetVolume } from './assets/types';
|
|
2
|
-
export declare const stringifyFfmpegFilter: ({ trimLeft, trimRight, channels, startInVideo, volume, fps, playbackRate, durationInFrames, assetDuration, }: {
|
|
2
|
+
export declare const stringifyFfmpegFilter: ({ trimLeft, trimRight, channels, startInVideo, volume, fps, playbackRate, durationInFrames, assetDuration, allowAmplificationDuringRender, }: {
|
|
3
3
|
trimLeft: number;
|
|
4
4
|
trimRight: number;
|
|
5
5
|
channels: number;
|
|
@@ -9,4 +9,5 @@ export declare const stringifyFfmpegFilter: ({ trimLeft, trimRight, channels, st
|
|
|
9
9
|
durationInFrames: number;
|
|
10
10
|
playbackRate: number;
|
|
11
11
|
assetDuration: number | null;
|
|
12
|
+
allowAmplificationDuringRender: boolean;
|
|
12
13
|
}) => string | 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,13 +14,15 @@ 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
|
+
const audibleDuration = (actualTrimRight - trimLeft) / playbackRate;
|
|
25
|
+
const padAtEnd = chunkLength - audibleDuration - startInVideoSeconds;
|
|
24
26
|
return (`[0:a]` +
|
|
25
27
|
[
|
|
26
28
|
`aformat=sample_fmts=s32:sample_rates=${sample_rate_1.DEFAULT_SAMPLE_RATE}`,
|
|
File without changes
|
|
File without changes
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
import type { TAsset } from 'remotion';
|
|
3
|
+
import type { DownloadMap } from './assets/download-map';
|
|
4
|
+
import type { Page } from './browser/BrowserPage';
|
|
5
|
+
import type { ImageFormat } from './image-format';
|
|
6
|
+
export declare const takeFrameAndCompose: ({ freePage, imageFormat, quality, frame, width, height, output, scale, downloadMap, wantsBuffer, }: {
|
|
7
|
+
freePage: Page;
|
|
8
|
+
imageFormat: ImageFormat;
|
|
9
|
+
quality: number | undefined;
|
|
10
|
+
frame: number;
|
|
11
|
+
height: number;
|
|
12
|
+
width: number;
|
|
13
|
+
output: string | null;
|
|
14
|
+
scale: number;
|
|
15
|
+
downloadMap: DownloadMap;
|
|
16
|
+
wantsBuffer: boolean;
|
|
17
|
+
}) => Promise<{
|
|
18
|
+
buffer: Buffer | null;
|
|
19
|
+
collectedAssets: TAsset[];
|
|
20
|
+
}>;
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.takeFrameAndCompose = void 0;
|
|
7
|
+
const fs_1 = __importDefault(require("fs"));
|
|
8
|
+
const path_1 = __importDefault(require("path"));
|
|
9
|
+
const compose_1 = require("./compositor/compose");
|
|
10
|
+
const provide_screenshot_1 = require("./provide-screenshot");
|
|
11
|
+
const puppeteer_evaluate_1 = require("./puppeteer-evaluate");
|
|
12
|
+
const truthy_1 = require("./truthy");
|
|
13
|
+
const takeFrameAndCompose = async ({ freePage, imageFormat, quality, frame, width, height, output, scale, downloadMap, wantsBuffer, }) => {
|
|
14
|
+
var _a;
|
|
15
|
+
const [clipRegion, collectedAssets] = await Promise.all([
|
|
16
|
+
(0, puppeteer_evaluate_1.puppeteerEvaluateWithCatch)({
|
|
17
|
+
pageFunction: () => {
|
|
18
|
+
if (typeof window.remotion_getClipRegion === 'undefined') {
|
|
19
|
+
return null;
|
|
20
|
+
}
|
|
21
|
+
return window.remotion_getClipRegion();
|
|
22
|
+
},
|
|
23
|
+
args: [],
|
|
24
|
+
frame,
|
|
25
|
+
page: freePage,
|
|
26
|
+
}),
|
|
27
|
+
(0, puppeteer_evaluate_1.puppeteerEvaluateWithCatch)({
|
|
28
|
+
pageFunction: () => {
|
|
29
|
+
return window.remotion_collectAssets();
|
|
30
|
+
},
|
|
31
|
+
args: [],
|
|
32
|
+
frame,
|
|
33
|
+
page: freePage,
|
|
34
|
+
}),
|
|
35
|
+
]);
|
|
36
|
+
if (imageFormat === 'none') {
|
|
37
|
+
return { buffer: null, collectedAssets };
|
|
38
|
+
}
|
|
39
|
+
const needsComposing = clipRegion === null
|
|
40
|
+
? null
|
|
41
|
+
: {
|
|
42
|
+
tmpFile: path_1.default.join(downloadMap.compositingDir, `${frame}.${imageFormat}`),
|
|
43
|
+
finalOutfie: output !== null && output !== void 0 ? output : path_1.default.join(downloadMap.compositingDir, `${frame}-final.${imageFormat}`),
|
|
44
|
+
clipRegion: clipRegion,
|
|
45
|
+
};
|
|
46
|
+
if (clipRegion !== 'hide') {
|
|
47
|
+
const shouldMakeBuffer = wantsBuffer && !needsComposing;
|
|
48
|
+
const buf = await (0, provide_screenshot_1.provideScreenshot)({
|
|
49
|
+
page: freePage,
|
|
50
|
+
imageFormat,
|
|
51
|
+
quality,
|
|
52
|
+
options: {
|
|
53
|
+
frame,
|
|
54
|
+
output: shouldMakeBuffer ? null : (_a = needsComposing === null || needsComposing === void 0 ? void 0 : needsComposing.tmpFile) !== null && _a !== void 0 ? _a : output,
|
|
55
|
+
},
|
|
56
|
+
height,
|
|
57
|
+
width,
|
|
58
|
+
clipRegion,
|
|
59
|
+
});
|
|
60
|
+
if (shouldMakeBuffer) {
|
|
61
|
+
return { buffer: buf, collectedAssets };
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
if (needsComposing) {
|
|
65
|
+
await (0, compose_1.compose)({
|
|
66
|
+
height: height * scale,
|
|
67
|
+
width: width * scale,
|
|
68
|
+
layers: [
|
|
69
|
+
needsComposing.clipRegion === 'hide'
|
|
70
|
+
? null
|
|
71
|
+
: {
|
|
72
|
+
type: imageFormat === 'jpeg'
|
|
73
|
+
? 'JpgImage'
|
|
74
|
+
: 'PngImage',
|
|
75
|
+
params: {
|
|
76
|
+
height: needsComposing.clipRegion.height * scale,
|
|
77
|
+
width: needsComposing.clipRegion.width * scale,
|
|
78
|
+
src: needsComposing.tmpFile,
|
|
79
|
+
x: needsComposing.clipRegion.x * scale,
|
|
80
|
+
y: needsComposing.clipRegion.y * scale,
|
|
81
|
+
},
|
|
82
|
+
},
|
|
83
|
+
].filter(truthy_1.truthy),
|
|
84
|
+
output: needsComposing.finalOutfie,
|
|
85
|
+
downloadMap,
|
|
86
|
+
imageFormat: imageFormat === 'jpeg' ? 'Jpeg' : 'Png',
|
|
87
|
+
});
|
|
88
|
+
if (wantsBuffer) {
|
|
89
|
+
const buffer = await fs_1.default.promises.readFile(needsComposing.finalOutfie);
|
|
90
|
+
await fs_1.default.promises.unlink(needsComposing.finalOutfie);
|
|
91
|
+
return { buffer, collectedAssets };
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
return { buffer: null, collectedAssets };
|
|
95
|
+
};
|
|
96
|
+
exports.takeFrameAndCompose = takeFrameAndCompose;
|
package/dist/tmp-dir.d.ts
CHANGED
|
File without changes
|
package/dist/tmp-dir.js
CHANGED
|
File without changes
|
package/dist/truthy.d.ts
CHANGED
|
File without changes
|
package/dist/truthy.js
CHANGED
|
File without changes
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
import type { OffthreadVideoImageFormat } from 'remotion';
|
|
3
|
+
import type { NeedsResize, SpecialVCodecForTransparency } from './assets/download-map';
|
|
4
|
+
import type { FfmpegExecutable } from './ffmpeg-executable';
|
|
5
|
+
export declare const tryToExtractFrameOfVideoFast: ({ ffmpegExecutable, remotionRoot, specialVCodecForTransparency, imageFormat, needsResize, src, actualOffset, }: {
|
|
6
|
+
ffmpegExecutable: FfmpegExecutable;
|
|
7
|
+
remotionRoot: string;
|
|
8
|
+
imageFormat: OffthreadVideoImageFormat;
|
|
9
|
+
needsResize: NeedsResize;
|
|
10
|
+
src: string;
|
|
11
|
+
specialVCodecForTransparency: SpecialVCodecForTransparency;
|
|
12
|
+
actualOffset: string;
|
|
13
|
+
}) => Promise<readonly [string, Buffer]>;
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.tryToExtractFrameOfVideoFast = void 0;
|
|
7
|
+
const execa_1 = __importDefault(require("execa"));
|
|
8
|
+
const determine_resize_params_1 = require("./determine-resize-params");
|
|
9
|
+
const determine_vcodec_ffmpeg_flags_1 = require("./determine-vcodec-ffmpeg-flags");
|
|
10
|
+
const ffmpeg_flags_1 = require("./ffmpeg-flags");
|
|
11
|
+
const truthy_1 = require("./truthy");
|
|
12
|
+
const tryToExtractFrameOfVideoFast = async ({ ffmpegExecutable, remotionRoot, specialVCodecForTransparency, imageFormat, needsResize, src, actualOffset, }) => {
|
|
13
|
+
const { stdout, stderr } = (0, execa_1.default)(await (0, ffmpeg_flags_1.getExecutableBinary)(ffmpegExecutable, remotionRoot, 'ffmpeg'), [
|
|
14
|
+
'-ss',
|
|
15
|
+
actualOffset,
|
|
16
|
+
...(0, determine_vcodec_ffmpeg_flags_1.determineVcodecFfmpegFlags)(specialVCodecForTransparency),
|
|
17
|
+
'-i',
|
|
18
|
+
src,
|
|
19
|
+
'-frames:v',
|
|
20
|
+
'1',
|
|
21
|
+
'-c:v',
|
|
22
|
+
imageFormat === 'jpeg' ? 'mjpeg' : 'png',
|
|
23
|
+
'-f',
|
|
24
|
+
'image2pipe',
|
|
25
|
+
...(0, determine_resize_params_1.determineResizeParams)(needsResize),
|
|
26
|
+
'-',
|
|
27
|
+
].filter(truthy_1.truthy));
|
|
28
|
+
if (!stderr) {
|
|
29
|
+
throw new Error('unexpectedly did not get stderr');
|
|
30
|
+
}
|
|
31
|
+
if (!stdout) {
|
|
32
|
+
throw new Error('unexpectedly did not get stdout');
|
|
33
|
+
}
|
|
34
|
+
const stderrChunks = [];
|
|
35
|
+
const stdoutChunks = [];
|
|
36
|
+
const stdErrString = new Promise((resolve, reject) => {
|
|
37
|
+
stderr.on('data', (d) => stderrChunks.push(d));
|
|
38
|
+
stderr.on('error', (err) => reject(err));
|
|
39
|
+
stderr.on('end', () => resolve(Buffer.concat(stderrChunks).toString('utf-8')));
|
|
40
|
+
});
|
|
41
|
+
const stdoutChunk = new Promise((resolve, reject) => {
|
|
42
|
+
stdout.on('data', (d) => {
|
|
43
|
+
stdoutChunks.push(d);
|
|
44
|
+
});
|
|
45
|
+
stdout.on('error', (err) => {
|
|
46
|
+
reject(err);
|
|
47
|
+
});
|
|
48
|
+
stdout.on('end', () => {
|
|
49
|
+
resolve(Buffer.concat(stdoutChunks));
|
|
50
|
+
});
|
|
51
|
+
});
|
|
52
|
+
const [stdErr, stdoutBuffer] = await Promise.all([stdErrString, stdoutChunk]);
|
|
53
|
+
return [stdErr, stdoutBuffer];
|
|
54
|
+
};
|
|
55
|
+
exports.tryToExtractFrameOfVideoFast = tryToExtractFrameOfVideoFast;
|
package/dist/types.d.ts
CHANGED
|
File without changes
|
package/dist/types.js
CHANGED
|
File without changes
|
|
File without changes
|
|
@@ -8,17 +8,22 @@ const validateConcurrency = (value, setting) => {
|
|
|
8
8
|
if (value === null) {
|
|
9
9
|
return;
|
|
10
10
|
}
|
|
11
|
-
if (typeof value !== 'number') {
|
|
12
|
-
throw new Error(setting + ' must
|
|
11
|
+
if (typeof value !== 'number' && typeof value !== 'string') {
|
|
12
|
+
throw new Error(setting + ' must a number or a string but is ' + value);
|
|
13
13
|
}
|
|
14
|
-
if (value
|
|
15
|
-
|
|
14
|
+
if (typeof value === 'number') {
|
|
15
|
+
if (value % 1 !== 0) {
|
|
16
|
+
throw new Error(setting + ' must be an integer, but is ' + value);
|
|
17
|
+
}
|
|
18
|
+
if (value < 1) {
|
|
19
|
+
throw new Error(setting + ' must be at least 1, but is ' + value);
|
|
20
|
+
}
|
|
21
|
+
if (value > require('os').cpus().length) {
|
|
22
|
+
throw new Error(`${setting} is set higher than the amount of CPU cores available. Available CPU cores: ${require('os').cpus().length}, value set: ${value}`);
|
|
23
|
+
}
|
|
16
24
|
}
|
|
17
|
-
if (value
|
|
18
|
-
throw new Error(setting
|
|
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}`);
|
|
25
|
+
else if (!/^\d+(\.\d+)?%$/.test(value)) {
|
|
26
|
+
throw new Error(`${setting} must be a number or percentage, but is ${JSON.stringify(value)}`);
|
|
22
27
|
}
|
|
23
28
|
};
|
|
24
29
|
exports.validateConcurrency = validateConcurrency;
|
|
File without changes
|
|
File without changes
|
|
@@ -1 +1,2 @@
|
|
|
1
|
-
|
|
1
|
+
import type { Codec } from './codec';
|
|
2
|
+
export declare const validateEveryNthFrame: (everyNthFrame: unknown, codec: Codec) => 1 | undefined;
|