@remotion/renderer 4.0.0-fastlambda.8 → 4.0.0-lambda.3
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/cleanup-assets.d.ts +2 -0
- package/dist/assets/cleanup-assets.js +2 -0
- package/dist/assets/download-and-map-assets-to-file.d.ts +6 -0
- package/dist/assets/download-and-map-assets-to-file.js +46 -19
- package/dist/assets/ffmpeg-volume-expression.d.ts +2 -1
- package/dist/assets/ffmpeg-volume-expression.js +15 -12
- package/dist/assets/get-audio-channels.d.ts +5 -2
- package/dist/assets/get-audio-channels.js +15 -4
- package/dist/browser/Accessibility.d.ts +175 -0
- package/dist/browser/Accessibility.js +423 -0
- package/dist/browser/AriaQueryHandler.d.ts +20 -0
- package/dist/browser/AriaQueryHandler.js +108 -0
- package/dist/browser/Browser.d.ts +209 -0
- package/dist/browser/Browser.js +402 -0
- package/dist/browser/BrowserConnector.d.ts +26 -0
- package/dist/browser/BrowserConnector.js +49 -0
- package/dist/browser/BrowserFetcher.d.ts +89 -0
- package/dist/browser/BrowserFetcher.js +512 -0
- package/dist/browser/BrowserRunner.d.ts +39 -0
- package/dist/browser/BrowserRunner.js +308 -0
- package/dist/browser/Connection.d.ts +49 -0
- package/dist/browser/Connection.js +262 -0
- package/dist/browser/ConnectionTransport.d.ts +21 -0
- package/dist/browser/ConnectionTransport.js +17 -0
- package/dist/browser/ConsoleMessage.d.ts +55 -0
- package/dist/browser/ConsoleMessage.js +75 -0
- package/dist/browser/Coverage.d.ts +180 -0
- package/dist/browser/Coverage.js +371 -0
- package/dist/browser/DOMWorld.d.ts +50 -0
- package/dist/browser/DOMWorld.js +280 -0
- package/dist/browser/Debug.d.ts +19 -0
- package/dist/browser/Debug.js +42 -0
- package/dist/browser/DeviceDescriptors.d.ts +40 -0
- package/dist/browser/DeviceDescriptors.js +1407 -0
- package/dist/browser/EmulationManager.d.ts +7 -0
- package/dist/browser/EmulationManager.js +40 -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 +70 -0
- package/dist/browser/EventEmitter.js +102 -0
- package/dist/browser/ExecutionContext.d.ts +35 -0
- package/dist/browser/ExecutionContext.js +190 -0
- package/dist/browser/FileChooser.d.ts +56 -0
- package/dist/browser/FileChooser.js +86 -0
- package/dist/browser/FrameManager.d.ts +96 -0
- package/dist/browser/FrameManager.js +512 -0
- package/dist/browser/HTTPRequest.d.ts +42 -0
- package/dist/browser/HTTPRequest.js +82 -0
- package/dist/browser/HTTPResponse.d.ts +100 -0
- package/dist/browser/HTTPResponse.js +196 -0
- package/dist/browser/Input.d.ts +355 -0
- package/dist/browser/Input.js +592 -0
- package/dist/browser/JSHandle.d.ts +36 -0
- package/dist/browser/JSHandle.js +93 -0
- package/dist/browser/LaunchOptions.d.ts +117 -0
- package/dist/browser/LaunchOptions.js +17 -0
- package/dist/browser/Launcher.d.ts +9 -0
- package/dist/browser/Launcher.js +602 -0
- package/dist/browser/LifecycleWatcher.d.ts +29 -0
- package/dist/browser/LifecycleWatcher.js +193 -0
- package/dist/browser/NetworkConditions.d.ts +26 -0
- package/dist/browser/NetworkConditions.js +33 -0
- package/dist/browser/NetworkEventManager.d.ts +35 -0
- package/dist/browser/NetworkEventManager.js +128 -0
- package/dist/browser/NetworkManager.d.ts +36 -0
- package/dist/browser/NetworkManager.js +284 -0
- package/dist/browser/NodeWebSocketTransport.d.ts +11 -0
- package/dist/browser/NodeWebSocketTransport.js +90 -0
- package/dist/browser/PDFOptions.d.ts +165 -0
- package/dist/browser/PDFOptions.js +34 -0
- package/dist/browser/PipeTransport.d.ts +10 -0
- package/dist/browser/PipeTransport.js +86 -0
- package/dist/browser/Product.d.ts +16 -0
- package/dist/browser/Product.js +17 -0
- package/dist/browser/Puppeteer.d.ts +35 -0
- package/dist/browser/Puppeteer.js +17 -0
- package/dist/browser/PuppeteerNode.d.ts +92 -0
- package/dist/browser/PuppeteerNode.js +143 -0
- package/dist/browser/PuppeteerViewport.d.ts +5 -0
- package/dist/browser/PuppeteerViewport.js +2 -0
- package/dist/browser/QueryHandler.d.ts +64 -0
- package/dist/browser/QueryHandler.js +183 -0
- package/dist/browser/ScreenshotOptions.d.ts +14 -0
- package/dist/browser/ScreenshotOptions.js +2 -0
- package/dist/browser/SecurityDetails.d.ts +55 -0
- package/dist/browser/SecurityDetails.js +95 -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 +23 -0
- package/dist/browser/TimeoutSettings.js +62 -0
- package/dist/browser/Tracing.d.ts +45 -0
- package/dist/browser/Tracing.js +136 -0
- package/dist/browser/USKeyboardLayout.d.ts +39 -0
- package/dist/browser/USKeyboardLayout.js +406 -0
- package/dist/browser/WebWorker.d.ts +96 -0
- package/dist/browser/WebWorker.js +122 -0
- package/dist/browser/assert.d.ts +21 -0
- package/dist/browser/assert.js +29 -0
- package/dist/browser/compat.d.ts +2 -0
- package/dist/browser/compat.js +17 -0
- package/dist/browser/create-browser-fetcher.d.ts +17 -0
- package/dist/browser/create-browser-fetcher.js +140 -0
- package/dist/browser/dialog.d.ts +70 -0
- package/dist/browser/dialog.js +114 -0
- package/dist/browser/environment.d.ts +16 -0
- package/dist/browser/environment.js +19 -0
- package/dist/browser/fetch.d.ts +16 -0
- package/dist/browser/fetch.js +46 -0
- package/dist/browser/find-up.d.ts +4 -0
- package/dist/browser/find-up.js +85 -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/page.d.ts +78 -0
- package/dist/browser/page.js +277 -0
- package/dist/browser/pkg-dir.d.ts +3 -0
- package/dist/browser/pkg-dir.js +13 -0
- package/dist/browser/revisions.d.ts +21 -0
- package/dist/browser/revisions.js +22 -0
- package/dist/browser/util.d.ts +46 -0
- package/dist/browser/util.js +161 -0
- package/dist/calculate-ffmpeg-filters.js +2 -2
- package/dist/combine-videos.d.ts +2 -1
- package/dist/combine-videos.js +8 -1
- package/dist/cycle-browser-tabs.d.ts +2 -1
- package/dist/cycle-browser-tabs.js +9 -2
- package/dist/ensure-presentation-timestamp.d.ts +1 -0
- package/dist/ensure-presentation-timestamp.js +57 -0
- package/dist/extract-frame-from-video.d.ts +11 -0
- package/dist/extract-frame-from-video.js +197 -0
- package/dist/frame-to-ffmpeg-timestamp.d.ts +1 -0
- package/dist/frame-to-ffmpeg-timestamp.js +8 -0
- package/dist/get-compositions.d.ts +5 -2
- package/dist/get-compositions.js +23 -5
- package/dist/get-duration-of-asset.d.ts +7 -0
- package/dist/get-duration-of-asset.js +36 -0
- package/dist/get-port.js +26 -24
- package/dist/index.d.ts +33 -9
- package/dist/index.js +14 -5
- package/dist/is-beyond-last-frame.d.ts +2 -0
- package/dist/is-beyond-last-frame.js +12 -0
- package/dist/last-frame-from-video-cache.d.ts +10 -0
- package/dist/last-frame-from-video-cache.js +50 -0
- package/dist/make-assets-download-dir.js +6 -1
- package/dist/make-cancel-signal.d.ts +7 -0
- package/dist/make-cancel-signal.js +25 -0
- package/dist/merge-audio-track.js +2 -2
- package/dist/offthread-video-server.d.ts +14 -0
- package/dist/offthread-video-server.js +67 -0
- package/dist/open-browser.d.ts +6 -6
- package/dist/open-browser.js +24 -20
- package/dist/prepare-server.d.ts +13 -2
- package/dist/prepare-server.js +35 -5
- package/dist/preprocess-audio-track.d.ts +1 -0
- package/dist/preprocess-audio-track.js +2 -2
- package/dist/prespawn-ffmpeg.d.ts +2 -0
- package/dist/prespawn-ffmpeg.js +10 -9
- package/dist/provide-screenshot.js +1 -1
- package/dist/puppeteer-screenshot.js +5 -1
- package/dist/render-frames.d.ts +6 -1
- package/dist/render-frames.js +96 -37
- package/dist/render-media.d.ts +12 -2
- package/dist/render-media.js +127 -54
- package/dist/render-still.d.ts +14 -4
- package/dist/render-still.js +58 -19
- package/dist/serve-handler/glob-slash.d.ts +1 -0
- package/dist/serve-handler/glob-slash.js +12 -0
- package/dist/serve-handler/index.d.ts +4 -0
- package/dist/serve-handler/index.js +205 -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 +10 -3
- package/dist/serve-static.js +22 -4
- package/dist/set-props-and-env.d.ts +3 -1
- package/dist/set-props-and-env.js +28 -6
- package/dist/stitch-frames-to-video.d.ts +4 -1
- package/dist/stitch-frames-to-video.js +36 -15
- package/dist/stringify-ffmpeg-filter.js +3 -0
- package/dist/tmp-dir.js +5 -1
- package/dist/validate-fps-for-gif.d.ts +2 -0
- package/dist/validate-fps-for-gif.js +9 -0
- package/package.json +6 -7
package/dist/open-browser.js
CHANGED
|
@@ -10,11 +10,17 @@ const path_1 = __importDefault(require("path"));
|
|
|
10
10
|
const puppeteer_core_1 = __importDefault(require("puppeteer-core"));
|
|
11
11
|
const remotion_1 = require("remotion");
|
|
12
12
|
const get_local_browser_executable_1 = require("./get-local-browser-executable");
|
|
13
|
-
const validRenderers = ['angle', 'egl', 'swiftshader'];
|
|
13
|
+
const validRenderers = ['swangle', 'angle', 'egl', 'swiftshader'];
|
|
14
14
|
const getOpenGlRenderer = (option) => {
|
|
15
15
|
const renderer = option !== null && option !== void 0 ? option : remotion_1.Internals.DEFAULT_OPENGL_RENDERER;
|
|
16
16
|
remotion_1.Internals.validateOpenGlRenderer(renderer);
|
|
17
|
-
|
|
17
|
+
if (renderer === 'swangle') {
|
|
18
|
+
return [`--use-gl=angle`, `--use-angle=swiftshader`];
|
|
19
|
+
}
|
|
20
|
+
if (renderer === null) {
|
|
21
|
+
return [];
|
|
22
|
+
}
|
|
23
|
+
return [`--use-gl=${renderer}`];
|
|
18
24
|
};
|
|
19
25
|
const browserInstances = [];
|
|
20
26
|
const killAllBrowsers = async () => {
|
|
@@ -27,7 +33,7 @@ const killAllBrowsers = async () => {
|
|
|
27
33
|
};
|
|
28
34
|
exports.killAllBrowsers = killAllBrowsers;
|
|
29
35
|
const openBrowser = async (browser, options) => {
|
|
30
|
-
var _a, _b, _c, _d, _e, _f, _g;
|
|
36
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j;
|
|
31
37
|
if (browser === 'firefox' && !remotion_1.Internals.FEATURE_FLAG_FIREFOX_SUPPORT) {
|
|
32
38
|
throw new TypeError('Firefox supported is not yet turned on. Stay tuned for the future.');
|
|
33
39
|
}
|
|
@@ -38,13 +44,9 @@ const openBrowser = async (browser, options) => {
|
|
|
38
44
|
executablePath,
|
|
39
45
|
product: browser,
|
|
40
46
|
dumpio: (_e = options === null || options === void 0 ? void 0 : options.shouldDumpIo) !== null && _e !== void 0 ? _e : false,
|
|
41
|
-
headless: false,
|
|
42
47
|
ignoreDefaultArgs: true,
|
|
43
|
-
defaultViewport: {
|
|
44
|
-
width: 1920,
|
|
45
|
-
height: 1080,
|
|
46
|
-
},
|
|
47
48
|
args: [
|
|
49
|
+
'about:blank',
|
|
48
50
|
'--allow-pre-commit-input',
|
|
49
51
|
'--disable-background-networking',
|
|
50
52
|
'--enable-features=NetworkService,NetworkServiceInProcess',
|
|
@@ -56,9 +58,11 @@ const openBrowser = async (browser, options) => {
|
|
|
56
58
|
'--disable-default-apps',
|
|
57
59
|
'--disable-dev-shm-usage',
|
|
58
60
|
'--disable-extensions',
|
|
61
|
+
'--no-proxy-server',
|
|
62
|
+
"--proxy-server='direct://'",
|
|
63
|
+
'--proxy-bypass-list=*',
|
|
59
64
|
// TODO: remove AvoidUnnecessaryBeforeUnloadCheckSync below
|
|
60
65
|
// once crbug.com/1324138 is fixed and released.
|
|
61
|
-
'--disable-features=Translate,BackForwardCache,AvoidUnnecessaryBeforeUnloadCheckSync',
|
|
62
66
|
'--disable-hang-monitor',
|
|
63
67
|
'--disable-ipc-flooding-protection',
|
|
64
68
|
'--disable-popup-blocking',
|
|
@@ -72,36 +76,36 @@ const openBrowser = async (browser, options) => {
|
|
|
72
76
|
'--enable-automation',
|
|
73
77
|
'--password-store=basic',
|
|
74
78
|
'--use-mock-keychain',
|
|
75
|
-
(options === null || options === void 0 ? void 0 : options.forceDeviceScaleFactor)
|
|
76
|
-
? `--force-device-scale-factor=${options.forceDeviceScaleFactor}`
|
|
77
|
-
: null,
|
|
78
79
|
// TODO(sadym): remove '--enable-blink-features=IdleDetection'
|
|
79
80
|
// once IdleDetection is turned on by default.
|
|
80
81
|
'--enable-blink-features=IdleDetection',
|
|
81
82
|
'--export-tagged-pdf',
|
|
82
83
|
'--intensive-wake-up-throttling-policy=0',
|
|
83
|
-
'--headless',
|
|
84
|
+
((_g = (_f = options === null || options === void 0 ? void 0 : options.chromiumOptions) === null || _f === void 0 ? void 0 : _f.headless) !== null && _g !== void 0 ? _g : true) ? '--headless' : null,
|
|
84
85
|
'--no-sandbox',
|
|
85
86
|
'--disable-setuid-sandbox',
|
|
86
|
-
|
|
87
|
-
customGlRenderer ? `--use-gl=${customGlRenderer}` : null,
|
|
87
|
+
...customGlRenderer,
|
|
88
88
|
'--disable-background-media-suspend',
|
|
89
89
|
process.platform === 'linux' ? '--single-process' : null,
|
|
90
90
|
'--allow-running-insecure-content',
|
|
91
91
|
'--disable-component-update',
|
|
92
92
|
'--disable-domain-reliability',
|
|
93
|
-
'--disable-features=AudioServiceOutOfProcess,IsolateOrigins,site-per-process',
|
|
93
|
+
'--disable-features=AudioServiceOutOfProcess,IsolateOrigins,site-per-process,Translate,BackForwardCache,AvoidUnnecessaryBeforeUnloadCheckSync,IntensiveWakeUpThrottling',
|
|
94
94
|
'--disable-print-preview',
|
|
95
95
|
'--disable-site-isolation-trials',
|
|
96
|
-
'--disk-cache-size=
|
|
96
|
+
'--disk-cache-size=268435456',
|
|
97
97
|
'--hide-scrollbars',
|
|
98
98
|
'--no-default-browser-check',
|
|
99
99
|
'--no-pings',
|
|
100
|
+
'--font-render-hinting=none',
|
|
100
101
|
'--no-zygote',
|
|
101
|
-
(
|
|
102
|
+
(options === null || options === void 0 ? void 0 : options.forceDeviceScaleFactor)
|
|
103
|
+
? `--force-device-scale-factor=${options.forceDeviceScaleFactor}`
|
|
104
|
+
: null,
|
|
105
|
+
((_h = options === null || options === void 0 ? void 0 : options.chromiumOptions) === null || _h === void 0 ? void 0 : _h.ignoreCertificateErrors)
|
|
102
106
|
? '--ignore-certificate-errors'
|
|
103
107
|
: null,
|
|
104
|
-
...(((
|
|
108
|
+
...(((_j = options === null || options === void 0 ? void 0 : options.chromiumOptions) === null || _j === void 0 ? void 0 : _j.disableWebSecurity)
|
|
105
109
|
? [
|
|
106
110
|
'--disable-web-security',
|
|
107
111
|
'--user-data-dir=' +
|
|
@@ -111,7 +115,7 @@ const openBrowser = async (browser, options) => {
|
|
|
111
115
|
].filter(Boolean),
|
|
112
116
|
});
|
|
113
117
|
const pages = await browserInstance.pages();
|
|
114
|
-
pages.
|
|
118
|
+
await pages[0].close();
|
|
115
119
|
browserInstances.push(browserInstance);
|
|
116
120
|
return browserInstance;
|
|
117
121
|
};
|
package/dist/prepare-server.d.ts
CHANGED
|
@@ -1,4 +1,15 @@
|
|
|
1
|
-
|
|
1
|
+
import { FfmpegExecutable } from 'remotion';
|
|
2
|
+
import { RenderMediaOnDownload } from './assets/download-and-map-assets-to-file';
|
|
3
|
+
export declare const prepareServer: ({ downloadDir, ffmpegExecutable, ffprobeExecutable, onDownload, onError, webpackConfigOrServeUrl, port, }: {
|
|
4
|
+
webpackConfigOrServeUrl: string;
|
|
5
|
+
downloadDir: string;
|
|
6
|
+
onDownload: RenderMediaOnDownload;
|
|
7
|
+
onError: (err: Error) => void;
|
|
8
|
+
ffmpegExecutable: FfmpegExecutable;
|
|
9
|
+
ffprobeExecutable: FfmpegExecutable;
|
|
10
|
+
port: number | null;
|
|
11
|
+
}) => Promise<{
|
|
2
12
|
serveUrl: string;
|
|
3
|
-
closeServer: () => Promise<
|
|
13
|
+
closeServer: () => Promise<unknown>;
|
|
14
|
+
offthreadPort: number;
|
|
4
15
|
}>;
|
package/dist/prepare-server.js
CHANGED
|
@@ -1,19 +1,49 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
2
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
6
|
exports.prepareServer = void 0;
|
|
7
|
+
const fs_1 = require("fs");
|
|
8
|
+
const path_1 = __importDefault(require("path"));
|
|
4
9
|
const is_serve_url_1 = require("./is-serve-url");
|
|
5
10
|
const serve_static_1 = require("./serve-static");
|
|
6
|
-
const prepareServer = async (webpackConfigOrServeUrl) => {
|
|
11
|
+
const prepareServer = async ({ downloadDir, ffmpegExecutable, ffprobeExecutable, onDownload, onError, webpackConfigOrServeUrl, port, }) => {
|
|
7
12
|
if ((0, is_serve_url_1.isServeUrl)(webpackConfigOrServeUrl)) {
|
|
13
|
+
const { port: offthreadPort, close: closeProxy } = await (0, serve_static_1.serveStatic)(null, {
|
|
14
|
+
downloadDir,
|
|
15
|
+
onDownload,
|
|
16
|
+
onError,
|
|
17
|
+
ffmpegExecutable,
|
|
18
|
+
ffprobeExecutable,
|
|
19
|
+
port,
|
|
20
|
+
});
|
|
8
21
|
return Promise.resolve({
|
|
9
22
|
serveUrl: webpackConfigOrServeUrl,
|
|
10
|
-
closeServer: () =>
|
|
23
|
+
closeServer: () => closeProxy(),
|
|
24
|
+
offthreadPort,
|
|
11
25
|
});
|
|
12
26
|
}
|
|
13
|
-
|
|
27
|
+
// Check if the path has a `index.html` file
|
|
28
|
+
const indexFile = path_1.default.join(webpackConfigOrServeUrl, 'index.html');
|
|
29
|
+
const exists = (0, fs_1.existsSync)(indexFile);
|
|
30
|
+
if (!exists) {
|
|
31
|
+
throw new Error(`Tried to serve the Webpack bundle on a HTTP server, but the file ${indexFile} does not exist. Is this a valid path to a Webpack bundle?`);
|
|
32
|
+
}
|
|
33
|
+
const { port: serverPort, close } = await (0, serve_static_1.serveStatic)(webpackConfigOrServeUrl, {
|
|
34
|
+
downloadDir,
|
|
35
|
+
onDownload,
|
|
36
|
+
onError,
|
|
37
|
+
ffmpegExecutable,
|
|
38
|
+
ffprobeExecutable,
|
|
39
|
+
port,
|
|
40
|
+
});
|
|
14
41
|
return Promise.resolve({
|
|
15
|
-
closeServer: () =>
|
|
16
|
-
|
|
42
|
+
closeServer: () => {
|
|
43
|
+
return close();
|
|
44
|
+
},
|
|
45
|
+
serveUrl: `http://localhost:${serverPort}`,
|
|
46
|
+
offthreadPort: serverPort,
|
|
17
47
|
});
|
|
18
48
|
};
|
|
19
49
|
exports.prepareServer = prepareServer;
|
|
@@ -10,8 +10,8 @@ const calculate_ffmpeg_filters_1 = require("./calculate-ffmpeg-filters");
|
|
|
10
10
|
const ffmpeg_filter_file_1 = require("./ffmpeg-filter-file");
|
|
11
11
|
const p_limit_1 = require("./p-limit");
|
|
12
12
|
const resolve_asset_src_1 = require("./resolve-asset-src");
|
|
13
|
-
const preprocessAudioTrackUnlimited = async ({ ffmpegExecutable, outName, asset, expectedFrames, fps, }) => {
|
|
14
|
-
const { channels, duration } = await (0, get_audio_channels_1.getAudioChannelsAndDuration)((0, resolve_asset_src_1.resolveAssetSrc)(asset.src));
|
|
13
|
+
const preprocessAudioTrackUnlimited = async ({ ffmpegExecutable, ffprobeExecutable, outName, asset, expectedFrames, fps, }) => {
|
|
14
|
+
const { channels, duration } = await (0, get_audio_channels_1.getAudioChannelsAndDuration)((0, resolve_asset_src_1.resolveAssetSrc)(asset.src), ffprobeExecutable);
|
|
15
15
|
const filter = (0, calculate_ffmpeg_filters_1.calculateFfmpegFilter)({
|
|
16
16
|
asset,
|
|
17
17
|
durationInFrames: expectedFrames,
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import execa from 'execa';
|
|
2
2
|
import { Codec, FfmpegExecutable, ImageFormat, PixelFormat, ProResProfile } from 'remotion';
|
|
3
|
+
import { CancelSignal } from './make-cancel-signal';
|
|
3
4
|
declare type PreSticherOptions = {
|
|
4
5
|
fps: number;
|
|
5
6
|
width: number;
|
|
@@ -13,6 +14,7 @@ declare type PreSticherOptions = {
|
|
|
13
14
|
verbose: boolean;
|
|
14
15
|
ffmpegExecutable: FfmpegExecutable | undefined;
|
|
15
16
|
imageFormat: ImageFormat;
|
|
17
|
+
signal: CancelSignal;
|
|
16
18
|
};
|
|
17
19
|
export declare const prespawnFfmpeg: (options: PreSticherOptions) => Promise<{
|
|
18
20
|
task: execa.ExecaChildProcess<string>;
|
package/dist/prespawn-ffmpeg.js
CHANGED
|
@@ -57,15 +57,13 @@ const prespawnFfmpeg = async (options) => {
|
|
|
57
57
|
// -c:v is the same as -vcodec as -codec:video
|
|
58
58
|
// and specified the video codec.
|
|
59
59
|
['-c:v', encoderName],
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
['-b:v', '1M'],
|
|
68
|
-
],
|
|
60
|
+
proResProfileName ? ['-profile:v', proResProfileName] : null,
|
|
61
|
+
supportsCrf ? ['-crf', String(crf)] : null,
|
|
62
|
+
['-pix_fmt', pixelFormat],
|
|
63
|
+
// Without explicitly disabling auto-alt-ref,
|
|
64
|
+
// transparent WebM generation doesn't work
|
|
65
|
+
pixelFormat === 'yuva420p' ? ['-auto-alt-ref', '0'] : null,
|
|
66
|
+
['-b:v', '1M'],
|
|
69
67
|
'-y',
|
|
70
68
|
options.outputLocation,
|
|
71
69
|
];
|
|
@@ -75,6 +73,9 @@ const prespawnFfmpeg = async (options) => {
|
|
|
75
73
|
}
|
|
76
74
|
const ffmpegString = ffmpegArgs.flat(2).filter(Boolean);
|
|
77
75
|
const task = (0, execa_1.default)((_f = options.ffmpegExecutable) !== null && _f !== void 0 ? _f : 'ffmpeg', ffmpegString);
|
|
76
|
+
options.signal(() => {
|
|
77
|
+
task.kill();
|
|
78
|
+
});
|
|
78
79
|
let ffmpegOutput = '';
|
|
79
80
|
(_g = task.stderr) === null || _g === void 0 ? void 0 : _g.on('data', (data) => {
|
|
80
81
|
const str = data.toString();
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.provideScreenshot = void 0;
|
|
4
4
|
const screenshot_dom_element_1 = require("./screenshot-dom-element");
|
|
5
|
-
const provideScreenshot =
|
|
5
|
+
const provideScreenshot = ({ page, imageFormat, options, quality, }) => {
|
|
6
6
|
return (0, screenshot_dom_element_1.screenshotDOMElement)({
|
|
7
7
|
page,
|
|
8
8
|
opts: {
|
|
@@ -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];
|
package/dist/render-frames.d.ts
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
/// <reference types="node" />
|
|
2
2
|
import { Browser as PuppeteerBrowser } from 'puppeteer-core';
|
|
3
|
-
import { BrowserExecutable, FrameRange, ImageFormat, SmallTCompMetadata } from 'remotion';
|
|
3
|
+
import { BrowserExecutable, FfmpegExecutable, FrameRange, ImageFormat, SmallTCompMetadata } from 'remotion';
|
|
4
4
|
import { RenderMediaOnDownload } from './assets/download-and-map-assets-to-file';
|
|
5
5
|
import { BrowserLog } from './browser-log';
|
|
6
6
|
import { ServeUrlOrWebpackBundle } from './legacy-webpack-config';
|
|
7
|
+
import { CancelSignal } from './make-cancel-signal';
|
|
7
8
|
import { ChromiumOptions } from './open-browser';
|
|
8
9
|
import { OnStartData, RenderFramesOutput } from './types';
|
|
9
10
|
declare type ConfigOrComposition = {
|
|
@@ -33,6 +34,10 @@ declare type RenderFramesOptions = {
|
|
|
33
34
|
timeoutInMilliseconds?: number;
|
|
34
35
|
chromiumOptions?: ChromiumOptions;
|
|
35
36
|
scale?: number;
|
|
37
|
+
ffmpegExecutable?: FfmpegExecutable;
|
|
38
|
+
ffprobeExecutable?: FfmpegExecutable;
|
|
39
|
+
port?: number | null;
|
|
40
|
+
cancelSignal?: CancelSignal;
|
|
36
41
|
} & ConfigOrComposition & ServeUrlOrWebpackBundle;
|
|
37
42
|
export declare const renderFrames: (options: RenderFramesOptions) => Promise<RenderFramesOutput>;
|
|
38
43
|
export {};
|
package/dist/render-frames.js
CHANGED
|
@@ -33,9 +33,14 @@ const getComposition = (others) => {
|
|
|
33
33
|
}
|
|
34
34
|
return undefined;
|
|
35
35
|
};
|
|
36
|
-
const
|
|
36
|
+
const getPool = async (pages) => {
|
|
37
|
+
const puppeteerPages = await Promise.all(pages);
|
|
38
|
+
const pool = new pool_1.Pool(puppeteerPages);
|
|
39
|
+
return pool;
|
|
40
|
+
};
|
|
41
|
+
const innerRenderFrames = ({ onFrameUpdate, outputDir, onStart, inputProps, quality, imageFormat = image_format_1.DEFAULT_IMAGE_FORMAT, frameRange, puppeteerInstance, onError, envVariables, onBrowserLog, onFrameBuffer, onDownload, pagesArray, serveUrl, composition, timeoutInMilliseconds, scale, actualParallelism, downloadDir, proxyPort, cancelSignal, }) => {
|
|
37
42
|
if (!puppeteerInstance) {
|
|
38
|
-
throw new Error('
|
|
43
|
+
throw new Error('no puppeteer instance passed to innerRenderFrames - internal error');
|
|
39
44
|
}
|
|
40
45
|
if (outputDir) {
|
|
41
46
|
if (!fs_1.default.existsSync(outputDir)) {
|
|
@@ -49,7 +54,7 @@ const innerRenderFrames = async ({ onFrameUpdate, outputDir, onStart, inputProps
|
|
|
49
54
|
const pages = new Array(actualParallelism).fill(true).map(async () => {
|
|
50
55
|
const page = await puppeteerInstance.newPage();
|
|
51
56
|
pagesArray.push(page);
|
|
52
|
-
page.setViewport({
|
|
57
|
+
await page.setViewport({
|
|
53
58
|
width: composition.width,
|
|
54
59
|
height: composition.height,
|
|
55
60
|
deviceScaleFactor: scale !== null && scale !== void 0 ? scale : 1,
|
|
@@ -76,6 +81,8 @@ const innerRenderFrames = async ({ onFrameUpdate, outputDir, onStart, inputProps
|
|
|
76
81
|
serveUrl,
|
|
77
82
|
initialFrame,
|
|
78
83
|
timeoutInMilliseconds,
|
|
84
|
+
proxyPort,
|
|
85
|
+
retriesRemaining: 2,
|
|
79
86
|
});
|
|
80
87
|
await (0, puppeteer_evaluate_1.puppeteerEvaluateWithCatch)({
|
|
81
88
|
pageFunction: (id) => {
|
|
@@ -91,24 +98,30 @@ const innerRenderFrames = async ({ onFrameUpdate, outputDir, onStart, inputProps
|
|
|
91
98
|
page.off('console', logCallback);
|
|
92
99
|
return page;
|
|
93
100
|
});
|
|
94
|
-
const puppeteerPages = await Promise.all(pages);
|
|
95
|
-
const pool = new pool_1.Pool(puppeteerPages);
|
|
96
101
|
const [firstFrameIndex, lastFrameIndex] = realFrameRange;
|
|
97
102
|
// Substract one because 100 frames will be 00-99
|
|
98
103
|
// --> 2 digits
|
|
99
104
|
const filePadLength = String(lastFrameIndex).length;
|
|
100
105
|
let framesRendered = 0;
|
|
106
|
+
const poolPromise = getPool(pages);
|
|
101
107
|
onStart({
|
|
102
108
|
frameCount,
|
|
103
109
|
});
|
|
104
|
-
const downloadDir = (0, make_assets_download_dir_1.makeAssetsDownloadTmpDir)();
|
|
105
110
|
const assets = new Array(frameCount).fill(undefined);
|
|
106
|
-
|
|
111
|
+
let stopped = false;
|
|
112
|
+
cancelSignal === null || cancelSignal === void 0 ? void 0 : cancelSignal(() => {
|
|
113
|
+
stopped = true;
|
|
114
|
+
});
|
|
115
|
+
const progress = Promise.all(new Array(frameCount)
|
|
107
116
|
.fill(Boolean)
|
|
108
|
-
.map((
|
|
117
|
+
.map((_x, i) => i)
|
|
109
118
|
.map(async (index) => {
|
|
110
119
|
const frame = realFrameRange[0] + index;
|
|
120
|
+
const pool = await poolPromise;
|
|
111
121
|
const freePage = await pool.acquire();
|
|
122
|
+
if (stopped) {
|
|
123
|
+
throw new Error('Render was stopped');
|
|
124
|
+
}
|
|
112
125
|
const paddedIndex = String(frame).padStart(filePadLength, '0');
|
|
113
126
|
const errorCallbackOnFrame = (err) => {
|
|
114
127
|
onError(err);
|
|
@@ -122,6 +135,7 @@ const innerRenderFrames = async ({ onFrameUpdate, outputDir, onStart, inputProps
|
|
|
122
135
|
await (0, seek_to_frame_1.seekToFrame)({ frame, page: freePage });
|
|
123
136
|
if (imageFormat !== 'none') {
|
|
124
137
|
if (onFrameBuffer) {
|
|
138
|
+
const id = remotion_1.Internals.perf.startPerfMeasure('save');
|
|
125
139
|
const buffer = await (0, provide_screenshot_1.provideScreenshot)({
|
|
126
140
|
page: freePage,
|
|
127
141
|
imageFormat,
|
|
@@ -131,6 +145,7 @@ const innerRenderFrames = async ({ onFrameUpdate, outputDir, onStart, inputProps
|
|
|
131
145
|
output: undefined,
|
|
132
146
|
},
|
|
133
147
|
});
|
|
148
|
+
remotion_1.Internals.perf.stopPerfMeasure(id);
|
|
134
149
|
onFrameBuffer(buffer, frame);
|
|
135
150
|
}
|
|
136
151
|
else {
|
|
@@ -163,7 +178,7 @@ const innerRenderFrames = async ({ onFrameUpdate, outputDir, onStart, inputProps
|
|
|
163
178
|
(0, download_and_map_assets_to_file_1.downloadAndMapAssetsToFileUrl)({
|
|
164
179
|
asset,
|
|
165
180
|
downloadDir,
|
|
166
|
-
onDownload
|
|
181
|
+
onDownload,
|
|
167
182
|
}).catch((err) => {
|
|
168
183
|
onError(new Error(`Error while downloading asset: ${err.stack}`));
|
|
169
184
|
});
|
|
@@ -175,19 +190,29 @@ const innerRenderFrames = async ({ onFrameUpdate, outputDir, onStart, inputProps
|
|
|
175
190
|
freePage.off('error', errorCallbackOnFrame);
|
|
176
191
|
return compressedAssets;
|
|
177
192
|
}));
|
|
178
|
-
const
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
193
|
+
const happyPath = progress.then(() => {
|
|
194
|
+
const returnValue = {
|
|
195
|
+
assetsInfo: {
|
|
196
|
+
assets,
|
|
197
|
+
downloadDir,
|
|
198
|
+
firstFrameIndex,
|
|
199
|
+
imageSequenceName: `element-%0${filePadLength}d.${imageFormat}`,
|
|
200
|
+
},
|
|
201
|
+
frameCount,
|
|
202
|
+
};
|
|
203
|
+
return returnValue;
|
|
204
|
+
});
|
|
205
|
+
return Promise.race([
|
|
206
|
+
happyPath,
|
|
207
|
+
new Promise((_resolve, reject) => {
|
|
208
|
+
cancelSignal === null || cancelSignal === void 0 ? void 0 : cancelSignal(() => {
|
|
209
|
+
reject(new Error('renderFrames() got cancelled'));
|
|
210
|
+
});
|
|
211
|
+
}),
|
|
212
|
+
]);
|
|
188
213
|
};
|
|
189
|
-
const renderFrames =
|
|
190
|
-
var _a, _b, _c;
|
|
214
|
+
const renderFrames = (options) => {
|
|
215
|
+
var _a, _b, _c, _d;
|
|
191
216
|
const composition = getComposition(options);
|
|
192
217
|
if (!composition) {
|
|
193
218
|
throw new Error('No `composition` option has been specified for renderFrames()');
|
|
@@ -202,25 +227,54 @@ const renderFrames = async (options) => {
|
|
|
202
227
|
const selectedServeUrl = (0, legacy_webpack_config_1.getServeUrlWithFallback)(options);
|
|
203
228
|
remotion_1.Internals.validateQuality(options.quality);
|
|
204
229
|
(0, validate_scale_1.validateScale)(options.scale);
|
|
205
|
-
const
|
|
206
|
-
const browserInstance = (_a = options.puppeteerInstance) !== null && _a !== void 0 ? _a : (await (0, open_browser_1.openBrowser)(remotion_1.Internals.DEFAULT_BROWSER, {
|
|
230
|
+
const browserInstance = (_a = options.puppeteerInstance) !== null && _a !== void 0 ? _a : (0, open_browser_1.openBrowser)(remotion_1.Internals.DEFAULT_BROWSER, {
|
|
207
231
|
shouldDumpIo: options.dumpBrowserLogs,
|
|
208
232
|
browserExecutable: options.browserExecutable,
|
|
209
233
|
chromiumOptions: options.chromiumOptions,
|
|
210
234
|
forceDeviceScaleFactor: (_b = options.scale) !== null && _b !== void 0 ? _b : 1,
|
|
211
|
-
})
|
|
212
|
-
const
|
|
213
|
-
const
|
|
235
|
+
});
|
|
236
|
+
const downloadDir = (0, make_assets_download_dir_1.makeAssetsDownloadTmpDir)();
|
|
237
|
+
const onDownload = (_c = options.onDownload) !== null && _c !== void 0 ? _c : (() => () => undefined);
|
|
238
|
+
const actualParallelism = (0, get_concurrency_1.getActualConcurrency)((_d = options.parallelism) !== null && _d !== void 0 ? _d : null);
|
|
214
239
|
const openedPages = [];
|
|
215
240
|
return new Promise((resolve, reject) => {
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
241
|
+
var _a, _b, _c;
|
|
242
|
+
const cleanup = [];
|
|
243
|
+
const onError = (err) => reject(err);
|
|
244
|
+
Promise.all([
|
|
245
|
+
(0, prepare_server_1.prepareServer)({
|
|
246
|
+
webpackConfigOrServeUrl: selectedServeUrl,
|
|
247
|
+
downloadDir,
|
|
248
|
+
onDownload,
|
|
249
|
+
onError,
|
|
250
|
+
ffmpegExecutable: (_a = options.ffmpegExecutable) !== null && _a !== void 0 ? _a : null,
|
|
251
|
+
ffprobeExecutable: (_b = options.ffprobeExecutable) !== null && _b !== void 0 ? _b : null,
|
|
252
|
+
port: (_c = options.port) !== null && _c !== void 0 ? _c : null,
|
|
253
|
+
}),
|
|
254
|
+
browserInstance,
|
|
255
|
+
])
|
|
256
|
+
.then(([{ serveUrl, closeServer, offthreadPort }, puppeteerInstance]) => {
|
|
257
|
+
var _a;
|
|
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;
|
|
224
278
|
})
|
|
225
279
|
.then((res) => resolve(res))
|
|
226
280
|
.catch((err) => reject(err))
|
|
@@ -234,12 +288,17 @@ const renderFrames = async (options) => {
|
|
|
234
288
|
});
|
|
235
289
|
}
|
|
236
290
|
else {
|
|
237
|
-
|
|
291
|
+
Promise.resolve(browserInstance)
|
|
292
|
+
.then((puppeteerInstance) => {
|
|
293
|
+
return puppeteerInstance.close();
|
|
294
|
+
})
|
|
295
|
+
.catch((err) => {
|
|
238
296
|
console.log('Unable to close browser', err);
|
|
239
297
|
});
|
|
240
298
|
}
|
|
241
|
-
|
|
242
|
-
|
|
299
|
+
cleanup.forEach((c) => {
|
|
300
|
+
c();
|
|
301
|
+
});
|
|
243
302
|
});
|
|
244
303
|
});
|
|
245
304
|
};
|
package/dist/render-media.d.ts
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import type { Browser as PuppeteerBrowser } from 'puppeteer-core';
|
|
2
|
-
import { Codec, FfmpegExecutable, FrameRange, PixelFormat, ProResProfile, SmallTCompMetadata } from 'remotion';
|
|
2
|
+
import { BrowserExecutable, Codec, FfmpegExecutable, FrameRange, PixelFormat, ProResProfile, SmallTCompMetadata } from 'remotion';
|
|
3
3
|
import { RenderMediaOnDownload } from './assets/download-and-map-assets-to-file';
|
|
4
4
|
import { BrowserLog } from './browser-log';
|
|
5
5
|
import { ServeUrlOrWebpackBundle } from './legacy-webpack-config';
|
|
6
|
+
import { CancelSignal } from './make-cancel-signal';
|
|
6
7
|
import { ChromiumOptions } from './open-browser';
|
|
7
8
|
import { OnStartData } from './types';
|
|
8
9
|
export declare type StitchingState = 'encoding' | 'muxing';
|
|
@@ -22,6 +23,7 @@ export declare type RenderMediaOptions = {
|
|
|
22
23
|
crf?: number | null;
|
|
23
24
|
imageFormat?: 'png' | 'jpeg' | 'none';
|
|
24
25
|
ffmpegExecutable?: FfmpegExecutable;
|
|
26
|
+
ffprobeExecutable?: FfmpegExecutable;
|
|
25
27
|
pixelFormat?: PixelFormat;
|
|
26
28
|
envVariables?: Record<string, string>;
|
|
27
29
|
quality?: number;
|
|
@@ -37,5 +39,13 @@ export declare type RenderMediaOptions = {
|
|
|
37
39
|
timeoutInMilliseconds?: number;
|
|
38
40
|
chromiumOptions?: ChromiumOptions;
|
|
39
41
|
scale?: number;
|
|
42
|
+
port?: number | null;
|
|
43
|
+
cancelSignal?: CancelSignal;
|
|
44
|
+
browserExecutable?: BrowserExecutable;
|
|
40
45
|
} & ServeUrlOrWebpackBundle;
|
|
41
|
-
|
|
46
|
+
/**
|
|
47
|
+
*
|
|
48
|
+
* @description Render a video from a composition
|
|
49
|
+
* @link https://www.remotion.dev/docs/renderer/render-media
|
|
50
|
+
*/
|
|
51
|
+
export declare const renderMedia: ({ parallelism, proResProfile, crf, composition, imageFormat, ffmpegExecutable, ffprobeExecutable, inputProps, pixelFormat, codec, envVariables, quality, frameRange, puppeteerInstance, outputLocation, onProgress, overwrite, onDownload, dumpBrowserLogs, onBrowserLog, onStart, timeoutInMilliseconds, chromiumOptions, scale, browserExecutable, port, cancelSignal, ...options }: RenderMediaOptions) => Promise<void>;
|