@remotion/renderer 4.0.0-defer.6 → 4.0.0-esm.17
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE.md +8 -8
- package/README.md +47 -0
- package/dist/assets/calculate-asset-positions.d.ts +2 -2
- 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 +5 -4
- package/dist/assets/convert-assets-to-file-urls.js +2 -2
- package/dist/assets/download-and-map-assets-to-file.d.ts +16 -12
- package/dist/assets/download-and-map-assets-to-file.js +145 -65
- package/dist/assets/download-file.d.ts +13 -6
- package/dist/assets/download-file.js +64 -8
- package/dist/assets/download-map.d.ts +69 -0
- package/dist/assets/download-map.js +77 -0
- package/dist/assets/ffmpeg-volume-expression.d.ts +3 -3
- package/dist/assets/ffmpeg-volume-expression.js +6 -5
- package/dist/assets/flatten-volume-array.d.ts +1 -1
- package/dist/assets/flatten-volume-array.js +0 -0
- package/dist/assets/get-audio-channels.d.ts +3 -5
- package/dist/assets/get-audio-channels.js +15 -4
- package/dist/assets/get-video-stream-duration.d.ts +9 -0
- package/dist/assets/get-video-stream-duration.js +71 -0
- package/dist/assets/read-file.d.ts +0 -0
- package/dist/assets/read-file.js +2 -1
- 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 +2 -1
- package/dist/assets/types.js +0 -0
- package/dist/browser/Browser.d.ts +62 -0
- package/dist/browser/Browser.js +221 -0
- package/dist/browser/BrowserConnector.d.ts +19 -0
- package/dist/browser/BrowserConnector.js +17 -0
- package/dist/browser/BrowserFetcher.d.ts +90 -0
- package/dist/browser/BrowserFetcher.js +513 -0
- package/dist/browser/BrowserPage.d.ts +80 -0
- package/dist/browser/BrowserPage.js +280 -0
- package/dist/browser/BrowserRunner.d.ts +36 -0
- package/dist/browser/BrowserRunner.js +265 -0
- package/dist/browser/Connection.d.ts +42 -0
- package/dist/browser/Connection.js +242 -0
- package/dist/browser/ConsoleMessage.d.ts +31 -0
- package/dist/browser/ConsoleMessage.js +48 -0
- package/dist/browser/DOMWorld.d.ts +53 -0
- package/dist/browser/DOMWorld.js +279 -0
- package/dist/browser/Errors.d.ts +25 -0
- package/dist/browser/Errors.js +35 -0
- package/dist/browser/EvalTypes.d.ts +27 -0
- package/dist/browser/EvalTypes.js +17 -0
- package/dist/browser/EventEmitter.d.ts +23 -0
- package/dist/browser/EventEmitter.js +53 -0
- package/dist/browser/ExecutionContext.d.ts +34 -0
- package/dist/browser/ExecutionContext.js +174 -0
- package/dist/browser/FrameManager.d.ts +91 -0
- package/dist/browser/FrameManager.js +493 -0
- package/dist/browser/HTTPRequest.d.ts +28 -0
- package/dist/browser/HTTPRequest.js +37 -0
- package/dist/browser/HTTPResponse.d.ts +21 -0
- package/dist/browser/HTTPResponse.js +41 -0
- package/dist/browser/JSHandle.d.ts +35 -0
- package/dist/browser/JSHandle.js +90 -0
- package/dist/browser/LaunchOptions.d.ts +33 -0
- package/dist/browser/LaunchOptions.js +17 -0
- package/dist/browser/Launcher.d.ts +15 -0
- package/dist/browser/Launcher.js +144 -0
- package/dist/browser/LifecycleWatcher.d.ts +29 -0
- package/dist/browser/LifecycleWatcher.js +180 -0
- package/dist/browser/NetworkEventManager.d.ts +33 -0
- package/dist/browser/NetworkEventManager.js +81 -0
- package/dist/browser/NetworkManager.d.ts +34 -0
- package/dist/browser/NetworkManager.js +231 -0
- package/dist/browser/NodeWebSocketTransport.d.ts +17 -0
- package/dist/browser/NodeWebSocketTransport.js +87 -0
- package/dist/browser/Product.d.ts +16 -0
- package/dist/browser/Product.js +17 -0
- package/dist/browser/PuppeteerNode.d.ts +40 -0
- package/dist/browser/PuppeteerNode.js +74 -0
- package/dist/browser/PuppeteerViewport.d.ts +5 -0
- package/dist/{faststart/options.js → browser/PuppeteerViewport.js} +0 -0
- package/dist/{faststart/index.d.ts → browser/ScreenshotOptions.d.ts} +0 -0
- package/dist/{faststart/index.js → browser/ScreenshotOptions.js} +0 -0
- package/dist/browser/Target.d.ts +61 -0
- package/dist/browser/Target.js +146 -0
- package/dist/browser/TaskQueue.d.ts +20 -0
- package/dist/browser/TaskQueue.js +47 -0
- package/dist/browser/TimeoutSettings.d.ts +24 -0
- package/dist/browser/TimeoutSettings.js +62 -0
- package/dist/browser/assert.d.ts +1 -0
- package/dist/browser/assert.js +9 -0
- package/dist/browser/create-browser-fetcher.d.ts +17 -0
- package/dist/browser/create-browser-fetcher.js +77 -0
- package/dist/browser/devtools-commands.d.ts +270 -0
- package/dist/browser/devtools-commands.js +2 -0
- package/dist/browser/devtools-types.d.ts +1126 -0
- package/dist/browser/devtools-types.js +2 -0
- package/dist/browser/get-download-destination.d.ts +1 -0
- package/dist/browser/get-download-destination.js +38 -0
- package/dist/browser/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 +22 -0
- package/dist/browser/mitt/index.js +49 -0
- package/dist/browser/node.d.ts +2 -0
- package/dist/browser/node.js +9 -0
- package/dist/browser/revisions.d.ts +20 -0
- package/dist/browser/revisions.js +21 -0
- package/dist/browser/util.d.ts +47 -0
- package/dist/browser/util.js +169 -0
- package/dist/browser-executable.d.ts +1 -0
- package/dist/{assets/cleanup-assets.js → browser-executable.js} +0 -0
- package/dist/browser-log.d.ts +1 -1
- package/dist/browser-log.js +0 -0
- package/dist/browser.d.ts +2 -0
- package/dist/browser.js +4 -0
- package/dist/calculate-ffmpeg-filters.d.ts +1 -1
- package/dist/calculate-ffmpeg-filters.js +1 -0
- package/dist/calculate-sar-dar-pixels.d.ts +9 -0
- package/dist/calculate-sar-dar-pixels.js +19 -0
- package/dist/can-use-parallel-encoding.d.ts +1 -1
- package/dist/can-use-parallel-encoding.js +2 -2
- package/dist/check-apple-silicon.d.ts +1 -0
- package/dist/check-apple-silicon.js +55 -0
- package/dist/chunk.d.ts +0 -0
- package/dist/chunk.js +0 -0
- package/dist/client.d.ts +10 -0
- package/dist/client.js +19 -0
- package/dist/codec-supports-media.d.ts +8 -0
- package/dist/codec-supports-media.js +56 -0
- package/dist/codec.d.ts +4 -0
- package/dist/codec.js +16 -0
- package/dist/combine-videos.d.ts +9 -3
- package/dist/combine-videos.js +18 -10
- package/dist/compositor/compose.d.ts +13 -0
- package/dist/compositor/compose.js +47 -0
- package/dist/compositor/compositor.d.ts +12 -0
- package/dist/compositor/compositor.js +111 -0
- package/dist/compositor/get-executable-path.d.ts +1 -0
- package/dist/compositor/get-executable-path.js +47 -0
- package/dist/compositor/payloads.d.ts +41 -0
- package/dist/compositor/payloads.js +2 -0
- package/dist/compress-assets.d.ts +7 -0
- package/dist/compress-assets.js +25 -0
- package/dist/convert-number-of-gif-loops-to-ffmpeg.d.ts +1 -0
- package/dist/convert-number-of-gif-loops-to-ffmpeg.js +17 -0
- package/dist/convert-to-pcm.d.ts +3 -2
- package/dist/convert-to-pcm.js +3 -2
- package/dist/convert-to-positive-frame-index.d.ts +4 -0
- package/dist/convert-to-positive-frame-index.js +8 -0
- package/dist/create-ffmpeg-complex-filter.d.ts +2 -1
- package/dist/create-ffmpeg-complex-filter.js +2 -11
- package/dist/create-ffmpeg-merge-filter.d.ts +0 -0
- package/dist/create-ffmpeg-merge-filter.js +3 -3
- package/dist/create-silent-audio.d.ts +3 -2
- package/dist/create-silent-audio.js +3 -2
- package/dist/crf.d.ts +9 -0
- package/dist/crf.js +91 -0
- 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 +1 -1
- package/dist/delay-render-embedded-stack.js +0 -0
- package/dist/delete-directory.d.ts +0 -0
- package/dist/delete-directory.js +0 -0
- package/dist/determine-resize-params.d.ts +1 -0
- package/dist/determine-resize-params.js +10 -0
- package/dist/determine-vcodec-ffmepg-flags.d.ts +2 -0
- package/dist/determine-vcodec-ffmepg-flags.js +13 -0
- package/dist/determine-vcodec-ffmpeg-flags.d.ts +2 -0
- package/dist/determine-vcodec-ffmpeg-flags.js +13 -0
- package/dist/ensure-ffmpeg.d.ts +10 -0
- package/dist/ensure-ffmpeg.js +50 -0
- package/dist/ensure-frames-in-order.d.ts +1 -1
- package/dist/ensure-frames-in-order.js +3 -2
- package/dist/ensure-output-directory.d.ts +0 -0
- package/dist/ensure-output-directory.js +0 -0
- package/dist/ensure-presentation-timestamp.d.ts +15 -0
- package/dist/ensure-presentation-timestamp.js +88 -0
- package/dist/error-handling/handle-javascript-exception.d.ts +2 -2
- package/dist/error-handling/handle-javascript-exception.js +3 -4
- package/dist/error-handling/symbolicate-error.d.ts +1 -1
- package/dist/error-handling/symbolicate-error.js +0 -0
- package/dist/error-handling/symbolicateable-error.d.ts +1 -1
- package/dist/error-handling/symbolicateable-error.js +0 -0
- package/dist/extract-frame-from-video.d.ts +7 -6
- package/dist/extract-frame-from-video.js +91 -105
- package/dist/ffmpeg-executable.d.ts +1 -0
- package/dist/ffmpeg-executable.js +2 -0
- package/dist/ffmpeg-filter-file.d.ts +2 -1
- package/dist/ffmpeg-filter-file.js +4 -6
- package/dist/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/find-closest-package-json.d.ts +2 -0
- package/dist/find-closest-package-json.js +31 -0
- package/dist/frame-range.d.ts +2 -0
- package/dist/frame-range.js +49 -0
- package/dist/frame-to-ffmpeg-timestamp.d.ts +0 -0
- package/dist/frame-to-ffmpeg-timestamp.js +0 -0
- package/dist/get-audio-codec-name.d.ts +1 -1
- package/dist/get-audio-codec-name.js +2 -2
- package/dist/get-browser-instance.d.ts +4 -3
- package/dist/get-browser-instance.js +3 -3
- package/dist/get-can-extract-frames-fast.d.ts +10 -0
- package/dist/get-can-extract-frames-fast.js +67 -0
- package/dist/get-codec-name.d.ts +1 -1
- package/dist/get-codec-name.js +5 -2
- package/dist/get-compositions-from-bundle.d.ts +7 -0
- package/dist/get-compositions-from-bundle.js +55 -0
- package/dist/get-compositions-from-markup.d.ts +3 -0
- package/dist/get-compositions-from-markup.js +17 -0
- package/dist/get-compositions-on-server.d.ts +3 -0
- package/dist/get-compositions-on-server.js +18 -0
- package/dist/get-compositions.d.ts +11 -4
- package/dist/get-compositions.js +30 -11
- package/dist/get-concurrency.d.ts +1 -1
- package/dist/get-concurrency.js +8 -1
- package/dist/get-duration-from-frame-range.d.ts +1 -2
- package/dist/get-duration-from-frame-range.js +13 -9
- package/dist/get-extension-from-codec.d.ts +2 -2
- package/dist/get-extension-from-codec.js +8 -5
- package/dist/get-extension-of-filename.d.ts +1 -1
- package/dist/get-extension-of-filename.js +8 -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 +14 -0
- package/dist/get-frame-padded-index.js +34 -0
- package/dist/get-frame-to-render.d.ts +1 -1
- package/dist/get-frame-to-render.js +0 -0
- package/dist/get-local-browser-executable.d.ts +2 -1
- package/dist/get-local-browser-executable.js +8 -8
- package/dist/get-port.d.ts +4 -1
- package/dist/get-port.js +13 -22
- package/dist/get-prores-profile-name.d.ts +2 -1
- package/dist/get-prores-profile-name.js +0 -0
- package/dist/get-video-info.d.ts +8 -0
- package/dist/get-video-info.js +59 -0
- package/dist/get-video-signals.d.ts +2 -0
- package/dist/get-video-signals.js +28 -0
- package/dist/get-video-threads-flag.d.ts +1 -0
- package/dist/get-video-threads-flag.js +18 -0
- package/dist/guess-extension-for-media.d.ts +5 -0
- package/dist/guess-extension-for-media.js +28 -0
- package/dist/image-format.d.ts +6 -1
- package/dist/image-format.js +28 -1
- package/dist/index.d.ts +117 -34
- package/dist/index.js +101 -15
- package/dist/is-audio-codec.d.ts +2 -0
- package/dist/is-audio-codec.js +7 -0
- package/dist/is-beyond-last-frame.d.ts +3 -2
- package/dist/is-beyond-last-frame.js +5 -5
- package/dist/is-serve-url.d.ts +0 -0
- package/dist/is-serve-url.js +0 -0
- package/dist/last-frame-from-video-cache.d.ts +9 -4
- package/dist/last-frame-from-video-cache.js +24 -21
- package/dist/legacy-webpack-config.d.ts +0 -0
- package/dist/legacy-webpack-config.js +0 -0
- package/dist/lock-port-selection.d.ts +2 -0
- package/dist/lock-port-selection.js +11 -0
- package/dist/locks.d.ts +7 -0
- package/dist/locks.js +44 -0
- package/dist/log-level.d.ts +4 -0
- package/dist/log-level.js +15 -0
- package/dist/make-cancel-signal.d.ts +7 -0
- package/dist/make-cancel-signal.js +20 -1
- package/dist/make-comp-manager-context.d.ts +2 -0
- package/dist/make-comp-manager-context.js +45 -0
- package/dist/make-timeline-context-value.d.ts +2 -0
- package/dist/make-timeline-context-value.js +20 -0
- package/dist/merge-audio-track.d.ts +4 -1
- package/dist/merge-audio-track.js +18 -7
- package/dist/mime-db.d.ts +6 -0
- package/dist/mime-db.js +8636 -0
- package/dist/mime-types.d.ts +3 -0
- package/dist/mime-types.js +94 -0
- package/dist/normalize-serve-url.d.ts +0 -0
- package/dist/normalize-serve-url.js +0 -0
- package/dist/offthread-video-server.d.ts +9 -5
- package/dist/offthread-video-server.js +30 -10
- package/dist/open-browser.d.ts +5 -3
- package/dist/open-browser.js +18 -28
- package/dist/overwrite.d.ts +1 -0
- package/dist/overwrite.js +4 -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 +5 -0
- package/dist/perf.js +35 -0
- package/dist/pixel-format.d.ts +5 -0
- package/dist/pixel-format.js +29 -0
- package/dist/pool.d.ts +0 -0
- package/dist/pool.js +0 -0
- package/dist/prepare-server.d.ts +7 -5
- package/dist/prepare-server.js +24 -5
- package/dist/preprocess-audio-track.d.ts +5 -2
- package/dist/preprocess-audio-track.js +5 -4
- package/dist/prespawn-ffmpeg.d.ts +10 -3
- package/dist/prespawn-ffmpeg.js +24 -16
- package/dist/prestitcher-memory-usage.d.ts +12 -0
- package/dist/prestitcher-memory-usage.js +30 -0
- package/dist/prores-profile.d.ts +8 -0
- package/dist/prores-profile.js +23 -0
- package/dist/provide-screenshot.d.ts +9 -5
- package/dist/provide-screenshot.js +4 -2
- package/dist/puppeteer-evaluate.d.ts +1 -1
- package/dist/puppeteer-evaluate.js +3 -4
- package/dist/puppeteer-screenshot.d.ts +12 -2
- package/dist/puppeteer-screenshot.js +11 -16
- package/dist/quality.d.ts +1 -0
- package/dist/quality.js +21 -0
- package/dist/redirect-status-codes.d.ts +1 -0
- package/dist/redirect-status-codes.js +6 -0
- package/dist/render-frames.d.ts +30 -12
- package/dist/render-frames.js +232 -138
- package/dist/render-media.d.ts +49 -12
- package/dist/render-media.js +152 -30
- package/dist/render-on-server.d.ts +3 -0
- package/dist/render-on-server.js +90 -0
- package/dist/render-still.d.ts +21 -9
- package/dist/render-still.js +75 -37
- package/dist/render-svg.d.ts +8 -0
- package/dist/render-svg.js +13 -0
- package/dist/render-video-layer.d.ts +9 -0
- package/dist/render-video-layer.js +23 -0
- package/dist/render-web-frame.d.ts +74 -0
- package/dist/render-web-frame.js +259 -0
- 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 +11 -8
- package/dist/screenshot-dom-element.js +12 -7
- package/dist/screenshot-task.d.ts +13 -3
- package/dist/screenshot-task.js +55 -27
- package/dist/seek-to-frame.d.ts +3 -2
- package/dist/seek-to-frame.js +24 -3
- package/dist/serve-handler/index.d.ts +1 -1
- package/dist/serve-handler/index.js +7 -15
- 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 +5 -3
- package/dist/serve-static.js +20 -4
- package/dist/set-props-and-env.d.ts +4 -2
- package/dist/set-props-and-env.js +41 -15
- package/dist/stitch-frames-to-video.d.ts +20 -7
- package/dist/stitch-frames-to-video.js +175 -59
- package/dist/stringify-ffmpeg-filter.d.ts +4 -3
- package/dist/stringify-ffmpeg-filter.js +15 -11
- package/dist/symbolicate-stacktrace.d.ts +1 -1
- package/dist/symbolicate-stacktrace.js +3 -3
- package/dist/take-frame-and-compose.d.ts +20 -0
- package/dist/take-frame-and-compose.js +96 -0
- package/dist/tmp-dir.d.ts +0 -0
- package/dist/tmp-dir.js +0 -0
- package/dist/truthy.d.ts +3 -0
- package/dist/truthy.js +7 -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 +1 -1
- package/dist/types.js +0 -0
- package/dist/validate-concurrency.d.ts +1 -0
- package/dist/validate-concurrency.js +29 -0
- package/dist/validate-even-dimensions-with-codec.d.ts +1 -1
- package/dist/validate-even-dimensions-with-codec.js +2 -2
- package/dist/validate-every-nth-frame.d.ts +2 -0
- package/dist/validate-every-nth-frame.js +28 -0
- 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 -44
- package/dist/validate-frame.d.ts +1 -0
- package/dist/validate-frame.js +24 -0
- package/dist/validate-number-of-gif-loops.d.ts +2 -0
- package/dist/validate-number-of-gif-loops.js +24 -0
- package/dist/validate-opengl-renderer.d.ts +5 -0
- package/dist/validate-opengl-renderer.js +15 -0
- package/dist/validate-output-filename.d.ts +1 -1
- package/dist/validate-output-filename.js +5 -0
- package/dist/validate-puppeteer-timeout.d.ts +0 -0
- package/dist/validate-puppeteer-timeout.js +1 -1
- package/dist/validate-scale.d.ts +0 -0
- package/dist/validate-scale.js +0 -0
- package/dist/validate-videobitrate.d.ts +1 -0
- package/dist/validate-videobitrate.js +20 -0
- package/dist/wait-for-symbolication-error-to-be-done.d.ts +3 -0
- package/dist/wait-for-symbolication-error-to-be-done.js +8 -0
- 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 +14 -0
- package/dist/ws/ws-types.js +10 -0
- package/package.json +30 -22
- package/types/ws/index.d.ts +509 -0
- package/.prettierrc.js +0 -14
- package/dist/abort.d.ts +0 -7
- package/dist/abort.js +0 -20
- package/dist/assets/cleanup-assets.d.ts +0 -2
- package/dist/cancel.d.ts +0 -7
- package/dist/cancel.js +0 -25
- package/dist/ensure-faststart.d.ts +0 -1
- package/dist/ensure-faststart.js +0 -14
- package/dist/faststart/atom.d.ts +0 -35
- package/dist/faststart/atom.js +0 -138
- package/dist/faststart/options.d.ts +0 -6
- package/dist/faststart/qt-faststart.d.ts +0 -18
- package/dist/faststart/qt-faststart.js +0 -66
- package/dist/faststart/update-chunk-offsets.d.ts +0 -10
- package/dist/faststart/update-chunk-offsets.js +0 -114
- package/dist/faststart/util.d.ts +0 -9
- package/dist/faststart/util.js +0 -34
- package/dist/get-duration-of-asset.d.ts +0 -7
- package/dist/get-duration-of-asset.js +0 -36
- package/dist/make-assets-download-dir.d.ts +0 -1
- package/dist/make-assets-download-dir.js +0 -13
- package/dist/offthread/index.d.ts +0 -0
- package/dist/offthread/index.js +0 -1
- package/dist/render-gif.d.ts +0 -2
- package/dist/render-gif.js +0 -242
- package/dist/serve-handler/glob-slash.d.ts +0 -1
- package/dist/serve-handler/glob-slash.js +0 -12
- package/dist/stitch-frames-to-gif.d.ts +0 -8
- package/dist/stitch-frames-to-gif.js +0 -128
- package/dist/validate-fps-for-gif.d.ts +0 -2
- package/dist/validate-fps-for-gif.js +0 -9
- package/tsconfig.json +0 -10
package/dist/render-frames.js
CHANGED
|
@@ -6,24 +6,35 @@ 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");
|
|
12
|
+
const download_map_1 = require("./assets/download-map");
|
|
13
|
+
const browser_1 = require("./browser");
|
|
14
|
+
const compress_assets_1 = require("./compress-assets");
|
|
11
15
|
const cycle_browser_tabs_1 = require("./cycle-browser-tabs");
|
|
12
16
|
const handle_javascript_exception_1 = require("./error-handling/handle-javascript-exception");
|
|
17
|
+
const find_closest_package_json_1 = require("./find-closest-package-json");
|
|
13
18
|
const get_concurrency_1 = require("./get-concurrency");
|
|
14
19
|
const get_duration_from_frame_range_1 = require("./get-duration-from-frame-range");
|
|
20
|
+
const get_frame_padded_index_1 = require("./get-frame-padded-index");
|
|
15
21
|
const get_frame_to_render_1 = require("./get-frame-to-render");
|
|
16
22
|
const image_format_1 = require("./image-format");
|
|
17
23
|
const legacy_webpack_config_1 = require("./legacy-webpack-config");
|
|
18
|
-
const
|
|
24
|
+
const make_cancel_signal_1 = require("./make-cancel-signal");
|
|
19
25
|
const open_browser_1 = require("./open-browser");
|
|
26
|
+
const perf_1 = require("./perf");
|
|
20
27
|
const pool_1 = require("./pool");
|
|
21
28
|
const prepare_server_1 = require("./prepare-server");
|
|
22
|
-
const provide_screenshot_1 = require("./provide-screenshot");
|
|
23
29
|
const puppeteer_evaluate_1 = require("./puppeteer-evaluate");
|
|
30
|
+
const quality_1 = require("./quality");
|
|
31
|
+
const replace_browser_1 = require("./replace-browser");
|
|
24
32
|
const seek_to_frame_1 = require("./seek-to-frame");
|
|
25
33
|
const set_props_and_env_1 = require("./set-props-and-env");
|
|
34
|
+
const take_frame_and_compose_1 = require("./take-frame-and-compose");
|
|
35
|
+
const truthy_1 = require("./truthy");
|
|
26
36
|
const validate_scale_1 = require("./validate-scale");
|
|
37
|
+
const MAX_RETRIES_PER_FRAME = 1;
|
|
27
38
|
const getComposition = (others) => {
|
|
28
39
|
if ('composition' in others) {
|
|
29
40
|
return others.composition;
|
|
@@ -33,15 +44,16 @@ const getComposition = (others) => {
|
|
|
33
44
|
}
|
|
34
45
|
return undefined;
|
|
35
46
|
};
|
|
36
|
-
const
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
if (!puppeteerInstance) {
|
|
43
|
-
throw new Error('no puppeteer instance passed to innerRenderFrames - internal error');
|
|
47
|
+
const getConcurrency = (others) => {
|
|
48
|
+
if ('concurrency' in others) {
|
|
49
|
+
return others.concurrency;
|
|
50
|
+
}
|
|
51
|
+
if ('parallelism' in others) {
|
|
52
|
+
return others.parallelism;
|
|
44
53
|
}
|
|
54
|
+
return undefined;
|
|
55
|
+
};
|
|
56
|
+
const innerRenderFrames = ({ onFrameUpdate, outputDir, onStart, inputProps, quality, imageFormat = image_format_1.DEFAULT_IMAGE_FORMAT, frameRange, onError, envVariables, onBrowserLog, onFrameBuffer, onDownload, pagesArray, serveUrl, composition, timeoutInMilliseconds, scale = 1, actualConcurrency, everyNthFrame = 1, proxyPort, cancelSignal, downloadMap, muted, makeBrowser, browserReplacer, }) => {
|
|
45
57
|
if (outputDir) {
|
|
46
58
|
if (!fs_1.default.existsSync(outputDir)) {
|
|
47
59
|
fs_1.default.mkdirSync(outputDir, {
|
|
@@ -49,10 +61,12 @@ const innerRenderFrames = ({ onFrameUpdate, outputDir, onStart, inputProps, qual
|
|
|
49
61
|
});
|
|
50
62
|
}
|
|
51
63
|
}
|
|
64
|
+
const downloadPromises = [];
|
|
52
65
|
const realFrameRange = (0, get_frame_to_render_1.getRealFrameRange)(composition.durationInFrames, frameRange !== null && frameRange !== void 0 ? frameRange : null);
|
|
53
|
-
const
|
|
54
|
-
const
|
|
55
|
-
|
|
66
|
+
const framesToRender = (0, get_duration_from_frame_range_1.getFramesToRender)(realFrameRange, everyNthFrame);
|
|
67
|
+
const lastFrame = framesToRender[framesToRender.length - 1];
|
|
68
|
+
const makePage = async () => {
|
|
69
|
+
const page = await browserReplacer.getBrowser().newPage();
|
|
56
70
|
pagesArray.push(page);
|
|
57
71
|
await page.setViewport({
|
|
58
72
|
width: composition.width,
|
|
@@ -62,18 +76,14 @@ const innerRenderFrames = ({ onFrameUpdate, outputDir, onStart, inputProps, qual
|
|
|
62
76
|
const logCallback = (log) => {
|
|
63
77
|
onBrowserLog === null || onBrowserLog === void 0 ? void 0 : onBrowserLog({
|
|
64
78
|
stackTrace: log.stackTrace(),
|
|
65
|
-
text: log.text
|
|
66
|
-
type: log.type
|
|
79
|
+
text: log.text,
|
|
80
|
+
type: log.type,
|
|
67
81
|
});
|
|
68
82
|
};
|
|
69
83
|
if (onBrowserLog) {
|
|
70
84
|
page.on('console', logCallback);
|
|
71
85
|
}
|
|
72
|
-
const initialFrame =
|
|
73
|
-
? frameRange
|
|
74
|
-
: frameRange === null || frameRange === undefined
|
|
75
|
-
? 0
|
|
76
|
-
: frameRange[0];
|
|
86
|
+
const initialFrame = realFrameRange[0];
|
|
77
87
|
await (0, set_props_and_env_1.setPropsAndEnv)({
|
|
78
88
|
inputProps,
|
|
79
89
|
envVariables,
|
|
@@ -83,48 +93,69 @@ const innerRenderFrames = ({ onFrameUpdate, outputDir, onStart, inputProps, qual
|
|
|
83
93
|
timeoutInMilliseconds,
|
|
84
94
|
proxyPort,
|
|
85
95
|
retriesRemaining: 2,
|
|
96
|
+
audioEnabled: !muted,
|
|
97
|
+
videoEnabled: imageFormat !== 'none',
|
|
86
98
|
});
|
|
87
99
|
await (0, puppeteer_evaluate_1.puppeteerEvaluateWithCatch)({
|
|
88
|
-
|
|
100
|
+
// eslint-disable-next-line max-params
|
|
101
|
+
pageFunction: (id, defaultProps, durationInFrames, fps, height, width) => {
|
|
89
102
|
window.setBundleMode({
|
|
90
103
|
type: 'composition',
|
|
91
104
|
compositionName: id,
|
|
105
|
+
compositionDefaultProps: defaultProps,
|
|
106
|
+
compositionDurationInFrames: durationInFrames,
|
|
107
|
+
compositionFps: fps,
|
|
108
|
+
compositionHeight: height,
|
|
109
|
+
compositionWidth: width,
|
|
92
110
|
});
|
|
93
111
|
},
|
|
94
|
-
args: [
|
|
112
|
+
args: [
|
|
113
|
+
composition.id,
|
|
114
|
+
composition.defaultProps,
|
|
115
|
+
composition.durationInFrames,
|
|
116
|
+
composition.fps,
|
|
117
|
+
composition.height,
|
|
118
|
+
composition.width,
|
|
119
|
+
],
|
|
95
120
|
frame: null,
|
|
96
121
|
page,
|
|
97
122
|
});
|
|
98
123
|
page.off('console', logCallback);
|
|
99
124
|
return page;
|
|
125
|
+
};
|
|
126
|
+
const getPool = async () => {
|
|
127
|
+
const pages = new Array(actualConcurrency).fill(true).map(() => makePage());
|
|
128
|
+
const puppeteerPages = await Promise.all(pages);
|
|
129
|
+
const pool = new pool_1.Pool(puppeteerPages);
|
|
130
|
+
return pool;
|
|
131
|
+
};
|
|
132
|
+
// If rendering a GIF and skipping frames, we must ensure it starts from 0
|
|
133
|
+
// and then is consecutive so FFMPEG recognizes the sequence
|
|
134
|
+
const countType = everyNthFrame === 1 ? 'actual-frames' : 'from-zero';
|
|
135
|
+
const filePadLength = (0, get_frame_padded_index_1.getFilePadLength)({
|
|
136
|
+
lastFrame,
|
|
137
|
+
totalFrames: framesToRender.length,
|
|
138
|
+
countType,
|
|
100
139
|
});
|
|
101
|
-
const [firstFrameIndex, lastFrameIndex] = realFrameRange;
|
|
102
|
-
// Substract one because 100 frames will be 00-99
|
|
103
|
-
// --> 2 digits
|
|
104
|
-
const filePadLength = String(lastFrameIndex).length;
|
|
105
140
|
let framesRendered = 0;
|
|
106
|
-
const poolPromise = getPool(
|
|
141
|
+
const poolPromise = getPool();
|
|
107
142
|
onStart({
|
|
108
|
-
frameCount,
|
|
143
|
+
frameCount: framesToRender.length,
|
|
109
144
|
});
|
|
110
|
-
const assets = new Array(
|
|
145
|
+
const assets = new Array(framesToRender.length).fill(undefined);
|
|
111
146
|
let stopped = false;
|
|
112
147
|
cancelSignal === null || cancelSignal === void 0 ? void 0 : cancelSignal(() => {
|
|
113
148
|
stopped = true;
|
|
114
149
|
});
|
|
115
|
-
const
|
|
116
|
-
.fill(Boolean)
|
|
117
|
-
.map((_x, i) => i)
|
|
118
|
-
.map(async (index) => {
|
|
119
|
-
const frame = realFrameRange[0] + index;
|
|
150
|
+
const renderFrameWithOptionToReject = async ({ frame, index, reject, width, height, }) => {
|
|
120
151
|
const pool = await poolPromise;
|
|
121
152
|
const freePage = await pool.acquire();
|
|
122
153
|
if (stopped) {
|
|
123
|
-
|
|
154
|
+
return reject(new Error('Render was stopped'));
|
|
124
155
|
}
|
|
125
|
-
const
|
|
156
|
+
const startTime = perf_hooks_1.performance.now();
|
|
126
157
|
const errorCallbackOnFrame = (err) => {
|
|
127
|
-
|
|
158
|
+
reject(err);
|
|
128
159
|
};
|
|
129
160
|
const cleanupPageError = (0, handle_javascript_exception_1.handleJavascriptException)({
|
|
130
161
|
page: freePage,
|
|
@@ -133,150 +164,208 @@ const innerRenderFrames = ({ onFrameUpdate, outputDir, onStart, inputProps, qual
|
|
|
133
164
|
});
|
|
134
165
|
freePage.on('error', errorCallbackOnFrame);
|
|
135
166
|
await (0, seek_to_frame_1.seekToFrame)({ frame, page: freePage });
|
|
136
|
-
if (imageFormat !== 'none') {
|
|
137
|
-
|
|
138
|
-
const id = remotion_1.Internals.perf.startPerfMeasure('save');
|
|
139
|
-
const buffer = await (0, provide_screenshot_1.provideScreenshot)({
|
|
140
|
-
page: freePage,
|
|
141
|
-
imageFormat,
|
|
142
|
-
quality,
|
|
143
|
-
options: {
|
|
144
|
-
frame,
|
|
145
|
-
output: undefined,
|
|
146
|
-
},
|
|
147
|
-
});
|
|
148
|
-
remotion_1.Internals.perf.stopPerfMeasure(id);
|
|
149
|
-
onFrameBuffer(buffer, frame);
|
|
150
|
-
}
|
|
151
|
-
else {
|
|
152
|
-
if (!outputDir) {
|
|
153
|
-
throw new Error('Called renderFrames() without specifying either `outputDir` or `onFrameBuffer`');
|
|
154
|
-
}
|
|
155
|
-
const output = path_1.default.join(outputDir, `element-${paddedIndex}.${imageFormat}`);
|
|
156
|
-
await (0, provide_screenshot_1.provideScreenshot)({
|
|
157
|
-
page: freePage,
|
|
158
|
-
imageFormat,
|
|
159
|
-
quality,
|
|
160
|
-
options: {
|
|
161
|
-
frame,
|
|
162
|
-
output,
|
|
163
|
-
},
|
|
164
|
-
});
|
|
165
|
-
}
|
|
167
|
+
if (!outputDir && !onFrameBuffer && imageFormat !== 'none') {
|
|
168
|
+
throw new Error('Called renderFrames() without specifying either `outputDir` or `onFrameBuffer`');
|
|
166
169
|
}
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
170
|
+
if (outputDir && onFrameBuffer && imageFormat !== 'none') {
|
|
171
|
+
throw new Error('Pass either `outputDir` or `onFrameBuffer` to renderFrames(), not both.');
|
|
172
|
+
}
|
|
173
|
+
const id = (0, perf_1.startPerfMeasure)('save');
|
|
174
|
+
const frameDir = outputDir !== null && outputDir !== void 0 ? outputDir : downloadMap.compositingDir;
|
|
175
|
+
const { buffer, collectedAssets } = await (0, take_frame_and_compose_1.takeFrameAndCompose)({
|
|
172
176
|
frame,
|
|
173
|
-
|
|
177
|
+
freePage,
|
|
178
|
+
height,
|
|
179
|
+
imageFormat,
|
|
180
|
+
output: path_1.default.join(frameDir, (0, get_frame_padded_index_1.getFrameOutputFileName)({
|
|
181
|
+
frame,
|
|
182
|
+
imageFormat,
|
|
183
|
+
index,
|
|
184
|
+
countType,
|
|
185
|
+
lastFrame,
|
|
186
|
+
totalFrames: framesToRender.length,
|
|
187
|
+
})),
|
|
188
|
+
quality,
|
|
189
|
+
width,
|
|
190
|
+
scale,
|
|
191
|
+
downloadMap,
|
|
192
|
+
wantsBuffer: Boolean(onFrameBuffer),
|
|
174
193
|
});
|
|
175
|
-
|
|
194
|
+
if (onFrameBuffer) {
|
|
195
|
+
if (!buffer) {
|
|
196
|
+
throw new Error('unexpected null buffer');
|
|
197
|
+
}
|
|
198
|
+
onFrameBuffer(buffer, frame);
|
|
199
|
+
}
|
|
200
|
+
(0, perf_1.stopPerfMeasure)(id);
|
|
201
|
+
const compressedAssets = collectedAssets.map((asset) => (0, compress_assets_1.compressAsset)(assets.filter(truthy_1.truthy).flat(1), asset));
|
|
176
202
|
assets[index] = compressedAssets;
|
|
177
203
|
compressedAssets.forEach((asset) => {
|
|
178
204
|
(0, download_and_map_assets_to_file_1.downloadAndMapAssetsToFileUrl)({
|
|
179
205
|
asset,
|
|
180
|
-
downloadDir,
|
|
181
206
|
onDownload,
|
|
207
|
+
downloadMap,
|
|
182
208
|
}).catch((err) => {
|
|
183
209
|
onError(new Error(`Error while downloading asset: ${err.stack}`));
|
|
184
210
|
});
|
|
185
211
|
});
|
|
186
|
-
pool.release(freePage);
|
|
187
212
|
framesRendered++;
|
|
188
|
-
onFrameUpdate(framesRendered, frame);
|
|
213
|
+
onFrameUpdate(framesRendered, frame, perf_hooks_1.performance.now() - startTime);
|
|
189
214
|
cleanupPageError();
|
|
190
215
|
freePage.off('error', errorCallbackOnFrame);
|
|
191
|
-
|
|
192
|
-
}
|
|
216
|
+
pool.release(freePage);
|
|
217
|
+
};
|
|
218
|
+
const renderFrame = (frame, index) => {
|
|
219
|
+
return new Promise((resolve, reject) => {
|
|
220
|
+
renderFrameWithOptionToReject({
|
|
221
|
+
frame,
|
|
222
|
+
index,
|
|
223
|
+
reject,
|
|
224
|
+
width: composition.width,
|
|
225
|
+
height: composition.height,
|
|
226
|
+
})
|
|
227
|
+
.then(() => {
|
|
228
|
+
resolve();
|
|
229
|
+
})
|
|
230
|
+
.catch((err) => {
|
|
231
|
+
reject(err);
|
|
232
|
+
});
|
|
233
|
+
});
|
|
234
|
+
};
|
|
235
|
+
const renderFrameAndRetryTargetClose = async (frame, index, retriesLeft, attempt) => {
|
|
236
|
+
var _a, _b;
|
|
237
|
+
try {
|
|
238
|
+
await renderFrame(frame, index);
|
|
239
|
+
}
|
|
240
|
+
catch (err) {
|
|
241
|
+
if (!((_a = err === null || err === void 0 ? void 0 : err.message) === null || _a === void 0 ? void 0 : _a.includes('Target closed')) &&
|
|
242
|
+
!((_b = err === null || err === void 0 ? void 0 : err.message) === null || _b === void 0 ? void 0 : _b.includes('Session closed'))) {
|
|
243
|
+
throw err;
|
|
244
|
+
}
|
|
245
|
+
if ((0, make_cancel_signal_1.isUserCancelledRender)(err)) {
|
|
246
|
+
throw err;
|
|
247
|
+
}
|
|
248
|
+
if (stopped) {
|
|
249
|
+
return;
|
|
250
|
+
}
|
|
251
|
+
if (retriesLeft === 0) {
|
|
252
|
+
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`);
|
|
253
|
+
throw err;
|
|
254
|
+
}
|
|
255
|
+
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`);
|
|
256
|
+
await browserReplacer.replaceBrowser(makeBrowser, async () => {
|
|
257
|
+
const pages = new Array(actualConcurrency)
|
|
258
|
+
.fill(true)
|
|
259
|
+
.map(() => makePage());
|
|
260
|
+
const puppeteerPages = await Promise.all(pages);
|
|
261
|
+
const pool = await poolPromise;
|
|
262
|
+
for (const newPage of puppeteerPages) {
|
|
263
|
+
pool.release(newPage);
|
|
264
|
+
}
|
|
265
|
+
});
|
|
266
|
+
await renderFrameAndRetryTargetClose(frame, index, retriesLeft - 1, attempt + 1);
|
|
267
|
+
}
|
|
268
|
+
};
|
|
269
|
+
const progress = Promise.all(framesToRender.map((frame, index) => renderFrameAndRetryTargetClose(frame, index, MAX_RETRIES_PER_FRAME, 1)));
|
|
193
270
|
const happyPath = progress.then(() => {
|
|
271
|
+
const firstFrameIndex = countType === 'from-zero' ? 0 : framesToRender[0];
|
|
194
272
|
const returnValue = {
|
|
195
273
|
assetsInfo: {
|
|
196
274
|
assets,
|
|
197
|
-
downloadDir,
|
|
198
|
-
firstFrameIndex,
|
|
199
275
|
imageSequenceName: `element-%0${filePadLength}d.${imageFormat}`,
|
|
276
|
+
firstFrameIndex,
|
|
277
|
+
downloadMap,
|
|
200
278
|
},
|
|
201
|
-
frameCount,
|
|
279
|
+
frameCount: framesToRender.length,
|
|
202
280
|
};
|
|
203
281
|
return returnValue;
|
|
204
282
|
});
|
|
205
|
-
return
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
});
|
|
211
|
-
}),
|
|
212
|
-
]);
|
|
283
|
+
return happyPath
|
|
284
|
+
.then(() => {
|
|
285
|
+
return Promise.all(downloadPromises);
|
|
286
|
+
})
|
|
287
|
+
.then(() => happyPath);
|
|
213
288
|
};
|
|
214
289
|
const renderFrames = (options) => {
|
|
215
|
-
var _a, _b, _c
|
|
290
|
+
var _a, _b, _c;
|
|
216
291
|
const composition = getComposition(options);
|
|
292
|
+
const concurrency = getConcurrency(options);
|
|
217
293
|
if (!composition) {
|
|
218
294
|
throw new Error('No `composition` option has been specified for renderFrames()');
|
|
219
295
|
}
|
|
220
296
|
remotion_1.Internals.validateDimension(composition.height, 'height', 'in the `config` object passed to `renderFrames()`');
|
|
221
297
|
remotion_1.Internals.validateDimension(composition.width, 'width', 'in the `config` object passed to `renderFrames()`');
|
|
222
|
-
remotion_1.Internals.validateFps(composition.fps, 'in the `config` object of `renderFrames()`');
|
|
298
|
+
remotion_1.Internals.validateFps(composition.fps, 'in the `config` object of `renderFrames()`', false);
|
|
223
299
|
remotion_1.Internals.validateDurationInFrames(composition.durationInFrames, 'in the `config` object passed to `renderFrames()`');
|
|
224
300
|
if (options.quality !== undefined && options.imageFormat !== 'jpeg') {
|
|
225
301
|
throw new Error("You can only pass the `quality` option if `imageFormat` is 'jpeg'.");
|
|
226
302
|
}
|
|
227
303
|
const selectedServeUrl = (0, legacy_webpack_config_1.getServeUrlWithFallback)(options);
|
|
228
|
-
|
|
304
|
+
(0, quality_1.validateQuality)(options.quality);
|
|
229
305
|
(0, validate_scale_1.validateScale)(options.scale);
|
|
230
|
-
const
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
306
|
+
const makeBrowser = () => {
|
|
307
|
+
var _a;
|
|
308
|
+
return (0, open_browser_1.openBrowser)(browser_1.DEFAULT_BROWSER, {
|
|
309
|
+
shouldDumpIo: options.dumpBrowserLogs,
|
|
310
|
+
browserExecutable: options.browserExecutable,
|
|
311
|
+
chromiumOptions: options.chromiumOptions,
|
|
312
|
+
forceDeviceScaleFactor: (_a = options.scale) !== null && _a !== void 0 ? _a : 1,
|
|
313
|
+
});
|
|
314
|
+
};
|
|
315
|
+
const browserInstance = (_a = options.puppeteerInstance) !== null && _a !== void 0 ? _a : makeBrowser();
|
|
316
|
+
const downloadMap = (_b = options.downloadMap) !== null && _b !== void 0 ? _b : (0, download_map_1.makeDownloadMap)();
|
|
237
317
|
const onDownload = (_c = options.onDownload) !== null && _c !== void 0 ? _c : (() => () => undefined);
|
|
238
|
-
const
|
|
318
|
+
const actualConcurrency = (0, get_concurrency_1.getActualConcurrency)(concurrency !== null && concurrency !== void 0 ? concurrency : null);
|
|
239
319
|
const openedPages = [];
|
|
240
320
|
return new Promise((resolve, reject) => {
|
|
241
321
|
var _a, _b, _c;
|
|
242
322
|
const cleanup = [];
|
|
243
|
-
const onError = (err) =>
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
323
|
+
const onError = (err) => {
|
|
324
|
+
reject(err);
|
|
325
|
+
};
|
|
326
|
+
Promise.race([
|
|
327
|
+
new Promise((_, rej) => {
|
|
328
|
+
var _a;
|
|
329
|
+
(_a = options.cancelSignal) === null || _a === void 0 ? void 0 : _a.call(options, () => {
|
|
330
|
+
rej(new Error(make_cancel_signal_1.cancelErrorMessages.renderFrames));
|
|
331
|
+
});
|
|
332
|
+
}),
|
|
333
|
+
Promise.all([
|
|
334
|
+
(0, prepare_server_1.prepareServer)({
|
|
335
|
+
webpackConfigOrServeUrl: selectedServeUrl,
|
|
336
|
+
onDownload,
|
|
337
|
+
onError,
|
|
338
|
+
ffmpegExecutable: (_a = options.ffmpegExecutable) !== null && _a !== void 0 ? _a : null,
|
|
339
|
+
ffprobeExecutable: (_b = options.ffprobeExecutable) !== null && _b !== void 0 ? _b : null,
|
|
340
|
+
port: (_c = options.port) !== null && _c !== void 0 ? _c : null,
|
|
341
|
+
downloadMap,
|
|
342
|
+
remotionRoot: (0, find_closest_package_json_1.findRemotionRoot)(),
|
|
343
|
+
}),
|
|
344
|
+
browserInstance,
|
|
345
|
+
]).then(([{ serveUrl, closeServer, offthreadPort }, puppeteerInstance]) => {
|
|
346
|
+
const browserReplacer = (0, replace_browser_1.handleBrowserCrash)(puppeteerInstance);
|
|
347
|
+
const { stopCycling } = (0, cycle_browser_tabs_1.cycleBrowserTabs)(browserReplacer, actualConcurrency);
|
|
348
|
+
cleanup.push(stopCycling);
|
|
349
|
+
cleanup.push(() => closeServer(false));
|
|
350
|
+
return innerRenderFrames({
|
|
351
|
+
...options,
|
|
352
|
+
puppeteerInstance,
|
|
353
|
+
onError,
|
|
354
|
+
pagesArray: openedPages,
|
|
355
|
+
serveUrl,
|
|
356
|
+
composition,
|
|
357
|
+
actualConcurrency,
|
|
358
|
+
onDownload,
|
|
359
|
+
proxyPort: offthreadPort,
|
|
360
|
+
downloadMap,
|
|
361
|
+
makeBrowser,
|
|
362
|
+
browserReplacer,
|
|
363
|
+
});
|
|
253
364
|
}),
|
|
254
|
-
browserInstance,
|
|
255
365
|
])
|
|
256
|
-
.then((
|
|
257
|
-
|
|
258
|
-
const { stopCycling } = (0, cycle_browser_tabs_1.cycleBrowserTabs)(puppeteerInstance, actualParallelism);
|
|
259
|
-
cleanup.push(stopCycling);
|
|
260
|
-
(_a = options.cancelSignal) === null || _a === void 0 ? void 0 : _a.call(options, () => {
|
|
261
|
-
stopCycling();
|
|
262
|
-
closeServer();
|
|
263
|
-
});
|
|
264
|
-
cleanup.push(closeServer);
|
|
265
|
-
const renderFramesProm = innerRenderFrames({
|
|
266
|
-
...options,
|
|
267
|
-
puppeteerInstance,
|
|
268
|
-
onError,
|
|
269
|
-
pagesArray: openedPages,
|
|
270
|
-
serveUrl,
|
|
271
|
-
composition,
|
|
272
|
-
actualParallelism,
|
|
273
|
-
onDownload,
|
|
274
|
-
downloadDir,
|
|
275
|
-
proxyPort: offthreadPort,
|
|
276
|
-
});
|
|
277
|
-
return renderFramesProm;
|
|
366
|
+
.then((res) => {
|
|
367
|
+
return resolve(res);
|
|
278
368
|
})
|
|
279
|
-
.then((res) => resolve(res))
|
|
280
369
|
.catch((err) => reject(err))
|
|
281
370
|
.finally(() => {
|
|
282
371
|
// If browser instance was passed in, we close all the pages
|
|
@@ -284,21 +373,26 @@ const renderFrames = (options) => {
|
|
|
284
373
|
// If new browser was opened, then closing the browser as a cleanup.
|
|
285
374
|
if (options.puppeteerInstance) {
|
|
286
375
|
Promise.all(openedPages.map((p) => p.close())).catch((err) => {
|
|
287
|
-
|
|
376
|
+
if (!(err === null || err === void 0 ? void 0 : err.message.includes('Target closed'))) {
|
|
377
|
+
console.log('Unable to close browser tab', err);
|
|
378
|
+
}
|
|
288
379
|
});
|
|
289
380
|
}
|
|
290
381
|
else {
|
|
291
382
|
Promise.resolve(browserInstance)
|
|
292
383
|
.then((puppeteerInstance) => {
|
|
293
|
-
return puppeteerInstance.close();
|
|
384
|
+
return puppeteerInstance.close(true);
|
|
294
385
|
})
|
|
295
386
|
.catch((err) => {
|
|
296
|
-
|
|
387
|
+
if (!(err === null || err === void 0 ? void 0 : err.message.includes('Target closed'))) {
|
|
388
|
+
console.log('Unable to close browser', err);
|
|
389
|
+
}
|
|
297
390
|
});
|
|
298
391
|
}
|
|
299
392
|
cleanup.forEach((c) => {
|
|
300
393
|
c();
|
|
301
394
|
});
|
|
395
|
+
// Don't clear download dir because it might be used by stitchFramesToVideo
|
|
302
396
|
});
|
|
303
397
|
});
|
|
304
398
|
};
|
package/dist/render-media.d.ts
CHANGED
|
@@ -1,25 +1,39 @@
|
|
|
1
|
-
|
|
2
|
-
import {
|
|
3
|
-
import { RenderMediaOnDownload } from './assets/download-and-map-assets-to-file';
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
import type { SmallTCompMetadata } from 'remotion';
|
|
3
|
+
import type { RenderMediaOnDownload } from './assets/download-and-map-assets-to-file';
|
|
4
|
+
import type { DownloadMap } from './assets/download-map';
|
|
5
|
+
import type { BrowserExecutable } from './browser-executable';
|
|
6
|
+
import type { BrowserLog } from './browser-log';
|
|
7
|
+
import type { Browser as PuppeteerBrowser } from './browser/Browser';
|
|
8
|
+
import type { Codec } from './codec';
|
|
9
|
+
import type { FfmpegExecutable } from './ffmpeg-executable';
|
|
10
|
+
import type { FfmpegOverrideFn } from './ffmpeg-override';
|
|
11
|
+
import type { FrameRange } from './frame-range';
|
|
12
|
+
import type { ServeUrlOrWebpackBundle } from './legacy-webpack-config';
|
|
13
|
+
import type { CancelSignal } from './make-cancel-signal';
|
|
14
|
+
import type { ChromiumOptions } from './open-browser';
|
|
15
|
+
import type { PixelFormat } from './pixel-format';
|
|
16
|
+
import type { ProResProfile } from './prores-profile';
|
|
17
|
+
import type { OnStartData } from './types';
|
|
9
18
|
export declare type StitchingState = 'encoding' | 'muxing';
|
|
19
|
+
export declare type SlowFrame = {
|
|
20
|
+
frame: number;
|
|
21
|
+
time: number;
|
|
22
|
+
};
|
|
23
|
+
export declare type OnSlowestFrames = (frames: SlowFrame[]) => void;
|
|
10
24
|
export declare type RenderMediaOnProgress = (progress: {
|
|
11
25
|
renderedFrames: number;
|
|
12
26
|
encodedFrames: number;
|
|
13
27
|
encodedDoneIn: number | null;
|
|
14
28
|
renderedDoneIn: number | null;
|
|
29
|
+
progress: number;
|
|
15
30
|
stitchStage: StitchingState;
|
|
16
31
|
}) => void;
|
|
17
32
|
export declare type RenderMediaOptions = {
|
|
18
|
-
outputLocation
|
|
33
|
+
outputLocation?: string | null;
|
|
19
34
|
codec: Codec;
|
|
20
35
|
composition: SmallTCompMetadata;
|
|
21
36
|
inputProps?: unknown;
|
|
22
|
-
parallelism?: number | null;
|
|
23
37
|
crf?: number | null;
|
|
24
38
|
imageFormat?: 'png' | 'jpeg' | 'none';
|
|
25
39
|
ffmpegExecutable?: FfmpegExecutable;
|
|
@@ -28,6 +42,8 @@ export declare type RenderMediaOptions = {
|
|
|
28
42
|
envVariables?: Record<string, string>;
|
|
29
43
|
quality?: number;
|
|
30
44
|
frameRange?: FrameRange | null;
|
|
45
|
+
everyNthFrame?: number;
|
|
46
|
+
numberOfGifLoops?: number | null;
|
|
31
47
|
puppeteerInstance?: PuppeteerBrowser;
|
|
32
48
|
overwrite?: boolean;
|
|
33
49
|
onProgress?: RenderMediaOnProgress;
|
|
@@ -42,10 +58,31 @@ export declare type RenderMediaOptions = {
|
|
|
42
58
|
port?: number | null;
|
|
43
59
|
cancelSignal?: CancelSignal;
|
|
44
60
|
browserExecutable?: BrowserExecutable;
|
|
45
|
-
|
|
61
|
+
verbose?: boolean;
|
|
62
|
+
/**
|
|
63
|
+
* @deprecated Only for Remotion internal usage
|
|
64
|
+
*/
|
|
65
|
+
downloadMap?: DownloadMap;
|
|
66
|
+
muted?: boolean;
|
|
67
|
+
enforceAudioTrack?: boolean;
|
|
68
|
+
ffmpegOverride?: FfmpegOverrideFn;
|
|
69
|
+
audioBitrate?: string | null;
|
|
70
|
+
videoBitrate?: string | null;
|
|
71
|
+
onSlowestFrames?: OnSlowestFrames;
|
|
72
|
+
disallowParallelEncoding?: boolean;
|
|
73
|
+
} & ServeUrlOrWebpackBundle & ConcurrencyOrParallelism;
|
|
74
|
+
declare type ConcurrencyOrParallelism = {
|
|
75
|
+
concurrency?: number | string | null;
|
|
76
|
+
} | {
|
|
77
|
+
/**
|
|
78
|
+
* @deprecated This field has been renamed to `concurrency`
|
|
79
|
+
*/
|
|
80
|
+
parallelism?: number | null;
|
|
81
|
+
};
|
|
46
82
|
/**
|
|
47
83
|
*
|
|
48
84
|
* @description Render a video from a composition
|
|
49
85
|
* @link https://www.remotion.dev/docs/renderer/render-media
|
|
50
86
|
*/
|
|
51
|
-
export declare const renderMedia: ({
|
|
87
|
+
export declare const renderMedia: ({ proResProfile, crf, composition, ffmpegExecutable, ffprobeExecutable, inputProps, pixelFormat, codec, envVariables, frameRange, puppeteerInstance, outputLocation, onProgress, overwrite, onDownload, dumpBrowserLogs, onBrowserLog, onStart, timeoutInMilliseconds, chromiumOptions, scale, browserExecutable, port, cancelSignal, muted, enforceAudioTrack, ffmpegOverride, audioBitrate, videoBitrate, onSlowestFrames, ...options }: RenderMediaOptions) => Promise<Buffer | null>;
|
|
88
|
+
export {};
|