@remotion/renderer 4.1.0-alpha1 → 4.1.0-alpha10
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 +2 -4
- package/dist/assets/download-and-map-assets-to-file.js +14 -10
- package/dist/assets/download-map.d.ts +4 -0
- package/dist/assets/download-map.js +3 -0
- package/dist/audio-codec.d.ts +1 -1
- package/dist/browser/Browser.d.ts +7 -6
- package/dist/browser/Browser.js +13 -13
- package/dist/browser/BrowserPage.d.ts +21 -6
- package/dist/browser/BrowserPage.js +80 -19
- package/dist/browser/BrowserRunner.d.ts +0 -1
- package/dist/browser/BrowserRunner.js +6 -6
- package/dist/browser/Connection.d.ts +9 -3
- package/dist/browser/Connection.js +11 -3
- package/dist/browser/ConsoleMessage.d.ts +8 -1
- package/dist/browser/ConsoleMessage.js +2 -1
- package/dist/browser/DOMWorld.d.ts +10 -4
- package/dist/browser/DOMWorld.js +16 -15
- package/dist/browser/ExecutionContext.js +4 -4
- package/dist/browser/FrameManager.d.ts +3 -6
- package/dist/browser/FrameManager.js +11 -16
- package/dist/browser/LaunchOptions.d.ts +2 -0
- package/dist/browser/Launcher.js +3 -3
- package/dist/browser/NetworkManager.d.ts +4 -1
- package/dist/browser/Target.d.ts +2 -1
- package/dist/browser/Target.js +3 -1
- package/dist/browser/create-browser-fetcher.js +19 -24
- package/dist/browser/devtools-types.d.ts +59 -0
- package/dist/browser/should-log-message.js +14 -0
- package/dist/chalk/index.d.ts +2 -1
- package/dist/chalk/index.js +3 -8
- package/dist/chalk/is-color-supported.d.ts +1 -1
- package/dist/chalk/is-color-supported.js +18 -10
- package/dist/client.d.ts +26 -31
- package/dist/compositor/compose.js +6 -1
- package/dist/compositor/compositor.d.ts +3 -2
- package/dist/compositor/compositor.js +10 -10
- package/dist/compositor/payloads.d.ts +15 -1
- package/dist/create-ffmpeg-merge-filter.js +1 -2
- package/dist/cycle-browser-tabs.d.ts +2 -1
- package/dist/cycle-browser-tabs.js +2 -2
- package/dist/format-logs.d.ts +3 -0
- package/dist/format-logs.js +207 -0
- package/dist/get-browser-instance.d.ts +3 -2
- package/dist/get-browser-instance.js +5 -5
- package/dist/get-bundle-url-from-serve-url.d.ts +2 -0
- package/dist/get-bundle-url-from-serve-url.js +30 -0
- package/dist/get-compositions.d.ts +7 -6
- package/dist/get-compositions.js +21 -11
- package/dist/get-extension-from-codec.d.ts +2 -2
- package/dist/get-local-browser-executable.js +15 -0
- package/dist/get-video-metadata.d.ts +2 -0
- package/dist/get-video-metadata.js +14 -0
- package/dist/index.d.ts +64 -61
- package/dist/index.js +3 -1
- package/dist/logger.d.ts +2 -2
- package/dist/logger.js +23 -18
- package/dist/offthread-video-server.d.ts +3 -3
- package/dist/offthread-video-server.js +65 -29
- package/dist/open-browser.d.ts +3 -2
- package/dist/open-browser.js +7 -5
- package/dist/options/crf.js +1 -1
- package/dist/options/video-codec.js +1 -1
- package/dist/perf.js +4 -2
- package/dist/prepare-server.d.ts +4 -5
- package/dist/prepare-server.js +16 -14
- package/dist/prespawn-ffmpeg.d.ts +2 -1
- package/dist/prespawn-ffmpeg.js +3 -31
- package/dist/puppeteer-evaluate.d.ts +4 -1
- package/dist/puppeteer-evaluate.js +5 -5
- package/dist/render-frames.d.ts +16 -8
- package/dist/render-frames.js +50 -22
- package/dist/render-media.d.ts +17 -9
- package/dist/render-media.js +41 -26
- package/dist/render-still.d.ts +13 -6
- package/dist/render-still.js +32 -17
- package/dist/replace-browser.d.ts +2 -1
- package/dist/replace-browser.js +2 -2
- package/dist/screenshot-task.js +4 -2
- package/dist/seek-to-frame.d.ts +8 -2
- package/dist/seek-to-frame.js +87 -25
- package/dist/select-composition.d.ts +10 -5
- package/dist/select-composition.js +39 -18
- package/dist/serialize-props.d.ts +6 -0
- package/dist/serialize-props.js +36 -0
- package/dist/serve-handler/index.js +1 -1
- package/dist/serve-static.d.ts +2 -3
- package/dist/serve-static.js +10 -4
- package/dist/set-props-and-env.d.ts +4 -1
- package/dist/set-props-and-env.js +52 -22
- package/dist/stitch-frames-to-video.d.ts +2 -1
- package/dist/stitch-frames-to-video.js +12 -22
- package/dist/symbolicate-stacktrace.d.ts +3 -2
- package/dist/symbolicate-stacktrace.js +14 -7
- package/dist/take-frame-and-compose.js +1 -1
- package/dist/validate-output-filename.d.ts +1 -1
- package/package.json +10 -10
package/dist/render-frames.js
CHANGED
|
@@ -21,6 +21,7 @@ const get_duration_from_frame_range_1 = require("./get-duration-from-frame-range
|
|
|
21
21
|
const get_frame_padded_index_1 = require("./get-frame-padded-index");
|
|
22
22
|
const get_frame_to_render_1 = require("./get-frame-to-render");
|
|
23
23
|
const jpeg_quality_1 = require("./jpeg-quality");
|
|
24
|
+
const logger_1 = require("./logger");
|
|
24
25
|
const make_cancel_signal_1 = require("./make-cancel-signal");
|
|
25
26
|
const open_browser_1 = require("./open-browser");
|
|
26
27
|
const perf_1 = require("./perf");
|
|
@@ -34,7 +35,7 @@ const take_frame_and_compose_1 = require("./take-frame-and-compose");
|
|
|
34
35
|
const truthy_1 = require("./truthy");
|
|
35
36
|
const validate_scale_1 = require("./validate-scale");
|
|
36
37
|
const MAX_RETRIES_PER_FRAME = 1;
|
|
37
|
-
const innerRenderFrames = async ({ onFrameUpdate, outputDir, onStart,
|
|
38
|
+
const innerRenderFrames = async ({ onFrameUpdate, outputDir, onStart, serializedInputPropsWithCustomSchema, serializedResolvedPropsWithCustomSchema, jpegQuality, imageFormat, frameRange, onError, envVariables, onBrowserLog, onFrameBuffer, onDownload, pagesArray, serveUrl, composition, timeoutInMilliseconds, scale, actualConcurrency, everyNthFrame, proxyPort, cancelSignal, downloadMap, muted, makeBrowser, browserReplacer, compositor, sourcemapContext, logLevel, indent, }) => {
|
|
38
39
|
if (outputDir) {
|
|
39
40
|
if (!node_fs_1.default.existsSync(outputDir)) {
|
|
40
41
|
node_fs_1.default.mkdirSync(outputDir, {
|
|
@@ -47,7 +48,9 @@ const innerRenderFrames = async ({ onFrameUpdate, outputDir, onStart, inputProps
|
|
|
47
48
|
const framesToRender = (0, get_duration_from_frame_range_1.getFramesToRender)(realFrameRange, everyNthFrame);
|
|
48
49
|
const lastFrame = framesToRender[framesToRender.length - 1];
|
|
49
50
|
const makePage = async (context) => {
|
|
50
|
-
const page = await browserReplacer
|
|
51
|
+
const page = await browserReplacer
|
|
52
|
+
.getBrowser()
|
|
53
|
+
.newPage(context, logLevel, indent);
|
|
51
54
|
pagesArray.push(page);
|
|
52
55
|
await page.setViewport({
|
|
53
56
|
width: composition.width,
|
|
@@ -66,7 +69,7 @@ const innerRenderFrames = async ({ onFrameUpdate, outputDir, onStart, inputProps
|
|
|
66
69
|
}
|
|
67
70
|
const initialFrame = realFrameRange[0];
|
|
68
71
|
await (0, set_props_and_env_1.setPropsAndEnv)({
|
|
69
|
-
|
|
72
|
+
serializedInputPropsWithCustomSchema,
|
|
70
73
|
envVariables,
|
|
71
74
|
page,
|
|
72
75
|
serveUrl,
|
|
@@ -76,14 +79,16 @@ const innerRenderFrames = async ({ onFrameUpdate, outputDir, onStart, inputProps
|
|
|
76
79
|
retriesRemaining: 2,
|
|
77
80
|
audioEnabled: !muted,
|
|
78
81
|
videoEnabled: imageFormat !== 'none',
|
|
82
|
+
indent,
|
|
83
|
+
logLevel,
|
|
79
84
|
});
|
|
80
85
|
await (0, puppeteer_evaluate_1.puppeteerEvaluateWithCatch)({
|
|
81
86
|
// eslint-disable-next-line max-params
|
|
82
|
-
pageFunction: (id,
|
|
87
|
+
pageFunction: (id, props, durationInFrames, fps, height, width) => {
|
|
83
88
|
window.remotion_setBundleMode({
|
|
84
89
|
type: 'composition',
|
|
85
90
|
compositionName: id,
|
|
86
|
-
|
|
91
|
+
serializedResolvedPropsWithSchema: props,
|
|
87
92
|
compositionDurationInFrames: durationInFrames,
|
|
88
93
|
compositionFps: fps,
|
|
89
94
|
compositionHeight: height,
|
|
@@ -92,7 +97,7 @@ const innerRenderFrames = async ({ onFrameUpdate, outputDir, onStart, inputProps
|
|
|
92
97
|
},
|
|
93
98
|
args: [
|
|
94
99
|
composition.id,
|
|
95
|
-
|
|
100
|
+
serializedResolvedPropsWithCustomSchema,
|
|
96
101
|
composition.durationInFrames,
|
|
97
102
|
composition.fps,
|
|
98
103
|
composition.height,
|
|
@@ -130,7 +135,7 @@ const innerRenderFrames = async ({ onFrameUpdate, outputDir, onStart, inputProps
|
|
|
130
135
|
cancelSignal === null || cancelSignal === void 0 ? void 0 : cancelSignal(() => {
|
|
131
136
|
stopped = true;
|
|
132
137
|
});
|
|
133
|
-
const renderFrameWithOptionToReject = async ({ frame, index, reject, width, height, }) => {
|
|
138
|
+
const renderFrameWithOptionToReject = async ({ frame, index, reject, width, height, compId, }) => {
|
|
134
139
|
const pool = await poolPromise;
|
|
135
140
|
const freePage = await pool.acquire();
|
|
136
141
|
if (stopped) {
|
|
@@ -146,7 +151,17 @@ const innerRenderFrames = async ({ onFrameUpdate, outputDir, onStart, inputProps
|
|
|
146
151
|
frame,
|
|
147
152
|
});
|
|
148
153
|
freePage.on('error', errorCallbackOnFrame);
|
|
149
|
-
|
|
154
|
+
const startSeeking = Date.now();
|
|
155
|
+
await (0, seek_to_frame_1.seekToFrame)({
|
|
156
|
+
frame,
|
|
157
|
+
page: freePage,
|
|
158
|
+
composition: compId,
|
|
159
|
+
timeoutInMilliseconds,
|
|
160
|
+
});
|
|
161
|
+
const timeToSeek = Date.now() - startSeeking;
|
|
162
|
+
if (timeToSeek > 1000) {
|
|
163
|
+
logger_1.Log.verbose(`Seeking to frame ${frame} took ${timeToSeek}ms`);
|
|
164
|
+
}
|
|
150
165
|
if (!outputDir && !onFrameBuffer && imageFormat !== 'none') {
|
|
151
166
|
throw new Error('Called renderFrames() without specifying either `outputDir` or `onFrameBuffer`');
|
|
152
167
|
}
|
|
@@ -207,6 +222,7 @@ const innerRenderFrames = async ({ onFrameUpdate, outputDir, onStart, inputProps
|
|
|
207
222
|
reject,
|
|
208
223
|
width: composition.width,
|
|
209
224
|
height: composition.height,
|
|
225
|
+
compId: composition.id,
|
|
210
226
|
})
|
|
211
227
|
.then(() => {
|
|
212
228
|
resolve();
|
|
@@ -283,12 +299,11 @@ const innerRenderFrames = async ({ onFrameUpdate, outputDir, onStart, inputProps
|
|
|
283
299
|
await Promise.all(downloadPromises);
|
|
284
300
|
return result;
|
|
285
301
|
};
|
|
286
|
-
const internalRenderFrames = ({ browserExecutable, cancelSignal, chromiumOptions, composition, concurrency,
|
|
302
|
+
const internalRenderFrames = ({ browserExecutable, cancelSignal, chromiumOptions, composition, concurrency, envVariables, everyNthFrame, frameRange, imageFormat, indent, jpegQuality, muted, onBrowserLog, onDownload, onFrameBuffer, onFrameUpdate, onStart, outputDir, port, puppeteerInstance, scale, server, timeoutInMilliseconds, logLevel, webpackBundleOrServeUrl, serializedInputPropsWithCustomSchema, serializedResolvedPropsWithCustomSchema, }) => {
|
|
287
303
|
remotion_1.Internals.validateDimension(composition.height, 'height', 'in the `config` object passed to `renderFrames()`');
|
|
288
304
|
remotion_1.Internals.validateDimension(composition.width, 'width', 'in the `config` object passed to `renderFrames()`');
|
|
289
305
|
remotion_1.Internals.validateFps(composition.fps, 'in the `config` object of `renderFrames()`', false);
|
|
290
|
-
remotion_1.Internals.validateDurationInFrames({
|
|
291
|
-
durationInFrames: composition.durationInFrames,
|
|
306
|
+
remotion_1.Internals.validateDurationInFrames(composition.durationInFrames, {
|
|
292
307
|
component: 'in the `config` object passed to `renderFrames()`',
|
|
293
308
|
allowFloats: false,
|
|
294
309
|
});
|
|
@@ -296,12 +311,12 @@ const internalRenderFrames = ({ browserExecutable, cancelSignal, chromiumOptions
|
|
|
296
311
|
(0, validate_scale_1.validateScale)(scale);
|
|
297
312
|
const makeBrowser = () => (0, open_browser_1.internalOpenBrowser)({
|
|
298
313
|
browser: browser_1.DEFAULT_BROWSER,
|
|
299
|
-
shouldDumpIo: dumpBrowserLogs,
|
|
300
314
|
browserExecutable,
|
|
301
315
|
chromiumOptions,
|
|
302
316
|
forceDeviceScaleFactor: scale,
|
|
303
317
|
indent,
|
|
304
318
|
viewport: null,
|
|
319
|
+
logLevel,
|
|
305
320
|
});
|
|
306
321
|
const browserInstance = puppeteerInstance !== null && puppeteerInstance !== void 0 ? puppeteerInstance : makeBrowser();
|
|
307
322
|
const actualConcurrency = (0, get_concurrency_1.getActualConcurrency)(concurrency);
|
|
@@ -323,16 +338,18 @@ const internalRenderFrames = ({ browserExecutable, cancelSignal, chromiumOptions
|
|
|
323
338
|
port,
|
|
324
339
|
remotionRoot: (0, find_closest_package_json_1.findRemotionRoot)(),
|
|
325
340
|
concurrency: actualConcurrency,
|
|
326
|
-
|
|
341
|
+
logLevel,
|
|
327
342
|
indent,
|
|
328
343
|
}, {
|
|
329
344
|
onDownload,
|
|
330
345
|
onError,
|
|
331
346
|
}),
|
|
332
347
|
browserInstance,
|
|
333
|
-
]).then(([{ server:
|
|
334
|
-
const
|
|
335
|
-
|
|
348
|
+
]).then(([{ server: openedServer, cleanupServer }, pInstance]) => {
|
|
349
|
+
const { serveUrl, offthreadPort, compositor, sourceMap, downloadMap } = openedServer;
|
|
350
|
+
const browserReplacer = (0, replace_browser_1.handleBrowserCrash)(pInstance, logLevel, indent);
|
|
351
|
+
cleanup.push((0, cycle_browser_tabs_1.cycleBrowserTabs)(browserReplacer, actualConcurrency, logLevel, indent)
|
|
352
|
+
.stopCycling);
|
|
336
353
|
cleanup.push(() => cleanupServer(false));
|
|
337
354
|
return innerRenderFrames({
|
|
338
355
|
onError,
|
|
@@ -352,7 +369,6 @@ const internalRenderFrames = ({ browserExecutable, cancelSignal, chromiumOptions
|
|
|
352
369
|
everyNthFrame,
|
|
353
370
|
frameRange,
|
|
354
371
|
imageFormat,
|
|
355
|
-
inputProps,
|
|
356
372
|
jpegQuality,
|
|
357
373
|
muted,
|
|
358
374
|
onBrowserLog,
|
|
@@ -362,6 +378,10 @@ const internalRenderFrames = ({ browserExecutable, cancelSignal, chromiumOptions
|
|
|
362
378
|
outputDir,
|
|
363
379
|
scale,
|
|
364
380
|
timeoutInMilliseconds,
|
|
381
|
+
logLevel,
|
|
382
|
+
indent,
|
|
383
|
+
serializedInputPropsWithCustomSchema,
|
|
384
|
+
serializedResolvedPropsWithCustomSchema,
|
|
365
385
|
});
|
|
366
386
|
}),
|
|
367
387
|
])
|
|
@@ -384,7 +404,7 @@ const internalRenderFrames = ({ browserExecutable, cancelSignal, chromiumOptions
|
|
|
384
404
|
else {
|
|
385
405
|
Promise.resolve(browserInstance)
|
|
386
406
|
.then((instance) => {
|
|
387
|
-
return instance.close(true);
|
|
407
|
+
return instance.close(true, logLevel, indent);
|
|
388
408
|
})
|
|
389
409
|
.catch((err) => {
|
|
390
410
|
if (!(err === null || err === void 0 ? void 0 : err.message.includes('Target closed'))) {
|
|
@@ -405,7 +425,7 @@ exports.internalRenderFrames = internalRenderFrames;
|
|
|
405
425
|
* @see [Documentation](https://www.remotion.dev/docs/renderer/render-frames)
|
|
406
426
|
*/
|
|
407
427
|
const renderFrames = (options) => {
|
|
408
|
-
const { composition, inputProps, onFrameUpdate, onStart, outputDir, serveUrl, browserExecutable, cancelSignal, chromiumOptions, concurrency, dumpBrowserLogs, envVariables, everyNthFrame, frameRange, imageFormat, jpegQuality, muted, onBrowserLog, onDownload, onFrameBuffer, port, puppeteerInstance, scale, timeoutInMilliseconds, verbose, quality, } = options;
|
|
428
|
+
const { composition, inputProps, onFrameUpdate, onStart, outputDir, serveUrl, browserExecutable, cancelSignal, chromiumOptions, concurrency, dumpBrowserLogs, envVariables, everyNthFrame, frameRange, imageFormat, jpegQuality, muted, onBrowserLog, onDownload, onFrameBuffer, port, puppeteerInstance, scale, timeoutInMilliseconds, verbose, quality, logLevel, } = options;
|
|
409
429
|
if (!composition) {
|
|
410
430
|
throw new Error('No `composition` option has been specified for renderFrames()');
|
|
411
431
|
}
|
|
@@ -421,7 +441,6 @@ const renderFrames = (options) => {
|
|
|
421
441
|
chromiumOptions: chromiumOptions !== null && chromiumOptions !== void 0 ? chromiumOptions : {},
|
|
422
442
|
composition,
|
|
423
443
|
concurrency: concurrency !== null && concurrency !== void 0 ? concurrency : null,
|
|
424
|
-
dumpBrowserLogs: dumpBrowserLogs !== null && dumpBrowserLogs !== void 0 ? dumpBrowserLogs : false,
|
|
425
444
|
envVariables: envVariables !== null && envVariables !== void 0 ? envVariables : {},
|
|
426
445
|
everyNthFrame: everyNthFrame !== null && everyNthFrame !== void 0 ? everyNthFrame : 1,
|
|
427
446
|
frameRange: frameRange !== null && frameRange !== void 0 ? frameRange : null,
|
|
@@ -429,7 +448,16 @@ const renderFrames = (options) => {
|
|
|
429
448
|
indent: false,
|
|
430
449
|
jpegQuality: jpegQuality !== null && jpegQuality !== void 0 ? jpegQuality : jpeg_quality_1.DEFAULT_JPEG_QUALITY,
|
|
431
450
|
onDownload: onDownload !== null && onDownload !== void 0 ? onDownload : null,
|
|
432
|
-
|
|
451
|
+
serializedInputPropsWithCustomSchema: remotion_1.Internals.serializeJSONWithDate({
|
|
452
|
+
indent: undefined,
|
|
453
|
+
staticBase: null,
|
|
454
|
+
data: inputProps !== null && inputProps !== void 0 ? inputProps : {},
|
|
455
|
+
}).serializedString,
|
|
456
|
+
serializedResolvedPropsWithCustomSchema: remotion_1.Internals.serializeJSONWithDate({
|
|
457
|
+
indent: undefined,
|
|
458
|
+
staticBase: null,
|
|
459
|
+
data: composition.props,
|
|
460
|
+
}).serializedString,
|
|
433
461
|
puppeteerInstance,
|
|
434
462
|
muted: muted !== null && muted !== void 0 ? muted : false,
|
|
435
463
|
onBrowserLog: onBrowserLog !== null && onBrowserLog !== void 0 ? onBrowserLog : null,
|
|
@@ -439,7 +467,7 @@ const renderFrames = (options) => {
|
|
|
439
467
|
outputDir,
|
|
440
468
|
port: port !== null && port !== void 0 ? port : null,
|
|
441
469
|
scale: scale !== null && scale !== void 0 ? scale : 1,
|
|
442
|
-
|
|
470
|
+
logLevel: verbose || dumpBrowserLogs ? 'verbose' : logLevel !== null && logLevel !== void 0 ? logLevel : (0, logger_1.getLogLevel)(),
|
|
443
471
|
timeoutInMilliseconds: timeoutInMilliseconds !== null && timeoutInMilliseconds !== void 0 ? timeoutInMilliseconds : TimeoutSettings_1.DEFAULT_TIMEOUT,
|
|
444
472
|
webpackBundleOrServeUrl: serveUrl,
|
|
445
473
|
server: undefined,
|
package/dist/render-media.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/// <reference types="node" />
|
|
2
|
-
import type {
|
|
3
|
-
import type
|
|
2
|
+
import type { VideoConfig } from 'remotion';
|
|
3
|
+
import { type RenderMediaOnDownload } from './assets/download-and-map-assets-to-file';
|
|
4
4
|
import type { AudioCodec } from './audio-codec';
|
|
5
5
|
import type { BrowserExecutable } from './browser-executable';
|
|
6
6
|
import type { BrowserLog } from './browser-log';
|
|
@@ -9,6 +9,7 @@ import type { Codec } from './codec';
|
|
|
9
9
|
import type { FfmpegOverrideFn } from './ffmpeg-override';
|
|
10
10
|
import type { FrameRange } from './frame-range';
|
|
11
11
|
import type { VideoImageFormat } from './image-format';
|
|
12
|
+
import { type LogLevel } from './log-level';
|
|
12
13
|
import type { CancelSignal } from './make-cancel-signal';
|
|
13
14
|
import type { ChromiumOptions } from './open-browser';
|
|
14
15
|
import type { PixelFormat } from './pixel-format';
|
|
@@ -31,8 +32,9 @@ export type RenderMediaOnProgress = (progress: {
|
|
|
31
32
|
export type InternalRenderMediaOptions = {
|
|
32
33
|
outputLocation: string | null;
|
|
33
34
|
codec: Codec;
|
|
34
|
-
composition:
|
|
35
|
-
|
|
35
|
+
composition: Omit<VideoConfig, 'props' | 'defaultProps'>;
|
|
36
|
+
serializedInputPropsWithCustomSchema: string;
|
|
37
|
+
serializedResolvedPropsWithCustomSchema: string;
|
|
36
38
|
crf: number | null;
|
|
37
39
|
imageFormat: VideoImageFormat;
|
|
38
40
|
pixelFormat: PixelFormat;
|
|
@@ -46,7 +48,6 @@ export type InternalRenderMediaOptions = {
|
|
|
46
48
|
onProgress: RenderMediaOnProgress;
|
|
47
49
|
onDownload: RenderMediaOnDownload;
|
|
48
50
|
proResProfile: ProResProfile | undefined;
|
|
49
|
-
dumpBrowserLogs: boolean;
|
|
50
51
|
onBrowserLog: ((log: BrowserLog) => void) | null;
|
|
51
52
|
onStart: (data: OnStartData) => void;
|
|
52
53
|
timeoutInMilliseconds: number;
|
|
@@ -55,7 +56,7 @@ export type InternalRenderMediaOptions = {
|
|
|
55
56
|
port: number | null;
|
|
56
57
|
cancelSignal: CancelSignal | undefined;
|
|
57
58
|
browserExecutable: BrowserExecutable | null;
|
|
58
|
-
|
|
59
|
+
logLevel: LogLevel;
|
|
59
60
|
onCtrlCExit: (fn: () => void) => void;
|
|
60
61
|
indent: boolean;
|
|
61
62
|
server: RemotionServer | undefined;
|
|
@@ -73,7 +74,7 @@ export type InternalRenderMediaOptions = {
|
|
|
73
74
|
export type RenderMediaOptions = {
|
|
74
75
|
outputLocation?: string | null;
|
|
75
76
|
codec: Codec;
|
|
76
|
-
composition:
|
|
77
|
+
composition: VideoConfig;
|
|
77
78
|
inputProps?: Record<string, unknown>;
|
|
78
79
|
crf?: number | null;
|
|
79
80
|
imageFormat?: VideoImageFormat;
|
|
@@ -92,6 +93,9 @@ export type RenderMediaOptions = {
|
|
|
92
93
|
onProgress?: RenderMediaOnProgress;
|
|
93
94
|
onDownload?: RenderMediaOnDownload;
|
|
94
95
|
proResProfile?: ProResProfile;
|
|
96
|
+
/**
|
|
97
|
+
* @deprecated Use "logLevel": "verbose" instead
|
|
98
|
+
*/
|
|
95
99
|
dumpBrowserLogs?: boolean;
|
|
96
100
|
onBrowserLog?: ((log: BrowserLog) => void) | undefined;
|
|
97
101
|
onStart?: (data: OnStartData) => void;
|
|
@@ -101,6 +105,9 @@ export type RenderMediaOptions = {
|
|
|
101
105
|
port?: number | null;
|
|
102
106
|
cancelSignal?: CancelSignal;
|
|
103
107
|
browserExecutable?: BrowserExecutable;
|
|
108
|
+
/**
|
|
109
|
+
* @deprecated Use "logLevel" instead
|
|
110
|
+
*/
|
|
104
111
|
verbose?: boolean;
|
|
105
112
|
preferLossless?: boolean;
|
|
106
113
|
muted?: boolean;
|
|
@@ -112,16 +119,17 @@ export type RenderMediaOptions = {
|
|
|
112
119
|
audioCodec?: AudioCodec | null;
|
|
113
120
|
serveUrl: string;
|
|
114
121
|
concurrency?: number | string | null;
|
|
122
|
+
logLevel?: LogLevel;
|
|
115
123
|
};
|
|
116
124
|
type RenderMediaResult = {
|
|
117
125
|
buffer: Buffer | null;
|
|
118
126
|
slowestFrames: SlowFrame[];
|
|
119
127
|
};
|
|
120
|
-
export declare const internalRenderMedia: ({ proResProfile, crf, composition,
|
|
128
|
+
export declare const internalRenderMedia: ({ proResProfile, crf, composition, serializedInputPropsWithCustomSchema, pixelFormat, codec, envVariables, frameRange, puppeteerInstance, outputLocation, onProgress, overwrite, onDownload, onBrowserLog, onStart, timeoutInMilliseconds, chromiumOptions, scale, browserExecutable, port, cancelSignal, muted, enforceAudioTrack, ffmpegOverride, audioBitrate, videoBitrate, audioCodec, concurrency, disallowParallelEncoding, everyNthFrame, imageFormat: provisionalImageFormat, indent, jpegQuality, numberOfGifLoops, onCtrlCExit, preferLossless, serveUrl, server: reusedServer, logLevel, serializedResolvedPropsWithCustomSchema, }: InternalRenderMediaOptions) => Promise<RenderMediaResult>;
|
|
121
129
|
/**
|
|
122
130
|
*
|
|
123
131
|
* @description Render a video from a composition
|
|
124
132
|
* @see [Documentation](https://www.remotion.dev/docs/renderer/render-media)
|
|
125
133
|
*/
|
|
126
|
-
export declare const renderMedia: ({ proResProfile, crf, composition, inputProps, pixelFormat, codec, envVariables, frameRange, puppeteerInstance, outputLocation, onProgress, overwrite, onDownload,
|
|
134
|
+
export declare const renderMedia: ({ proResProfile, crf, composition, inputProps, pixelFormat, codec, envVariables, frameRange, puppeteerInstance, outputLocation, onProgress, overwrite, onDownload, onBrowserLog, onStart, timeoutInMilliseconds, chromiumOptions, scale, browserExecutable, port, cancelSignal, muted, enforceAudioTrack, ffmpegOverride, audioBitrate, videoBitrate, audioCodec, jpegQuality, concurrency, serveUrl, disallowParallelEncoding, everyNthFrame, imageFormat, numberOfGifLoops, dumpBrowserLogs, preferLossless, verbose, quality, logLevel, }: RenderMediaOptions) => Promise<RenderMediaResult>;
|
|
127
135
|
export {};
|
package/dist/render-media.js
CHANGED
|
@@ -43,7 +43,7 @@ const validate_output_filename_1 = require("./validate-output-filename");
|
|
|
43
43
|
const validate_scale_1 = require("./validate-scale");
|
|
44
44
|
const validate_videobitrate_1 = require("./validate-videobitrate");
|
|
45
45
|
const SLOWEST_FRAME_COUNT = 10;
|
|
46
|
-
const internalRenderMedia = ({ proResProfile, crf, composition,
|
|
46
|
+
const internalRenderMedia = ({ proResProfile, crf, composition, serializedInputPropsWithCustomSchema, pixelFormat, codec, envVariables, frameRange, puppeteerInstance, outputLocation, onProgress, overwrite, onDownload, onBrowserLog, onStart, timeoutInMilliseconds, chromiumOptions, scale, browserExecutable, port, cancelSignal, muted, enforceAudioTrack, ffmpegOverride, audioBitrate, videoBitrate, audioCodec, concurrency, disallowParallelEncoding, everyNthFrame, imageFormat: provisionalImageFormat, indent, jpegQuality, numberOfGifLoops, onCtrlCExit, preferLossless, serveUrl, server: reusedServer, logLevel, serializedResolvedPropsWithCustomSchema, }) => {
|
|
47
47
|
(0, jpeg_quality_1.validateJpegQuality)(jpegQuality);
|
|
48
48
|
(0, crf_1.validateQualitySettings)({ crf, codec, videoBitrate });
|
|
49
49
|
(0, validate_videobitrate_1.validateBitrate)(audioBitrate, 'audioBitrate');
|
|
@@ -72,6 +72,7 @@ const internalRenderMedia = ({ proResProfile, crf, composition, inputProps, pixe
|
|
|
72
72
|
let stitcherFfmpeg;
|
|
73
73
|
let preStitcher = null;
|
|
74
74
|
let encodedFrames = 0;
|
|
75
|
+
let muxedFrames = 0;
|
|
75
76
|
let renderedFrames = 0;
|
|
76
77
|
let renderedDoneIn = null;
|
|
77
78
|
let encodedDoneIn = null;
|
|
@@ -86,30 +87,32 @@ const internalRenderMedia = ({ proResProfile, crf, composition, inputProps, pixe
|
|
|
86
87
|
(0, can_use_parallel_encoding_1.canUseParallelEncoding)(codec);
|
|
87
88
|
logger_1.Log.verboseAdvanced({
|
|
88
89
|
indent,
|
|
89
|
-
logLevel
|
|
90
|
+
logLevel,
|
|
90
91
|
tag: 'renderMedia()',
|
|
91
92
|
}, 'Free memory:', freeMemory, 'Estimated usage parallel encoding', estimatedUsage);
|
|
92
93
|
logger_1.Log.verboseAdvanced({
|
|
93
94
|
indent,
|
|
94
|
-
logLevel
|
|
95
|
+
logLevel,
|
|
95
96
|
tag: 'renderMedia()',
|
|
96
97
|
}, 'Codec supports parallel rendering:', (0, can_use_parallel_encoding_1.canUseParallelEncoding)(codec));
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
98
|
+
if (disallowParallelEncoding) {
|
|
99
|
+
logger_1.Log.verboseAdvanced({
|
|
100
|
+
indent,
|
|
101
|
+
logLevel,
|
|
102
|
+
tag: 'renderMedia()',
|
|
103
|
+
}, 'User disallowed parallel encoding.');
|
|
104
|
+
}
|
|
102
105
|
if (parallelEncoding) {
|
|
103
106
|
logger_1.Log.verboseAdvanced({
|
|
104
107
|
indent,
|
|
105
|
-
logLevel
|
|
108
|
+
logLevel,
|
|
106
109
|
tag: 'renderMedia()',
|
|
107
110
|
}, 'Parallel encoding is enabled.');
|
|
108
111
|
}
|
|
109
112
|
else {
|
|
110
113
|
logger_1.Log.verboseAdvanced({
|
|
111
114
|
indent,
|
|
112
|
-
logLevel
|
|
115
|
+
logLevel,
|
|
113
116
|
tag: 'renderMedia()',
|
|
114
117
|
}, 'Parallel encoding is disabled.');
|
|
115
118
|
}
|
|
@@ -133,13 +136,12 @@ const internalRenderMedia = ({ proResProfile, crf, composition, inputProps, pixe
|
|
|
133
136
|
const callUpdate = () => {
|
|
134
137
|
onProgress === null || onProgress === void 0 ? void 0 : onProgress({
|
|
135
138
|
encodedDoneIn,
|
|
136
|
-
encodedFrames,
|
|
139
|
+
encodedFrames: Math.round(0.5 * encodedFrames + 0.5 * muxedFrames),
|
|
137
140
|
renderedDoneIn,
|
|
138
141
|
renderedFrames,
|
|
139
142
|
stitchStage,
|
|
140
|
-
progress: Math.round((
|
|
141
|
-
composition.durationInFrames)
|
|
142
|
-
100) / 100,
|
|
143
|
+
progress: Math.round((70 * renderedFrames + 15 * encodedFrames + 15 * muxedFrames) /
|
|
144
|
+
composition.durationInFrames) / 100,
|
|
143
145
|
});
|
|
144
146
|
};
|
|
145
147
|
const realFrameRange = (0, get_frame_to_render_1.getRealFrameRange)(composition.durationInFrames, frameRange);
|
|
@@ -167,7 +169,7 @@ const internalRenderMedia = ({ proResProfile, crf, composition, inputProps, pixe
|
|
|
167
169
|
encodedFrames = frame;
|
|
168
170
|
callUpdate();
|
|
169
171
|
},
|
|
170
|
-
|
|
172
|
+
logLevel,
|
|
171
173
|
imageFormat,
|
|
172
174
|
signal: cancelPrestitcher.cancelSignal,
|
|
173
175
|
ffmpegOverride: ffmpegOverride !== null && ffmpegOverride !== void 0 ? ffmpegOverride : (({ args }) => args),
|
|
@@ -225,7 +227,7 @@ const internalRenderMedia = ({ proResProfile, crf, composition, inputProps, pixe
|
|
|
225
227
|
indent,
|
|
226
228
|
port,
|
|
227
229
|
remotionRoot: (0, find_closest_package_json_1.findRemotionRoot)(),
|
|
228
|
-
|
|
230
|
+
logLevel,
|
|
229
231
|
webpackConfigOrServeUrl: serveUrl,
|
|
230
232
|
}, {
|
|
231
233
|
onDownload,
|
|
@@ -248,7 +250,7 @@ const internalRenderMedia = ({ proResProfile, crf, composition, inputProps, pixe
|
|
|
248
250
|
callUpdate();
|
|
249
251
|
onStart === null || onStart === void 0 ? void 0 : onStart(data);
|
|
250
252
|
},
|
|
251
|
-
|
|
253
|
+
serializedInputPropsWithCustomSchema,
|
|
252
254
|
envVariables,
|
|
253
255
|
imageFormat,
|
|
254
256
|
jpegQuality,
|
|
@@ -276,7 +278,6 @@ const internalRenderMedia = ({ proResProfile, crf, composition, inputProps, pixe
|
|
|
276
278
|
}
|
|
277
279
|
: null,
|
|
278
280
|
webpackBundleOrServeUrl: serveUrl,
|
|
279
|
-
dumpBrowserLogs,
|
|
280
281
|
onBrowserLog,
|
|
281
282
|
onDownload,
|
|
282
283
|
timeoutInMilliseconds,
|
|
@@ -286,9 +287,10 @@ const internalRenderMedia = ({ proResProfile, crf, composition, inputProps, pixe
|
|
|
286
287
|
port,
|
|
287
288
|
cancelSignal: cancelRenderFrames.cancelSignal,
|
|
288
289
|
muted: disableAudio,
|
|
289
|
-
|
|
290
|
+
logLevel,
|
|
290
291
|
indent,
|
|
291
292
|
server,
|
|
293
|
+
serializedResolvedPropsWithCustomSchema,
|
|
292
294
|
});
|
|
293
295
|
return renderFramesProc;
|
|
294
296
|
})
|
|
@@ -322,12 +324,17 @@ const internalRenderMedia = ({ proResProfile, crf, composition, inputProps, pixe
|
|
|
322
324
|
assetsInfo,
|
|
323
325
|
onProgress: (frame) => {
|
|
324
326
|
stitchStage = 'muxing';
|
|
325
|
-
|
|
327
|
+
if (preEncodedFileLocation) {
|
|
328
|
+
muxedFrames = frame;
|
|
329
|
+
}
|
|
330
|
+
else {
|
|
331
|
+
encodedFrames = frame;
|
|
332
|
+
}
|
|
326
333
|
callUpdate();
|
|
327
334
|
},
|
|
328
335
|
onDownload,
|
|
329
336
|
numberOfGifLoops,
|
|
330
|
-
|
|
337
|
+
logLevel,
|
|
331
338
|
dir: workingDir,
|
|
332
339
|
cancelSignal: cancelStitcher.cancelSignal,
|
|
333
340
|
muted: disableAudio,
|
|
@@ -401,8 +408,8 @@ exports.internalRenderMedia = internalRenderMedia;
|
|
|
401
408
|
* @description Render a video from a composition
|
|
402
409
|
* @see [Documentation](https://www.remotion.dev/docs/renderer/render-media)
|
|
403
410
|
*/
|
|
404
|
-
const renderMedia = ({ proResProfile, crf, composition, inputProps, pixelFormat, codec, envVariables, frameRange, puppeteerInstance, outputLocation, onProgress, overwrite, onDownload,
|
|
405
|
-
var _a;
|
|
411
|
+
const renderMedia = ({ proResProfile, crf, composition, inputProps, pixelFormat, codec, envVariables, frameRange, puppeteerInstance, outputLocation, onProgress, overwrite, onDownload, onBrowserLog, onStart, timeoutInMilliseconds, chromiumOptions, scale, browserExecutable, port, cancelSignal, muted, enforceAudioTrack, ffmpegOverride, audioBitrate, videoBitrate, audioCodec, jpegQuality, concurrency, serveUrl, disallowParallelEncoding, everyNthFrame, imageFormat, numberOfGifLoops, dumpBrowserLogs, preferLossless, verbose, quality, logLevel, }) => {
|
|
412
|
+
var _a, _b;
|
|
406
413
|
if (quality !== undefined) {
|
|
407
414
|
console.warn(`The "quality" option has been renamed. Please use "jpegQuality" instead.`);
|
|
408
415
|
}
|
|
@@ -419,14 +426,17 @@ const renderMedia = ({ proResProfile, crf, composition, inputProps, pixelFormat,
|
|
|
419
426
|
concurrency: concurrency !== null && concurrency !== void 0 ? concurrency : null,
|
|
420
427
|
crf: crf !== null && crf !== void 0 ? crf : null,
|
|
421
428
|
disallowParallelEncoding: disallowParallelEncoding !== null && disallowParallelEncoding !== void 0 ? disallowParallelEncoding : false,
|
|
422
|
-
dumpBrowserLogs: dumpBrowserLogs !== null && dumpBrowserLogs !== void 0 ? dumpBrowserLogs : false,
|
|
423
429
|
enforceAudioTrack: enforceAudioTrack !== null && enforceAudioTrack !== void 0 ? enforceAudioTrack : false,
|
|
424
430
|
envVariables: envVariables !== null && envVariables !== void 0 ? envVariables : {},
|
|
425
431
|
everyNthFrame: everyNthFrame !== null && everyNthFrame !== void 0 ? everyNthFrame : 1,
|
|
426
432
|
ffmpegOverride: ffmpegOverride !== null && ffmpegOverride !== void 0 ? ffmpegOverride : undefined,
|
|
427
433
|
frameRange: frameRange !== null && frameRange !== void 0 ? frameRange : null,
|
|
428
434
|
imageFormat: imageFormat !== null && imageFormat !== void 0 ? imageFormat : image_format_1.DEFAULT_VIDEO_IMAGE_FORMAT,
|
|
429
|
-
|
|
435
|
+
serializedInputPropsWithCustomSchema: remotion_1.Internals.serializeJSONWithDate({
|
|
436
|
+
indent: undefined,
|
|
437
|
+
staticBase: null,
|
|
438
|
+
data: inputProps !== null && inputProps !== void 0 ? inputProps : {},
|
|
439
|
+
}).serializedString,
|
|
430
440
|
jpegQuality: (_a = jpegQuality !== null && jpegQuality !== void 0 ? jpegQuality : quality) !== null && _a !== void 0 ? _a : jpeg_quality_1.DEFAULT_JPEG_QUALITY,
|
|
431
441
|
muted: muted !== null && muted !== void 0 ? muted : false,
|
|
432
442
|
numberOfGifLoops: numberOfGifLoops !== null && numberOfGifLoops !== void 0 ? numberOfGifLoops : null,
|
|
@@ -442,11 +452,16 @@ const renderMedia = ({ proResProfile, crf, composition, inputProps, pixelFormat,
|
|
|
442
452
|
scale: scale !== null && scale !== void 0 ? scale : 1,
|
|
443
453
|
timeoutInMilliseconds: timeoutInMilliseconds !== null && timeoutInMilliseconds !== void 0 ? timeoutInMilliseconds : TimeoutSettings_1.DEFAULT_TIMEOUT,
|
|
444
454
|
videoBitrate: videoBitrate !== null && videoBitrate !== void 0 ? videoBitrate : null,
|
|
445
|
-
|
|
455
|
+
logLevel: verbose || dumpBrowserLogs ? 'verbose' : logLevel !== null && logLevel !== void 0 ? logLevel : (0, logger_1.getLogLevel)(),
|
|
446
456
|
preferLossless: preferLossless !== null && preferLossless !== void 0 ? preferLossless : false,
|
|
447
457
|
indent: false,
|
|
448
458
|
onCtrlCExit: () => undefined,
|
|
449
459
|
server: undefined,
|
|
460
|
+
serializedResolvedPropsWithCustomSchema: remotion_1.Internals.serializeJSONWithDate({
|
|
461
|
+
indent: undefined,
|
|
462
|
+
staticBase: null,
|
|
463
|
+
data: (_b = composition.props) !== null && _b !== void 0 ? _b : {},
|
|
464
|
+
}).serializedString,
|
|
450
465
|
});
|
|
451
466
|
};
|
|
452
467
|
exports.renderMedia = renderMedia;
|
package/dist/render-still.d.ts
CHANGED
|
@@ -1,22 +1,23 @@
|
|
|
1
1
|
/// <reference types="node" />
|
|
2
|
-
import type {
|
|
2
|
+
import type { VideoConfig } from 'remotion';
|
|
3
3
|
import type { RenderMediaOnDownload } from './assets/download-and-map-assets-to-file';
|
|
4
4
|
import type { BrowserExecutable } from './browser-executable';
|
|
5
5
|
import type { BrowserLog } from './browser-log';
|
|
6
6
|
import type { HeadlessBrowser } from './browser/Browser';
|
|
7
7
|
import type { StillImageFormat } from './image-format';
|
|
8
|
+
import type { LogLevel } from './log-level';
|
|
8
9
|
import type { CancelSignal } from './make-cancel-signal';
|
|
9
10
|
import type { ChromiumOptions } from './open-browser';
|
|
10
11
|
import type { RemotionServer } from './prepare-server';
|
|
11
12
|
type InternalRenderStillOptions = {
|
|
12
|
-
composition:
|
|
13
|
+
composition: VideoConfig;
|
|
13
14
|
output: string | null;
|
|
14
15
|
frame: number;
|
|
15
|
-
|
|
16
|
+
serializedInputPropsWithCustomSchema: string;
|
|
17
|
+
serializedResolvedPropsWithCustomSchema: string;
|
|
16
18
|
imageFormat: StillImageFormat;
|
|
17
19
|
jpegQuality: number;
|
|
18
20
|
puppeteerInstance: HeadlessBrowser | null;
|
|
19
|
-
dumpBrowserLogs: boolean;
|
|
20
21
|
envVariables: Record<string, string>;
|
|
21
22
|
overwrite: boolean;
|
|
22
23
|
browserExecutable: BrowserExecutable;
|
|
@@ -28,19 +29,22 @@ type InternalRenderStillOptions = {
|
|
|
28
29
|
cancelSignal: CancelSignal | null;
|
|
29
30
|
indent: boolean;
|
|
30
31
|
server: RemotionServer | undefined;
|
|
31
|
-
|
|
32
|
+
logLevel: LogLevel;
|
|
32
33
|
serveUrl: string;
|
|
33
34
|
port: number | null;
|
|
34
35
|
};
|
|
35
36
|
export type RenderStillOptions = {
|
|
36
37
|
port?: number | null;
|
|
37
|
-
composition:
|
|
38
|
+
composition: VideoConfig;
|
|
38
39
|
output?: string | null;
|
|
39
40
|
frame?: number;
|
|
40
41
|
inputProps?: Record<string, unknown>;
|
|
41
42
|
imageFormat?: StillImageFormat;
|
|
42
43
|
jpegQuality?: number;
|
|
43
44
|
puppeteerInstance?: HeadlessBrowser;
|
|
45
|
+
/**
|
|
46
|
+
* @deprecated Use "logLevel": "verbose" instead
|
|
47
|
+
*/
|
|
44
48
|
dumpBrowserLogs?: boolean;
|
|
45
49
|
envVariables?: Record<string, string>;
|
|
46
50
|
overwrite?: boolean;
|
|
@@ -51,6 +55,9 @@ export type RenderStillOptions = {
|
|
|
51
55
|
scale?: number;
|
|
52
56
|
onDownload?: RenderMediaOnDownload;
|
|
53
57
|
cancelSignal?: CancelSignal;
|
|
58
|
+
/**
|
|
59
|
+
* @deprecated Use "logLevel" instead
|
|
60
|
+
*/
|
|
54
61
|
verbose?: boolean;
|
|
55
62
|
serveUrl: string;
|
|
56
63
|
/**
|