@remotion/renderer 4.0.0-fastlambda.8 → 4.0.0-forcepublish.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/assets/calculate-asset-positions.d.ts +2 -2
- 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 +15 -6
- package/dist/assets/download-and-map-assets-to-file.js +108 -44
- package/dist/assets/download-file.d.ts +10 -5
- package/dist/assets/download-file.js +18 -5
- package/dist/assets/download-map.d.ts +64 -0
- package/dist/assets/download-map.js +73 -0
- package/dist/assets/ffmpeg-volume-expression.d.ts +3 -3
- package/dist/assets/ffmpeg-volume-expression.js +16 -14
- package/dist/assets/flatten-volume-array.d.ts +1 -1
- package/dist/assets/get-audio-channels.d.ts +3 -4
- package/dist/assets/get-audio-channels.js +14 -4
- package/dist/assets/get-video-stream-duration.d.ts +4 -0
- package/dist/assets/get-video-stream-duration.js +59 -0
- package/dist/assets/read-file.js +4 -1
- package/dist/assets/types.d.ts +1 -1
- package/dist/browser/Browser.d.ts +60 -0
- package/dist/browser/Browser.js +218 -0
- package/dist/browser/BrowserConnector.d.ts +19 -0
- package/dist/browser/BrowserConnector.js +17 -0
- package/dist/browser/BrowserFetcher.d.ts +89 -0
- package/dist/browser/BrowserFetcher.js +510 -0
- package/dist/browser/BrowserPage.d.ts +74 -0
- package/dist/browser/BrowserPage.js +283 -0
- package/dist/browser/BrowserRunner.d.ts +39 -0
- package/dist/browser/BrowserRunner.js +308 -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 +52 -0
- package/dist/browser/DOMWorld.js +272 -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 +93 -0
- package/dist/browser/FrameManager.js +496 -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 +37 -0
- package/dist/browser/LaunchOptions.js +17 -0
- package/dist/browser/Launcher.d.ts +9 -0
- package/dist/browser/Launcher.js +504 -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 +81 -0
- package/dist/browser/PuppeteerViewport.d.ts +5 -0
- package/dist/browser/PuppeteerViewport.js +2 -0
- package/dist/browser/ScreenshotOptions.d.ts +14 -0
- package/dist/browser/ScreenshotOptions.js +2 -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 +119 -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 +1122 -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/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 +21 -0
- package/dist/browser/revisions.js +22 -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/browser-executable.js +2 -0
- package/dist/browser-log.d.ts +1 -1
- 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 +2 -2
- 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/codec-supports-media.d.ts +7 -0
- package/dist/codec-supports-media.js +49 -0
- package/dist/codec.d.ts +4 -0
- package/dist/codec.js +16 -0
- package/dist/combine-videos.d.ts +4 -2
- package/dist/combine-videos.js +19 -5
- 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 +1 -1
- package/dist/create-ffmpeg-complex-filter.d.ts +3 -5
- package/dist/create-ffmpeg-complex-filter.js +2 -11
- package/dist/create-ffmpeg-merge-filter.js +3 -3
- package/dist/create-silent-audio.d.ts +1 -1
- package/dist/crf.d.ts +5 -0
- package/dist/crf.js +64 -0
- package/dist/cycle-browser-tabs.d.ts +3 -2
- package/dist/cycle-browser-tabs.js +9 -2
- package/dist/delay-render-embedded-stack.d.ts +1 -1
- package/dist/ensure-frames-in-order.d.ts +1 -1
- package/dist/ensure-frames-in-order.js +3 -2
- package/dist/ensure-presentation-timestamp.d.ts +2 -0
- package/dist/ensure-presentation-timestamp.js +69 -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/symbolicateable-error.d.ts +1 -1
- package/dist/extract-frame-from-video.d.ts +16 -0
- package/dist/extract-frame-from-video.js +254 -0
- 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/frame-range.d.ts +2 -0
- package/dist/frame-range.js +49 -0
- package/dist/frame-to-ffmpeg-timestamp.d.ts +1 -0
- package/dist/frame-to-ffmpeg-timestamp.js +8 -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 +2 -2
- package/dist/get-codec-name.d.ts +1 -1
- package/dist/get-codec-name.js +5 -2
- package/dist/get-compositions.d.ts +15 -5
- package/dist/get-compositions.js +35 -11
- 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 +5 -0
- package/dist/get-extension-of-filename.d.ts +1 -1
- package/dist/get-extension-of-filename.js +3 -0
- package/dist/get-frame-padded-index.d.ts +14 -0
- package/dist/get-frame-padded-index.js +33 -0
- package/dist/get-frame-to-render.d.ts +1 -1
- package/dist/get-local-browser-executable.d.ts +2 -1
- package/dist/get-local-browser-executable.js +7 -5
- package/dist/get-port.js +30 -37
- package/dist/get-prores-profile-name.d.ts +2 -1
- package/dist/get-video-info.d.ts +3 -0
- package/dist/get-video-info.js +49 -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 +1 -0
- package/dist/guess-extension-for-media.js +27 -0
- package/dist/image-format.d.ts +6 -1
- package/dist/image-format.js +25 -1
- package/dist/index.d.ts +95 -20
- package/dist/index.js +93 -6
- 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 -0
- package/dist/is-beyond-last-frame.js +12 -0
- package/dist/last-frame-from-video-cache.d.ts +17 -0
- package/dist/last-frame-from-video-cache.js +55 -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 +25 -0
- package/dist/merge-audio-track.d.ts +3 -1
- package/dist/merge-audio-track.js +14 -8
- package/dist/mime-db.d.ts +6 -0
- package/dist/mime-db.js +8636 -0
- package/dist/mime-types.d.ts +2 -0
- package/dist/mime-types.js +89 -0
- package/dist/offthread-video-server.d.ts +17 -0
- package/dist/offthread-video-server.js +86 -0
- package/dist/open-browser.d.ts +10 -8
- package/dist/open-browser.js +37 -32
- package/dist/overwrite.d.ts +1 -0
- package/dist/overwrite.js +4 -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 +26 -0
- package/dist/prepare-server.d.ts +14 -2
- package/dist/prepare-server.js +38 -5
- package/dist/preprocess-audio-track.d.ts +5 -2
- package/dist/preprocess-audio-track.js +3 -3
- package/dist/prespawn-ffmpeg.d.ts +7 -1
- package/dist/prespawn-ffmpeg.js +20 -16
- package/dist/prestitcher-memory-usage.d.ts +12 -0
- package/dist/prestitcher-memory-usage.js +30 -0
- package/dist/prores-profile.d.ts +5 -0
- package/dist/prores-profile.js +23 -0
- package/dist/provide-screenshot.d.ts +5 -4
- package/dist/provide-screenshot.js +1 -2
- package/dist/puppeteer-evaluate.d.ts +1 -1
- package/dist/puppeteer-evaluate.js +3 -4
- package/dist/puppeteer-screenshot.d.ts +4 -2
- package/dist/puppeteer-screenshot.js +7 -5
- package/dist/quality.d.ts +1 -0
- package/dist/quality.js +21 -0
- package/dist/render-frames.d.ts +24 -8
- package/dist/render-frames.js +137 -63
- package/dist/render-media.d.ts +36 -9
- package/dist/render-media.js +191 -70
- package/dist/render-still.d.ts +25 -7
- package/dist/render-still.js +75 -24
- package/dist/screenshot-dom-element.d.ts +7 -7
- package/dist/screenshot-dom-element.js +3 -6
- package/dist/screenshot-task.d.ts +4 -2
- package/dist/screenshot-task.js +36 -23
- package/dist/seek-to-frame.d.ts +2 -2
- package/dist/seek-to-frame.js +2 -2
- package/dist/serve-handler/index.d.ts +4 -0
- package/dist/serve-handler/index.js +204 -0
- package/dist/serve-handler/is-path-inside.d.ts +1 -0
- package/dist/serve-handler/is-path-inside.js +27 -0
- package/dist/serve-handler/range-parser.d.ts +13 -0
- package/dist/serve-handler/range-parser.js +57 -0
- package/dist/serve-static.d.ts +11 -3
- package/dist/serve-static.js +37 -7
- package/dist/set-props-and-env.d.ts +6 -2
- package/dist/set-props-and-env.js +48 -12
- package/dist/stitch-frames-to-video.d.ts +17 -5
- package/dist/stitch-frames-to-video.js +129 -45
- package/dist/stringify-ffmpeg-filter.d.ts +2 -2
- package/dist/stringify-ffmpeg-filter.js +12 -7
- package/dist/symbolicate-stacktrace.d.ts +1 -1
- package/dist/symbolicate-stacktrace.js +3 -3
- package/dist/tmp-dir.js +5 -1
- package/dist/truthy.d.ts +3 -0
- package/dist/truthy.js +7 -0
- package/dist/types.d.ts +1 -1
- package/dist/validate-concurrency.d.ts +1 -0
- package/dist/validate-concurrency.js +24 -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 +1 -0
- package/dist/validate-every-nth-frame.js +21 -0
- package/dist/validate-ffmpeg.js +2 -3
- package/dist/validate-frame.d.ts +1 -0
- package/dist/validate-frame.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/wait-for-symbolication-error-to-be-done.d.ts +3 -0
- package/dist/wait-for-symbolication-error-to-be-done.js +34 -0
- package/dist/ws/ws-types.d.ts +14 -0
- package/dist/ws/ws-types.js +10 -0
- package/package.json +13 -16
- package/tsconfig.json +2 -2
- package/types/ws/index.d.ts +509 -0
- package/vitest.config.ts +8 -0
- 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-audio-channels.d.ts.map +0 -1
- package/dist/assets/get-audio-channels.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/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/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/chunk.d.ts.map +0 -1
- package/dist/chunk.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.map +0 -1
- package/dist/convert-to-pcm.js.map +0 -1
- package/dist/create-ffmpeg-complex-filter.d.ts.map +0 -1
- package/dist/create-ffmpeg-complex-filter.js.map +0 -1
- package/dist/create-ffmpeg-merge-filter.d.ts.map +0 -1
- package/dist/create-ffmpeg-merge-filter.js.map +0 -1
- package/dist/create-silent-audio.d.ts.map +0 -1
- package/dist/create-silent-audio.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-filter-file.d.ts.map +0 -1
- package/dist/ffmpeg-filter-file.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.map +0 -1
- 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-duration-from-frame-range.d.ts.map +0 -1
- package/dist/get-duration-from-frame-range.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 -8
- package/dist/make-assets-download-dir.js.map +0 -1
- package/dist/merge-audio-track.d.ts.map +0 -1
- package/dist/merge-audio-track.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/p-limit.d.ts.map +0 -1
- package/dist/p-limit.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/preprocess-audio-track.d.ts.map +0 -1
- package/dist/preprocess-audio-track.js.map +0 -1
- package/dist/prespawn-ffmpeg.d.ts.map +0 -1
- package/dist/prespawn-ffmpeg.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-frames.d.ts.map +0 -1
- package/dist/render-frames.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/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/stitch-frames-to-video.d.ts.map +0 -1
- package/dist/stitch-frames-to-video.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-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/dist/render-media.js
CHANGED
|
@@ -8,29 +8,47 @@ const fs_1 = __importDefault(require("fs"));
|
|
|
8
8
|
const os_1 = __importDefault(require("os"));
|
|
9
9
|
const path_1 = __importDefault(require("path"));
|
|
10
10
|
const remotion_1 = require("remotion");
|
|
11
|
+
const download_map_1 = require("./assets/download-map");
|
|
11
12
|
const can_use_parallel_encoding_1 = require("./can-use-parallel-encoding");
|
|
13
|
+
const codec_supports_media_1 = require("./codec-supports-media");
|
|
14
|
+
const crf_1 = require("./crf");
|
|
15
|
+
const delete_directory_1 = require("./delete-directory");
|
|
12
16
|
const ensure_frames_in_order_1 = require("./ensure-frames-in-order");
|
|
13
17
|
const ensure_output_directory_1 = require("./ensure-output-directory");
|
|
14
18
|
const get_duration_from_frame_range_1 = require("./get-duration-from-frame-range");
|
|
15
19
|
const get_extension_from_codec_1 = require("./get-extension-from-codec");
|
|
16
20
|
const get_extension_of_filename_1 = require("./get-extension-of-filename");
|
|
17
21
|
const get_frame_to_render_1 = require("./get-frame-to-render");
|
|
22
|
+
const is_audio_codec_1 = require("./is-audio-codec");
|
|
18
23
|
const legacy_webpack_config_1 = require("./legacy-webpack-config");
|
|
24
|
+
const make_cancel_signal_1 = require("./make-cancel-signal");
|
|
25
|
+
const overwrite_1 = require("./overwrite");
|
|
26
|
+
const perf_1 = require("./perf");
|
|
19
27
|
const prespawn_ffmpeg_1 = require("./prespawn-ffmpeg");
|
|
28
|
+
const prestitcher_memory_usage_1 = require("./prestitcher-memory-usage");
|
|
29
|
+
const quality_1 = require("./quality");
|
|
20
30
|
const render_frames_1 = require("./render-frames");
|
|
21
31
|
const stitch_frames_to_video_1 = require("./stitch-frames-to-video");
|
|
22
|
-
const tmp_dir_1 = require("./tmp-dir");
|
|
23
32
|
const validate_even_dimensions_with_codec_1 = require("./validate-even-dimensions-with-codec");
|
|
24
33
|
const validate_output_filename_1 = require("./validate-output-filename");
|
|
25
34
|
const validate_scale_1 = require("./validate-scale");
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
35
|
+
/**
|
|
36
|
+
*
|
|
37
|
+
* @description Render a video from a composition
|
|
38
|
+
* @link https://www.remotion.dev/docs/renderer/render-media
|
|
39
|
+
*/
|
|
40
|
+
const renderMedia = ({ parallelism, 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, ...options }) => {
|
|
41
|
+
var _a, _b, _c, _d;
|
|
42
|
+
(0, quality_1.validateQuality)(options.quality);
|
|
29
43
|
if (typeof crf !== 'undefined' && crf !== null) {
|
|
30
|
-
|
|
44
|
+
(0, crf_1.validateSelectedCrfAndCodecCombination)(crf, codec);
|
|
45
|
+
}
|
|
46
|
+
if (outputLocation) {
|
|
47
|
+
(0, validate_output_filename_1.validateOutputFilename)(codec, (0, get_extension_of_filename_1.getExtensionOfFilename)(outputLocation));
|
|
31
48
|
}
|
|
32
|
-
(0, validate_output_filename_1.validateOutputFilename)(codec, (0, get_extension_of_filename_1.getExtensionOfFilename)(outputLocation));
|
|
33
49
|
(0, validate_scale_1.validateScale)(scale);
|
|
50
|
+
const everyNthFrame = (_a = options.everyNthFrame) !== null && _a !== void 0 ? _a : 1;
|
|
51
|
+
const numberOfGifLoops = (_b = options.numberOfGifLoops) !== null && _b !== void 0 ? _b : null;
|
|
34
52
|
const serveUrl = (0, legacy_webpack_config_1.getServeUrlWithFallback)(options);
|
|
35
53
|
let stitchStage = 'encoding';
|
|
36
54
|
let stitcherFfmpeg;
|
|
@@ -39,37 +57,66 @@ const renderMedia = async ({ parallelism, proResProfile, crf, composition, image
|
|
|
39
57
|
let renderedFrames = 0;
|
|
40
58
|
let renderedDoneIn = null;
|
|
41
59
|
let encodedDoneIn = null;
|
|
60
|
+
let cancelled = false;
|
|
42
61
|
const renderStart = Date.now();
|
|
43
|
-
const
|
|
44
|
-
const
|
|
45
|
-
|
|
62
|
+
const downloadMap = (_c = options.downloadMap) !== null && _c !== void 0 ? _c : (0, download_map_1.makeDownloadMap)();
|
|
63
|
+
const { estimatedUsage, freeMemory, hasEnoughMemory } = (0, prestitcher_memory_usage_1.shouldUseParallelEncoding)({
|
|
64
|
+
height: composition.height,
|
|
65
|
+
width: composition.width,
|
|
66
|
+
});
|
|
67
|
+
const parallelEncoding = hasEnoughMemory && (0, can_use_parallel_encoding_1.canUseParallelEncoding)(codec);
|
|
68
|
+
if (options.verbose) {
|
|
69
|
+
console.log('[PRESTITCHER] Free memory:', freeMemory, 'Estimated usage parallel encoding', estimatedUsage);
|
|
70
|
+
console.log('[PRESTICHER]: Codec supports parallel rendering:', (0, can_use_parallel_encoding_1.canUseParallelEncoding)(codec));
|
|
71
|
+
if (parallelEncoding) {
|
|
72
|
+
console.log('[PRESTICHER] Parallel encoding is enabled.');
|
|
73
|
+
}
|
|
74
|
+
else {
|
|
75
|
+
console.log('[PRESTITCHER] Parallel encoding is disabled.');
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
const imageFormat = (0, is_audio_codec_1.isAudioCodec)(codec)
|
|
79
|
+
? 'none'
|
|
80
|
+
: (_d = options.imageFormat) !== null && _d !== void 0 ? _d : 'jpeg';
|
|
81
|
+
const quality = imageFormat === 'jpeg' ? options.quality : undefined;
|
|
46
82
|
const preEncodedFileLocation = parallelEncoding
|
|
47
|
-
? path_1.default.join(
|
|
83
|
+
? path_1.default.join(downloadMap.preEncode, 'pre-encode.' + (0, get_extension_from_codec_1.getFileExtensionFromCodec)(codec, 'chunk'))
|
|
48
84
|
: null;
|
|
49
85
|
const outputDir = parallelEncoding
|
|
50
86
|
? null
|
|
51
|
-
:
|
|
87
|
+
: fs_1.default.mkdtempSync(path_1.default.join(os_1.default.tmpdir(), 'react-motion-render'));
|
|
52
88
|
(0, validate_even_dimensions_with_codec_1.validateEvenDimensionsWithCodec)({
|
|
53
89
|
codec,
|
|
54
90
|
height: composition.height,
|
|
55
91
|
scale: scale !== null && scale !== void 0 ? scale : 1,
|
|
56
92
|
width: composition.width,
|
|
57
93
|
});
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
94
|
+
const callUpdate = () => {
|
|
95
|
+
onProgress === null || onProgress === void 0 ? void 0 : onProgress({
|
|
96
|
+
encodedDoneIn,
|
|
97
|
+
encodedFrames,
|
|
98
|
+
renderedDoneIn,
|
|
99
|
+
renderedFrames,
|
|
100
|
+
stitchStage,
|
|
101
|
+
});
|
|
102
|
+
};
|
|
103
|
+
const realFrameRange = (0, get_frame_to_render_1.getRealFrameRange)(composition.durationInFrames, frameRange !== null && frameRange !== void 0 ? frameRange : null);
|
|
104
|
+
const cancelRenderFrames = (0, make_cancel_signal_1.makeCancelSignal)();
|
|
105
|
+
const cancelPrestitcher = (0, make_cancel_signal_1.makeCancelSignal)();
|
|
106
|
+
const cancelStitcher = (0, make_cancel_signal_1.makeCancelSignal)();
|
|
107
|
+
cancelSignal === null || cancelSignal === void 0 ? void 0 : cancelSignal(() => {
|
|
108
|
+
cancelRenderFrames.cancel();
|
|
109
|
+
});
|
|
110
|
+
const { waitForRightTimeOfFrameToBeInserted, setFrameToStitch, waitForFinish } = (0, ensure_frames_in_order_1.ensureFramesInOrder)(realFrameRange);
|
|
111
|
+
const fps = composition.fps / (everyNthFrame !== null && everyNthFrame !== void 0 ? everyNthFrame : 1);
|
|
112
|
+
remotion_1.Internals.validateFps(fps, 'in "renderMedia()"', codec === 'gif');
|
|
113
|
+
const createPrestitcherIfNecessary = async () => {
|
|
114
|
+
var _a;
|
|
68
115
|
if (preEncodedFileLocation) {
|
|
69
116
|
preStitcher = await (0, prespawn_ffmpeg_1.prespawnFfmpeg)({
|
|
70
117
|
width: composition.width * (scale !== null && scale !== void 0 ? scale : 1),
|
|
71
118
|
height: composition.height * (scale !== null && scale !== void 0 ? scale : 1),
|
|
72
|
-
fps
|
|
119
|
+
fps,
|
|
73
120
|
outputLocation: preEncodedFileLocation,
|
|
74
121
|
pixelFormat,
|
|
75
122
|
codec,
|
|
@@ -79,15 +126,32 @@ const renderMedia = async ({ parallelism, proResProfile, crf, composition, image
|
|
|
79
126
|
encodedFrames = frame;
|
|
80
127
|
callUpdate();
|
|
81
128
|
},
|
|
82
|
-
verbose:
|
|
129
|
+
verbose: (_a = options.verbose) !== null && _a !== void 0 ? _a : false,
|
|
83
130
|
ffmpegExecutable,
|
|
84
|
-
imageFormat
|
|
131
|
+
imageFormat,
|
|
132
|
+
signal: cancelPrestitcher.cancelSignal,
|
|
85
133
|
});
|
|
86
134
|
stitcherFfmpeg = preStitcher.task;
|
|
87
135
|
}
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
136
|
+
};
|
|
137
|
+
const waitForPrestitcherIfNecessary = async () => {
|
|
138
|
+
var _a;
|
|
139
|
+
if (stitcherFfmpeg) {
|
|
140
|
+
await waitForFinish();
|
|
141
|
+
(_a = stitcherFfmpeg === null || stitcherFfmpeg === void 0 ? void 0 : stitcherFfmpeg.stdin) === null || _a === void 0 ? void 0 : _a.end();
|
|
142
|
+
try {
|
|
143
|
+
await stitcherFfmpeg;
|
|
144
|
+
}
|
|
145
|
+
catch (err) {
|
|
146
|
+
throw new Error(preStitcher === null || preStitcher === void 0 ? void 0 : preStitcher.getLogs());
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
};
|
|
150
|
+
const mediaSupport = (0, codec_supports_media_1.codecSupportsMedia)(codec);
|
|
151
|
+
const disableAudio = !mediaSupport.audio || muted;
|
|
152
|
+
const happyPath = createPrestitcherIfNecessary()
|
|
153
|
+
.then(() => {
|
|
154
|
+
const renderFramesProc = (0, render_frames_1.renderFrames)({
|
|
91
155
|
config: composition,
|
|
92
156
|
onFrameUpdate: (frame) => {
|
|
93
157
|
renderedFrames = frame;
|
|
@@ -102,16 +166,22 @@ const renderMedia = async ({ parallelism, proResProfile, crf, composition, image
|
|
|
102
166
|
},
|
|
103
167
|
inputProps,
|
|
104
168
|
envVariables,
|
|
105
|
-
imageFormat
|
|
169
|
+
imageFormat,
|
|
106
170
|
quality,
|
|
107
171
|
frameRange: frameRange !== null && frameRange !== void 0 ? frameRange : null,
|
|
108
172
|
puppeteerInstance,
|
|
173
|
+
everyNthFrame,
|
|
109
174
|
onFrameBuffer: parallelEncoding
|
|
110
175
|
? async (buffer, frame) => {
|
|
111
176
|
var _a;
|
|
112
177
|
await waitForRightTimeOfFrameToBeInserted(frame);
|
|
178
|
+
if (cancelled) {
|
|
179
|
+
return;
|
|
180
|
+
}
|
|
181
|
+
const id = (0, perf_1.startPerfMeasure)('piping');
|
|
113
182
|
(_a = stitcherFfmpeg === null || stitcherFfmpeg === void 0 ? void 0 : stitcherFfmpeg.stdin) === null || _a === void 0 ? void 0 : _a.write(buffer);
|
|
114
|
-
|
|
183
|
+
(0, perf_1.stopPerfMeasure)(id);
|
|
184
|
+
setFrameToStitch(Math.min(realFrameRange[1] + 1, frame + everyNthFrame));
|
|
115
185
|
}
|
|
116
186
|
: undefined,
|
|
117
187
|
serveUrl,
|
|
@@ -121,55 +191,106 @@ const renderMedia = async ({ parallelism, proResProfile, crf, composition, image
|
|
|
121
191
|
timeoutInMilliseconds,
|
|
122
192
|
chromiumOptions,
|
|
123
193
|
scale,
|
|
194
|
+
ffmpegExecutable,
|
|
195
|
+
ffprobeExecutable,
|
|
196
|
+
browserExecutable,
|
|
197
|
+
port,
|
|
198
|
+
cancelSignal: cancelRenderFrames.cancelSignal,
|
|
199
|
+
downloadMap,
|
|
200
|
+
muted: disableAudio,
|
|
124
201
|
});
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
catch (err) {
|
|
132
|
-
throw new Error(preStitcher === null || preStitcher === void 0 ? void 0 : preStitcher.getLogs());
|
|
133
|
-
}
|
|
134
|
-
}
|
|
202
|
+
return renderFramesProc;
|
|
203
|
+
})
|
|
204
|
+
.then((renderFramesReturn) => {
|
|
205
|
+
return Promise.all([renderFramesReturn, waitForPrestitcherIfNecessary()]);
|
|
206
|
+
})
|
|
207
|
+
.then(([{ assetsInfo }]) => {
|
|
135
208
|
renderedDoneIn = Date.now() - renderStart;
|
|
136
209
|
callUpdate();
|
|
137
|
-
|
|
210
|
+
if (outputLocation) {
|
|
211
|
+
(0, ensure_output_directory_1.ensureOutputDirectory)(outputLocation);
|
|
212
|
+
}
|
|
138
213
|
const stitchStart = Date.now();
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
214
|
+
return Promise.all([
|
|
215
|
+
(0, stitch_frames_to_video_1.stitchFramesToVideo)({
|
|
216
|
+
width: composition.width * (scale !== null && scale !== void 0 ? scale : 1),
|
|
217
|
+
height: composition.height * (scale !== null && scale !== void 0 ? scale : 1),
|
|
218
|
+
fps,
|
|
219
|
+
outputLocation,
|
|
220
|
+
internalOptions: {
|
|
221
|
+
preEncodedFileLocation,
|
|
222
|
+
imageFormat,
|
|
223
|
+
},
|
|
224
|
+
force: overwrite !== null && overwrite !== void 0 ? overwrite : overwrite_1.DEFAULT_OVERWRITE,
|
|
225
|
+
pixelFormat,
|
|
226
|
+
codec,
|
|
227
|
+
proResProfile,
|
|
228
|
+
crf,
|
|
229
|
+
assetsInfo,
|
|
230
|
+
ffmpegExecutable,
|
|
231
|
+
ffprobeExecutable,
|
|
232
|
+
onProgress: (frame) => {
|
|
233
|
+
stitchStage = 'muxing';
|
|
234
|
+
encodedFrames = frame;
|
|
235
|
+
callUpdate();
|
|
236
|
+
},
|
|
237
|
+
onDownload,
|
|
238
|
+
numberOfGifLoops,
|
|
239
|
+
verbose: options.verbose,
|
|
240
|
+
dir: outputDir !== null && outputDir !== void 0 ? outputDir : undefined,
|
|
241
|
+
cancelSignal: cancelStitcher.cancelSignal,
|
|
242
|
+
muted: disableAudio,
|
|
243
|
+
enforceAudioTrack,
|
|
244
|
+
}),
|
|
245
|
+
stitchStart,
|
|
246
|
+
]);
|
|
247
|
+
})
|
|
248
|
+
.then(([buffer, stitchStart]) => {
|
|
249
|
+
encodedFrames = (0, get_duration_from_frame_range_1.getFramesToRender)(realFrameRange, everyNthFrame).length;
|
|
165
250
|
encodedDoneIn = Date.now() - stitchStart;
|
|
166
251
|
callUpdate();
|
|
167
|
-
|
|
168
|
-
|
|
252
|
+
return buffer;
|
|
253
|
+
})
|
|
254
|
+
.catch((err) => {
|
|
255
|
+
/**
|
|
256
|
+
* When an error is thrown in renderFrames(...) (e.g., when delayRender() is used incorrectly), fs.unlinkSync(...) throws an error that the file is locked because ffmpeg is still running, and renderMedia returns it.
|
|
257
|
+
* Therefore we first kill the FFMPEG process before deleting the file
|
|
258
|
+
*/
|
|
259
|
+
cancelled = true;
|
|
260
|
+
cancelRenderFrames.cancel();
|
|
261
|
+
cancelStitcher.cancel();
|
|
262
|
+
cancelPrestitcher.cancel();
|
|
263
|
+
if (stitcherFfmpeg !== undefined && stitcherFfmpeg.exitCode === null) {
|
|
264
|
+
const promise = new Promise((resolve) => {
|
|
265
|
+
setTimeout(() => {
|
|
266
|
+
resolve();
|
|
267
|
+
}, 2000);
|
|
268
|
+
stitcherFfmpeg.on('close', resolve);
|
|
269
|
+
});
|
|
270
|
+
stitcherFfmpeg.kill();
|
|
271
|
+
return promise.then(() => {
|
|
272
|
+
throw err;
|
|
273
|
+
});
|
|
274
|
+
}
|
|
275
|
+
throw err;
|
|
276
|
+
})
|
|
277
|
+
.finally(() => {
|
|
169
278
|
if (preEncodedFileLocation !== null &&
|
|
170
279
|
fs_1.default.existsSync(preEncodedFileLocation)) {
|
|
171
|
-
|
|
280
|
+
(0, delete_directory_1.deleteDirectory)(path_1.default.dirname(preEncodedFileLocation));
|
|
172
281
|
}
|
|
173
|
-
|
|
282
|
+
// Clean download map if it was not passed in
|
|
283
|
+
if (!(options === null || options === void 0 ? void 0 : options.downloadMap)) {
|
|
284
|
+
(0, download_map_1.cleanDownloadMap)(downloadMap);
|
|
285
|
+
}
|
|
286
|
+
});
|
|
287
|
+
return Promise.race([
|
|
288
|
+
happyPath,
|
|
289
|
+
new Promise((_resolve, reject) => {
|
|
290
|
+
cancelSignal === null || cancelSignal === void 0 ? void 0 : cancelSignal(() => {
|
|
291
|
+
reject(new Error('renderMedia() got cancelled'));
|
|
292
|
+
});
|
|
293
|
+
}),
|
|
294
|
+
]);
|
|
174
295
|
};
|
|
175
296
|
exports.renderMedia = renderMedia;
|
package/dist/render-still.d.ts
CHANGED
|
@@ -1,9 +1,15 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
1
|
+
import type { SmallTCompMetadata } from 'remotion';
|
|
2
|
+
import type { RenderMediaOnDownload } from './assets/download-and-map-assets-to-file';
|
|
3
|
+
import type { DownloadMap } from './assets/download-map';
|
|
4
|
+
import type { BrowserExecutable } from './browser-executable';
|
|
5
|
+
import type { Browser as PuppeteerBrowser } from './browser/Browser';
|
|
6
|
+
import type { FfmpegExecutable } from './ffmpeg-executable';
|
|
7
|
+
import type { StillImageFormat } from './image-format';
|
|
8
|
+
import type { ServeUrlOrWebpackBundle } from './legacy-webpack-config';
|
|
9
|
+
import type { CancelSignal } from './make-cancel-signal';
|
|
10
|
+
import type { ChromiumOptions } from './open-browser';
|
|
5
11
|
declare type InnerStillOptions = {
|
|
6
|
-
composition:
|
|
12
|
+
composition: SmallTCompMetadata;
|
|
7
13
|
output: string;
|
|
8
14
|
frame?: number;
|
|
9
15
|
inputProps?: unknown;
|
|
@@ -17,10 +23,22 @@ declare type InnerStillOptions = {
|
|
|
17
23
|
timeoutInMilliseconds?: number;
|
|
18
24
|
chromiumOptions?: ChromiumOptions;
|
|
19
25
|
scale?: number;
|
|
26
|
+
onDownload?: RenderMediaOnDownload;
|
|
27
|
+
cancelSignal?: CancelSignal;
|
|
28
|
+
ffmpegExecutable?: FfmpegExecutable;
|
|
29
|
+
ffprobeExecutable?: FfmpegExecutable;
|
|
30
|
+
/**
|
|
31
|
+
* @deprecated Only for Remotion internal usage
|
|
32
|
+
*/
|
|
33
|
+
downloadMap?: DownloadMap;
|
|
34
|
+
};
|
|
35
|
+
declare type RenderStillOptions = InnerStillOptions & ServeUrlOrWebpackBundle & {
|
|
36
|
+
port?: number | null;
|
|
20
37
|
};
|
|
21
|
-
declare type RenderStillOptions = InnerStillOptions & ServeUrlOrWebpackBundle;
|
|
22
38
|
/**
|
|
23
|
-
*
|
|
39
|
+
*
|
|
40
|
+
* @description Render a still frame from a composition
|
|
41
|
+
* @link https://www.remotion.dev/docs/renderer/render-still
|
|
24
42
|
*/
|
|
25
43
|
export declare const renderStill: (options: RenderStillOptions) => Promise<void>;
|
|
26
44
|
export {};
|
package/dist/render-still.js
CHANGED
|
@@ -1,7 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
3
|
if (k2 === undefined) k2 = k;
|
|
4
|
-
Object.
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
5
9
|
}) : (function(o, m, k, k2) {
|
|
6
10
|
if (k2 === undefined) k2 = k;
|
|
7
11
|
o[k2] = m[k];
|
|
@@ -26,24 +30,29 @@ exports.renderStill = void 0;
|
|
|
26
30
|
const fs_1 = __importStar(require("fs"));
|
|
27
31
|
const path_1 = __importDefault(require("path"));
|
|
28
32
|
const remotion_1 = require("remotion");
|
|
33
|
+
const download_map_1 = require("./assets/download-map");
|
|
34
|
+
const browser_1 = require("./browser");
|
|
29
35
|
const ensure_output_directory_1 = require("./ensure-output-directory");
|
|
30
36
|
const handle_javascript_exception_1 = require("./error-handling/handle-javascript-exception");
|
|
37
|
+
const image_format_1 = require("./image-format");
|
|
31
38
|
const legacy_webpack_config_1 = require("./legacy-webpack-config");
|
|
32
39
|
const open_browser_1 = require("./open-browser");
|
|
33
40
|
const prepare_server_1 = require("./prepare-server");
|
|
34
41
|
const provide_screenshot_1 = require("./provide-screenshot");
|
|
35
42
|
const puppeteer_evaluate_1 = require("./puppeteer-evaluate");
|
|
43
|
+
const quality_1 = require("./quality");
|
|
36
44
|
const seek_to_frame_1 = require("./seek-to-frame");
|
|
37
45
|
const set_props_and_env_1 = require("./set-props-and-env");
|
|
46
|
+
const validate_frame_1 = require("./validate-frame");
|
|
38
47
|
const validate_puppeteer_timeout_1 = require("./validate-puppeteer-timeout");
|
|
39
48
|
const validate_scale_1 = require("./validate-scale");
|
|
40
|
-
const innerRenderStill = async ({ composition, quality, imageFormat = 'png', serveUrl, puppeteerInstance, dumpBrowserLogs = false, onError, inputProps, envVariables, output, frame = 0, overwrite = true, browserExecutable, timeoutInMilliseconds, chromiumOptions, scale, }) => {
|
|
49
|
+
const innerRenderStill = async ({ composition, quality, imageFormat = 'png', serveUrl, puppeteerInstance, dumpBrowserLogs = false, onError, inputProps, envVariables, output, frame = 0, overwrite = true, browserExecutable, timeoutInMilliseconds, chromiumOptions, scale, proxyPort, cancelSignal, }) => {
|
|
41
50
|
remotion_1.Internals.validateDimension(composition.height, 'height', 'in the `config` object passed to `renderStill()`');
|
|
42
51
|
remotion_1.Internals.validateDimension(composition.width, 'width', 'in the `config` object passed to `renderStill()`');
|
|
43
|
-
remotion_1.Internals.validateFps(composition.fps, 'in the `config` object of `renderStill()`');
|
|
52
|
+
remotion_1.Internals.validateFps(composition.fps, 'in the `config` object of `renderStill()`', false);
|
|
44
53
|
remotion_1.Internals.validateDurationInFrames(composition.durationInFrames, 'in the `config` object passed to `renderStill()`');
|
|
45
|
-
|
|
46
|
-
|
|
54
|
+
(0, image_format_1.validateNonNullImageFormat)(imageFormat);
|
|
55
|
+
(0, validate_frame_1.validateFrame)(frame, composition.durationInFrames);
|
|
47
56
|
(0, validate_puppeteer_timeout_1.validatePuppeteerTimeout)(timeoutInMilliseconds);
|
|
48
57
|
(0, validate_scale_1.validateScale)(scale);
|
|
49
58
|
if (typeof output !== 'string') {
|
|
@@ -53,7 +62,7 @@ const innerRenderStill = async ({ composition, quality, imageFormat = 'png', ser
|
|
|
53
62
|
if (quality !== undefined && imageFormat !== 'jpeg') {
|
|
54
63
|
throw new Error("You can only pass the `quality` option if `imageFormat` is 'jpeg'.");
|
|
55
64
|
}
|
|
56
|
-
|
|
65
|
+
(0, quality_1.validateQuality)(quality);
|
|
57
66
|
if (fs_1.default.existsSync(output)) {
|
|
58
67
|
if (!overwrite) {
|
|
59
68
|
throw new Error(`Cannot render still - "overwrite" option was set to false, but the output destination ${output} already exists.`);
|
|
@@ -64,18 +73,27 @@ const innerRenderStill = async ({ composition, quality, imageFormat = 'png', ser
|
|
|
64
73
|
}
|
|
65
74
|
}
|
|
66
75
|
(0, ensure_output_directory_1.ensureOutputDirectory)(output);
|
|
67
|
-
const browserInstance = puppeteerInstance !== null && puppeteerInstance !== void 0 ? puppeteerInstance : (await (0, open_browser_1.openBrowser)(
|
|
76
|
+
const browserInstance = puppeteerInstance !== null && puppeteerInstance !== void 0 ? puppeteerInstance : (await (0, open_browser_1.openBrowser)(browser_1.DEFAULT_BROWSER, {
|
|
68
77
|
browserExecutable,
|
|
69
78
|
shouldDumpIo: dumpBrowserLogs,
|
|
70
79
|
chromiumOptions,
|
|
71
80
|
forceDeviceScaleFactor: scale !== null && scale !== void 0 ? scale : 1,
|
|
72
81
|
}));
|
|
73
82
|
const page = await browserInstance.newPage();
|
|
74
|
-
page.setViewport({
|
|
83
|
+
await page.setViewport({
|
|
75
84
|
width: composition.width,
|
|
76
85
|
height: composition.height,
|
|
77
86
|
deviceScaleFactor: scale !== null && scale !== void 0 ? scale : 1,
|
|
78
87
|
});
|
|
88
|
+
const errorCallback = (err) => {
|
|
89
|
+
onError(err);
|
|
90
|
+
cleanup();
|
|
91
|
+
};
|
|
92
|
+
const cleanUpJSException = (0, handle_javascript_exception_1.handleJavascriptException)({
|
|
93
|
+
page,
|
|
94
|
+
onError: errorCallback,
|
|
95
|
+
frame: null,
|
|
96
|
+
});
|
|
79
97
|
const cleanup = async () => {
|
|
80
98
|
cleanUpJSException();
|
|
81
99
|
if (puppeteerInstance) {
|
|
@@ -87,14 +105,8 @@ const innerRenderStill = async ({ composition, quality, imageFormat = 'png', ser
|
|
|
87
105
|
});
|
|
88
106
|
}
|
|
89
107
|
};
|
|
90
|
-
|
|
91
|
-
onError(err);
|
|
108
|
+
cancelSignal === null || cancelSignal === void 0 ? void 0 : cancelSignal(() => {
|
|
92
109
|
cleanup();
|
|
93
|
-
};
|
|
94
|
-
const cleanUpJSException = (0, handle_javascript_exception_1.handleJavascriptException)({
|
|
95
|
-
page,
|
|
96
|
-
onError: errorCallback,
|
|
97
|
-
frame: null,
|
|
98
110
|
});
|
|
99
111
|
await (0, set_props_and_env_1.setPropsAndEnv)({
|
|
100
112
|
inputProps,
|
|
@@ -103,6 +115,10 @@ const innerRenderStill = async ({ composition, quality, imageFormat = 'png', ser
|
|
|
103
115
|
serveUrl,
|
|
104
116
|
initialFrame: frame,
|
|
105
117
|
timeoutInMilliseconds,
|
|
118
|
+
proxyPort,
|
|
119
|
+
retriesRemaining: 2,
|
|
120
|
+
audioEnabled: false,
|
|
121
|
+
videoEnabled: true,
|
|
106
122
|
});
|
|
107
123
|
await (0, puppeteer_evaluate_1.puppeteerEvaluateWithCatch)({
|
|
108
124
|
pageFunction: (id) => {
|
|
@@ -128,20 +144,55 @@ const innerRenderStill = async ({ composition, quality, imageFormat = 'png', ser
|
|
|
128
144
|
await cleanup();
|
|
129
145
|
};
|
|
130
146
|
/**
|
|
131
|
-
*
|
|
147
|
+
*
|
|
148
|
+
* @description Render a still frame from a composition
|
|
149
|
+
* @link https://www.remotion.dev/docs/renderer/render-still
|
|
132
150
|
*/
|
|
133
|
-
const renderStill =
|
|
151
|
+
const renderStill = (options) => {
|
|
152
|
+
var _a, _b;
|
|
134
153
|
const selectedServeUrl = (0, legacy_webpack_config_1.getServeUrlWithFallback)(options);
|
|
135
|
-
const
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
154
|
+
const downloadMap = (_a = options.downloadMap) !== null && _a !== void 0 ? _a : (0, download_map_1.makeDownloadMap)();
|
|
155
|
+
const onDownload = (_b = options.onDownload) !== null && _b !== void 0 ? _b : (() => () => undefined);
|
|
156
|
+
const happyPath = new Promise((resolve, reject) => {
|
|
157
|
+
var _a, _b, _c;
|
|
158
|
+
const onError = (err) => reject(err);
|
|
159
|
+
let close = null;
|
|
160
|
+
(0, prepare_server_1.prepareServer)({
|
|
161
|
+
webpackConfigOrServeUrl: selectedServeUrl,
|
|
162
|
+
onDownload,
|
|
163
|
+
onError,
|
|
164
|
+
ffmpegExecutable: (_a = options.ffmpegExecutable) !== null && _a !== void 0 ? _a : null,
|
|
165
|
+
ffprobeExecutable: (_b = options.ffprobeExecutable) !== null && _b !== void 0 ? _b : null,
|
|
166
|
+
port: (_c = options.port) !== null && _c !== void 0 ? _c : null,
|
|
167
|
+
downloadMap,
|
|
168
|
+
})
|
|
169
|
+
.then(({ serveUrl, closeServer, offthreadPort }) => {
|
|
170
|
+
close = closeServer;
|
|
171
|
+
return innerRenderStill({
|
|
172
|
+
...options,
|
|
173
|
+
serveUrl,
|
|
174
|
+
onError: (err) => reject(err),
|
|
175
|
+
proxyPort: offthreadPort,
|
|
176
|
+
});
|
|
141
177
|
})
|
|
142
178
|
.then((res) => resolve(res))
|
|
143
179
|
.catch((err) => reject(err))
|
|
144
|
-
.finally(() =>
|
|
180
|
+
.finally(() => {
|
|
181
|
+
// Clean download map if it was not passed in
|
|
182
|
+
if (!(options === null || options === void 0 ? void 0 : options.downloadMap)) {
|
|
183
|
+
(0, download_map_1.cleanDownloadMap)(downloadMap);
|
|
184
|
+
}
|
|
185
|
+
return close === null || close === void 0 ? void 0 : close();
|
|
186
|
+
});
|
|
145
187
|
});
|
|
188
|
+
return Promise.race([
|
|
189
|
+
happyPath,
|
|
190
|
+
new Promise((_resolve, reject) => {
|
|
191
|
+
var _a;
|
|
192
|
+
(_a = options.cancelSignal) === null || _a === void 0 ? void 0 : _a.call(options, () => {
|
|
193
|
+
reject(new Error('renderStill() got cancelled'));
|
|
194
|
+
});
|
|
195
|
+
}),
|
|
196
|
+
]);
|
|
146
197
|
};
|
|
147
198
|
exports.renderStill = renderStill;
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
|
|
2
|
-
import {
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
import type { Page } from './browser/BrowserPage';
|
|
3
|
+
import type { ImageFormat } from './image-format';
|
|
3
4
|
export declare const screenshotDOMElement: ({ page, imageFormat, quality, opts, }: {
|
|
4
|
-
page:
|
|
5
|
+
page: Page;
|
|
5
6
|
imageFormat: ImageFormat;
|
|
6
7
|
quality: number | undefined;
|
|
7
|
-
opts
|
|
8
|
-
path
|
|
9
|
-
|
|
10
|
-
} | undefined;
|
|
8
|
+
opts: {
|
|
9
|
+
path: string | null;
|
|
10
|
+
};
|
|
11
11
|
}) => Promise<Buffer>;
|
|
@@ -3,11 +3,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.screenshotDOMElement = void 0;
|
|
4
4
|
const puppeteer_evaluate_1 = require("./puppeteer-evaluate");
|
|
5
5
|
const puppeteer_screenshot_1 = require("./puppeteer-screenshot");
|
|
6
|
-
const screenshotDOMElement = async ({ page, imageFormat, quality, opts
|
|
7
|
-
const
|
|
8
|
-
const { selector } = opts;
|
|
9
|
-
if (!selector)
|
|
10
|
-
throw Error('Please provide a selector.');
|
|
6
|
+
const screenshotDOMElement = async ({ page, imageFormat, quality, opts, }) => {
|
|
7
|
+
const { path } = opts;
|
|
11
8
|
if (imageFormat === 'png') {
|
|
12
9
|
await (0, puppeteer_evaluate_1.puppeteerEvaluateWithCatch)({
|
|
13
10
|
pageFunction: () => {
|
|
@@ -33,7 +30,7 @@ const screenshotDOMElement = async ({ page, imageFormat, quality, opts = {}, })
|
|
|
33
30
|
}
|
|
34
31
|
return (0, puppeteer_screenshot_1.screenshot)(page, {
|
|
35
32
|
omitBackground: imageFormat === 'png',
|
|
36
|
-
path,
|
|
33
|
+
path: path !== null && path !== void 0 ? path : undefined,
|
|
37
34
|
type: imageFormat,
|
|
38
35
|
quality,
|
|
39
36
|
});
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
import {
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
import type { Page } from './browser/BrowserPage';
|
|
3
|
+
import type { ScreenshotOptions } from './browser/ScreenshotOptions';
|
|
4
|
+
import type { StillImageFormat } from './image-format';
|
|
3
5
|
export declare const _screenshotTask: (page: Page, format: StillImageFormat, options: ScreenshotOptions) => Promise<Buffer | string>;
|