@remotion/renderer 4.0.0-alpha.4 → 4.0.0-alpha5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE.md +8 -8
- package/README.md +9 -0
- package/client.d.ts +1 -0
- package/client.js +1 -0
- package/dist/assets/calculate-asset-positions.d.ts +0 -0
- package/dist/assets/calculate-asset-positions.js +1 -0
- package/dist/assets/calculate-atempo.d.ts +0 -0
- package/dist/assets/calculate-atempo.js +0 -0
- package/dist/assets/convert-assets-to-file-urls.d.ts +0 -0
- package/dist/assets/convert-assets-to-file-urls.js +0 -0
- package/dist/assets/download-and-map-assets-to-file.d.ts +2 -1
- package/dist/assets/download-and-map-assets-to-file.js +60 -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 +5 -26
- package/dist/assets/download-map.js +8 -9
- 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 -2
- package/dist/assets/get-audio-channels.js +5 -8
- 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 +28 -0
- package/dist/audio-codec.js +83 -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 +15 -63
- package/dist/browser/BrowserFetcher.js +145 -231
- 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 +38 -75
- 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 +2 -6
- 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 +1 -4
- package/dist/browser/LaunchOptions.js +0 -0
- package/dist/browser/Launcher.d.ts +7 -1
- package/dist/browser/Launcher.js +13 -375
- 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 -3
- package/dist/browser/PuppeteerNode.js +2 -14
- 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 +34 -90
- package/dist/browser/devtools-commands.d.ts +5 -1
- package/dist/browser/devtools-commands.js +0 -0
- package/dist/browser/devtools-types.d.ts +82 -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/is-target-closed-err.d.ts +1 -0
- package/dist/browser/is-target-closed-err.js +9 -0
- package/dist/browser/mitt/index.d.ts +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 +2 -1
- 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/call-ffmpeg.d.ts +14 -0
- package/dist/call-ffmpeg.js +37 -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 +12 -0
- package/dist/chunk.d.ts +0 -0
- package/dist/chunk.js +0 -0
- package/dist/client.d.ts +204 -0
- package/dist/client.js +49 -0
- package/dist/codec-supports-media.d.ts +2 -0
- package/dist/codec-supports-media.js +23 -1
- package/dist/codec.d.ts +0 -0
- package/dist/codec.js +0 -0
- package/dist/combine-videos.d.ts +6 -2
- package/dist/combine-videos.js +14 -14
- package/dist/compositor/compose.d.ts +15 -0
- package/dist/compositor/compose.js +67 -0
- package/dist/compositor/compositor.d.ts +12 -0
- package/dist/compositor/compositor.js +202 -0
- package/dist/compositor/get-executable-path.d.ts +1 -0
- package/dist/compositor/get-executable-path.js +66 -0
- package/dist/compositor/make-nonce.d.ts +1 -0
- package/dist/compositor/make-nonce.js +8 -0
- package/dist/compositor/payloads.d.ts +68 -0
- package/dist/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-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 +5 -1
- package/dist/create-ffmpeg-complex-filter.js +6 -4
- package/dist/create-ffmpeg-merge-filter.d.ts +5 -1
- package/dist/create-ffmpeg-merge-filter.js +21 -13
- package/dist/create-silent-audio.d.ts +1 -3
- package/dist/create-silent-audio.js +3 -6
- package/dist/crf.d.ts +5 -1
- package/dist/crf.js +41 -8
- 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 +43 -17
- 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/does-have-m2-bug.d.ts +3 -0
- package/dist/does-have-m2-bug.js +12 -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 +6 -1
- package/dist/ffmpeg-filter-file.js +36 -4
- 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 +14 -0
- package/dist/file-extensions.js +76 -0
- package/dist/find-closest-package-json.d.ts +2 -0
- package/dist/find-closest-package-json.js +31 -0
- package/dist/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 +7 -5
- package/dist/get-compositions.js +23 -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 +2 -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 +1 -1
- package/dist/get-local-browser-executable.d.ts +0 -0
- package/dist/get-local-browser-executable.js +4 -14
- 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 +3 -1
- package/dist/guess-extension-for-media.js +5 -8
- package/dist/image-format.d.ts +12 -6
- package/dist/image-format.js +19 -13
- package/dist/index.d.ts +201 -48
- package/dist/index.js +37 -36
- 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/jpeg-quality.d.ts +1 -0
- package/dist/jpeg-quality.js +21 -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 +3 -3
- package/dist/merge-audio-track.js +39 -33
- 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 +8 -7
- package/dist/offthread-video-server.js +64 -45
- package/dist/open-browser.d.ts +6 -0
- package/dist/open-browser.js +16 -18
- package/dist/options/audio-bitrate.d.ts +2 -0
- package/dist/options/audio-bitrate.js +11 -0
- package/dist/options/crf.d.ts +2 -0
- package/dist/options/crf.js +11 -0
- package/dist/options/enforce-audio.d.ts +2 -0
- package/dist/options/enforce-audio.js +11 -0
- package/dist/options/jpeg-quality.d.ts +2 -0
- package/dist/options/jpeg-quality.js +11 -0
- package/dist/options/mute.d.ts +2 -0
- package/dist/options/mute.js +11 -0
- package/dist/options/option.d.ts +8 -0
- package/dist/options/option.js +2 -0
- package/dist/options/scale.d.ts +2 -0
- package/dist/options/scale.js +11 -0
- package/dist/options/video-bitrate.d.ts +2 -0
- package/dist/options/video-bitrate.js +11 -0
- package/dist/options/video-codec.d.ts +2 -0
- package/dist/options/video-codec.js +11 -0
- package/dist/overwrite.d.ts +0 -0
- package/dist/overwrite.js +0 -0
- package/dist/p-limit.d.ts +0 -0
- package/dist/p-limit.js +0 -0
- package/dist/parse-browser-error-stack.d.ts +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 +1 -1
- package/dist/perf.js +9 -7
- 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 +5 -5
- package/dist/prepare-server.js +12 -7
- package/dist/preprocess-audio-track.d.ts +6 -4
- package/dist/preprocess-audio-track.js +7 -8
- package/dist/prespawn-ffmpeg.d.ts +9 -9
- package/dist/prespawn-ffmpeg.js +17 -17
- package/dist/prestitcher-memory-usage.d.ts +0 -4
- package/dist/prestitcher-memory-usage.js +2 -3
- package/dist/prores-profile.d.ts +5 -3
- package/dist/prores-profile.js +8 -8
- package/dist/provide-screenshot.d.ts +8 -5
- package/dist/provide-screenshot.js +5 -2
- package/dist/puppeteer-evaluate.d.ts +0 -0
- package/dist/puppeteer-evaluate.js +19 -11
- package/dist/puppeteer-screenshot.d.ts +12 -3
- package/dist/puppeteer-screenshot.js +18 -44
- 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 +19 -19
- package/dist/render-frames.js +186 -105
- package/dist/render-media.d.ts +46 -16
- package/dist/render-media.js +128 -42
- package/dist/render-still.d.ts +17 -11
- package/dist/render-still.js +79 -43
- 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 +8 -5
- package/dist/screenshot-dom-element.js +15 -4
- package/dist/screenshot-task.d.ts +11 -2
- package/dist/screenshot-task.js +43 -13
- 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 +6 -4
- 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 +3 -3
- package/dist/serve-static.js +84 -44
- 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 +15 -12
- package/dist/stitch-frames-to-video.js +120 -57
- package/dist/stringify-ffmpeg-filter.d.ts +10 -2
- package/dist/stringify-ffmpeg-filter.js +37 -34
- package/dist/symbolicate-stacktrace.d.ts +0 -0
- package/dist/symbolicate-stacktrace.js +0 -0
- package/dist/take-frame-and-compose.d.ts +19 -0
- package/dist/take-frame-and-compose.js +102 -0
- package/dist/tmp-dir.d.ts +0 -0
- package/dist/tmp-dir.js +1 -2
- 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 +2 -0
- package/dist/validate-concurrency.js +21 -10
- package/dist/validate-even-dimensions-with-codec.d.ts +0 -0
- package/dist/validate-even-dimensions-with-codec.js +0 -0
- package/dist/validate-every-nth-frame.d.ts +2 -1
- package/dist/validate-every-nth-frame.js +8 -1
- package/dist/validate-ffmpeg-override.d.ts +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 +2 -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/install-toolchain.mjs +36 -0
- package/package.json +69 -60
- 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/convert-to-pcm.d.ts +0 -6
- package/dist/convert-to-pcm.js +0 -20
- 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
package/dist/render-frames.js
CHANGED
|
@@ -6,48 +6,36 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
6
6
|
exports.renderFrames = void 0;
|
|
7
7
|
const fs_1 = __importDefault(require("fs"));
|
|
8
8
|
const path_1 = __importDefault(require("path"));
|
|
9
|
+
const perf_hooks_1 = require("perf_hooks");
|
|
9
10
|
const remotion_1 = require("remotion");
|
|
10
11
|
const download_and_map_assets_to_file_1 = require("./assets/download-and-map-assets-to-file");
|
|
11
12
|
const download_map_1 = require("./assets/download-map");
|
|
12
13
|
const browser_1 = require("./browser");
|
|
14
|
+
const is_target_closed_err_1 = require("./browser/is-target-closed-err");
|
|
13
15
|
const compress_assets_1 = require("./compress-assets");
|
|
14
16
|
const cycle_browser_tabs_1 = require("./cycle-browser-tabs");
|
|
15
17
|
const handle_javascript_exception_1 = require("./error-handling/handle-javascript-exception");
|
|
18
|
+
const find_closest_package_json_1 = require("./find-closest-package-json");
|
|
16
19
|
const get_concurrency_1 = require("./get-concurrency");
|
|
17
20
|
const get_duration_from_frame_range_1 = require("./get-duration-from-frame-range");
|
|
18
21
|
const get_frame_padded_index_1 = require("./get-frame-padded-index");
|
|
19
22
|
const get_frame_to_render_1 = require("./get-frame-to-render");
|
|
20
23
|
const image_format_1 = require("./image-format");
|
|
21
|
-
const
|
|
24
|
+
const jpeg_quality_1 = require("./jpeg-quality");
|
|
25
|
+
const make_cancel_signal_1 = require("./make-cancel-signal");
|
|
22
26
|
const open_browser_1 = require("./open-browser");
|
|
23
27
|
const perf_1 = require("./perf");
|
|
24
28
|
const pool_1 = require("./pool");
|
|
25
29
|
const prepare_server_1 = require("./prepare-server");
|
|
26
|
-
const provide_screenshot_1 = require("./provide-screenshot");
|
|
27
30
|
const puppeteer_evaluate_1 = require("./puppeteer-evaluate");
|
|
28
|
-
const
|
|
31
|
+
const replace_browser_1 = require("./replace-browser");
|
|
29
32
|
const seek_to_frame_1 = require("./seek-to-frame");
|
|
30
33
|
const set_props_and_env_1 = require("./set-props-and-env");
|
|
34
|
+
const take_frame_and_compose_1 = require("./take-frame-and-compose");
|
|
31
35
|
const truthy_1 = require("./truthy");
|
|
32
36
|
const validate_scale_1 = require("./validate-scale");
|
|
33
|
-
const
|
|
34
|
-
|
|
35
|
-
return others.composition;
|
|
36
|
-
}
|
|
37
|
-
if ('config' in others) {
|
|
38
|
-
return others.config;
|
|
39
|
-
}
|
|
40
|
-
return undefined;
|
|
41
|
-
};
|
|
42
|
-
const getPool = async (pages) => {
|
|
43
|
-
const puppeteerPages = await Promise.all(pages);
|
|
44
|
-
const pool = new pool_1.Pool(puppeteerPages);
|
|
45
|
-
return pool;
|
|
46
|
-
};
|
|
47
|
-
const innerRenderFrames = ({ onFrameUpdate, outputDir, onStart, inputProps, quality, imageFormat = image_format_1.DEFAULT_IMAGE_FORMAT, frameRange, puppeteerInstance, onError, envVariables, onBrowserLog, onFrameBuffer, onDownload, pagesArray, serveUrl, composition, timeoutInMilliseconds, scale, actualParallelism, everyNthFrame = 1, proxyPort, cancelSignal, downloadMap, }) => {
|
|
48
|
-
if (!puppeteerInstance) {
|
|
49
|
-
throw new Error('no puppeteer instance passed to innerRenderFrames - internal error');
|
|
50
|
-
}
|
|
37
|
+
const MAX_RETRIES_PER_FRAME = 1;
|
|
38
|
+
const innerRenderFrames = ({ onFrameUpdate, outputDir, onStart, inputProps, jpegQuality, quality, imageFormat = image_format_1.DEFAULT_VIDEO_IMAGE_FORMAT, frameRange, onError, envVariables, onBrowserLog, onFrameBuffer, onDownload, pagesArray, serveUrl, composition, timeoutInMilliseconds, scale = 1, actualConcurrency, everyNthFrame = 1, proxyPort, cancelSignal, downloadMap, muted, makeBrowser, browserReplacer, }) => {
|
|
51
39
|
if (outputDir) {
|
|
52
40
|
if (!fs_1.default.existsSync(outputDir)) {
|
|
53
41
|
fs_1.default.mkdirSync(outputDir, {
|
|
@@ -55,12 +43,15 @@ const innerRenderFrames = ({ onFrameUpdate, outputDir, onStart, inputProps, qual
|
|
|
55
43
|
});
|
|
56
44
|
}
|
|
57
45
|
}
|
|
46
|
+
if (quality) {
|
|
47
|
+
throw new Error(`The "quality" option has been renamed. Use "jpegQuality" instead.`);
|
|
48
|
+
}
|
|
58
49
|
const downloadPromises = [];
|
|
59
50
|
const realFrameRange = (0, get_frame_to_render_1.getRealFrameRange)(composition.durationInFrames, frameRange !== null && frameRange !== void 0 ? frameRange : null);
|
|
60
51
|
const framesToRender = (0, get_duration_from_frame_range_1.getFramesToRender)(realFrameRange, everyNthFrame);
|
|
61
52
|
const lastFrame = framesToRender[framesToRender.length - 1];
|
|
62
|
-
const
|
|
63
|
-
const page = await
|
|
53
|
+
const makePage = async () => {
|
|
54
|
+
const page = await browserReplacer.getBrowser().newPage();
|
|
64
55
|
pagesArray.push(page);
|
|
65
56
|
await page.setViewport({
|
|
66
57
|
width: composition.width,
|
|
@@ -87,21 +78,42 @@ const innerRenderFrames = ({ onFrameUpdate, outputDir, onStart, inputProps, qual
|
|
|
87
78
|
timeoutInMilliseconds,
|
|
88
79
|
proxyPort,
|
|
89
80
|
retriesRemaining: 2,
|
|
81
|
+
audioEnabled: !muted,
|
|
82
|
+
videoEnabled: imageFormat !== 'none',
|
|
90
83
|
});
|
|
91
84
|
await (0, puppeteer_evaluate_1.puppeteerEvaluateWithCatch)({
|
|
92
|
-
|
|
85
|
+
// eslint-disable-next-line max-params
|
|
86
|
+
pageFunction: (id, defaultProps, durationInFrames, fps, height, width) => {
|
|
93
87
|
window.setBundleMode({
|
|
94
88
|
type: 'composition',
|
|
95
89
|
compositionName: id,
|
|
90
|
+
compositionDefaultProps: defaultProps,
|
|
91
|
+
compositionDurationInFrames: durationInFrames,
|
|
92
|
+
compositionFps: fps,
|
|
93
|
+
compositionHeight: height,
|
|
94
|
+
compositionWidth: width,
|
|
96
95
|
});
|
|
97
96
|
},
|
|
98
|
-
args: [
|
|
97
|
+
args: [
|
|
98
|
+
composition.id,
|
|
99
|
+
composition.defaultProps,
|
|
100
|
+
composition.durationInFrames,
|
|
101
|
+
composition.fps,
|
|
102
|
+
composition.height,
|
|
103
|
+
composition.width,
|
|
104
|
+
],
|
|
99
105
|
frame: null,
|
|
100
106
|
page,
|
|
101
107
|
});
|
|
102
108
|
page.off('console', logCallback);
|
|
103
109
|
return page;
|
|
104
|
-
}
|
|
110
|
+
};
|
|
111
|
+
const getPool = async () => {
|
|
112
|
+
const pages = new Array(actualConcurrency).fill(true).map(() => makePage());
|
|
113
|
+
const puppeteerPages = await Promise.all(pages);
|
|
114
|
+
const pool = new pool_1.Pool(puppeteerPages);
|
|
115
|
+
return pool;
|
|
116
|
+
};
|
|
105
117
|
// If rendering a GIF and skipping frames, we must ensure it starts from 0
|
|
106
118
|
// and then is consecutive so FFMPEG recognizes the sequence
|
|
107
119
|
const countType = everyNthFrame === 1 ? 'actual-frames' : 'from-zero';
|
|
@@ -111,7 +123,7 @@ const innerRenderFrames = ({ onFrameUpdate, outputDir, onStart, inputProps, qual
|
|
|
111
123
|
countType,
|
|
112
124
|
});
|
|
113
125
|
let framesRendered = 0;
|
|
114
|
-
const poolPromise = getPool(
|
|
126
|
+
const poolPromise = getPool();
|
|
115
127
|
onStart({
|
|
116
128
|
frameCount: framesToRender.length,
|
|
117
129
|
});
|
|
@@ -120,14 +132,15 @@ const innerRenderFrames = ({ onFrameUpdate, outputDir, onStart, inputProps, qual
|
|
|
120
132
|
cancelSignal === null || cancelSignal === void 0 ? void 0 : cancelSignal(() => {
|
|
121
133
|
stopped = true;
|
|
122
134
|
});
|
|
123
|
-
const
|
|
135
|
+
const renderFrameWithOptionToReject = async ({ frame, index, reject, width, height, }) => {
|
|
124
136
|
const pool = await poolPromise;
|
|
125
137
|
const freePage = await pool.acquire();
|
|
126
138
|
if (stopped) {
|
|
127
|
-
|
|
139
|
+
return reject(new Error('Render was stopped'));
|
|
128
140
|
}
|
|
141
|
+
const startTime = perf_hooks_1.performance.now();
|
|
129
142
|
const errorCallbackOnFrame = (err) => {
|
|
130
|
-
|
|
143
|
+
reject(err);
|
|
131
144
|
};
|
|
132
145
|
const cleanupPageError = (0, handle_javascript_exception_1.handleJavascriptException)({
|
|
133
146
|
page: freePage,
|
|
@@ -136,52 +149,40 @@ const innerRenderFrames = ({ onFrameUpdate, outputDir, onStart, inputProps, qual
|
|
|
136
149
|
});
|
|
137
150
|
freePage.on('error', errorCallbackOnFrame);
|
|
138
151
|
await (0, seek_to_frame_1.seekToFrame)({ frame, page: freePage });
|
|
139
|
-
if (imageFormat !== 'none') {
|
|
140
|
-
|
|
141
|
-
const id = (0, perf_1.startPerfMeasure)('save');
|
|
142
|
-
const buffer = await (0, provide_screenshot_1.provideScreenshot)({
|
|
143
|
-
page: freePage,
|
|
144
|
-
imageFormat,
|
|
145
|
-
quality,
|
|
146
|
-
options: {
|
|
147
|
-
frame,
|
|
148
|
-
output: null,
|
|
149
|
-
},
|
|
150
|
-
});
|
|
151
|
-
(0, perf_1.stopPerfMeasure)(id);
|
|
152
|
-
onFrameBuffer(buffer, frame);
|
|
153
|
-
}
|
|
154
|
-
else {
|
|
155
|
-
if (!outputDir) {
|
|
156
|
-
throw new Error('Called renderFrames() without specifying either `outputDir` or `onFrameBuffer`');
|
|
157
|
-
}
|
|
158
|
-
const output = path_1.default.join(outputDir, (0, get_frame_padded_index_1.getFrameOutputFileName)({
|
|
159
|
-
frame,
|
|
160
|
-
imageFormat,
|
|
161
|
-
index,
|
|
162
|
-
countType,
|
|
163
|
-
lastFrame,
|
|
164
|
-
totalFrames: framesToRender.length,
|
|
165
|
-
}));
|
|
166
|
-
await (0, provide_screenshot_1.provideScreenshot)({
|
|
167
|
-
page: freePage,
|
|
168
|
-
imageFormat,
|
|
169
|
-
quality,
|
|
170
|
-
options: {
|
|
171
|
-
frame,
|
|
172
|
-
output,
|
|
173
|
-
},
|
|
174
|
-
});
|
|
175
|
-
}
|
|
152
|
+
if (!outputDir && !onFrameBuffer && imageFormat !== 'none') {
|
|
153
|
+
throw new Error('Called renderFrames() without specifying either `outputDir` or `onFrameBuffer`');
|
|
176
154
|
}
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
155
|
+
if (outputDir && onFrameBuffer && imageFormat !== 'none') {
|
|
156
|
+
throw new Error('Pass either `outputDir` or `onFrameBuffer` to renderFrames(), not both.');
|
|
157
|
+
}
|
|
158
|
+
const id = (0, perf_1.startPerfMeasure)('save');
|
|
159
|
+
const frameDir = outputDir !== null && outputDir !== void 0 ? outputDir : downloadMap.compositingDir;
|
|
160
|
+
const { buffer, collectedAssets } = await (0, take_frame_and_compose_1.takeFrameAndCompose)({
|
|
182
161
|
frame,
|
|
183
|
-
|
|
162
|
+
freePage,
|
|
163
|
+
height,
|
|
164
|
+
imageFormat,
|
|
165
|
+
output: path_1.default.join(frameDir, (0, get_frame_padded_index_1.getFrameOutputFileName)({
|
|
166
|
+
frame,
|
|
167
|
+
imageFormat,
|
|
168
|
+
index,
|
|
169
|
+
countType,
|
|
170
|
+
lastFrame,
|
|
171
|
+
totalFrames: framesToRender.length,
|
|
172
|
+
})),
|
|
173
|
+
jpegQuality,
|
|
174
|
+
width,
|
|
175
|
+
scale,
|
|
176
|
+
downloadMap,
|
|
177
|
+
wantsBuffer: Boolean(onFrameBuffer),
|
|
184
178
|
});
|
|
179
|
+
if (onFrameBuffer) {
|
|
180
|
+
if (!buffer) {
|
|
181
|
+
throw new Error('unexpected null buffer');
|
|
182
|
+
}
|
|
183
|
+
onFrameBuffer(buffer, frame);
|
|
184
|
+
}
|
|
185
|
+
(0, perf_1.stopPerfMeasure)(id);
|
|
185
186
|
const compressedAssets = collectedAssets.map((asset) => (0, compress_assets_1.compressAsset)(assets.filter(truthy_1.truthy).flat(1), asset));
|
|
186
187
|
assets[index] = compressedAssets;
|
|
187
188
|
compressedAssets.forEach((asset) => {
|
|
@@ -193,19 +194,76 @@ const innerRenderFrames = ({ onFrameUpdate, outputDir, onStart, inputProps, qual
|
|
|
193
194
|
onError(new Error(`Error while downloading asset: ${err.stack}`));
|
|
194
195
|
});
|
|
195
196
|
});
|
|
196
|
-
pool.release(freePage);
|
|
197
197
|
framesRendered++;
|
|
198
|
-
onFrameUpdate(framesRendered, frame);
|
|
198
|
+
onFrameUpdate(framesRendered, frame, perf_hooks_1.performance.now() - startTime);
|
|
199
199
|
cleanupPageError();
|
|
200
200
|
freePage.off('error', errorCallbackOnFrame);
|
|
201
|
-
|
|
202
|
-
}
|
|
201
|
+
pool.release(freePage);
|
|
202
|
+
};
|
|
203
|
+
const renderFrame = (frame, index) => {
|
|
204
|
+
return new Promise((resolve, reject) => {
|
|
205
|
+
renderFrameWithOptionToReject({
|
|
206
|
+
frame,
|
|
207
|
+
index,
|
|
208
|
+
reject,
|
|
209
|
+
width: composition.width,
|
|
210
|
+
height: composition.height,
|
|
211
|
+
})
|
|
212
|
+
.then(() => {
|
|
213
|
+
resolve();
|
|
214
|
+
})
|
|
215
|
+
.catch((err) => {
|
|
216
|
+
reject(err);
|
|
217
|
+
});
|
|
218
|
+
});
|
|
219
|
+
};
|
|
220
|
+
const renderFrameAndRetryTargetClose = async (frame, index, retriesLeft, attempt) => {
|
|
221
|
+
try {
|
|
222
|
+
await Promise.race([
|
|
223
|
+
renderFrame(frame, index),
|
|
224
|
+
new Promise((_, reject) => {
|
|
225
|
+
cancelSignal === null || cancelSignal === void 0 ? void 0 : cancelSignal(() => {
|
|
226
|
+
reject(new Error(make_cancel_signal_1.cancelErrorMessages.renderFrames));
|
|
227
|
+
});
|
|
228
|
+
}),
|
|
229
|
+
]);
|
|
230
|
+
}
|
|
231
|
+
catch (err) {
|
|
232
|
+
if ((0, make_cancel_signal_1.isUserCancelledRender)(err)) {
|
|
233
|
+
throw err;
|
|
234
|
+
}
|
|
235
|
+
if (!(0, is_target_closed_err_1.isTargetClosedErr)(err)) {
|
|
236
|
+
throw err;
|
|
237
|
+
}
|
|
238
|
+
if (stopped) {
|
|
239
|
+
return;
|
|
240
|
+
}
|
|
241
|
+
if (retriesLeft === 0) {
|
|
242
|
+
console.warn(`The browser crashed ${attempt} times while rendering frame ${frame}. Not retrying anymore. Learn more about this error under https://www.remotion.dev/docs/target-closed`);
|
|
243
|
+
throw err;
|
|
244
|
+
}
|
|
245
|
+
console.warn(`The browser crashed while rendering frame ${frame}, retrying ${retriesLeft} more times. Learn more about this error under https://www.remotion.dev/docs/target-closed`);
|
|
246
|
+
await browserReplacer.replaceBrowser(makeBrowser, async () => {
|
|
247
|
+
const pages = new Array(actualConcurrency)
|
|
248
|
+
.fill(true)
|
|
249
|
+
.map(() => makePage());
|
|
250
|
+
const puppeteerPages = await Promise.all(pages);
|
|
251
|
+
const pool = await poolPromise;
|
|
252
|
+
for (const newPage of puppeteerPages) {
|
|
253
|
+
pool.release(newPage);
|
|
254
|
+
}
|
|
255
|
+
});
|
|
256
|
+
await renderFrameAndRetryTargetClose(frame, index, retriesLeft - 1, attempt + 1);
|
|
257
|
+
}
|
|
258
|
+
};
|
|
259
|
+
const progress = Promise.all(framesToRender.map((frame, index) => renderFrameAndRetryTargetClose(frame, index, MAX_RETRIES_PER_FRAME, 1)));
|
|
203
260
|
const happyPath = progress.then(() => {
|
|
261
|
+
const firstFrameIndex = countType === 'from-zero' ? 0 : framesToRender[0];
|
|
204
262
|
const returnValue = {
|
|
205
263
|
assetsInfo: {
|
|
206
264
|
assets,
|
|
207
265
|
imageSequenceName: `element-%0${filePadLength}d.${imageFormat}`,
|
|
208
|
-
firstFrameIndex
|
|
266
|
+
firstFrameIndex,
|
|
209
267
|
downloadMap,
|
|
210
268
|
},
|
|
211
269
|
frameCount: framesToRender.length,
|
|
@@ -218,35 +276,49 @@ const innerRenderFrames = ({ onFrameUpdate, outputDir, onStart, inputProps, qual
|
|
|
218
276
|
})
|
|
219
277
|
.then(() => happyPath);
|
|
220
278
|
};
|
|
279
|
+
/**
|
|
280
|
+
* @description Renders a series of images using Puppeteer and computes information for mixing audio.
|
|
281
|
+
* @see [Documentation](https://www.remotion.dev/docs/renderer/render-frames)
|
|
282
|
+
*/
|
|
221
283
|
const renderFrames = (options) => {
|
|
222
|
-
var _a, _b, _c
|
|
223
|
-
const composition =
|
|
284
|
+
var _a, _b, _c;
|
|
285
|
+
const { composition, concurrency } = options;
|
|
224
286
|
if (!composition) {
|
|
225
287
|
throw new Error('No `composition` option has been specified for renderFrames()');
|
|
226
288
|
}
|
|
227
289
|
remotion_1.Internals.validateDimension(composition.height, 'height', 'in the `config` object passed to `renderFrames()`');
|
|
228
290
|
remotion_1.Internals.validateDimension(composition.width, 'width', 'in the `config` object passed to `renderFrames()`');
|
|
229
291
|
remotion_1.Internals.validateFps(composition.fps, 'in the `config` object of `renderFrames()`', false);
|
|
230
|
-
remotion_1.Internals.validateDurationInFrames(
|
|
231
|
-
|
|
232
|
-
|
|
292
|
+
remotion_1.Internals.validateDurationInFrames({
|
|
293
|
+
durationInFrames: composition.durationInFrames,
|
|
294
|
+
component: 'in the `config` object passed to `renderFrames()`',
|
|
295
|
+
allowFloats: false,
|
|
296
|
+
});
|
|
297
|
+
if (options.jpegQuality !== undefined && options.imageFormat !== 'jpeg') {
|
|
298
|
+
throw new Error("You can only pass the `jpegQuality` option if `imageFormat` is 'jpeg'.");
|
|
233
299
|
}
|
|
234
|
-
|
|
235
|
-
(0, quality_1.validateQuality)(options.quality);
|
|
300
|
+
(0, jpeg_quality_1.validateJpegQuality)(options.jpegQuality);
|
|
236
301
|
(0, validate_scale_1.validateScale)(options.scale);
|
|
237
|
-
const
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
302
|
+
const makeBrowser = () => {
|
|
303
|
+
var _a;
|
|
304
|
+
return (0, open_browser_1.openBrowser)(browser_1.DEFAULT_BROWSER, {
|
|
305
|
+
shouldDumpIo: options.dumpBrowserLogs,
|
|
306
|
+
browserExecutable: options.browserExecutable,
|
|
307
|
+
chromiumOptions: options.chromiumOptions,
|
|
308
|
+
forceDeviceScaleFactor: (_a = options.scale) !== null && _a !== void 0 ? _a : 1,
|
|
309
|
+
});
|
|
310
|
+
};
|
|
311
|
+
const browserInstance = (_a = options.puppeteerInstance) !== null && _a !== void 0 ? _a : makeBrowser();
|
|
312
|
+
const downloadMap = (_b = options.downloadMap) !== null && _b !== void 0 ? _b : (0, download_map_1.makeDownloadMap)();
|
|
313
|
+
const onDownload = (_c = options.onDownload) !== null && _c !== void 0 ? _c : (() => () => undefined);
|
|
314
|
+
const actualConcurrency = (0, get_concurrency_1.getActualConcurrency)(concurrency !== null && concurrency !== void 0 ? concurrency : null);
|
|
246
315
|
const openedPages = [];
|
|
247
316
|
return new Promise((resolve, reject) => {
|
|
248
|
-
var _a, _b
|
|
317
|
+
var _a, _b;
|
|
249
318
|
const cleanup = [];
|
|
319
|
+
if (!options.downloadMap) {
|
|
320
|
+
cleanup.push(() => (0, download_map_1.cleanDownloadMap)(downloadMap));
|
|
321
|
+
}
|
|
250
322
|
const onError = (err) => {
|
|
251
323
|
reject(err);
|
|
252
324
|
};
|
|
@@ -254,24 +326,26 @@ const renderFrames = (options) => {
|
|
|
254
326
|
new Promise((_, rej) => {
|
|
255
327
|
var _a;
|
|
256
328
|
(_a = options.cancelSignal) === null || _a === void 0 ? void 0 : _a.call(options, () => {
|
|
257
|
-
rej(new Error(
|
|
329
|
+
rej(new Error(make_cancel_signal_1.cancelErrorMessages.renderFrames));
|
|
258
330
|
});
|
|
259
331
|
}),
|
|
260
332
|
Promise.all([
|
|
261
333
|
(0, prepare_server_1.prepareServer)({
|
|
262
|
-
webpackConfigOrServeUrl:
|
|
334
|
+
webpackConfigOrServeUrl: options.serveUrl,
|
|
263
335
|
onDownload,
|
|
264
336
|
onError,
|
|
265
|
-
|
|
266
|
-
ffprobeExecutable: (_b = options.ffprobeExecutable) !== null && _b !== void 0 ? _b : null,
|
|
267
|
-
port: (_c = options.port) !== null && _c !== void 0 ? _c : null,
|
|
337
|
+
port: (_a = options.port) !== null && _a !== void 0 ? _a : null,
|
|
268
338
|
downloadMap,
|
|
339
|
+
remotionRoot: (0, find_closest_package_json_1.findRemotionRoot)(),
|
|
340
|
+
concurrency: actualConcurrency,
|
|
341
|
+
verbose: (_b = options.verbose) !== null && _b !== void 0 ? _b : false,
|
|
269
342
|
}),
|
|
270
343
|
browserInstance,
|
|
271
344
|
]).then(([{ serveUrl, closeServer, offthreadPort }, puppeteerInstance]) => {
|
|
272
|
-
const
|
|
345
|
+
const browserReplacer = (0, replace_browser_1.handleBrowserCrash)(puppeteerInstance);
|
|
346
|
+
const { stopCycling } = (0, cycle_browser_tabs_1.cycleBrowserTabs)(browserReplacer, actualConcurrency);
|
|
273
347
|
cleanup.push(stopCycling);
|
|
274
|
-
cleanup.push(closeServer);
|
|
348
|
+
cleanup.push(() => closeServer(false));
|
|
275
349
|
return innerRenderFrames({
|
|
276
350
|
...options,
|
|
277
351
|
puppeteerInstance,
|
|
@@ -279,10 +353,12 @@ const renderFrames = (options) => {
|
|
|
279
353
|
pagesArray: openedPages,
|
|
280
354
|
serveUrl,
|
|
281
355
|
composition,
|
|
282
|
-
|
|
356
|
+
actualConcurrency,
|
|
283
357
|
onDownload,
|
|
284
358
|
proxyPort: offthreadPort,
|
|
285
359
|
downloadMap,
|
|
360
|
+
makeBrowser,
|
|
361
|
+
browserReplacer,
|
|
286
362
|
});
|
|
287
363
|
}),
|
|
288
364
|
])
|
|
@@ -296,16 +372,21 @@ const renderFrames = (options) => {
|
|
|
296
372
|
// If new browser was opened, then closing the browser as a cleanup.
|
|
297
373
|
if (options.puppeteerInstance) {
|
|
298
374
|
Promise.all(openedPages.map((p) => p.close())).catch((err) => {
|
|
375
|
+
if ((0, is_target_closed_err_1.isTargetClosedErr)(err)) {
|
|
376
|
+
return;
|
|
377
|
+
}
|
|
299
378
|
console.log('Unable to close browser tab', err);
|
|
300
379
|
});
|
|
301
380
|
}
|
|
302
381
|
else {
|
|
303
382
|
Promise.resolve(browserInstance)
|
|
304
383
|
.then((puppeteerInstance) => {
|
|
305
|
-
return puppeteerInstance.close();
|
|
384
|
+
return puppeteerInstance.close(true);
|
|
306
385
|
})
|
|
307
386
|
.catch((err) => {
|
|
308
|
-
|
|
387
|
+
if (!(err === null || err === void 0 ? void 0 : err.message.includes('Target closed'))) {
|
|
388
|
+
console.log('Unable to close browser', err);
|
|
389
|
+
}
|
|
309
390
|
});
|
|
310
391
|
}
|
|
311
392
|
cleanup.forEach((c) => {
|
package/dist/render-media.d.ts
CHANGED
|
@@ -1,39 +1,47 @@
|
|
|
1
|
-
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
import type { AnySmallCompMetadata } from 'remotion';
|
|
2
3
|
import type { RenderMediaOnDownload } from './assets/download-and-map-assets-to-file';
|
|
3
4
|
import type { DownloadMap } from './assets/download-map';
|
|
5
|
+
import type { AudioCodec } from './audio-codec';
|
|
4
6
|
import type { BrowserExecutable } from './browser-executable';
|
|
5
7
|
import type { BrowserLog } from './browser-log';
|
|
6
8
|
import type { Browser as PuppeteerBrowser } from './browser/Browser';
|
|
7
9
|
import type { Codec } from './codec';
|
|
8
|
-
import type {
|
|
10
|
+
import type { FfmpegOverrideFn } from './ffmpeg-override';
|
|
9
11
|
import type { FrameRange } from './frame-range';
|
|
10
|
-
import type {
|
|
12
|
+
import type { VideoImageFormat } from './image-format';
|
|
11
13
|
import type { CancelSignal } from './make-cancel-signal';
|
|
12
14
|
import type { ChromiumOptions } from './open-browser';
|
|
13
15
|
import type { PixelFormat } from './pixel-format';
|
|
14
16
|
import type { ProResProfile } from './prores-profile';
|
|
15
17
|
import type { OnStartData } from './types';
|
|
16
18
|
export declare type StitchingState = 'encoding' | 'muxing';
|
|
19
|
+
export declare type SlowFrame = {
|
|
20
|
+
frame: number;
|
|
21
|
+
time: number;
|
|
22
|
+
};
|
|
17
23
|
export declare type RenderMediaOnProgress = (progress: {
|
|
18
24
|
renderedFrames: number;
|
|
19
25
|
encodedFrames: number;
|
|
20
26
|
encodedDoneIn: number | null;
|
|
21
27
|
renderedDoneIn: number | null;
|
|
28
|
+
progress: number;
|
|
22
29
|
stitchStage: StitchingState;
|
|
23
30
|
}) => void;
|
|
24
31
|
export declare type RenderMediaOptions = {
|
|
25
32
|
outputLocation?: string | null;
|
|
26
33
|
codec: Codec;
|
|
27
|
-
composition:
|
|
34
|
+
composition: AnySmallCompMetadata;
|
|
28
35
|
inputProps?: unknown;
|
|
29
|
-
parallelism?: number | null;
|
|
30
36
|
crf?: number | null;
|
|
31
|
-
imageFormat?:
|
|
32
|
-
ffmpegExecutable?: FfmpegExecutable;
|
|
33
|
-
ffprobeExecutable?: FfmpegExecutable;
|
|
37
|
+
imageFormat?: VideoImageFormat;
|
|
34
38
|
pixelFormat?: PixelFormat;
|
|
35
39
|
envVariables?: Record<string, string>;
|
|
36
|
-
|
|
40
|
+
/**
|
|
41
|
+
* @deprecated Renamed to `jpegQuality`
|
|
42
|
+
*/
|
|
43
|
+
quality?: never;
|
|
44
|
+
jpegQuality?: number;
|
|
37
45
|
frameRange?: FrameRange | null;
|
|
38
46
|
everyNthFrame?: number;
|
|
39
47
|
numberOfGifLoops?: number | null;
|
|
@@ -52,14 +60,36 @@ export declare type RenderMediaOptions = {
|
|
|
52
60
|
cancelSignal?: CancelSignal;
|
|
53
61
|
browserExecutable?: BrowserExecutable;
|
|
54
62
|
verbose?: boolean;
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
63
|
+
internal?: {
|
|
64
|
+
/**
|
|
65
|
+
* @deprecated Only for Remotion internal usage
|
|
66
|
+
*/
|
|
67
|
+
downloadMap?: DownloadMap;
|
|
68
|
+
/**
|
|
69
|
+
* @deprecated Only for Remotion internal usage
|
|
70
|
+
*/
|
|
71
|
+
onCtrlCExit?: (fn: () => void) => void;
|
|
72
|
+
};
|
|
73
|
+
preferLossless?: boolean;
|
|
74
|
+
muted?: boolean;
|
|
75
|
+
enforceAudioTrack?: boolean;
|
|
76
|
+
ffmpegOverride?: FfmpegOverrideFn;
|
|
77
|
+
audioBitrate?: string | null;
|
|
78
|
+
videoBitrate?: string | null;
|
|
79
|
+
disallowParallelEncoding?: boolean;
|
|
80
|
+
printLog?: (...data: unknown[]) => void;
|
|
81
|
+
audioCodec?: AudioCodec | null;
|
|
82
|
+
serveUrl: string;
|
|
83
|
+
concurrency?: number | string | null;
|
|
84
|
+
};
|
|
85
|
+
declare type RenderMediaResult = {
|
|
86
|
+
buffer: Buffer | null;
|
|
87
|
+
slowestFrames: SlowFrame[];
|
|
88
|
+
};
|
|
60
89
|
/**
|
|
61
90
|
*
|
|
62
91
|
* @description Render a video from a composition
|
|
63
|
-
* @
|
|
92
|
+
* @see [Documentation](https://www.remotion.dev/docs/renderer/render-media)
|
|
64
93
|
*/
|
|
65
|
-
export declare const renderMedia: ({
|
|
94
|
+
export declare const renderMedia: ({ proResProfile, crf, composition, inputProps, pixelFormat, codec, envVariables, frameRange, puppeteerInstance, outputLocation, onProgress, overwrite, onDownload, dumpBrowserLogs, onBrowserLog, onStart, timeoutInMilliseconds, chromiumOptions, scale, browserExecutable, port, cancelSignal, muted, enforceAudioTrack, ffmpegOverride, audioBitrate, videoBitrate, audioCodec, ...options }: RenderMediaOptions) => Promise<RenderMediaResult>;
|
|
95
|
+
export {};
|