@remotion/renderer 4.0.0-alpha13 → 4.0.0-alpha14
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/download-and-map-assets-to-file.d.ts +6 -4
- package/dist/assets/download-and-map-assets-to-file.js +30 -6
- package/dist/assets/download-file.d.ts +2 -2
- package/dist/assets/download-map.d.ts +3 -3
- package/dist/assets/ffmpeg-volume-expression.d.ts +2 -2
- package/dist/assets/get-audio-channels.d.ts +1 -0
- package/dist/assets/get-audio-channels.js +10 -5
- 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.js +1 -1
- package/dist/assets/types.d.ts +4 -4
- package/dist/audio-codec.d.ts +2 -2
- package/dist/browser/Browser.d.ts +9 -9
- package/dist/browser/Browser.js +26 -32
- package/dist/browser/BrowserFetcher.d.ts +1 -1
- package/dist/browser/BrowserPage.d.ts +11 -2
- package/dist/browser/BrowserPage.js +47 -12
- package/dist/browser/BrowserRunner.js +19 -2
- package/dist/browser/ConsoleMessage.d.ts +1 -1
- package/dist/browser/DOMWorld.js +8 -8
- package/dist/browser/EvalTypes.d.ts +7 -7
- package/dist/browser/FrameManager.js +11 -11
- package/dist/browser/JSHandle.js +14 -14
- package/dist/browser/LaunchOptions.d.ts +1 -1
- package/dist/browser/Launcher.js +0 -1
- package/dist/browser/LifecycleWatcher.d.ts +1 -1
- package/dist/browser/NetworkEventManager.d.ts +4 -4
- package/dist/browser/NodeWebSocketTransport.js +16 -16
- package/dist/browser/Product.d.ts +1 -1
- package/dist/browser/Target.d.ts +2 -1
- package/dist/browser/Target.js +8 -2
- package/dist/browser/devtools-types.d.ts +10 -10
- package/dist/browser/mitt/index.d.ts +6 -6
- package/dist/browser/revisions.d.ts +1 -1
- package/dist/browser/should-log-message.d.ts +24 -0
- package/dist/browser/should-log-message.js +72 -0
- package/dist/browser-executable.d.ts +1 -1
- package/dist/browser-log.d.ts +1 -1
- package/dist/browser.d.ts +1 -1
- package/dist/calculate-sar-dar-pixels.d.ts +9 -0
- package/dist/calculate-sar-dar-pixels.js +19 -0
- package/dist/chalk/index.d.ts +4 -4
- package/dist/codec-supports-media.d.ts +1 -1
- package/dist/codec.d.ts +2 -2
- package/dist/combine-videos.d.ts +1 -1
- package/dist/compositor/compose.d.ts +11 -2
- package/dist/compositor/compose.js +15 -4
- package/dist/compositor/compositor.d.ts +1 -1
- package/dist/compositor/compositor.js +1 -1
- package/dist/compositor/payloads.d.ts +5 -5
- package/dist/create-ffmpeg-complex-filter.d.ts +4 -1
- package/dist/crf.d.ts +1 -1
- package/dist/determine-resize-params.d.ts +1 -0
- package/dist/determine-resize-params.js +10 -0
- package/dist/determine-vcodec-ffmpeg-flags.d.ts +2 -0
- package/dist/determine-vcodec-ffmpeg-flags.js +13 -0
- package/dist/ensure-ffmpeg.d.ts +18 -0
- package/dist/ensure-ffmpeg.js +58 -0
- package/dist/ensure-presentation-timestamp.d.ts +15 -0
- package/dist/ensure-presentation-timestamp.js +88 -0
- package/dist/error-handling/symbolicate-error.js +4 -2
- package/dist/extract-frame-from-video.d.ts +16 -0
- package/dist/extract-frame-from-video.js +191 -0
- package/dist/ffmpeg-executable.d.ts +1 -0
- package/dist/ffmpeg-executable.js +2 -0
- package/dist/ffmpeg-flags.d.ts +31 -0
- package/dist/ffmpeg-flags.js +245 -0
- package/dist/ffmpeg-override.d.ts +1 -1
- package/dist/file-extensions.d.ts +1 -1
- package/dist/frame-range.d.ts +1 -1
- package/dist/frame-to-ffmpeg-timestamp.d.ts +1 -0
- package/dist/frame-to-ffmpeg-timestamp.js +8 -0
- package/dist/get-browser-instance.d.ts +6 -1
- package/dist/get-browser-instance.js +9 -4
- package/dist/get-can-extract-frames-fast.d.ts +14 -0
- package/dist/get-can-extract-frames-fast.js +71 -0
- package/dist/get-compositions.d.ts +18 -11
- package/dist/get-compositions.js +66 -49
- package/dist/get-frame-of-video-slow.d.ts +17 -0
- package/dist/get-frame-of-video-slow.js +72 -0
- package/dist/get-frame-padded-index.d.ts +1 -1
- package/dist/get-video-info.d.ts +8 -0
- package/dist/get-video-info.js +59 -0
- package/dist/image-format.d.ts +3 -3
- package/dist/index.d.ts +110 -21
- package/dist/index.js +25 -13
- package/dist/is-beyond-last-frame.d.ts +3 -0
- package/dist/is-beyond-last-frame.js +12 -0
- package/dist/jpeg-quality.d.ts +1 -0
- package/dist/jpeg-quality.js +2 -1
- package/dist/last-frame-from-video-cache.d.ts +17 -0
- package/dist/last-frame-from-video-cache.js +55 -0
- package/dist/legacy-webpack-config.d.ts +9 -0
- package/dist/legacy-webpack-config.js +13 -0
- package/dist/log-level.d.ts +1 -1
- package/dist/logger.d.ts +4 -2
- package/dist/logger.js +12 -5
- package/dist/make-cancel-signal.d.ts +2 -2
- package/dist/merge-audio-track.d.ts +1 -1
- package/dist/mime-types.js +1 -1
- package/dist/offthread-video-server.d.ts +36 -4
- package/dist/offthread-video-server.js +48 -4
- package/dist/open-browser.d.ts +19 -10
- package/dist/open-browser.js +34 -21
- package/dist/options/option.d.ts +1 -1
- package/dist/parse-browser-error-stack.d.ts +1 -1
- package/dist/perf.d.ts +1 -1
- package/dist/pixel-format.d.ts +1 -1
- package/dist/prepare-server.d.ts +20 -8
- package/dist/prepare-server.js +52 -8
- package/dist/preprocess-audio-track.d.ts +2 -2
- package/dist/prespawn-ffmpeg.d.ts +1 -1
- package/dist/prespawn-ffmpeg.js +7 -7
- package/dist/prores-profile.d.ts +1 -1
- package/dist/provide-screenshot.d.ts +0 -1
- package/dist/puppeteer-screenshot.d.ts +0 -1
- package/dist/puppeteer-screenshot.js +1 -2
- package/dist/quality.d.ts +1 -0
- package/dist/quality.js +21 -0
- package/dist/render-frames.d.ts +32 -11
- package/dist/render-frames.js +112 -77
- package/dist/render-media.d.ts +50 -21
- package/dist/render-media.js +249 -197
- package/dist/render-still.d.ts +33 -18
- package/dist/render-still.js +71 -43
- package/dist/replace-browser.d.ts +1 -1
- package/dist/screenshot-dom-element.d.ts +0 -1
- package/dist/screenshot-task.d.ts +0 -1
- package/dist/select-composition.d.ts +19 -11
- package/dist/select-composition.js +79 -42
- package/dist/serve-static.d.ts +2 -3
- package/dist/serve-static.js +2 -4
- package/dist/set-props-and-env.d.ts +1 -1
- package/dist/stitch-frames-to-video.d.ts +32 -11
- package/dist/stitch-frames-to-video.js +121 -99
- package/dist/stringify-ffmpeg-filter.d.ts +2 -2
- package/dist/symbolicate-stacktrace.d.ts +16 -3
- package/dist/symbolicate-stacktrace.js +49 -24
- package/dist/take-frame-and-compose.d.ts +0 -1
- package/dist/truthy.d.ts +1 -1
- package/dist/try-to-extract-frame-of-video-fast.d.ts +12 -0
- package/dist/try-to-extract-frame-of-video-fast.js +55 -0
- package/dist/types.d.ts +2 -2
- package/dist/validate-ffmpeg.d.ts +7 -0
- package/dist/validate-ffmpeg.js +77 -0
- package/dist/validate-opengl-renderer.d.ts +1 -1
- package/dist/warn-about-ffmpeg-version.d.ts +5 -0
- package/dist/warn-about-ffmpeg-version.js +37 -0
- package/package.json +11 -11
package/dist/render-still.js
CHANGED
|
@@ -26,12 +26,12 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
26
26
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
27
27
|
};
|
|
28
28
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
29
|
-
exports.renderStill = void 0;
|
|
29
|
+
exports.renderStill = exports.internalRenderStill = void 0;
|
|
30
30
|
const node_fs_1 = __importStar(require("node:fs"));
|
|
31
31
|
const node_path_1 = __importDefault(require("node:path"));
|
|
32
32
|
const remotion_1 = require("remotion");
|
|
33
|
-
const download_map_1 = require("./assets/download-map");
|
|
34
33
|
const browser_1 = require("./browser");
|
|
34
|
+
const TimeoutSettings_1 = require("./browser/TimeoutSettings");
|
|
35
35
|
const convert_to_positive_frame_index_1 = require("./convert-to-positive-frame-index");
|
|
36
36
|
const ensure_output_directory_1 = require("./ensure-output-directory");
|
|
37
37
|
const handle_javascript_exception_1 = require("./error-handling/handle-javascript-exception");
|
|
@@ -40,6 +40,7 @@ const image_format_1 = require("./image-format");
|
|
|
40
40
|
const jpeg_quality_1 = require("./jpeg-quality");
|
|
41
41
|
const make_cancel_signal_1 = require("./make-cancel-signal");
|
|
42
42
|
const open_browser_1 = require("./open-browser");
|
|
43
|
+
const overwrite_1 = require("./overwrite");
|
|
43
44
|
const prepare_server_1 = require("./prepare-server");
|
|
44
45
|
const puppeteer_evaluate_1 = require("./puppeteer-evaluate");
|
|
45
46
|
const seek_to_frame_1 = require("./seek-to-frame");
|
|
@@ -47,10 +48,7 @@ const set_props_and_env_1 = require("./set-props-and-env");
|
|
|
47
48
|
const take_frame_and_compose_1 = require("./take-frame-and-compose");
|
|
48
49
|
const validate_puppeteer_timeout_1 = require("./validate-puppeteer-timeout");
|
|
49
50
|
const validate_scale_1 = require("./validate-scale");
|
|
50
|
-
const innerRenderStill = async ({ composition,
|
|
51
|
-
if (quality) {
|
|
52
|
-
throw new Error('quality has been renamed to jpegQuality. Please rename the option.');
|
|
53
|
-
}
|
|
51
|
+
const innerRenderStill = async ({ composition, imageFormat = image_format_1.DEFAULT_STILL_IMAGE_FORMAT, serveUrl, puppeteerInstance, dumpBrowserLogs = false, onError, inputProps, envVariables, output, frame = 0, overwrite, browserExecutable, timeoutInMilliseconds, chromiumOptions, scale, proxyPort, cancelSignal, jpegQuality, onBrowserLog, compositor, sourceMapContext, downloadMap, }) => {
|
|
54
52
|
remotion_1.Internals.validateDimension(composition.height, 'height', 'in the `config` object passed to `renderStill()`');
|
|
55
53
|
remotion_1.Internals.validateDimension(composition.width, 'width', 'in the `config` object passed to `renderStill()`');
|
|
56
54
|
remotion_1.Internals.validateFps(composition.fps, 'in the `config` object of `renderStill()`', false);
|
|
@@ -73,9 +71,6 @@ const innerRenderStill = async ({ composition, quality, imageFormat = image_form
|
|
|
73
71
|
(0, validate_scale_1.validateScale)(scale);
|
|
74
72
|
output =
|
|
75
73
|
typeof output === 'string' ? node_path_1.default.resolve(process.cwd(), output) : null;
|
|
76
|
-
if (jpegQuality !== undefined && imageFormat !== 'jpeg') {
|
|
77
|
-
throw new Error("You can only pass the `quality` option if `imageFormat` is 'jpeg'.");
|
|
78
|
-
}
|
|
79
74
|
(0, jpeg_quality_1.validateJpegQuality)(jpegQuality);
|
|
80
75
|
if (output) {
|
|
81
76
|
if (node_fs_1.default.existsSync(output)) {
|
|
@@ -89,18 +84,20 @@ const innerRenderStill = async ({ composition, quality, imageFormat = image_form
|
|
|
89
84
|
}
|
|
90
85
|
(0, ensure_output_directory_1.ensureOutputDirectory)(output);
|
|
91
86
|
}
|
|
92
|
-
const browserInstance = puppeteerInstance !== null && puppeteerInstance !== void 0 ? puppeteerInstance : (await (0, open_browser_1.
|
|
87
|
+
const browserInstance = puppeteerInstance !== null && puppeteerInstance !== void 0 ? puppeteerInstance : (await (0, open_browser_1.internalOpenBrowser)({
|
|
88
|
+
browser: browser_1.DEFAULT_BROWSER,
|
|
93
89
|
browserExecutable,
|
|
94
90
|
shouldDumpIo: dumpBrowserLogs,
|
|
95
91
|
chromiumOptions,
|
|
96
|
-
forceDeviceScaleFactor: scale
|
|
92
|
+
forceDeviceScaleFactor: scale,
|
|
97
93
|
indent: false,
|
|
94
|
+
viewport: null,
|
|
98
95
|
}));
|
|
99
|
-
const page = await browserInstance.newPage();
|
|
96
|
+
const page = await browserInstance.newPage(sourceMapContext);
|
|
100
97
|
await page.setViewport({
|
|
101
98
|
width: composition.width,
|
|
102
99
|
height: composition.height,
|
|
103
|
-
deviceScaleFactor: scale
|
|
100
|
+
deviceScaleFactor: scale,
|
|
104
101
|
});
|
|
105
102
|
const errorCallback = (err) => {
|
|
106
103
|
onError(err);
|
|
@@ -137,7 +134,7 @@ const innerRenderStill = async ({ composition, quality, imageFormat = image_form
|
|
|
137
134
|
page.on('console', logCallback);
|
|
138
135
|
}
|
|
139
136
|
await (0, set_props_and_env_1.setPropsAndEnv)({
|
|
140
|
-
inputProps
|
|
137
|
+
inputProps,
|
|
141
138
|
envVariables,
|
|
142
139
|
page,
|
|
143
140
|
serveUrl,
|
|
@@ -151,7 +148,7 @@ const innerRenderStill = async ({ composition, quality, imageFormat = image_form
|
|
|
151
148
|
await (0, puppeteer_evaluate_1.puppeteerEvaluateWithCatch)({
|
|
152
149
|
// eslint-disable-next-line max-params
|
|
153
150
|
pageFunction: (id, defaultProps, durationInFrames, fps, height, width) => {
|
|
154
|
-
window.
|
|
151
|
+
window.remotion_setBundleMode({
|
|
155
152
|
type: 'composition',
|
|
156
153
|
compositionName: id,
|
|
157
154
|
compositionDefaultProps: defaultProps,
|
|
@@ -174,7 +171,6 @@ const innerRenderStill = async ({ composition, quality, imageFormat = image_form
|
|
|
174
171
|
});
|
|
175
172
|
await (0, seek_to_frame_1.seekToFrame)({ frame: stillFrame, page });
|
|
176
173
|
const { buffer } = await (0, take_frame_and_compose_1.takeFrameAndCompose)({
|
|
177
|
-
downloadMap,
|
|
178
174
|
frame: stillFrame,
|
|
179
175
|
freePage: page,
|
|
180
176
|
height: composition.height,
|
|
@@ -185,53 +181,45 @@ const innerRenderStill = async ({ composition, quality, imageFormat = image_form
|
|
|
185
181
|
jpegQuality,
|
|
186
182
|
wantsBuffer: !output,
|
|
187
183
|
compositor,
|
|
184
|
+
downloadMap,
|
|
188
185
|
});
|
|
189
186
|
await cleanup();
|
|
190
187
|
return { buffer: output ? null : buffer };
|
|
191
188
|
};
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
* @description Render a still frame from a composition
|
|
195
|
-
* @see [Documentation](https://www.remotion.dev/docs/renderer/render-still)
|
|
196
|
-
*/
|
|
197
|
-
const renderStill = (options) => {
|
|
198
|
-
var _a, _b;
|
|
199
|
-
const downloadMap = (_a = options.downloadMap) !== null && _a !== void 0 ? _a : (0, download_map_1.makeDownloadMap)();
|
|
200
|
-
const onDownload = (_b = options.onDownload) !== null && _b !== void 0 ? _b : (() => () => undefined);
|
|
189
|
+
const internalRenderStill = (options) => {
|
|
190
|
+
const cleanup = [];
|
|
201
191
|
const happyPath = new Promise((resolve, reject) => {
|
|
202
|
-
var _a, _b, _c;
|
|
203
192
|
const onError = (err) => reject(err);
|
|
204
|
-
|
|
205
|
-
(0, prepare_server_1.prepareServer)({
|
|
193
|
+
(0, prepare_server_1.makeOrReuseServer)(options.server, {
|
|
206
194
|
webpackConfigOrServeUrl: options.serveUrl,
|
|
207
|
-
|
|
208
|
-
onError,
|
|
209
|
-
port: (_a = options.port) !== null && _a !== void 0 ? _a : null,
|
|
210
|
-
downloadMap,
|
|
195
|
+
port: options.port,
|
|
211
196
|
remotionRoot: (0, find_closest_package_json_1.findRemotionRoot)(),
|
|
212
197
|
concurrency: 1,
|
|
213
|
-
verbose:
|
|
214
|
-
indent:
|
|
198
|
+
verbose: options.verbose,
|
|
199
|
+
indent: options.indent,
|
|
200
|
+
}, {
|
|
201
|
+
onDownload: options.onDownload,
|
|
202
|
+
onError,
|
|
215
203
|
})
|
|
216
|
-
.then(({
|
|
217
|
-
|
|
204
|
+
.then(({ server, cleanupServer }) => {
|
|
205
|
+
cleanup.push(() => cleanupServer(false));
|
|
206
|
+
const { serveUrl, offthreadPort, compositor, sourceMap, downloadMap } = server;
|
|
218
207
|
return innerRenderStill({
|
|
219
208
|
...options,
|
|
220
209
|
serveUrl,
|
|
221
|
-
onError
|
|
210
|
+
onError,
|
|
222
211
|
proxyPort: offthreadPort,
|
|
223
|
-
downloadMap,
|
|
224
212
|
compositor,
|
|
213
|
+
sourceMapContext: sourceMap,
|
|
214
|
+
downloadMap,
|
|
225
215
|
});
|
|
226
216
|
})
|
|
227
217
|
.then((res) => resolve(res))
|
|
228
218
|
.catch((err) => reject(err))
|
|
229
219
|
.finally(() => {
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
}
|
|
234
|
-
return close === null || close === void 0 ? void 0 : close(false);
|
|
220
|
+
cleanup.forEach((c) => {
|
|
221
|
+
c();
|
|
222
|
+
});
|
|
235
223
|
});
|
|
236
224
|
});
|
|
237
225
|
return Promise.race([
|
|
@@ -244,4 +232,44 @@ const renderStill = (options) => {
|
|
|
244
232
|
}),
|
|
245
233
|
]);
|
|
246
234
|
};
|
|
235
|
+
exports.internalRenderStill = internalRenderStill;
|
|
236
|
+
/**
|
|
237
|
+
*
|
|
238
|
+
* @description Render a still frame from a composition
|
|
239
|
+
* @see [Documentation](https://www.remotion.dev/docs/renderer/render-still)
|
|
240
|
+
*/
|
|
241
|
+
const renderStill = (options) => {
|
|
242
|
+
var _a;
|
|
243
|
+
const { composition, serveUrl, browserExecutable, cancelSignal, chromiumOptions, dumpBrowserLogs, envVariables, frame, imageFormat, inputProps, jpegQuality, onBrowserLog, onDownload, output, overwrite, port, puppeteerInstance, scale, timeoutInMilliseconds, verbose, quality, } = options;
|
|
244
|
+
if (typeof jpegQuality !== 'undefined' && imageFormat !== 'jpeg') {
|
|
245
|
+
throw new Error("You can only pass the `quality` option if `imageFormat` is 'jpeg'.");
|
|
246
|
+
}
|
|
247
|
+
if (quality) {
|
|
248
|
+
console.warn('Passing `quality()` to `renderStill` is deprecated. Use `jpegQuality` instead.');
|
|
249
|
+
}
|
|
250
|
+
return (0, exports.internalRenderStill)({
|
|
251
|
+
composition,
|
|
252
|
+
browserExecutable: browserExecutable !== null && browserExecutable !== void 0 ? browserExecutable : null,
|
|
253
|
+
cancelSignal: cancelSignal !== null && cancelSignal !== void 0 ? cancelSignal : null,
|
|
254
|
+
chromiumOptions: chromiumOptions !== null && chromiumOptions !== void 0 ? chromiumOptions : {},
|
|
255
|
+
dumpBrowserLogs: dumpBrowserLogs !== null && dumpBrowserLogs !== void 0 ? dumpBrowserLogs : false,
|
|
256
|
+
envVariables: envVariables !== null && envVariables !== void 0 ? envVariables : {},
|
|
257
|
+
frame: frame !== null && frame !== void 0 ? frame : 0,
|
|
258
|
+
imageFormat: imageFormat !== null && imageFormat !== void 0 ? imageFormat : image_format_1.DEFAULT_STILL_IMAGE_FORMAT,
|
|
259
|
+
indent: false,
|
|
260
|
+
inputProps: inputProps !== null && inputProps !== void 0 ? inputProps : {},
|
|
261
|
+
jpegQuality: (_a = jpegQuality !== null && jpegQuality !== void 0 ? jpegQuality : quality) !== null && _a !== void 0 ? _a : jpeg_quality_1.DEFAULT_JPEG_QUALITY,
|
|
262
|
+
onBrowserLog: onBrowserLog !== null && onBrowserLog !== void 0 ? onBrowserLog : null,
|
|
263
|
+
onDownload: onDownload !== null && onDownload !== void 0 ? onDownload : null,
|
|
264
|
+
output: output !== null && output !== void 0 ? output : null,
|
|
265
|
+
overwrite: overwrite !== null && overwrite !== void 0 ? overwrite : overwrite_1.DEFAULT_OVERWRITE,
|
|
266
|
+
port: port !== null && port !== void 0 ? port : null,
|
|
267
|
+
puppeteerInstance: puppeteerInstance !== null && puppeteerInstance !== void 0 ? puppeteerInstance : null,
|
|
268
|
+
scale: scale !== null && scale !== void 0 ? scale : 1,
|
|
269
|
+
server: undefined,
|
|
270
|
+
serveUrl,
|
|
271
|
+
timeoutInMilliseconds: timeoutInMilliseconds !== null && timeoutInMilliseconds !== void 0 ? timeoutInMilliseconds : TimeoutSettings_1.DEFAULT_TIMEOUT,
|
|
272
|
+
verbose: verbose !== null && verbose !== void 0 ? verbose : false,
|
|
273
|
+
});
|
|
274
|
+
};
|
|
247
275
|
exports.renderStill = renderStill;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { HeadlessBrowser } from './browser/Browser';
|
|
2
|
-
export
|
|
2
|
+
export type BrowserReplacer = {
|
|
3
3
|
getBrowser: () => HeadlessBrowser;
|
|
4
4
|
replaceBrowser: (make: () => Promise<HeadlessBrowser>, makeNewPages: () => Promise<void>) => Promise<HeadlessBrowser>;
|
|
5
5
|
};
|
|
@@ -1,10 +1,25 @@
|
|
|
1
1
|
import type { AnyCompMetadata } from 'remotion';
|
|
2
|
-
import type { DownloadMap } from './assets/download-map';
|
|
3
2
|
import type { BrowserExecutable } from './browser-executable';
|
|
4
3
|
import type { BrowserLog } from './browser-log';
|
|
5
4
|
import type { HeadlessBrowser } from './browser/Browser';
|
|
6
5
|
import type { ChromiumOptions } from './open-browser';
|
|
7
|
-
|
|
6
|
+
import type { RemotionServer } from './prepare-server';
|
|
7
|
+
type InternalSelectCompositionsConfig = {
|
|
8
|
+
inputProps: Record<string, unknown>;
|
|
9
|
+
envVariables: Record<string, string>;
|
|
10
|
+
puppeteerInstance: HeadlessBrowser | undefined;
|
|
11
|
+
onBrowserLog: null | ((log: BrowserLog) => void);
|
|
12
|
+
browserExecutable: BrowserExecutable | null;
|
|
13
|
+
timeoutInMilliseconds: number;
|
|
14
|
+
chromiumOptions: ChromiumOptions;
|
|
15
|
+
port: number | null;
|
|
16
|
+
indent: boolean;
|
|
17
|
+
server: RemotionServer | undefined;
|
|
18
|
+
verbose: boolean;
|
|
19
|
+
serveUrl: string;
|
|
20
|
+
id: string;
|
|
21
|
+
};
|
|
22
|
+
export type SelectCompositionOptions = {
|
|
8
23
|
inputProps?: Record<string, unknown> | null;
|
|
9
24
|
envVariables?: Record<string, string>;
|
|
10
25
|
puppeteerInstance?: HeadlessBrowser;
|
|
@@ -13,21 +28,14 @@ declare type SelectCompositionsConfig = {
|
|
|
13
28
|
timeoutInMilliseconds?: number;
|
|
14
29
|
chromiumOptions?: ChromiumOptions;
|
|
15
30
|
port?: number | null;
|
|
16
|
-
/**
|
|
17
|
-
* @deprecated Only for Remotion internal usage
|
|
18
|
-
*/
|
|
19
|
-
downloadMap?: DownloadMap;
|
|
20
|
-
/**
|
|
21
|
-
* @deprecated Only for Remotion internal usage
|
|
22
|
-
*/
|
|
23
|
-
indent?: boolean;
|
|
24
31
|
verbose?: boolean;
|
|
25
32
|
serveUrl: string;
|
|
26
33
|
id: string;
|
|
27
34
|
};
|
|
35
|
+
export declare const internalSelectComposition: (options: InternalSelectCompositionsConfig) => Promise<AnyCompMetadata>;
|
|
28
36
|
/**
|
|
29
37
|
* @description Gets a composition defined in a Remotion project based on a Webpack bundle.
|
|
30
38
|
* @see [Documentation](https://www.remotion.dev/docs/renderer/select-composition)
|
|
31
39
|
*/
|
|
32
|
-
export declare const selectComposition: (options:
|
|
40
|
+
export declare const selectComposition: (options: SelectCompositionOptions) => Promise<AnyCompMetadata>;
|
|
33
41
|
export {};
|
|
@@ -1,19 +1,20 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.selectComposition = void 0;
|
|
4
|
-
const
|
|
3
|
+
exports.selectComposition = exports.internalSelectComposition = void 0;
|
|
4
|
+
const TimeoutSettings_1 = require("./browser/TimeoutSettings");
|
|
5
5
|
const handle_javascript_exception_1 = require("./error-handling/handle-javascript-exception");
|
|
6
6
|
const find_closest_package_json_1 = require("./find-closest-package-json");
|
|
7
7
|
const get_browser_instance_1 = require("./get-browser-instance");
|
|
8
|
+
const logger_1 = require("./logger");
|
|
8
9
|
const prepare_server_1 = require("./prepare-server");
|
|
9
10
|
const puppeteer_evaluate_1 = require("./puppeteer-evaluate");
|
|
10
11
|
const seek_to_frame_1 = require("./seek-to-frame");
|
|
11
12
|
const set_props_and_env_1 = require("./set-props-and-env");
|
|
12
13
|
const validate_puppeteer_timeout_1 = require("./validate-puppeteer-timeout");
|
|
13
|
-
const innerSelectComposition = async ({ page, onBrowserLog, inputProps, envVariables, serveUrl, timeoutInMilliseconds, port, id, }) => {
|
|
14
|
+
const innerSelectComposition = async ({ page, onBrowserLog, inputProps, envVariables, serveUrl, timeoutInMilliseconds, port, id, indent, verbose, }) => {
|
|
14
15
|
if (onBrowserLog) {
|
|
15
16
|
page.on('console', (log) => {
|
|
16
|
-
onBrowserLog
|
|
17
|
+
onBrowserLog({
|
|
17
18
|
stackTrace: log.stackTrace(),
|
|
18
19
|
text: log.text,
|
|
19
20
|
type: log.type,
|
|
@@ -22,7 +23,7 @@ const innerSelectComposition = async ({ page, onBrowserLog, inputProps, envVaria
|
|
|
22
23
|
}
|
|
23
24
|
(0, validate_puppeteer_timeout_1.validatePuppeteerTimeout)(timeoutInMilliseconds);
|
|
24
25
|
await (0, set_props_and_env_1.setPropsAndEnv)({
|
|
25
|
-
inputProps
|
|
26
|
+
inputProps,
|
|
26
27
|
envVariables,
|
|
27
28
|
page,
|
|
28
29
|
serveUrl,
|
|
@@ -36,7 +37,7 @@ const innerSelectComposition = async ({ page, onBrowserLog, inputProps, envVaria
|
|
|
36
37
|
await (0, puppeteer_evaluate_1.puppeteerEvaluateWithCatch)({
|
|
37
38
|
page,
|
|
38
39
|
pageFunction: () => {
|
|
39
|
-
window.
|
|
40
|
+
window.remotion_setBundleMode({
|
|
40
41
|
type: 'evaluation',
|
|
41
42
|
});
|
|
42
43
|
},
|
|
@@ -44,76 +45,112 @@ const innerSelectComposition = async ({ page, onBrowserLog, inputProps, envVaria
|
|
|
44
45
|
args: [],
|
|
45
46
|
});
|
|
46
47
|
await (0, seek_to_frame_1.waitForReady)(page);
|
|
48
|
+
logger_1.Log.verboseAdvanced({
|
|
49
|
+
indent,
|
|
50
|
+
tag: 'selectComposition()',
|
|
51
|
+
logLevel: verbose ? 'verbose' : 'info',
|
|
52
|
+
}, 'Running calculateMetadata()...');
|
|
53
|
+
const time = Date.now();
|
|
47
54
|
const result = await (0, puppeteer_evaluate_1.puppeteerEvaluateWithCatch)({
|
|
48
55
|
pageFunction: (_id) => {
|
|
49
|
-
return window.
|
|
56
|
+
return window.remotion_calculateComposition(_id);
|
|
50
57
|
},
|
|
51
58
|
frame: null,
|
|
52
59
|
page,
|
|
53
60
|
args: [id],
|
|
54
61
|
});
|
|
62
|
+
logger_1.Log.verboseAdvanced({
|
|
63
|
+
indent,
|
|
64
|
+
tag: 'selectComposition()',
|
|
65
|
+
logLevel: verbose ? 'verbose' : 'info',
|
|
66
|
+
}, `calculateMetadata() took ${Date.now() - time}ms`);
|
|
55
67
|
return result;
|
|
56
68
|
};
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
const selectComposition = async (options) => {
|
|
62
|
-
const { puppeteerInstance, browserExecutable, chromiumOptions, downloadMap: passedDownloadMap, serveUrl: serveUrlOrWebpackUrl, verbose, indent, port, } = options;
|
|
63
|
-
const downloadMap = passedDownloadMap !== null && passedDownloadMap !== void 0 ? passedDownloadMap : (0, download_map_1.makeDownloadMap)();
|
|
64
|
-
const { page, cleanup } = await (0, get_browser_instance_1.getPageAndCleanupFn)({
|
|
69
|
+
const internalSelectComposition = async (options) => {
|
|
70
|
+
const cleanup = [];
|
|
71
|
+
const { puppeteerInstance, browserExecutable, chromiumOptions, serveUrl: serveUrlOrWebpackUrl, verbose, indent, port, envVariables, id, inputProps, onBrowserLog, server, timeoutInMilliseconds, } = options;
|
|
72
|
+
const { page, cleanup: cleanupPage } = await (0, get_browser_instance_1.getPageAndCleanupFn)({
|
|
65
73
|
passedInInstance: puppeteerInstance,
|
|
66
|
-
browserExecutable
|
|
67
|
-
chromiumOptions
|
|
74
|
+
browserExecutable,
|
|
75
|
+
chromiumOptions,
|
|
76
|
+
context: null,
|
|
77
|
+
forceDeviceScaleFactor: undefined,
|
|
78
|
+
indent,
|
|
79
|
+
shouldDumpIo: verbose,
|
|
68
80
|
});
|
|
81
|
+
cleanup.push(() => cleanupPage());
|
|
69
82
|
return new Promise((resolve, reject) => {
|
|
70
83
|
const onError = (err) => reject(err);
|
|
71
|
-
|
|
84
|
+
cleanup.push((0, handle_javascript_exception_1.handleJavascriptException)({
|
|
72
85
|
page,
|
|
73
86
|
frame: null,
|
|
74
87
|
onError,
|
|
75
|
-
});
|
|
76
|
-
|
|
77
|
-
(0, prepare_server_1.prepareServer)({
|
|
88
|
+
}));
|
|
89
|
+
(0, prepare_server_1.makeOrReuseServer)(options.server, {
|
|
78
90
|
webpackConfigOrServeUrl: serveUrlOrWebpackUrl,
|
|
79
|
-
|
|
80
|
-
onError,
|
|
81
|
-
port: port !== null && port !== void 0 ? port : null,
|
|
82
|
-
downloadMap,
|
|
91
|
+
port,
|
|
83
92
|
remotionRoot: (0, find_closest_package_json_1.findRemotionRoot)(),
|
|
84
93
|
concurrency: 1,
|
|
85
|
-
verbose
|
|
86
|
-
indent
|
|
94
|
+
verbose,
|
|
95
|
+
indent,
|
|
96
|
+
}, {
|
|
97
|
+
onDownload: () => undefined,
|
|
98
|
+
onError,
|
|
87
99
|
})
|
|
88
|
-
.then(({ serveUrl,
|
|
89
|
-
|
|
100
|
+
.then(({ server: { serveUrl, offthreadPort, sourceMap }, cleanupServer }) => {
|
|
101
|
+
page.setBrowserSourceMapContext(sourceMap);
|
|
102
|
+
cleanup.push(() => cleanupServer(true));
|
|
90
103
|
return innerSelectComposition({
|
|
91
|
-
...options,
|
|
92
104
|
serveUrl,
|
|
93
105
|
page,
|
|
94
106
|
port: offthreadPort,
|
|
107
|
+
browserExecutable,
|
|
108
|
+
chromiumOptions,
|
|
109
|
+
envVariables,
|
|
110
|
+
id,
|
|
111
|
+
inputProps,
|
|
112
|
+
onBrowserLog,
|
|
113
|
+
timeoutInMilliseconds,
|
|
114
|
+
verbose,
|
|
115
|
+
indent,
|
|
116
|
+
puppeteerInstance,
|
|
117
|
+
server,
|
|
95
118
|
});
|
|
96
119
|
})
|
|
97
120
|
.then((comp) => {
|
|
98
|
-
if (close) {
|
|
99
|
-
return Promise.all([comp, close(true)]);
|
|
100
|
-
}
|
|
101
|
-
return Promise.resolve([comp, null]);
|
|
102
|
-
})
|
|
103
|
-
.then(([comp]) => {
|
|
104
121
|
return resolve(comp);
|
|
105
122
|
})
|
|
106
123
|
.catch((err) => {
|
|
107
124
|
reject(err);
|
|
108
125
|
})
|
|
109
126
|
.finally(() => {
|
|
110
|
-
cleanup()
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
if (!passedDownloadMap) {
|
|
114
|
-
(0, download_map_1.cleanDownloadMap)(downloadMap);
|
|
115
|
-
}
|
|
127
|
+
cleanup.forEach((c) => {
|
|
128
|
+
c();
|
|
129
|
+
});
|
|
116
130
|
});
|
|
117
131
|
});
|
|
118
132
|
};
|
|
133
|
+
exports.internalSelectComposition = internalSelectComposition;
|
|
134
|
+
/**
|
|
135
|
+
* @description Gets a composition defined in a Remotion project based on a Webpack bundle.
|
|
136
|
+
* @see [Documentation](https://www.remotion.dev/docs/renderer/select-composition)
|
|
137
|
+
*/
|
|
138
|
+
const selectComposition = (options) => {
|
|
139
|
+
const { id, serveUrl, browserExecutable, chromiumOptions, envVariables, inputProps, onBrowserLog, port, puppeteerInstance, timeoutInMilliseconds, verbose, } = options;
|
|
140
|
+
return (0, exports.internalSelectComposition)({
|
|
141
|
+
id,
|
|
142
|
+
serveUrl,
|
|
143
|
+
browserExecutable: browserExecutable !== null && browserExecutable !== void 0 ? browserExecutable : null,
|
|
144
|
+
chromiumOptions: chromiumOptions !== null && chromiumOptions !== void 0 ? chromiumOptions : {},
|
|
145
|
+
envVariables: envVariables !== null && envVariables !== void 0 ? envVariables : {},
|
|
146
|
+
inputProps: inputProps !== null && inputProps !== void 0 ? inputProps : {},
|
|
147
|
+
onBrowserLog: onBrowserLog !== null && onBrowserLog !== void 0 ? onBrowserLog : null,
|
|
148
|
+
port: port !== null && port !== void 0 ? port : null,
|
|
149
|
+
puppeteerInstance,
|
|
150
|
+
timeoutInMilliseconds: timeoutInMilliseconds !== null && timeoutInMilliseconds !== void 0 ? timeoutInMilliseconds : TimeoutSettings_1.DEFAULT_TIMEOUT,
|
|
151
|
+
verbose: verbose !== null && verbose !== void 0 ? verbose : false,
|
|
152
|
+
indent: false,
|
|
153
|
+
server: undefined,
|
|
154
|
+
});
|
|
155
|
+
};
|
|
119
156
|
exports.selectComposition = selectComposition;
|
package/dist/serve-static.d.ts
CHANGED
|
@@ -1,10 +1,8 @@
|
|
|
1
|
-
import type { RenderMediaOnDownload } from './assets/download-and-map-assets-to-file';
|
|
2
1
|
import type { DownloadMap } from './assets/download-map';
|
|
3
2
|
import type { Compositor } from './compositor/compositor';
|
|
3
|
+
import type { OffthreadVideoServerEmitter } from './offthread-video-server';
|
|
4
4
|
export declare const serveStatic: (path: string | null, options: {
|
|
5
5
|
port: number | null;
|
|
6
|
-
onDownload: RenderMediaOnDownload;
|
|
7
|
-
onError: (err: Error) => void;
|
|
8
6
|
downloadMap: DownloadMap;
|
|
9
7
|
remotionRoot: string;
|
|
10
8
|
concurrency: number;
|
|
@@ -14,4 +12,5 @@ export declare const serveStatic: (path: string | null, options: {
|
|
|
14
12
|
port: number;
|
|
15
13
|
close: () => Promise<void>;
|
|
16
14
|
compositor: Compositor;
|
|
15
|
+
events: OffthreadVideoServerEmitter;
|
|
17
16
|
}>;
|
package/dist/serve-static.js
CHANGED
|
@@ -9,9 +9,7 @@ const get_port_1 = require("./get-port");
|
|
|
9
9
|
const offthread_video_server_1 = require("./offthread-video-server");
|
|
10
10
|
const serve_handler_1 = require("./serve-handler");
|
|
11
11
|
const serveStatic = async (path, options) => {
|
|
12
|
-
const { listener: offthreadRequest, close: closeCompositor, compositor, } = (0, offthread_video_server_1.startOffthreadVideoServer)({
|
|
13
|
-
onDownload: options.onDownload,
|
|
14
|
-
onError: options.onError,
|
|
12
|
+
const { listener: offthreadRequest, close: closeCompositor, compositor, events, } = (0, offthread_video_server_1.startOffthreadVideoServer)({
|
|
15
13
|
downloadMap: options.downloadMap,
|
|
16
14
|
concurrency: options.concurrency,
|
|
17
15
|
verbose: options.verbose,
|
|
@@ -87,7 +85,7 @@ const serveStatic = async (path, options) => {
|
|
|
87
85
|
}),
|
|
88
86
|
]);
|
|
89
87
|
};
|
|
90
|
-
return { port: selectedPort, close, compositor };
|
|
88
|
+
return { port: selectedPort, close, compositor, events };
|
|
91
89
|
}
|
|
92
90
|
catch (err) {
|
|
93
91
|
if (!(err instanceof Error)) {
|
|
@@ -1,14 +1,39 @@
|
|
|
1
|
-
/// <reference types="node" />
|
|
2
1
|
import type { RenderMediaOnDownload } from './assets/download-and-map-assets-to-file';
|
|
3
2
|
import type { RenderAssetInfo } from './assets/download-map';
|
|
4
3
|
import type { AudioCodec } from './audio-codec';
|
|
5
4
|
import type { Codec } from './codec';
|
|
6
5
|
import type { FfmpegOverrideFn } from './ffmpeg-override';
|
|
7
|
-
import type { VideoImageFormat } from './image-format';
|
|
8
6
|
import type { CancelSignal } from './make-cancel-signal';
|
|
9
7
|
import type { PixelFormat } from './pixel-format';
|
|
10
8
|
import type { ProResProfile } from './prores-profile';
|
|
11
|
-
|
|
9
|
+
type InternalStitchFramesToVideoOptions = {
|
|
10
|
+
audioBitrate: string | null;
|
|
11
|
+
videoBitrate: string | null;
|
|
12
|
+
fps: number;
|
|
13
|
+
width: number;
|
|
14
|
+
height: number;
|
|
15
|
+
outputLocation: string | null;
|
|
16
|
+
force: boolean;
|
|
17
|
+
assetsInfo: RenderAssetInfo;
|
|
18
|
+
pixelFormat: PixelFormat;
|
|
19
|
+
numberOfGifLoops: number | null;
|
|
20
|
+
codec: Codec;
|
|
21
|
+
audioCodec: AudioCodec | null;
|
|
22
|
+
crf: number | null;
|
|
23
|
+
onProgress?: null | ((progress: number) => void);
|
|
24
|
+
onDownload: undefined | RenderMediaOnDownload;
|
|
25
|
+
proResProfile: undefined | ProResProfile;
|
|
26
|
+
verbose: boolean;
|
|
27
|
+
dir: string;
|
|
28
|
+
cancelSignal: CancelSignal | null;
|
|
29
|
+
preEncodedFileLocation: string | null;
|
|
30
|
+
preferLossless: boolean;
|
|
31
|
+
indent: boolean;
|
|
32
|
+
muted: boolean;
|
|
33
|
+
enforceAudioTrack: boolean;
|
|
34
|
+
ffmpegOverride: null | FfmpegOverrideFn;
|
|
35
|
+
};
|
|
36
|
+
export type StitchFramesToVideoOptions = {
|
|
12
37
|
audioBitrate?: string | null;
|
|
13
38
|
videoBitrate?: string | null;
|
|
14
39
|
fps: number;
|
|
@@ -26,20 +51,16 @@ export declare type StitcherOptions = {
|
|
|
26
51
|
onDownload?: RenderMediaOnDownload;
|
|
27
52
|
proResProfile?: ProResProfile;
|
|
28
53
|
verbose?: boolean;
|
|
29
|
-
dir
|
|
54
|
+
dir: string;
|
|
30
55
|
cancelSignal?: CancelSignal;
|
|
31
|
-
internalOptions?: {
|
|
32
|
-
preEncodedFileLocation: string | null;
|
|
33
|
-
imageFormat: VideoImageFormat;
|
|
34
|
-
preferLossless: boolean;
|
|
35
|
-
indent: boolean;
|
|
36
|
-
};
|
|
37
56
|
muted?: boolean;
|
|
38
57
|
enforceAudioTrack?: boolean;
|
|
39
58
|
ffmpegOverride?: FfmpegOverrideFn;
|
|
40
59
|
};
|
|
60
|
+
export declare const internalStitchFramesToVideo: (options: InternalStitchFramesToVideoOptions) => Promise<Buffer | null>;
|
|
41
61
|
/**
|
|
42
62
|
* @description Takes a series of images and audio information generated by renderFrames() and encodes it to a video.
|
|
43
63
|
* @see [Documentation](https://www.remotion.dev/docs/renderer/stitch-frames-to-video)
|
|
44
64
|
*/
|
|
45
|
-
export declare const stitchFramesToVideo: (
|
|
65
|
+
export declare const stitchFramesToVideo: ({ assetsInfo, force, fps, height, width, audioBitrate, audioCodec, cancelSignal, codec, crf, dir, enforceAudioTrack, ffmpegOverride, muted, numberOfGifLoops, onDownload, onProgress, outputLocation, pixelFormat, proResProfile, verbose, videoBitrate, }: StitchFramesToVideoOptions) => Promise<Buffer | null>;
|
|
66
|
+
export {};
|