@remotion/renderer 4.0.357 → 4.0.358
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/render-frames.js +1 -1
- package/dist/test/actual-concurrency.test.d.ts +1 -0
- package/dist/test/artifacts.test.d.ts +1 -0
- package/dist/test/asset-calculation.test.d.ts +1 -0
- package/dist/test/asset-compression.test.d.ts +1 -0
- package/dist/test/avoid-ffmpeg-stackoverflow.test.d.ts +1 -0
- package/dist/test/browser-log-message.test.d.ts +1 -0
- package/dist/test/calculate-atempo.test.d.ts +1 -0
- package/dist/test/compositor-rust.test.d.ts +1 -0
- package/dist/test/crf.test.d.ts +1 -0
- package/dist/test/derive-codec-from-file-extension.test.d.ts +1 -0
- package/dist/test/dont-skip-assets.test.d.ts +1 -0
- package/dist/test/download-file.test.d.ts +1 -0
- package/dist/test/even-dimensions.test.d.ts +1 -0
- package/dist/test/extra-frames-to-capture.test.d.ts +1 -0
- package/dist/test/extract-audio.test.d.ts +1 -0
- package/dist/test/extract-frame-rust.test.d.ts +1 -0
- package/dist/test/ffmpeg-filters.test.d.ts +1 -0
- package/dist/test/ffmpeg-merge-filter.test.d.ts +1 -0
- package/dist/test/ffmpeg-volume-expression.test.d.ts +1 -0
- package/dist/test/file-extension.test.d.ts +1 -0
- package/dist/test/find-closest-package-json.test.d.ts +1 -0
- package/dist/test/flatten-volume-array.test.d.ts +1 -0
- package/dist/test/format-logs.test.d.ts +1 -0
- package/dist/test/frame-padded-index.test.d.ts +1 -0
- package/dist/test/frame.test.d.ts +1 -0
- package/dist/test/get-assets-for-markup.d.ts +8 -0
- package/dist/test/get-audio-channels.test.d.ts +1 -0
- package/dist/test/get-bundle-url-from-serve-url.test.d.ts +1 -0
- package/dist/test/get-silent-parts.test.d.ts +1 -0
- package/dist/test/guess-extension-for-media.test.d.ts +1 -0
- package/dist/test/handle-weird-file-names.test.d.ts +1 -0
- package/dist/test/log-level.test.d.ts +1 -0
- package/dist/test/mime-types.test.d.ts +1 -0
- package/dist/test/offthread-extract-url.test.d.ts +1 -0
- package/dist/test/parse-ffmpeg-progress.test.d.ts +1 -0
- package/dist/test/partitions.test.d.ts +1 -0
- package/dist/test/pixel-format.test.d.ts +1 -0
- package/dist/test/port-config.test.d.ts +1 -0
- package/dist/test/port-selection.test.d.ts +1 -0
- package/dist/test/prores-profile.test.d.ts +1 -0
- package/dist/test/render-still.test.d.ts +1 -0
- package/dist/test/rust-errors.test.d.ts +1 -0
- package/dist/test/rust-get-video-metadata.test.d.ts +1 -0
- package/dist/test/rust-memory-usage.test.d.ts +1 -0
- package/dist/test/sanitize-file-path.test.d.ts +1 -0
- package/dist/test/serve-url.test.d.ts +1 -0
- package/dist/test/symbolicate-remote-stack.test.d.ts +1 -0
- package/dist/test/validate-concurrency.test.d.ts +1 -0
- package/dist/test/validate-config-stitcher.test.d.ts +1 -0
- package/dist/test/validate-config.test.d.ts +1 -0
- package/dist/test/validate-even-dimensions-with-codec.test.d.ts +1 -0
- package/dist/test/validate-image-format.test.d.ts +1 -0
- package/dist/test/webpack-to-serve-url.test.d.ts +1 -0
- package/package/dist/assets/apply-tone-frequency.d.ts +11 -0
- package/package/dist/assets/apply-tone-frequency.js +34 -0
- package/package/dist/assets/calculate-asset-positions.d.ts +3 -0
- package/package/dist/assets/calculate-asset-positions.js +72 -0
- package/package/dist/assets/calculate-atempo.d.ts +1 -0
- package/package/dist/assets/calculate-atempo.js +16 -0
- package/package/dist/assets/convert-assets-to-file-urls.d.ts +13 -0
- package/package/dist/assets/convert-assets-to-file-urls.js +36 -0
- package/package/dist/assets/download-and-map-assets-to-file.d.ts +37 -0
- package/package/dist/assets/download-and-map-assets-to-file.js +312 -0
- package/package/dist/assets/download-file.d.ts +18 -0
- package/package/dist/assets/download-file.js +135 -0
- package/package/dist/assets/download-map.d.ts +55 -0
- package/package/dist/assets/download-map.js +63 -0
- package/package/dist/assets/ffmpeg-volume-expression.d.ts +12 -0
- package/package/dist/assets/ffmpeg-volume-expression.js +96 -0
- package/package/dist/assets/flatten-volume-array.d.ts +3 -0
- package/package/dist/assets/flatten-volume-array.js +26 -0
- package/package/dist/assets/get-audio-channels.d.ts +20 -0
- package/package/dist/assets/get-audio-channels.js +78 -0
- package/package/dist/assets/inline-audio-mixing.d.ts +22 -0
- package/package/dist/assets/inline-audio-mixing.js +189 -0
- package/package/dist/assets/read-file.d.ts +7 -0
- package/package/dist/assets/read-file.js +97 -0
- package/package/dist/assets/round-volume-to-avoid-stack-overflow.d.ts +1 -0
- package/package/dist/assets/round-volume-to-avoid-stack-overflow.js +17 -0
- package/package/dist/assets/sanitize-filename.d.ts +1 -0
- package/package/dist/assets/sanitize-filename.js +58 -0
- package/package/dist/assets/sanitize-filepath.d.ts +1 -0
- package/package/dist/assets/sanitize-filepath.js +16 -0
- package/package/dist/assets/truncate-utf8-bytes.d.ts +1 -0
- package/package/dist/assets/truncate-utf8-bytes.js +36 -0
- package/package/dist/assets/types.d.ts +18 -0
- package/package/dist/assets/types.js +21 -0
- package/package/dist/browser/Browser.d.ts +97 -0
- package/package/dist/browser/Browser.js +246 -0
- package/package/dist/browser/BrowserFetcher.d.ts +33 -0
- package/package/dist/browser/BrowserFetcher.js +215 -0
- package/package/dist/browser/BrowserPage.d.ts +104 -0
- package/package/dist/browser/BrowserPage.js +436 -0
- package/package/dist/browser/BrowserRunner.d.ts +33 -0
- package/package/dist/browser/BrowserRunner.js +303 -0
- package/package/dist/browser/Connection.d.ts +49 -0
- package/package/dist/browser/Connection.js +258 -0
- package/package/dist/browser/ConsoleMessage.d.ts +42 -0
- package/package/dist/browser/ConsoleMessage.js +47 -0
- package/package/dist/browser/DOMWorld.d.ts +56 -0
- package/package/dist/browser/DOMWorld.js +272 -0
- package/package/dist/browser/Errors.d.ts +25 -0
- package/package/dist/browser/Errors.js +35 -0
- package/package/dist/browser/EvalTypes.d.ts +27 -0
- package/package/dist/browser/EvalTypes.js +17 -0
- package/package/dist/browser/EventEmitter.d.ts +23 -0
- package/package/dist/browser/EventEmitter.js +53 -0
- package/package/dist/browser/ExecutionContext.d.ts +34 -0
- package/package/dist/browser/ExecutionContext.js +174 -0
- package/package/dist/browser/FrameManager.d.ts +89 -0
- package/package/dist/browser/FrameManager.js +487 -0
- package/package/dist/browser/HTTPRequest.d.ts +29 -0
- package/package/dist/browser/HTTPRequest.js +39 -0
- package/package/dist/browser/HTTPResponse.d.ts +21 -0
- package/package/dist/browser/HTTPResponse.js +41 -0
- package/package/dist/browser/JSHandle.d.ts +35 -0
- package/package/dist/browser/JSHandle.js +90 -0
- package/package/dist/browser/LaunchOptions.d.ts +26 -0
- package/package/dist/browser/LaunchOptions.js +17 -0
- package/package/dist/browser/Launcher.d.ts +18 -0
- package/package/dist/browser/Launcher.js +41 -0
- package/package/dist/browser/LifecycleWatcher.d.ts +29 -0
- package/package/dist/browser/LifecycleWatcher.js +180 -0
- package/package/dist/browser/NetworkEventManager.d.ts +34 -0
- package/package/dist/browser/NetworkEventManager.js +85 -0
- package/package/dist/browser/NetworkManager.d.ts +37 -0
- package/package/dist/browser/NetworkManager.js +246 -0
- package/package/dist/browser/NodeWebSocketTransport.d.ts +19 -0
- package/package/dist/browser/NodeWebSocketTransport.js +81 -0
- package/package/dist/browser/PuppeteerViewport.d.ts +5 -0
- package/package/dist/browser/PuppeteerViewport.js +2 -0
- package/package/dist/browser/ScreenshotOptions.d.ts +0 -0
- package/package/dist/browser/ScreenshotOptions.js +1 -0
- package/package/dist/browser/Target.d.ts +72 -0
- package/package/dist/browser/Target.js +161 -0
- package/package/dist/browser/TaskQueue.d.ts +20 -0
- package/package/dist/browser/TaskQueue.js +47 -0
- package/package/dist/browser/TimeoutSettings.d.ts +24 -0
- package/package/dist/browser/TimeoutSettings.js +62 -0
- package/package/dist/browser/assert.d.ts +1 -0
- package/package/dist/browser/assert.js +9 -0
- package/package/dist/browser/browser-download-progress-bar.d.ts +7 -0
- package/package/dist/browser/browser-download-progress-bar.js +31 -0
- package/package/dist/browser/devtools-commands.d.ts +274 -0
- package/package/dist/browser/devtools-commands.js +2 -0
- package/package/dist/browser/devtools-types.d.ts +1263 -0
- package/package/dist/browser/devtools-types.js +2 -0
- package/package/dist/browser/flaky-errors.d.ts +2 -0
- package/package/dist/browser/flaky-errors.js +20 -0
- package/package/dist/browser/get-download-destination.d.ts +1 -0
- package/package/dist/browser/get-download-destination.js +38 -0
- package/package/dist/browser/handle-failed-resource.d.ts +10 -0
- package/package/dist/browser/handle-failed-resource.js +21 -0
- package/package/dist/browser/mitt/index.d.ts +22 -0
- package/package/dist/browser/mitt/index.js +49 -0
- package/package/dist/browser/should-log-message.d.ts +24 -0
- package/package/dist/browser/should-log-message.js +104 -0
- package/package/dist/browser/source-map-getter.d.ts +2 -0
- package/package/dist/browser/source-map-getter.js +2 -0
- package/package/dist/browser/util.d.ts +37 -0
- package/package/dist/browser/util.js +169 -0
- package/package/dist/browser-executable.d.ts +1 -0
- package/package/dist/browser-executable.js +2 -0
- package/package/dist/browser-log.d.ts +6 -0
- package/package/dist/browser-log.js +2 -0
- package/package/dist/browser.d.ts +2 -0
- package/package/dist/browser.js +4 -0
- package/package/dist/call-ffmpeg.d.ts +22 -0
- package/package/dist/call-ffmpeg.js +53 -0
- package/package/dist/can-concat-seamlessly.d.ts +4 -0
- package/package/dist/can-concat-seamlessly.js +17 -0
- package/package/dist/can-use-parallel-encoding.d.ts +3 -0
- package/package/dist/can-use-parallel-encoding.js +19 -0
- package/package/dist/chalk/index.d.ts +55 -0
- package/package/dist/chalk/index.js +130 -0
- package/package/dist/chalk/is-color-supported.d.ts +1 -0
- package/package/dist/chalk/is-color-supported.js +55 -0
- package/package/dist/check-version-requirements.d.ts +3 -0
- package/package/dist/check-version-requirements.js +82 -0
- package/package/dist/chunk.d.ts +1 -0
- package/package/dist/chunk.js +11 -0
- package/package/dist/client.d.ts +3016 -0
- package/package/dist/client.js +57 -0
- package/package/dist/codec-supports-media.d.ts +9 -0
- package/package/dist/codec-supports-media.js +76 -0
- package/package/dist/codec.d.ts +4 -0
- package/package/dist/codec.js +17 -0
- package/package/dist/collect-assets.d.ts +7 -0
- package/package/dist/collect-assets.js +38 -0
- package/package/dist/combine-audio.d.ts +21 -0
- package/package/dist/combine-audio.js +183 -0
- package/package/dist/combine-chunks.d.ts +39 -0
- package/package/dist/combine-chunks.js +171 -0
- package/package/dist/combine-video-streams-seamlessly.d.ts +3 -0
- package/package/dist/combine-video-streams-seamlessly.js +8 -0
- package/package/dist/combine-video-streams.d.ts +17 -0
- package/package/dist/combine-video-streams.js +75 -0
- package/package/dist/compositor/compositor.d.ts +22 -0
- package/package/dist/compositor/compositor.js +182 -0
- package/package/dist/compositor/get-executable-path.d.ts +12 -0
- package/package/dist/compositor/get-executable-path.js +95 -0
- package/package/dist/compositor/get-explicit-env.d.ts +3 -0
- package/package/dist/compositor/get-explicit-env.js +13 -0
- package/package/dist/compositor/make-file-executable.d.ts +1 -0
- package/package/dist/compositor/make-file-executable.js +44 -0
- package/package/dist/compositor/make-nonce.d.ts +1 -0
- package/package/dist/compositor/make-nonce.js +8 -0
- package/package/dist/compositor/payloads.d.ts +73 -0
- package/package/dist/compositor/payloads.js +2 -0
- package/package/dist/compositor/serialize-command.d.ts +2 -0
- package/package/dist/compositor/serialize-command.js +14 -0
- package/package/dist/compress-assets.d.ts +7 -0
- package/package/dist/compress-assets.js +25 -0
- package/package/dist/compress-audio.d.ts +16 -0
- package/package/dist/compress-audio.js +44 -0
- package/package/dist/convert-number-of-gif-loops-to-ffmpeg.d.ts +1 -0
- package/package/dist/convert-number-of-gif-loops-to-ffmpeg.js +17 -0
- package/package/dist/convert-to-positive-frame-index.d.ts +4 -0
- package/package/dist/convert-to-positive-frame-index.js +8 -0
- package/package/dist/create-audio.d.ts +29 -0
- package/package/dist/create-audio.js +127 -0
- package/package/dist/create-ffmpeg-complex-filter.d.ts +10 -0
- package/package/dist/create-ffmpeg-complex-filter.js +24 -0
- package/package/dist/create-ffmpeg-merge-filter.d.ts +5 -0
- package/package/dist/create-ffmpeg-merge-filter.js +25 -0
- package/package/dist/create-silent-audio.d.ts +10 -0
- package/package/dist/create-silent-audio.js +28 -0
- package/package/dist/crf.d.ts +13 -0
- package/package/dist/crf.js +103 -0
- package/package/dist/cycle-browser-tabs.d.ts +10 -0
- package/package/dist/cycle-browser-tabs.js +50 -0
- package/package/dist/default-on-log.d.ts +2 -0
- package/package/dist/default-on-log.js +8 -0
- package/package/dist/delay-render-embedded-stack.d.ts +2 -0
- package/package/dist/delay-render-embedded-stack.js +17 -0
- package/package/dist/delete-directory.d.ts +1 -0
- package/package/dist/delete-directory.js +68 -0
- package/package/dist/ensure-browser.d.ts +24 -0
- package/package/dist/ensure-browser.js +58 -0
- package/package/dist/ensure-frames-in-order.d.ts +5 -0
- package/package/dist/ensure-frames-in-order.js +39 -0
- package/package/dist/ensure-output-directory.d.ts +1 -0
- package/package/dist/ensure-output-directory.js +17 -0
- package/package/dist/error-handling/handle-javascript-exception.d.ts +23 -0
- package/package/dist/error-handling/handle-javascript-exception.js +86 -0
- package/package/dist/error-handling/symbolicate-error.d.ts +3 -0
- package/package/dist/error-handling/symbolicate-error.js +26 -0
- package/package/dist/error-handling/symbolicateable-error.d.ts +18 -0
- package/package/dist/error-handling/symbolicateable-error.js +19 -0
- package/package/dist/error-handling.d.ts +1 -0
- package/package/dist/error-handling.js +5 -0
- package/package/dist/esm/client.mjs +3270 -0
- package/package/dist/esm/error-handling.mjs +363 -0
- package/package/dist/esm/index.mjs +23201 -0
- package/package/dist/esm/pure.mjs +526 -0
- package/package/dist/extract-audio.d.ts +7 -0
- package/package/dist/extract-audio.js +25 -0
- package/package/dist/ffmpeg-args.d.ts +21 -0
- package/package/dist/ffmpeg-args.js +96 -0
- package/package/dist/ffmpeg-filter-file.d.ts +13 -0
- package/package/dist/ffmpeg-filter-file.js +70 -0
- package/package/dist/ffmpeg-override.d.ts +4 -0
- package/package/dist/ffmpeg-override.js +2 -0
- package/package/dist/file-extensions.d.ts +14 -0
- package/package/dist/file-extensions.js +85 -0
- package/package/dist/filter-asset-types.d.ts +8 -0
- package/package/dist/filter-asset-types.js +44 -0
- package/package/dist/find-closest-package-json.d.ts +2 -0
- package/package/dist/find-closest-package-json.js +31 -0
- package/package/dist/format-logs.d.ts +3 -0
- package/package/dist/format-logs.js +214 -0
- package/package/dist/frame-range.d.ts +2 -0
- package/package/dist/frame-range.js +49 -0
- package/package/dist/get-browser-instance.d.ts +24 -0
- package/package/dist/get-browser-instance.js +63 -0
- package/package/dist/get-bundle-url-from-serve-url.d.ts +2 -0
- package/package/dist/get-bundle-url-from-serve-url.js +30 -0
- package/package/dist/get-codec-name.d.ts +21 -0
- package/package/dist/get-codec-name.js +87 -0
- package/package/dist/get-compositions.d.ts +34 -0
- package/package/dist/get-compositions.js +196 -0
- package/package/dist/get-concurrency.d.ts +1 -0
- package/package/dist/get-concurrency.js +27 -0
- package/package/dist/get-cpu-count.d.ts +2 -0
- package/package/dist/get-cpu-count.js +33 -0
- package/package/dist/get-duration-from-frame-range.d.ts +1 -0
- package/package/dist/get-duration-from-frame-range.js +17 -0
- package/package/dist/get-extension-from-codec.d.ts +6 -0
- package/package/dist/get-extension-from-codec.js +61 -0
- package/package/dist/get-extension-of-filename.d.ts +1 -0
- package/package/dist/get-extension-of-filename.js +15 -0
- package/package/dist/get-extra-frames-to-capture.d.ts +14 -0
- package/package/dist/get-extra-frames-to-capture.js +62 -0
- package/package/dist/get-frame-padded-index.d.ts +21 -0
- package/package/dist/get-frame-padded-index.js +43 -0
- package/package/dist/get-frame-to-render.d.ts +2 -0
- package/package/dist/get-frame-to-render.js +19 -0
- package/package/dist/get-local-browser-executable.d.ts +9 -0
- package/package/dist/get-local-browser-executable.js +36 -0
- package/package/dist/get-port.d.ts +15 -0
- package/package/dist/get-port.js +86 -0
- package/package/dist/get-prores-profile-name.d.ts +3 -0
- package/package/dist/get-prores-profile-name.js +25 -0
- package/package/dist/get-silent-parts.d.ts +10 -0
- package/package/dist/get-silent-parts.js +66 -0
- package/package/dist/get-video-metadata.d.ts +10 -0
- package/package/dist/get-video-metadata.js +25 -0
- package/package/dist/get-video-threads-flag.d.ts +2 -0
- package/package/dist/get-video-threads-flag.js +16 -0
- package/package/dist/goto-page-or-throw.d.ts +3 -0
- package/package/dist/goto-page-or-throw.js +16 -0
- package/package/dist/guess-extension-for-media.d.ts +9 -0
- package/package/dist/guess-extension-for-media.js +31 -0
- package/package/dist/image-format.d.ts +13 -0
- package/package/dist/image-format.js +37 -0
- package/package/dist/index.d.ts +1256 -0
- package/package/dist/index.js +227 -0
- package/package/dist/is-audio-codec.d.ts +2 -0
- package/package/dist/is-audio-codec.js +7 -0
- package/package/dist/is-delay-render-error-with-retry.d.ts +1 -0
- package/package/dist/is-delay-render-error-with-retry.js +28 -0
- package/package/dist/is-serve-url.d.ts +1 -0
- package/package/dist/is-serve-url.js +15 -0
- package/package/dist/jpeg-quality.d.ts +2 -0
- package/package/dist/jpeg-quality.js +22 -0
- package/package/dist/locks.d.ts +7 -0
- package/package/dist/locks.js +47 -0
- package/package/dist/log-level.d.ts +4 -0
- package/package/dist/log-level.js +15 -0
- package/package/dist/logger.d.ts +20 -0
- package/package/dist/logger.js +89 -0
- package/package/dist/make-cancel-signal.d.ts +14 -0
- package/package/dist/make-cancel-signal.js +48 -0
- package/package/dist/make-metadata-args.d.ts +2 -0
- package/package/dist/make-metadata-args.js +22 -0
- package/package/dist/make-page.d.ts +30 -0
- package/package/dist/make-page.js +70 -0
- package/package/dist/memory/from-docker-cgroup.d.ts +1 -0
- package/package/dist/memory/from-docker-cgroup.js +66 -0
- package/package/dist/memory/from-lambda-env.d.ts +1 -0
- package/package/dist/memory/from-lambda-env.js +10 -0
- package/package/dist/memory/from-proc-meminfo.d.ts +2 -0
- package/package/dist/memory/from-proc-meminfo.js +44 -0
- package/package/dist/memory/get-available-memory.d.ts +2 -0
- package/package/dist/memory/get-available-memory.js +44 -0
- package/package/dist/merge-audio-track.d.ts +19 -0
- package/package/dist/merge-audio-track.js +133 -0
- package/package/dist/mime-db.d.ts +6 -0
- package/package/dist/mime-db.js +8636 -0
- package/package/dist/mime-types.d.ts +3 -0
- package/package/dist/mime-types.js +94 -0
- package/package/dist/mux-video-and-audio.d.ts +15 -0
- package/package/dist/mux-video-and-audio.js +54 -0
- package/package/dist/next-frame-to-render.d.ts +11 -0
- package/package/dist/next-frame-to-render.js +41 -0
- package/package/dist/normalize-serve-url.d.ts +1 -0
- package/package/dist/normalize-serve-url.js +19 -0
- package/package/dist/offthread-video-server.d.ts +51 -0
- package/package/dist/offthread-video-server.js +217 -0
- package/package/dist/open-browser.d.ts +47 -0
- package/package/dist/open-browser.js +200 -0
- package/package/dist/options/api-key.d.ts +15 -0
- package/package/dist/options/api-key.js +29 -0
- package/package/dist/options/audio-bitrate.d.ts +18 -0
- package/package/dist/options/audio-bitrate.js +35 -0
- package/package/dist/options/audio-codec.d.ts +55 -0
- package/package/dist/options/audio-codec.js +188 -0
- package/package/dist/options/beep-on-finish.d.ts +15 -0
- package/package/dist/options/beep-on-finish.js +35 -0
- package/package/dist/options/binaries-directory.d.ts +15 -0
- package/package/dist/options/binaries-directory.js +35 -0
- package/package/dist/options/chrome-mode.d.ts +17 -0
- package/package/dist/options/chrome-mode.js +46 -0
- package/package/dist/options/color-space.d.ts +23 -0
- package/package/dist/options/color-space.js +49 -0
- package/package/dist/options/crf.d.ts +17 -0
- package/package/dist/options/crf.js +43 -0
- package/package/dist/options/cross-site-isolation.d.ts +15 -0
- package/package/dist/options/cross-site-isolation.js +29 -0
- package/package/dist/options/delete-after.d.ts +19 -0
- package/package/dist/options/delete-after.js +37 -0
- package/package/dist/options/disable-git-source.d.ts +15 -0
- package/package/dist/options/disable-git-source.js +28 -0
- package/package/dist/options/disallow-parallel-encoding.d.ts +15 -0
- package/package/dist/options/disallow-parallel-encoding.js +35 -0
- package/package/dist/options/enable-lambda-insights.d.ts +15 -0
- package/package/dist/options/enable-lambda-insights.js +35 -0
- package/package/dist/options/enable-multiprocess-on-linux.d.ts +15 -0
- package/package/dist/options/enable-multiprocess-on-linux.js +36 -0
- package/package/dist/options/encoding-buffer-size.d.ts +18 -0
- package/package/dist/options/encoding-buffer-size.js +39 -0
- package/package/dist/options/encoding-max-rate.d.ts +18 -0
- package/package/dist/options/encoding-max-rate.js +35 -0
- package/package/dist/options/enforce-audio.d.ts +18 -0
- package/package/dist/options/enforce-audio.js +36 -0
- package/package/dist/options/folder-expiry.d.ts +15 -0
- package/package/dist/options/folder-expiry.js +37 -0
- package/package/dist/options/for-seamless-aac-concatenation.d.ts +19 -0
- package/package/dist/options/for-seamless-aac-concatenation.js +40 -0
- package/package/dist/options/gl.d.ts +24 -0
- package/package/dist/options/gl.js +68 -0
- package/package/dist/options/hardware-acceleration.d.ts +18 -0
- package/package/dist/options/hardware-acceleration.js +56 -0
- package/package/dist/options/headless.d.ts +15 -0
- package/package/dist/options/headless.js +36 -0
- package/package/dist/options/image-sequence-pattern.d.ts +15 -0
- package/package/dist/options/image-sequence-pattern.js +30 -0
- package/package/dist/options/index.d.ts +747 -0
- package/package/dist/options/index.js +97 -0
- package/package/dist/options/jpeg-quality.d.ts +17 -0
- package/package/dist/options/jpeg-quality.js +47 -0
- package/package/dist/options/latency-hint.d.ts +18 -0
- package/package/dist/options/latency-hint.js +27 -0
- package/package/dist/options/log-level.d.ts +16 -0
- package/package/dist/options/log-level.js +32 -0
- package/package/dist/options/metadata.d.ts +18 -0
- package/package/dist/options/metadata.js +47 -0
- package/package/dist/options/mute.d.ts +15 -0
- package/package/dist/options/mute.js +37 -0
- package/package/dist/options/number-of-gif-loops.d.ts +19 -0
- package/package/dist/options/number-of-gif-loops.js +44 -0
- package/package/dist/options/offthreadvideo-cache-size.d.ts +20 -0
- package/package/dist/options/offthreadvideo-cache-size.js +60 -0
- package/package/dist/options/offthreadvideo-threads.d.ts +20 -0
- package/package/dist/options/offthreadvideo-threads.js +40 -0
- package/package/dist/options/on-browser-download.d.ts +22 -0
- package/package/dist/options/on-browser-download.js +19 -0
- package/package/dist/options/option.d.ts +20 -0
- package/package/dist/options/option.js +2 -0
- package/package/dist/options/options-map.d.ts +2040 -0
- package/package/dist/options/options-map.js +192 -0
- package/package/dist/options/overwrite.d.ts +15 -0
- package/package/dist/options/overwrite.js +42 -0
- package/package/dist/options/prefer-lossless.d.ts +18 -0
- package/package/dist/options/prefer-lossless.js +26 -0
- package/package/dist/options/public-dir.d.ts +18 -0
- package/package/dist/options/public-dir.js +37 -0
- package/package/dist/options/public-path.d.ts +18 -0
- package/package/dist/options/public-path.js +37 -0
- package/package/dist/options/repro.d.ts +15 -0
- package/package/dist/options/repro.js +36 -0
- package/package/dist/options/scale.d.ts +15 -0
- package/package/dist/options/scale.js +41 -0
- package/package/dist/options/separate-audio.d.ts +18 -0
- package/package/dist/options/separate-audio.js +28 -0
- package/package/dist/options/throw-if-site-exists.d.ts +15 -0
- package/package/dist/options/throw-if-site-exists.js +28 -0
- package/package/dist/options/timeout.d.ts +15 -0
- package/package/dist/options/timeout.js +44 -0
- package/package/dist/options/video-bitrate.d.ts +15 -0
- package/package/dist/options/video-bitrate.js +35 -0
- package/package/dist/options/video-cache-size.d.ts +19 -0
- package/package/dist/options/video-cache-size.js +39 -0
- package/package/dist/options/video-codec.d.ts +23 -0
- package/package/dist/options/video-codec.js +104 -0
- package/package/dist/options/webhook-custom-data.d.ts +10 -0
- package/package/dist/options/webhook-custom-data.js +21 -0
- package/package/dist/options/x264-preset.d.ts +25 -0
- package/package/dist/options/x264-preset.js +55 -0
- package/package/dist/overwrite.d.ts +1 -0
- package/package/dist/overwrite.js +4 -0
- package/package/dist/p-limit.d.ts +1 -0
- package/package/dist/p-limit.js +57 -0
- package/package/dist/parse-browser-error-stack.d.ts +7 -0
- package/package/dist/parse-browser-error-stack.js +87 -0
- package/package/dist/parse-ffmpeg-progress.d.ts +1 -0
- package/package/dist/parse-ffmpeg-progress.js +18 -0
- package/package/dist/path-normalize.d.ts +1 -0
- package/package/dist/path-normalize.js +132 -0
- package/package/dist/perf.d.ts +5 -0
- package/package/dist/perf.js +37 -0
- package/package/dist/pixel-format.d.ts +6 -0
- package/package/dist/pixel-format.js +37 -0
- package/package/dist/pool.d.ts +8 -0
- package/package/dist/pool.js +30 -0
- package/package/dist/port-config.d.ts +14 -0
- package/package/dist/port-config.js +79 -0
- package/package/dist/prepare-server.d.ts +32 -0
- package/package/dist/prepare-server.js +123 -0
- package/package/dist/preprocess-audio-track.d.ts +27 -0
- package/package/dist/preprocess-audio-track.js +82 -0
- package/package/dist/prespawn-ffmpeg.d.ts +49 -0
- package/package/dist/prespawn-ffmpeg.js +112 -0
- package/package/dist/prestitcher-memory-usage.d.ts +10 -0
- package/package/dist/prestitcher-memory-usage.js +26 -0
- package/package/dist/print-useful-error-message.d.ts +2 -0
- package/package/dist/print-useful-error-message.js +110 -0
- package/package/dist/prores-profile.d.ts +7 -0
- package/package/dist/prores-profile.js +23 -0
- package/package/dist/puppeteer-evaluate.d.ts +17 -0
- package/package/dist/puppeteer-evaluate.js +162 -0
- package/package/dist/puppeteer-screenshot.d.ts +12 -0
- package/package/dist/puppeteer-screenshot.js +58 -0
- package/package/dist/pure.d.ts +17 -0
- package/package/dist/pure.js +17 -0
- package/package/dist/redirect-status-codes.d.ts +1 -0
- package/package/dist/redirect-status-codes.js +6 -0
- package/package/dist/render-frame-and-retry-target-close.d.ts +54 -0
- package/package/dist/render-frame-and-retry-target-close.js +179 -0
- package/package/dist/render-frame-with-option-to-reject.d.ts +48 -0
- package/package/dist/render-frame-with-option-to-reject.js +156 -0
- package/package/dist/render-frame.d.ts +47 -0
- package/package/dist/render-frame.js +51 -0
- package/package/dist/render-frames.d.ts +97 -0
- package/package/dist/render-frames.js +413 -0
- package/package/dist/render-has-audio.d.ts +8 -0
- package/package/dist/render-has-audio.js +20 -0
- package/package/dist/render-media.d.ts +135 -0
- package/package/dist/render-media.js +621 -0
- package/package/dist/render-partitions.d.ts +7 -0
- package/package/dist/render-partitions.js +50 -0
- package/package/dist/render-still.d.ts +74 -0
- package/package/dist/render-still.js +356 -0
- package/package/dist/replace-browser.d.ts +7 -0
- package/package/dist/replace-browser.js +48 -0
- package/package/dist/repro.d.ts +25 -0
- package/package/dist/repro.js +184 -0
- package/package/dist/resolve-asset-src.d.ts +1 -0
- package/package/dist/resolve-asset-src.js +17 -0
- package/package/dist/sample-rate.d.ts +1 -0
- package/package/dist/sample-rate.js +4 -0
- package/package/dist/screenshot-task.d.ts +12 -0
- package/package/dist/screenshot-task.js +86 -0
- package/package/dist/seamless-aac-trim.d.ts +12 -0
- package/package/dist/seamless-aac-trim.js +24 -0
- package/package/dist/seek-to-frame.d.ts +18 -0
- package/package/dist/seek-to-frame.js +148 -0
- package/package/dist/select-composition.d.ts +45 -0
- package/package/dist/select-composition.js +219 -0
- package/package/dist/serialize-artifact.d.ts +7 -0
- package/package/dist/serialize-artifact.js +2 -0
- package/package/dist/serve-handler/index.d.ts +4 -0
- package/package/dist/serve-handler/index.js +208 -0
- package/package/dist/serve-handler/is-path-inside.d.ts +1 -0
- package/package/dist/serve-handler/is-path-inside.js +27 -0
- package/package/dist/serve-handler/range-parser.d.ts +13 -0
- package/package/dist/serve-handler/range-parser.js +57 -0
- package/package/dist/serve-static.d.ts +18 -0
- package/package/dist/serve-static.js +141 -0
- package/package/dist/set-props-and-env.d.ts +22 -0
- package/package/dist/set-props-and-env.js +219 -0
- package/package/dist/stitch-frames-to-video.d.ts +77 -0
- package/package/dist/stitch-frames-to-video.js +350 -0
- package/package/dist/stringify-ffmpeg-filter.d.ts +24 -0
- package/package/dist/stringify-ffmpeg-filter.js +140 -0
- package/package/dist/succeed-or-cancel.d.ts +6 -0
- package/package/dist/succeed-or-cancel.js +23 -0
- package/package/dist/symbolicate-stacktrace.d.ts +29 -0
- package/package/dist/symbolicate-stacktrace.js +155 -0
- package/package/dist/take-frame.d.ts +13 -0
- package/package/dist/take-frame.js +47 -0
- package/package/dist/test/actual-concurrency.test.d.ts +1 -0
- package/package/dist/test/artifacts.test.d.ts +1 -0
- package/package/dist/test/asset-calculation.test.d.ts +1 -0
- package/package/dist/test/asset-compression.test.d.ts +1 -0
- package/package/dist/test/avoid-ffmpeg-stackoverflow.test.d.ts +1 -0
- package/package/dist/test/browser-log-message.test.d.ts +1 -0
- package/package/dist/test/calculate-atempo.test.d.ts +1 -0
- package/package/dist/test/compositor-rust.test.d.ts +1 -0
- package/package/dist/test/crf.test.d.ts +1 -0
- package/package/dist/test/derive-codec-from-file-extension.test.d.ts +1 -0
- package/package/dist/test/dont-skip-assets.test.d.ts +1 -0
- package/package/dist/test/download-file.test.d.ts +1 -0
- package/package/dist/test/even-dimensions.test.d.ts +1 -0
- package/package/dist/test/extra-frames-to-capture.test.d.ts +1 -0
- package/package/dist/test/extract-audio.test.d.ts +1 -0
- package/package/dist/test/extract-frame-rust.test.d.ts +1 -0
- package/package/dist/test/ffmpeg-filters.test.d.ts +1 -0
- package/package/dist/test/ffmpeg-merge-filter.test.d.ts +1 -0
- package/package/dist/test/ffmpeg-volume-expression.test.d.ts +1 -0
- package/package/dist/test/file-extension.test.d.ts +1 -0
- package/package/dist/test/find-closest-package-json.test.d.ts +1 -0
- package/package/dist/test/flatten-volume-array.test.d.ts +1 -0
- package/package/dist/test/format-logs.test.d.ts +1 -0
- package/package/dist/test/frame-padded-index.test.d.ts +1 -0
- package/package/dist/test/frame.test.d.ts +1 -0
- package/package/dist/test/get-assets-for-markup.d.ts +8 -0
- package/package/dist/test/get-audio-channels.test.d.ts +1 -0
- package/package/dist/test/get-bundle-url-from-serve-url.test.d.ts +1 -0
- package/package/dist/test/get-silent-parts.test.d.ts +1 -0
- package/package/dist/test/guess-extension-for-media.test.d.ts +1 -0
- package/package/dist/test/handle-weird-file-names.test.d.ts +1 -0
- package/package/dist/test/log-level.test.d.ts +1 -0
- package/package/dist/test/mime-types.test.d.ts +1 -0
- package/package/dist/test/offthread-extract-url.test.d.ts +1 -0
- package/package/dist/test/parse-ffmpeg-progress.test.d.ts +1 -0
- package/package/dist/test/partitions.test.d.ts +1 -0
- package/package/dist/test/pixel-format.test.d.ts +1 -0
- package/package/dist/test/port-config.test.d.ts +1 -0
- package/package/dist/test/port-selection.test.d.ts +1 -0
- package/package/dist/test/prores-profile.test.d.ts +1 -0
- package/package/dist/test/render-still.test.d.ts +1 -0
- package/package/dist/test/rust-errors.test.d.ts +1 -0
- package/package/dist/test/rust-get-video-metadata.test.d.ts +1 -0
- package/package/dist/test/rust-memory-usage.test.d.ts +1 -0
- package/package/dist/test/sanitize-file-path.test.d.ts +1 -0
- package/package/dist/test/serve-url.test.d.ts +1 -0
- package/package/dist/test/symbolicate-remote-stack.test.d.ts +1 -0
- package/package/dist/test/validate-concurrency.test.d.ts +1 -0
- package/package/dist/test/validate-config-stitcher.test.d.ts +1 -0
- package/package/dist/test/validate-config.test.d.ts +1 -0
- package/package/dist/test/validate-even-dimensions-with-codec.test.d.ts +1 -0
- package/package/dist/test/validate-image-format.test.d.ts +1 -0
- package/package/dist/test/webpack-to-serve-url.test.d.ts +1 -0
- package/package/dist/test-gpu.d.ts +21 -0
- package/package/dist/test-gpu.js +45 -0
- package/package/dist/tmp-dir.d.ts +1 -0
- package/package/dist/tmp-dir.js +63 -0
- package/package/dist/to-megabytes.d.ts +1 -0
- package/package/dist/to-megabytes.js +7 -0
- package/package/dist/truthy.d.ts +3 -0
- package/package/dist/truthy.js +6 -0
- package/package/dist/types.d.ts +10 -0
- package/package/dist/types.js +2 -0
- package/package/dist/v5-required-input-props.d.ts +6 -0
- package/package/dist/v5-required-input-props.js +2 -0
- package/package/dist/validate-concurrency.d.ts +7 -0
- package/package/dist/validate-concurrency.js +38 -0
- package/package/dist/validate-even-dimensions-with-codec.d.ts +14 -0
- package/package/dist/validate-even-dimensions-with-codec.js +40 -0
- package/package/dist/validate-every-nth-frame.d.ts +1 -0
- package/package/dist/validate-every-nth-frame.js +24 -0
- package/package/dist/validate-ffmpeg-override.d.ts +2 -0
- package/package/dist/validate-ffmpeg-override.js +12 -0
- package/package/dist/validate-number-of-gif-loops.d.ts +2 -0
- package/package/dist/validate-number-of-gif-loops.js +24 -0
- package/package/dist/validate-output-filename.d.ts +9 -0
- package/package/dist/validate-output-filename.js +32 -0
- package/package/dist/validate-puppeteer-timeout.d.ts +1 -0
- package/package/dist/validate-puppeteer-timeout.js +25 -0
- package/package/dist/validate-scale.d.ts +1 -0
- package/package/dist/validate-scale.js +26 -0
- package/package/dist/validate-videobitrate.d.ts +1 -0
- package/package/dist/validate-videobitrate.js +20 -0
- package/package/dist/validate.d.ts +4 -0
- package/package/dist/validate.js +8 -0
- package/package/dist/wait-for-symbolication-error-to-be-done.d.ts +3 -0
- package/package/dist/wait-for-symbolication-error-to-be-done.js +8 -0
- package/package/dist/wrap-with-error-handling.d.ts +8 -0
- package/package/dist/wrap-with-error-handling.js +18 -0
- package/package/dist/ws/ws-types.d.ts +15 -0
- package/package/dist/ws/ws-types.js +8 -0
- package/package/ensure-browser.mjs +3337 -0
- package/package.json +105 -104
- package/LICENSE.md +0 -49
- package/bunfig.toml +0 -2
- package/dist/assets/change-tempo.d.ts +0 -34
- package/dist/assets/change-tempo.js +0 -287
- package/dist/assets/change-tonefrequency.d.ts +0 -2
- package/dist/assets/change-tonefrequency.js +0 -28
- package/dist/assets/resample-audiodata.d.ts +0 -6
- package/dist/assets/resample-audiodata.js +0 -54
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// Example is here https://ffmpeg.org/ffmpeg-filters.html#volume
|
|
3
|
+
// Allowed syntax is here: https://ffmpeg.org/ffmpeg-utils.html#Expression-Evaluation
|
|
4
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
5
|
+
exports.ffmpegVolumeExpression = void 0;
|
|
6
|
+
// If once, ffmpeg evaluates volume expression once.
|
|
7
|
+
// If frame, it evaluates it for each frame
|
|
8
|
+
const round_volume_to_avoid_stack_overflow_1 = require("./round-volume-to-avoid-stack-overflow");
|
|
9
|
+
// In FFMPEG expressions, the current time is represented by 't'
|
|
10
|
+
// the `n` for the timestamp variable is buggy
|
|
11
|
+
const FFMPEG_TIME_VARIABLE = 't';
|
|
12
|
+
const ffmpegIfOrElse = (condition, then, elseDo) => {
|
|
13
|
+
return `if(${condition},${then},${elseDo})`;
|
|
14
|
+
};
|
|
15
|
+
const ffmpegIsOneOfFrames = ({ frames, trimLeft, fps, }) => {
|
|
16
|
+
const consecutiveArrays = [];
|
|
17
|
+
for (let i = 0; i < frames.length; i++) {
|
|
18
|
+
const previousFrame = frames[i - 1];
|
|
19
|
+
const frame = frames[i];
|
|
20
|
+
if (previousFrame === undefined || frame !== previousFrame + 1) {
|
|
21
|
+
consecutiveArrays.push([]);
|
|
22
|
+
}
|
|
23
|
+
consecutiveArrays[consecutiveArrays.length - 1].push(frame);
|
|
24
|
+
}
|
|
25
|
+
return consecutiveArrays
|
|
26
|
+
.map((f) => {
|
|
27
|
+
const firstFrame = f[0];
|
|
28
|
+
const lastFrame = f[f.length - 1];
|
|
29
|
+
const before = (firstFrame - 0.5) / fps;
|
|
30
|
+
const after = (lastFrame + 0.5) / fps;
|
|
31
|
+
return `between(${FFMPEG_TIME_VARIABLE},${(before + trimLeft).toFixed(4)},${(after + trimLeft).toFixed(4)})`;
|
|
32
|
+
})
|
|
33
|
+
.join('+');
|
|
34
|
+
};
|
|
35
|
+
const ffmpegBuildVolumeExpression = ({ arr, delay, fps, }) => {
|
|
36
|
+
if (arr.length === 0) {
|
|
37
|
+
throw new Error('Volume array expression should never have length 0');
|
|
38
|
+
}
|
|
39
|
+
if (arr.length === 1) {
|
|
40
|
+
return String(arr[0][0]);
|
|
41
|
+
}
|
|
42
|
+
const [first, ...rest] = arr;
|
|
43
|
+
const [volume, frames] = first;
|
|
44
|
+
return ffmpegIfOrElse(ffmpegIsOneOfFrames({ frames, trimLeft: delay, fps }), String(volume), ffmpegBuildVolumeExpression({ arr: rest, delay, fps }));
|
|
45
|
+
};
|
|
46
|
+
const ffmpegVolumeExpression = ({ volume, fps, trimLeft, }) => {
|
|
47
|
+
// If it's a static volume, we return it and tell
|
|
48
|
+
// FFMPEG it only has to evaluate it once
|
|
49
|
+
if (typeof volume === 'number') {
|
|
50
|
+
return {
|
|
51
|
+
eval: 'once',
|
|
52
|
+
value: String(volume),
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
if ([...new Set(volume)].length === 1) {
|
|
56
|
+
return (0, exports.ffmpegVolumeExpression)({
|
|
57
|
+
volume: volume[0],
|
|
58
|
+
fps,
|
|
59
|
+
trimLeft,
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
// A 1 sec video with frames 0-29 would mean that
|
|
63
|
+
// frame 29 corresponds to timestamp 0.966666...
|
|
64
|
+
// but the audio is actually 1 sec long. For that reason we pad the last
|
|
65
|
+
// timestamp.
|
|
66
|
+
const paddedVolume = [...volume, volume[volume.length - 1]];
|
|
67
|
+
// Otherwise, we construct an FFMPEG expression. First step:
|
|
68
|
+
// Make a map of all possible volumes
|
|
69
|
+
// {possibleVolume1} => [frame1, frame2]
|
|
70
|
+
// {possibleVolume2} => [frame3, frame4]
|
|
71
|
+
const volumeMap = {};
|
|
72
|
+
paddedVolume.forEach((baseVolume, frame) => {
|
|
73
|
+
// Adjust volume based on how many other tracks have not yet finished
|
|
74
|
+
const actualVolume = (0, round_volume_to_avoid_stack_overflow_1.roundVolumeToAvoidStackOverflow)(baseVolume);
|
|
75
|
+
if (!volumeMap[actualVolume]) {
|
|
76
|
+
volumeMap[actualVolume] = [];
|
|
77
|
+
}
|
|
78
|
+
volumeMap[actualVolume].push(frame);
|
|
79
|
+
});
|
|
80
|
+
// Sort the map so that the most common volume is last
|
|
81
|
+
// this is going to be the else statement so the expression is short
|
|
82
|
+
const volumeArray = Object.keys(volumeMap)
|
|
83
|
+
.map((key) => [Number(key), volumeMap[key]])
|
|
84
|
+
.sort((a, b) => a[1].length - b[1].length);
|
|
85
|
+
// Construct and tell FFMPEG it has to evaluate expression on each frame
|
|
86
|
+
const expression = ffmpegBuildVolumeExpression({
|
|
87
|
+
arr: volumeArray,
|
|
88
|
+
delay: trimLeft,
|
|
89
|
+
fps,
|
|
90
|
+
});
|
|
91
|
+
return {
|
|
92
|
+
eval: 'frame',
|
|
93
|
+
value: `'${expression}'`,
|
|
94
|
+
};
|
|
95
|
+
};
|
|
96
|
+
exports.ffmpegVolumeExpression = ffmpegVolumeExpression;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// An input is an array with volume levels for each frame, like
|
|
3
|
+
// [1, 1, 1, 1, 1, ...].
|
|
4
|
+
// If all elements are the same, we flatten it to `1`, otherwise we leave it as an array.
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.convertAssetToFlattenedVolume = exports.flattenVolumeArray = void 0;
|
|
7
|
+
const flattenVolumeArray = (volume) => {
|
|
8
|
+
if (typeof volume === 'number') {
|
|
9
|
+
return volume;
|
|
10
|
+
}
|
|
11
|
+
if (volume.length === 0) {
|
|
12
|
+
throw new TypeError('Volume array must have at least 1 number');
|
|
13
|
+
}
|
|
14
|
+
if (new Set(volume).size === 1) {
|
|
15
|
+
return volume[0];
|
|
16
|
+
}
|
|
17
|
+
return volume;
|
|
18
|
+
};
|
|
19
|
+
exports.flattenVolumeArray = flattenVolumeArray;
|
|
20
|
+
const convertAssetToFlattenedVolume = (asset) => {
|
|
21
|
+
return {
|
|
22
|
+
...asset,
|
|
23
|
+
volume: (0, exports.flattenVolumeArray)(asset.volume),
|
|
24
|
+
};
|
|
25
|
+
};
|
|
26
|
+
exports.convertAssetToFlattenedVolume = convertAssetToFlattenedVolume;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { LogLevel } from '../log-level';
|
|
2
|
+
import type { CancelSignal } from '../make-cancel-signal';
|
|
3
|
+
import type { AudioChannelsAndDurationResultCache, DownloadMap } from './download-map';
|
|
4
|
+
export declare const getAudioChannelsAndDurationWithoutCache: ({ src, indent, logLevel, binariesDirectory, cancelSignal, audioStreamIndex, }: {
|
|
5
|
+
src: string;
|
|
6
|
+
indent: boolean;
|
|
7
|
+
logLevel: LogLevel;
|
|
8
|
+
binariesDirectory: string | null;
|
|
9
|
+
cancelSignal: CancelSignal | undefined;
|
|
10
|
+
audioStreamIndex: number | undefined;
|
|
11
|
+
}) => Promise<AudioChannelsAndDurationResultCache>;
|
|
12
|
+
export declare const getAudioChannelsAndDuration: ({ downloadMap, src, indent, logLevel, binariesDirectory, cancelSignal, audioStreamIndex, }: {
|
|
13
|
+
downloadMap: DownloadMap;
|
|
14
|
+
src: string;
|
|
15
|
+
indent: boolean;
|
|
16
|
+
logLevel: LogLevel;
|
|
17
|
+
binariesDirectory: string | null;
|
|
18
|
+
cancelSignal: CancelSignal | undefined;
|
|
19
|
+
audioStreamIndex: number | undefined;
|
|
20
|
+
}) => Promise<AudioChannelsAndDurationResultCache>;
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getAudioChannelsAndDuration = exports.getAudioChannelsAndDurationWithoutCache = void 0;
|
|
4
|
+
const call_ffmpeg_1 = require("../call-ffmpeg");
|
|
5
|
+
const p_limit_1 = require("../p-limit");
|
|
6
|
+
const limit = (0, p_limit_1.pLimit)(1);
|
|
7
|
+
const getAudioChannelsAndDurationWithoutCache = async ({ src, indent, logLevel, binariesDirectory, cancelSignal, audioStreamIndex, }) => {
|
|
8
|
+
const args = [
|
|
9
|
+
['-v', 'error'],
|
|
10
|
+
['-select_streams', audioStreamIndex ? `a:${audioStreamIndex}` : 'a:0'],
|
|
11
|
+
[
|
|
12
|
+
'-show_entries',
|
|
13
|
+
'stream=channels:stream=start_time:format=duration:format=format_name',
|
|
14
|
+
],
|
|
15
|
+
['-of', 'default=nw=1'],
|
|
16
|
+
[src],
|
|
17
|
+
]
|
|
18
|
+
.reduce((acc, val) => acc.concat(val), [])
|
|
19
|
+
.filter(Boolean);
|
|
20
|
+
try {
|
|
21
|
+
const task = await (0, call_ffmpeg_1.callFf)({
|
|
22
|
+
bin: 'ffprobe',
|
|
23
|
+
args,
|
|
24
|
+
indent,
|
|
25
|
+
logLevel,
|
|
26
|
+
binariesDirectory,
|
|
27
|
+
cancelSignal,
|
|
28
|
+
});
|
|
29
|
+
const channels = task.stdout.match(/channels=([0-9]+)/);
|
|
30
|
+
const duration = task.stdout.match(/duration=([0-9.]+)/);
|
|
31
|
+
const startTime = task.stdout.match(/start_time=([0-9.]+)/);
|
|
32
|
+
const container = task.stdout.match(/format_name=([a-zA-Z0-9.]+)/);
|
|
33
|
+
const isMP3 = container ? container[1] === 'mp3' : false;
|
|
34
|
+
const result = {
|
|
35
|
+
channels: channels ? parseInt(channels[1], 10) : 0,
|
|
36
|
+
duration: duration ? parseFloat(duration[1]) : null,
|
|
37
|
+
// We ignore the start time for MP3 because that is an inherent encoder thing
|
|
38
|
+
// not in the sense that we want
|
|
39
|
+
startTime: startTime ? (isMP3 ? 0 : parseFloat(startTime[1])) : null,
|
|
40
|
+
};
|
|
41
|
+
return result;
|
|
42
|
+
}
|
|
43
|
+
catch (err) {
|
|
44
|
+
if (err.message.includes('This file cannot be read by `ffprobe`. Is it a valid multimedia file?')) {
|
|
45
|
+
throw new Error('This file cannot be read by `ffprobe`. Is it a valid multimedia file?');
|
|
46
|
+
}
|
|
47
|
+
throw err;
|
|
48
|
+
}
|
|
49
|
+
};
|
|
50
|
+
exports.getAudioChannelsAndDurationWithoutCache = getAudioChannelsAndDurationWithoutCache;
|
|
51
|
+
async function getAudioChannelsAndDurationUnlimited({ downloadMap, src, indent, logLevel, binariesDirectory, cancelSignal, audioStreamIndex, }) {
|
|
52
|
+
const cacheKey = audioStreamIndex ? `${src}-${audioStreamIndex}` : src;
|
|
53
|
+
if (downloadMap.durationOfAssetCache[cacheKey]) {
|
|
54
|
+
return downloadMap.durationOfAssetCache[cacheKey];
|
|
55
|
+
}
|
|
56
|
+
const result = await (0, exports.getAudioChannelsAndDurationWithoutCache)({
|
|
57
|
+
src,
|
|
58
|
+
indent,
|
|
59
|
+
logLevel,
|
|
60
|
+
binariesDirectory,
|
|
61
|
+
cancelSignal,
|
|
62
|
+
audioStreamIndex,
|
|
63
|
+
});
|
|
64
|
+
downloadMap.durationOfAssetCache[cacheKey] = result;
|
|
65
|
+
return result;
|
|
66
|
+
}
|
|
67
|
+
const getAudioChannelsAndDuration = ({ downloadMap, src, indent, logLevel, binariesDirectory, cancelSignal, audioStreamIndex, }) => {
|
|
68
|
+
return limit(() => getAudioChannelsAndDurationUnlimited({
|
|
69
|
+
downloadMap,
|
|
70
|
+
src,
|
|
71
|
+
indent,
|
|
72
|
+
logLevel,
|
|
73
|
+
binariesDirectory,
|
|
74
|
+
cancelSignal,
|
|
75
|
+
audioStreamIndex,
|
|
76
|
+
}));
|
|
77
|
+
};
|
|
78
|
+
exports.getAudioChannelsAndDuration = getAudioChannelsAndDuration;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { InlineAudioAsset } from 'remotion/no-react';
|
|
2
|
+
import type { LogLevel } from '../log-level';
|
|
3
|
+
import type { CancelSignal } from '../make-cancel-signal';
|
|
4
|
+
export declare const makeInlineAudioMixing: (dir: string) => {
|
|
5
|
+
cleanup: () => void;
|
|
6
|
+
addAsset: ({ asset, fps, totalNumberOfFrames, firstFrame, trimLeftOffset, trimRightOffset, }: {
|
|
7
|
+
asset: InlineAudioAsset;
|
|
8
|
+
fps: number;
|
|
9
|
+
totalNumberOfFrames: number;
|
|
10
|
+
firstFrame: number;
|
|
11
|
+
trimLeftOffset: number;
|
|
12
|
+
trimRightOffset: number;
|
|
13
|
+
}) => void;
|
|
14
|
+
getListOfAssets: () => string[];
|
|
15
|
+
finish: ({ binariesDirectory, indent, logLevel, cancelSignal, }: {
|
|
16
|
+
indent: boolean;
|
|
17
|
+
logLevel: LogLevel;
|
|
18
|
+
binariesDirectory: string | null;
|
|
19
|
+
cancelSignal: CancelSignal | undefined;
|
|
20
|
+
}) => Promise<void>;
|
|
21
|
+
};
|
|
22
|
+
export type InlineAudioMixing = ReturnType<typeof makeInlineAudioMixing>;
|
|
@@ -0,0 +1,189 @@
|
|
|
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 () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
|
+
};
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
exports.makeInlineAudioMixing = void 0;
|
|
40
|
+
const node_fs_1 = __importStar(require("node:fs"));
|
|
41
|
+
const node_path_1 = __importDefault(require("node:path"));
|
|
42
|
+
const delete_directory_1 = require("../delete-directory");
|
|
43
|
+
const sample_rate_1 = require("../sample-rate");
|
|
44
|
+
const apply_tone_frequency_1 = require("./apply-tone-frequency");
|
|
45
|
+
const download_map_1 = require("./download-map");
|
|
46
|
+
const numberTo32BiIntLittleEndian = (num) => {
|
|
47
|
+
return new Uint8Array([
|
|
48
|
+
num & 0xff,
|
|
49
|
+
(num >> 8) & 0xff,
|
|
50
|
+
(num >> 16) & 0xff,
|
|
51
|
+
(num >> 24) & 0xff,
|
|
52
|
+
]);
|
|
53
|
+
};
|
|
54
|
+
const numberTo16BitLittleEndian = (num) => {
|
|
55
|
+
return new Uint8Array([num & 0xff, (num >> 8) & 0xff]);
|
|
56
|
+
};
|
|
57
|
+
const BIT_DEPTH = 16;
|
|
58
|
+
const BYTES_PER_SAMPLE = BIT_DEPTH / 8;
|
|
59
|
+
const NUMBER_OF_CHANNELS = 2;
|
|
60
|
+
const makeInlineAudioMixing = (dir) => {
|
|
61
|
+
const folderToAdd = (0, download_map_1.makeAndReturn)(dir, 'remotion-inline-audio-mixing');
|
|
62
|
+
// asset id -> file descriptor
|
|
63
|
+
const openFiles = {};
|
|
64
|
+
const writtenHeaders = {};
|
|
65
|
+
const toneFrequencies = {};
|
|
66
|
+
const cleanup = () => {
|
|
67
|
+
for (const fd of Object.values(openFiles)) {
|
|
68
|
+
try {
|
|
69
|
+
node_fs_1.default.closeSync(fd);
|
|
70
|
+
}
|
|
71
|
+
catch (_a) { }
|
|
72
|
+
}
|
|
73
|
+
(0, delete_directory_1.deleteDirectory)(folderToAdd);
|
|
74
|
+
};
|
|
75
|
+
const getListOfAssets = () => {
|
|
76
|
+
return Object.keys(openFiles);
|
|
77
|
+
};
|
|
78
|
+
const getFilePath = (asset) => {
|
|
79
|
+
return node_path_1.default.join(folderToAdd, `${asset.id}.wav`);
|
|
80
|
+
};
|
|
81
|
+
const ensureAsset = ({ asset, fps, totalNumberOfFrames, trimLeftOffset, trimRightOffset, }) => {
|
|
82
|
+
const filePath = getFilePath(asset);
|
|
83
|
+
if (!openFiles[filePath]) {
|
|
84
|
+
openFiles[filePath] = node_fs_1.default.openSync(filePath, 'w');
|
|
85
|
+
}
|
|
86
|
+
if (writtenHeaders[filePath]) {
|
|
87
|
+
return;
|
|
88
|
+
}
|
|
89
|
+
writtenHeaders[filePath] = true;
|
|
90
|
+
const expectedDataSize = Math.round((totalNumberOfFrames / fps - trimLeftOffset + trimRightOffset) *
|
|
91
|
+
NUMBER_OF_CHANNELS *
|
|
92
|
+
sample_rate_1.DEFAULT_SAMPLE_RATE *
|
|
93
|
+
BYTES_PER_SAMPLE);
|
|
94
|
+
const expectedSize = 40 + expectedDataSize;
|
|
95
|
+
const fd = openFiles[filePath];
|
|
96
|
+
(0, node_fs_1.writeSync)(fd, new Uint8Array([0x52, 0x49, 0x46, 0x46]), 0, 4, 0); // "RIFF"
|
|
97
|
+
(0, node_fs_1.writeSync)(fd, new Uint8Array(numberTo32BiIntLittleEndian(expectedSize)), 0, 4, 4); // Remaining size
|
|
98
|
+
(0, node_fs_1.writeSync)(fd, new Uint8Array([0x57, 0x41, 0x56, 0x45]), 0, 4, 8); // "WAVE"
|
|
99
|
+
(0, node_fs_1.writeSync)(fd, new Uint8Array([0x66, 0x6d, 0x74, 0x20]), 0, 4, 12); // "fmt "
|
|
100
|
+
(0, node_fs_1.writeSync)(fd, new Uint8Array([BIT_DEPTH, 0x00, 0x00, 0x00]), 0, 4, 16); // fmt chunk size = 16
|
|
101
|
+
(0, node_fs_1.writeSync)(fd, new Uint8Array([0x01, 0x00]), 0, 2, 20); // Audio format (PCM) = 1, set 3 if float32 would be true
|
|
102
|
+
(0, node_fs_1.writeSync)(fd, new Uint8Array([NUMBER_OF_CHANNELS, 0x00]), 0, 2, 22); // Number of channels
|
|
103
|
+
(0, node_fs_1.writeSync)(fd, new Uint8Array(numberTo32BiIntLittleEndian(sample_rate_1.DEFAULT_SAMPLE_RATE)), 0, 4, 24); // Sample rate
|
|
104
|
+
(0, node_fs_1.writeSync)(fd, new Uint8Array(numberTo32BiIntLittleEndian(sample_rate_1.DEFAULT_SAMPLE_RATE * NUMBER_OF_CHANNELS * BYTES_PER_SAMPLE)), 0, 4, 28); // Byte rate
|
|
105
|
+
(0, node_fs_1.writeSync)(fd, new Uint8Array(numberTo16BitLittleEndian(NUMBER_OF_CHANNELS * BYTES_PER_SAMPLE)), 0, 2, 32); // Block align
|
|
106
|
+
(0, node_fs_1.writeSync)(fd, numberTo16BitLittleEndian(BIT_DEPTH), 0, 2, 34); // Bits per sample
|
|
107
|
+
(0, node_fs_1.writeSync)(fd, new Uint8Array([0x64, 0x61, 0x74, 0x61]), 0, 4, 36); // "data"
|
|
108
|
+
(0, node_fs_1.writeSync)(fd, new Uint8Array(numberTo32BiIntLittleEndian(expectedDataSize)), 0, 4, 40); // Remaining size
|
|
109
|
+
};
|
|
110
|
+
const finish = async ({ binariesDirectory, indent, logLevel, cancelSignal, }) => {
|
|
111
|
+
for (const fd of Object.keys(openFiles)) {
|
|
112
|
+
const frequency = toneFrequencies[fd];
|
|
113
|
+
if (frequency !== 1) {
|
|
114
|
+
const tmpFile = fd.replace(/.wav$/, '-tmp.wav');
|
|
115
|
+
await (0, apply_tone_frequency_1.applyToneFrequencyUsingFfmpeg)({
|
|
116
|
+
input: fd,
|
|
117
|
+
output: tmpFile,
|
|
118
|
+
toneFrequency: frequency,
|
|
119
|
+
indent,
|
|
120
|
+
logLevel,
|
|
121
|
+
binariesDirectory,
|
|
122
|
+
cancelSignal,
|
|
123
|
+
});
|
|
124
|
+
node_fs_1.default.renameSync(tmpFile, fd);
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
};
|
|
128
|
+
const addAsset = ({ asset, fps, totalNumberOfFrames, firstFrame, trimLeftOffset, trimRightOffset, }) => {
|
|
129
|
+
ensureAsset({
|
|
130
|
+
asset,
|
|
131
|
+
fps,
|
|
132
|
+
totalNumberOfFrames,
|
|
133
|
+
trimLeftOffset,
|
|
134
|
+
trimRightOffset,
|
|
135
|
+
});
|
|
136
|
+
const filePath = getFilePath(asset);
|
|
137
|
+
if (toneFrequencies[filePath] !== undefined &&
|
|
138
|
+
toneFrequencies[filePath] !== asset.toneFrequency) {
|
|
139
|
+
throw new Error(`toneFrequency must be the same across the entire audio, got ${asset.toneFrequency}, but before it was ${toneFrequencies[filePath]}`);
|
|
140
|
+
}
|
|
141
|
+
const fileDescriptor = openFiles[filePath];
|
|
142
|
+
toneFrequencies[filePath] = asset.toneFrequency;
|
|
143
|
+
let arr = new Int16Array(asset.audio);
|
|
144
|
+
const isFirst = asset.frame === firstFrame;
|
|
145
|
+
const isLast = asset.frame === totalNumberOfFrames + firstFrame - 1;
|
|
146
|
+
const samplesToShaveFromStart = trimLeftOffset * sample_rate_1.DEFAULT_SAMPLE_RATE;
|
|
147
|
+
const samplesToShaveFromEnd = trimRightOffset * sample_rate_1.DEFAULT_SAMPLE_RATE;
|
|
148
|
+
if (Math.abs(Math.round(samplesToShaveFromEnd) - samplesToShaveFromEnd) >
|
|
149
|
+
0.0000001) {
|
|
150
|
+
throw new Error(`samplesToShaveFromEnd should be approximately an integer, is${samplesToShaveFromEnd}`);
|
|
151
|
+
}
|
|
152
|
+
if (Math.abs(Math.round(samplesToShaveFromStart) - samplesToShaveFromStart) >
|
|
153
|
+
0.0000001) {
|
|
154
|
+
throw new Error(`samplesToShaveFromStart should be approximately an integer, is ${samplesToShaveFromStart}`);
|
|
155
|
+
}
|
|
156
|
+
if (isFirst) {
|
|
157
|
+
arr = arr.slice(Math.round(samplesToShaveFromStart) * NUMBER_OF_CHANNELS);
|
|
158
|
+
}
|
|
159
|
+
if (isLast) {
|
|
160
|
+
arr = arr.slice(0, arr.length + Math.round(samplesToShaveFromEnd) * NUMBER_OF_CHANNELS);
|
|
161
|
+
}
|
|
162
|
+
const positionInSeconds = (asset.frame - firstFrame) / fps - (isFirst ? 0 : trimLeftOffset);
|
|
163
|
+
// Always rounding down to ensure there are no gaps when the samples don't align
|
|
164
|
+
// In @remotion/media, we also round down the sample start timestamp and round up the end timestamp
|
|
165
|
+
// This might lead to overlapping, hopefully aligning perfectly!
|
|
166
|
+
// Test case: https://github.com/remotion-dev/remotion/issues/5758
|
|
167
|
+
const position = Math.floor(positionInSeconds * sample_rate_1.DEFAULT_SAMPLE_RATE) *
|
|
168
|
+
NUMBER_OF_CHANNELS *
|
|
169
|
+
BYTES_PER_SAMPLE;
|
|
170
|
+
(0, node_fs_1.writeSync)(
|
|
171
|
+
// fs
|
|
172
|
+
fileDescriptor,
|
|
173
|
+
// data
|
|
174
|
+
arr,
|
|
175
|
+
// offset of data
|
|
176
|
+
0,
|
|
177
|
+
// length
|
|
178
|
+
arr.byteLength,
|
|
179
|
+
// position
|
|
180
|
+
44 + position);
|
|
181
|
+
};
|
|
182
|
+
return {
|
|
183
|
+
cleanup,
|
|
184
|
+
addAsset,
|
|
185
|
+
getListOfAssets,
|
|
186
|
+
finish,
|
|
187
|
+
};
|
|
188
|
+
};
|
|
189
|
+
exports.makeInlineAudioMixing = makeInlineAudioMixing;
|
|
@@ -0,0 +1,97 @@
|
|
|
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.readFile = void 0;
|
|
7
|
+
const https_1 = __importDefault(require("https"));
|
|
8
|
+
const node_http_1 = __importDefault(require("node:http"));
|
|
9
|
+
const redirect_status_codes_1 = require("../redirect-status-codes");
|
|
10
|
+
const truthy_1 = require("../truthy");
|
|
11
|
+
const getClient = (url) => {
|
|
12
|
+
if (url.startsWith('https://')) {
|
|
13
|
+
return https_1.default.get;
|
|
14
|
+
}
|
|
15
|
+
if (url.startsWith('http://')) {
|
|
16
|
+
return node_http_1.default.get;
|
|
17
|
+
}
|
|
18
|
+
throw new Error(`Can only download URLs starting with http:// or https://, got "${url}"`);
|
|
19
|
+
};
|
|
20
|
+
const readFileWithoutRedirect = (url) => {
|
|
21
|
+
return new Promise((resolve, reject) => {
|
|
22
|
+
const client = getClient(url);
|
|
23
|
+
const req = client(url,
|
|
24
|
+
// Bun 1.1.16 does not support the `headers` option
|
|
25
|
+
typeof Bun === 'undefined'
|
|
26
|
+
? {
|
|
27
|
+
headers: {
|
|
28
|
+
'user-agent': 'Mozilla/5.0 (@remotion/renderer - https://remotion.dev)',
|
|
29
|
+
},
|
|
30
|
+
}
|
|
31
|
+
: {}, (res) => {
|
|
32
|
+
resolve({ request: req, response: res });
|
|
33
|
+
});
|
|
34
|
+
req.on('error', (err) => {
|
|
35
|
+
req.destroy();
|
|
36
|
+
return reject(err);
|
|
37
|
+
});
|
|
38
|
+
});
|
|
39
|
+
};
|
|
40
|
+
const readFile = async (url, redirectsSoFar = 0) => {
|
|
41
|
+
if (redirectsSoFar > 10) {
|
|
42
|
+
throw new Error(`Too many redirects while downloading ${url}`);
|
|
43
|
+
}
|
|
44
|
+
const { request, response } = await readFileWithoutRedirect(url);
|
|
45
|
+
if (redirect_status_codes_1.redirectStatusCodes.includes(response.statusCode)) {
|
|
46
|
+
if (!response.headers.location) {
|
|
47
|
+
throw new Error(`Received a status code ${response.statusCode} but no "Location" header while calling ${response.headers.location}`);
|
|
48
|
+
}
|
|
49
|
+
const { origin } = new URL(url);
|
|
50
|
+
const redirectUrl = new URL(response.headers.location, origin).toString();
|
|
51
|
+
request.destroy();
|
|
52
|
+
response.destroy();
|
|
53
|
+
return (0, exports.readFile)(redirectUrl, redirectsSoFar + 1);
|
|
54
|
+
}
|
|
55
|
+
if (response.statusCode >= 400) {
|
|
56
|
+
const body = await tryToObtainBody(response);
|
|
57
|
+
request.destroy();
|
|
58
|
+
response.destroy();
|
|
59
|
+
throw new Error([
|
|
60
|
+
`Received a status code of ${response.statusCode} while downloading file ${url}.`,
|
|
61
|
+
body ? `The response body was:` : null,
|
|
62
|
+
body ? `---` : null,
|
|
63
|
+
body ? body : null,
|
|
64
|
+
body ? `---` : null,
|
|
65
|
+
]
|
|
66
|
+
.filter(truthy_1.truthy)
|
|
67
|
+
.join('\n'));
|
|
68
|
+
}
|
|
69
|
+
return { request, response };
|
|
70
|
+
};
|
|
71
|
+
exports.readFile = readFile;
|
|
72
|
+
const tryToObtainBody = async (file) => {
|
|
73
|
+
const success = new Promise((resolve) => {
|
|
74
|
+
let data = '';
|
|
75
|
+
file.on('data', (chunk) => {
|
|
76
|
+
data += chunk;
|
|
77
|
+
});
|
|
78
|
+
file.on('end', () => {
|
|
79
|
+
resolve(data);
|
|
80
|
+
});
|
|
81
|
+
// OK even when getting an error, this is just a best effort
|
|
82
|
+
file.on('error', () => resolve(data));
|
|
83
|
+
});
|
|
84
|
+
let timeout = null;
|
|
85
|
+
const body = await Promise.race([
|
|
86
|
+
success,
|
|
87
|
+
new Promise((resolve) => {
|
|
88
|
+
timeout = setTimeout(() => {
|
|
89
|
+
resolve(null);
|
|
90
|
+
}, 5000);
|
|
91
|
+
}),
|
|
92
|
+
]);
|
|
93
|
+
if (timeout) {
|
|
94
|
+
clearTimeout(timeout);
|
|
95
|
+
}
|
|
96
|
+
return body;
|
|
97
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const roundVolumeToAvoidStackOverflow: (volume: number) => number;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// FFMPEG allows expressions to have a maximum depth of 100.
|
|
3
|
+
// As defined here: https://github.com/FFmpeg/FFmpeg/blob/2014b0135293c41d261757bfa1aaba51653bab8e/libavutil/eval.c#L706
|
|
4
|
+
// With one depth added by the if/else statement,
|
|
5
|
+
// this means we can have a maximum of 99 different volumes.
|
|
6
|
+
// Therefore we round the volumes (which can only be between 0 and 1)
|
|
7
|
+
// so that there are only 99 possible values.
|
|
8
|
+
// We then subtract 1 again because FFMPEG is not precise and queries out of range
|
|
9
|
+
// values, for which we have to provide a default
|
|
10
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
11
|
+
exports.roundVolumeToAvoidStackOverflow = void 0;
|
|
12
|
+
const MAX_FFMPEG_STACK_DEPTH = 98;
|
|
13
|
+
const roundVolumeToAvoidStackOverflow = (volume) => {
|
|
14
|
+
return Number((Math.round(volume * (MAX_FFMPEG_STACK_DEPTH - 1)) /
|
|
15
|
+
(MAX_FFMPEG_STACK_DEPTH - 1)).toFixed(3));
|
|
16
|
+
};
|
|
17
|
+
exports.roundVolumeToAvoidStackOverflow = roundVolumeToAvoidStackOverflow;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const sanitizeFilename: (input: string) => string;
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// Inlined from https://github.com/parshap/node-sanitize-filename/blob/master/index.js
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.sanitizeFilename = void 0;
|
|
5
|
+
const truncate_utf8_bytes_1 = require("./truncate-utf8-bytes");
|
|
6
|
+
/**
|
|
7
|
+
* Replaces characters in strings that are illegal/unsafe for filenames.
|
|
8
|
+
* Unsafe characters are either removed or replaced by a substitute set
|
|
9
|
+
* in the optional `options` object.
|
|
10
|
+
*
|
|
11
|
+
* Illegal Characters on Various Operating Systems
|
|
12
|
+
* / ? < > \ : * | "
|
|
13
|
+
* https://kb.acronis.com/content/39790
|
|
14
|
+
*
|
|
15
|
+
* Unicode Control codes
|
|
16
|
+
* C0 0x00-0x1f & C1 (0x80-0x9f)
|
|
17
|
+
* http://en.wikipedia.org/wiki/C0_and_C1_control_codes
|
|
18
|
+
*
|
|
19
|
+
* Reserved filenames on Unix-based systems (".", "..")
|
|
20
|
+
* Reserved filenames in Windows ("CON", "PRN", "AUX", "NUL", "COM1",
|
|
21
|
+
* "COM2", "COM3", "COM4", "COM5", "COM6", "COM7", "COM8", "COM9",
|
|
22
|
+
* "LPT1", "LPT2", "LPT3", "LPT4", "LPT5", "LPT6", "LPT7", "LPT8", and
|
|
23
|
+
* "LPT9") case-insesitively and with or without filename extensions.
|
|
24
|
+
*
|
|
25
|
+
* Capped at 255 characters in length.
|
|
26
|
+
* http://unix.stackexchange.com/questions/32795/what-is-the-maximum-allowed-filename-and-folder-size-with-ecryptfs
|
|
27
|
+
*
|
|
28
|
+
* @param {String} input Original filename
|
|
29
|
+
* @param {Object} options {replacement: String | Function }
|
|
30
|
+
* @return {String} Sanitized filename
|
|
31
|
+
*/
|
|
32
|
+
const illegalRe = /[/?<>\\:*|"]/g;
|
|
33
|
+
// eslint-disable-next-line no-control-regex
|
|
34
|
+
const controlRe = /[\x00-\x1f\x80-\x9f]/g;
|
|
35
|
+
const reservedRe = /^\.+$/;
|
|
36
|
+
const windowsReservedRe = /^(con|prn|aux|nul|com[0-9]|lpt[0-9])(\..*)?$/i;
|
|
37
|
+
const windowsTrailingRe = /[. ]+$/;
|
|
38
|
+
function sanitize(input, replacement) {
|
|
39
|
+
if (typeof input !== 'string') {
|
|
40
|
+
throw new Error('Input must be string');
|
|
41
|
+
}
|
|
42
|
+
const sanitized = input
|
|
43
|
+
.replace(illegalRe, replacement)
|
|
44
|
+
.replace(controlRe, replacement)
|
|
45
|
+
.replace(reservedRe, replacement)
|
|
46
|
+
.replace(windowsReservedRe, replacement)
|
|
47
|
+
.replace(windowsTrailingRe, replacement);
|
|
48
|
+
return (0, truncate_utf8_bytes_1.truncateUtf8Bytes)(sanitized, 255);
|
|
49
|
+
}
|
|
50
|
+
const sanitizeFilename = (input) => {
|
|
51
|
+
const replacement = '';
|
|
52
|
+
const output = sanitize(input, replacement);
|
|
53
|
+
if (replacement === '') {
|
|
54
|
+
return output;
|
|
55
|
+
}
|
|
56
|
+
return sanitize(output, '');
|
|
57
|
+
};
|
|
58
|
+
exports.sanitizeFilename = sanitizeFilename;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const sanitizeFilePath: (pathToSanitize: string) => string;
|
|
@@ -0,0 +1,16 @@
|
|
|
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.sanitizeFilePath = void 0;
|
|
7
|
+
const node_path_1 = __importDefault(require("node:path"));
|
|
8
|
+
const sanitize_filename_1 = require("./sanitize-filename");
|
|
9
|
+
const pathSeparators = /[/\\]/;
|
|
10
|
+
const sanitizeFilePath = (pathToSanitize) => {
|
|
11
|
+
return pathToSanitize
|
|
12
|
+
.split(pathSeparators)
|
|
13
|
+
.map((s) => (0, sanitize_filename_1.sanitizeFilename)(s))
|
|
14
|
+
.join(node_path_1.default.sep);
|
|
15
|
+
};
|
|
16
|
+
exports.sanitizeFilePath = sanitizeFilePath;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function truncateUtf8Bytes(string: string, byteLength: number): string;
|