@remotion/renderer 4.0.0-alpha.217 → 4.0.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/README.md +5 -37
- package/dist/assets/download-and-map-assets-to-file.js +6 -6
- package/dist/assets/download-file.d.ts +3 -2
- package/dist/assets/download-file.js +18 -3
- package/dist/assets/download-map.d.ts +0 -26
- package/dist/assets/download-map.js +7 -12
- package/dist/assets/get-video-stream-duration.d.ts +5 -2
- package/dist/assets/get-video-stream-duration.js +12 -6
- package/dist/assets/read-file.d.ts +1 -1
- package/dist/assets/read-file.js +2 -2
- package/dist/assets/sanitize-filepath.js +2 -2
- package/dist/browser/Browser.d.ts +4 -4
- package/dist/browser/Browser.js +38 -38
- package/dist/browser/BrowserFetcher.d.ts +15 -63
- package/dist/browser/BrowserFetcher.js +138 -226
- package/dist/browser/BrowserPage.d.ts +4 -4
- package/dist/browser/BrowserRunner.d.ts +1 -1
- package/dist/browser/BrowserRunner.js +9 -22
- package/dist/browser/DOMWorld.d.ts +3 -3
- package/dist/browser/LaunchOptions.d.ts +1 -2
- package/dist/browser/Launcher.d.ts +3 -3
- package/dist/browser/Launcher.js +10 -23
- package/dist/browser/NodeWebSocketTransport.js +4 -4
- package/dist/browser/PuppeteerNode.d.ts +2 -5
- package/dist/browser/PuppeteerNode.js +0 -5
- package/dist/browser/Target.d.ts +2 -2
- package/dist/browser/create-browser-fetcher.js +34 -48
- package/dist/browser/get-download-destination.js +8 -8
- package/dist/browser/util.d.ts +2 -2
- package/dist/call-ffmpeg.d.ts +4 -7
- package/dist/call-ffmpeg.js +24 -16
- package/dist/chalk/index.d.ts +54 -0
- package/dist/chalk/index.js +135 -0
- package/dist/chalk/is-color-supported.d.ts +1 -0
- package/dist/chalk/is-color-supported.js +37 -0
- package/dist/client.d.ts +1 -0
- package/dist/client.js +1 -0
- package/dist/codec-supports-media.d.ts +1 -0
- package/dist/codec-supports-media.js +20 -5
- package/dist/combine-videos.js +6 -6
- package/dist/compositor/compose.d.ts +6 -2
- package/dist/compositor/compose.js +43 -20
- package/dist/compositor/compositor.d.ts +4 -8
- package/dist/compositor/compositor.js +67 -53
- package/dist/compositor/get-executable-path.js +3 -0
- package/dist/compositor/payloads.d.ts +34 -7
- package/dist/crf.js +8 -2
- package/dist/delete-directory.js +3 -3
- package/dist/does-have-m2-bug.js +2 -2
- package/dist/ensure-output-directory.js +5 -5
- package/dist/ensure-presentation-timestamp.d.ts +9 -2
- package/dist/ensure-presentation-timestamp.js +13 -5
- package/dist/extract-frame-from-video.d.ts +3 -1
- package/dist/extract-frame-from-video.js +29 -7
- package/dist/ffmpeg-filter-file.js +7 -7
- package/dist/find-closest-package-json.js +6 -6
- package/dist/get-browser-instance.d.ts +2 -2
- package/dist/get-can-extract-frames-fast.d.ts +4 -1
- package/dist/get-can-extract-frames-fast.js +12 -1
- package/dist/get-compositions.d.ts +8 -3
- package/dist/get-compositions.js +6 -2
- package/dist/get-concurrency.js +3 -3
- package/dist/get-extension-of-filename.js +2 -2
- package/dist/get-frame-of-video-slow.d.ts +8 -3
- package/dist/get-frame-of-video-slow.js +11 -3
- package/dist/get-local-browser-executable.js +6 -15
- package/dist/get-video-info.d.ts +5 -2
- package/dist/get-video-info.js +12 -6
- package/dist/get-video-threads-flag.js +3 -3
- package/dist/index.d.ts +92 -16
- package/dist/index.js +15 -6
- package/dist/last-frame-from-video-cache.d.ts +4 -1
- package/dist/last-frame-from-video-cache.js +1 -0
- package/dist/logger.d.ts +22 -0
- package/dist/logger.js +61 -0
- package/dist/merge-audio-track.js +2 -2
- package/dist/mime-types.js +2 -2
- package/dist/offthread-video-server.d.ts +12 -6
- package/dist/offthread-video-server.js +66 -56
- package/dist/open-browser.d.ts +3 -3
- package/dist/open-browser.js +1 -1
- package/dist/options/jpeg-quality.js +1 -1
- package/dist/options/video-codec.js +1 -1
- package/dist/prepare-server.d.ts +6 -1
- package/dist/prepare-server.js +15 -7
- package/dist/prespawn-ffmpeg.d.ts +1 -0
- package/dist/prespawn-ffmpeg.js +37 -14
- package/dist/prestitcher-memory-usage.js +2 -2
- package/dist/puppeteer-evaluate.js +2 -2
- package/dist/puppeteer-screenshot.js +1 -1
- package/dist/render-frames.d.ts +9 -4
- package/dist/render-frames.js +28 -12
- package/dist/render-media.d.ts +7 -4
- package/dist/render-media.js +49 -26
- package/dist/render-still.d.ts +10 -3
- package/dist/render-still.js +26 -9
- package/dist/replace-browser.d.ts +4 -4
- package/dist/resolve-asset-src.js +2 -2
- package/dist/screenshot-task.js +2 -2
- package/dist/select-composition.d.ts +33 -0
- package/dist/select-composition.js +119 -0
- package/dist/serve-handler/index.d.ts +1 -1
- package/dist/serve-handler/index.js +15 -15
- package/dist/serve-handler/is-path-inside.js +3 -3
- package/dist/serve-static.d.ts +5 -0
- package/dist/serve-static.js +25 -20
- package/dist/set-props-and-env.d.ts +5 -3
- package/dist/set-props-and-env.js +13 -3
- package/dist/stitch-frames-to-video.d.ts +1 -0
- package/dist/stitch-frames-to-video.js +76 -53
- package/dist/take-frame-and-compose.d.ts +3 -1
- package/dist/take-frame-and-compose.js +8 -7
- package/dist/tmp-dir.js +7 -7
- package/dist/try-to-extract-frame-of-video-fast.d.ts +4 -2
- package/dist/try-to-extract-frame-of-video-fast.js +7 -3
- package/install-toolchain.mjs +3 -9
- package/package.json +70 -71
- package/types/ws/index.d.ts +5 -5
- package/ffmpeg/SOURCE.md +0 -1
- package/ffmpeg/linux-arm-musl.gz +0 -0
- package/ffmpeg/linux-arm.gz +0 -0
- package/ffmpeg/linux-x64-musl.gz +0 -0
- package/ffmpeg/linux-x64.gz +0 -0
- package/ffmpeg/macos-arm.gz +0 -0
- package/ffmpeg/macos-x64.gz +0 -0
- package/ffmpeg/windows.gz +0 -0
package/dist/prepare-server.d.ts
CHANGED
|
@@ -1,14 +1,19 @@
|
|
|
1
1
|
import type { RenderMediaOnDownload } from './assets/download-and-map-assets-to-file';
|
|
2
2
|
import type { DownloadMap } from './assets/download-map';
|
|
3
|
-
|
|
3
|
+
import type { Compositor } from './compositor/compositor';
|
|
4
|
+
export declare const prepareServer: ({ onDownload, onError, webpackConfigOrServeUrl, port, downloadMap, remotionRoot, concurrency, verbose, indent, }: {
|
|
4
5
|
webpackConfigOrServeUrl: string;
|
|
5
6
|
onDownload: RenderMediaOnDownload;
|
|
6
7
|
onError: (err: Error) => void;
|
|
7
8
|
port: number | null;
|
|
8
9
|
downloadMap: DownloadMap;
|
|
9
10
|
remotionRoot: string;
|
|
11
|
+
concurrency: number;
|
|
12
|
+
verbose: boolean;
|
|
13
|
+
indent: boolean;
|
|
10
14
|
}) => Promise<{
|
|
11
15
|
serveUrl: string;
|
|
12
16
|
closeServer: (force: boolean) => Promise<unknown>;
|
|
13
17
|
offthreadPort: number;
|
|
18
|
+
compositor: Compositor;
|
|
14
19
|
}>;
|
package/dist/prepare-server.js
CHANGED
|
@@ -4,19 +4,22 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.prepareServer = void 0;
|
|
7
|
-
const
|
|
8
|
-
const
|
|
7
|
+
const node_fs_1 = require("node:fs");
|
|
8
|
+
const node_path_1 = __importDefault(require("node:path"));
|
|
9
9
|
const is_serve_url_1 = require("./is-serve-url");
|
|
10
10
|
const serve_static_1 = require("./serve-static");
|
|
11
11
|
const wait_for_symbolication_error_to_be_done_1 = require("./wait-for-symbolication-error-to-be-done");
|
|
12
|
-
const prepareServer = async ({ onDownload, onError, webpackConfigOrServeUrl, port, downloadMap, remotionRoot, }) => {
|
|
12
|
+
const prepareServer = async ({ onDownload, onError, webpackConfigOrServeUrl, port, downloadMap, remotionRoot, concurrency, verbose, indent, }) => {
|
|
13
13
|
if ((0, is_serve_url_1.isServeUrl)(webpackConfigOrServeUrl)) {
|
|
14
|
-
const { port: offthreadPort, close: closeProxy } = await (0, serve_static_1.serveStatic)(null, {
|
|
14
|
+
const { port: offthreadPort, close: closeProxy, compositor: comp, } = await (0, serve_static_1.serveStatic)(null, {
|
|
15
15
|
onDownload,
|
|
16
16
|
onError,
|
|
17
17
|
port,
|
|
18
18
|
downloadMap,
|
|
19
19
|
remotionRoot,
|
|
20
|
+
concurrency,
|
|
21
|
+
verbose,
|
|
22
|
+
indent,
|
|
20
23
|
});
|
|
21
24
|
return Promise.resolve({
|
|
22
25
|
serveUrl: webpackConfigOrServeUrl,
|
|
@@ -24,20 +27,24 @@ const prepareServer = async ({ onDownload, onError, webpackConfigOrServeUrl, por
|
|
|
24
27
|
return closeProxy();
|
|
25
28
|
},
|
|
26
29
|
offthreadPort,
|
|
30
|
+
compositor: comp,
|
|
27
31
|
});
|
|
28
32
|
}
|
|
29
33
|
// Check if the path has a `index.html` file
|
|
30
|
-
const indexFile =
|
|
31
|
-
const exists = (0,
|
|
34
|
+
const indexFile = node_path_1.default.join(webpackConfigOrServeUrl, 'index.html');
|
|
35
|
+
const exists = (0, node_fs_1.existsSync)(indexFile);
|
|
32
36
|
if (!exists) {
|
|
33
37
|
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?`);
|
|
34
38
|
}
|
|
35
|
-
const { port: serverPort, close } = await (0, serve_static_1.serveStatic)(webpackConfigOrServeUrl, {
|
|
39
|
+
const { port: serverPort, close, compositor, } = await (0, serve_static_1.serveStatic)(webpackConfigOrServeUrl, {
|
|
36
40
|
onDownload,
|
|
37
41
|
onError,
|
|
38
42
|
port,
|
|
39
43
|
downloadMap,
|
|
40
44
|
remotionRoot,
|
|
45
|
+
concurrency,
|
|
46
|
+
verbose,
|
|
47
|
+
indent,
|
|
41
48
|
});
|
|
42
49
|
return Promise.resolve({
|
|
43
50
|
closeServer: async (force) => {
|
|
@@ -48,6 +55,7 @@ const prepareServer = async ({ onDownload, onError, webpackConfigOrServeUrl, por
|
|
|
48
55
|
},
|
|
49
56
|
serveUrl: `http://localhost:${serverPort}`,
|
|
50
57
|
offthreadPort: serverPort,
|
|
58
|
+
compositor,
|
|
51
59
|
});
|
|
52
60
|
};
|
|
53
61
|
exports.prepareServer = prepareServer;
|
|
@@ -19,6 +19,7 @@ declare type PreStitcherOptions = {
|
|
|
19
19
|
ffmpegOverride: FfmpegOverrideFn;
|
|
20
20
|
signal: CancelSignal;
|
|
21
21
|
videoBitrate: string | null;
|
|
22
|
+
indent: boolean;
|
|
22
23
|
};
|
|
23
24
|
export declare const prespawnFfmpeg: (options: PreStitcherOptions) => {
|
|
24
25
|
task: import("execa").ExecaChildProcess<string>;
|
package/dist/prespawn-ffmpeg.js
CHANGED
|
@@ -4,10 +4,10 @@ exports.prespawnFfmpeg = void 0;
|
|
|
4
4
|
const remotion_1 = require("remotion");
|
|
5
5
|
const call_ffmpeg_1 = require("./call-ffmpeg");
|
|
6
6
|
const codec_1 = require("./codec");
|
|
7
|
-
const get_executable_path_1 = require("./compositor/get-executable-path");
|
|
8
7
|
const crf_1 = require("./crf");
|
|
9
8
|
const get_codec_name_1 = require("./get-codec-name");
|
|
10
9
|
const get_prores_profile_name_1 = require("./get-prores-profile-name");
|
|
10
|
+
const logger_1 = require("./logger");
|
|
11
11
|
const parse_ffmpeg_progress_1 = require("./parse-ffmpeg-progress");
|
|
12
12
|
const pixel_format_1 = require("./pixel-format");
|
|
13
13
|
const validate_even_dimensions_with_codec_1 = require("./validate-even-dimensions-with-codec");
|
|
@@ -30,16 +30,33 @@ const prespawnFfmpeg = (options) => {
|
|
|
30
30
|
throw new TypeError('encoderName is null: ' + JSON.stringify(options));
|
|
31
31
|
}
|
|
32
32
|
const supportsCrf = codec !== 'prores';
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
33
|
+
logger_1.Log.verboseAdvanced({
|
|
34
|
+
indent: options.indent,
|
|
35
|
+
logLevel: options.verbose ? 'verbose' : 'info',
|
|
36
|
+
tag: 'encoder',
|
|
37
|
+
}, 'encoder', encoderName);
|
|
38
|
+
logger_1.Log.verboseAdvanced({
|
|
39
|
+
indent: options.indent,
|
|
40
|
+
logLevel: options.verbose ? 'verbose' : 'info',
|
|
41
|
+
tag: 'encoder',
|
|
42
|
+
}, 'pixelFormat', pixelFormat);
|
|
43
|
+
if (supportsCrf) {
|
|
44
|
+
logger_1.Log.verboseAdvanced({
|
|
45
|
+
indent: options.indent,
|
|
46
|
+
logLevel: options.verbose ? 'verbose' : 'info',
|
|
47
|
+
tag: 'encoder',
|
|
48
|
+
}, 'pixelFormat', options.crf);
|
|
42
49
|
}
|
|
50
|
+
logger_1.Log.verboseAdvanced({
|
|
51
|
+
indent: options.indent,
|
|
52
|
+
logLevel: options.verbose ? 'verbose' : 'info',
|
|
53
|
+
tag: 'encoder',
|
|
54
|
+
}, 'codec', codec);
|
|
55
|
+
logger_1.Log.verboseAdvanced({
|
|
56
|
+
indent: options.indent,
|
|
57
|
+
logLevel: options.verbose ? 'verbose' : 'info',
|
|
58
|
+
tag: 'encoder',
|
|
59
|
+
}, 'proResProfileName', proResProfileName);
|
|
43
60
|
(0, pixel_format_1.validateSelectedPixelFormatAndCodecCombination)(pixelFormat, codec);
|
|
44
61
|
const ffmpegArgs = [
|
|
45
62
|
['-r', options.fps.toFixed(2)],
|
|
@@ -67,10 +84,16 @@ const prespawnFfmpeg = (options) => {
|
|
|
67
84
|
'-y',
|
|
68
85
|
options.outputLocation,
|
|
69
86
|
];
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
87
|
+
logger_1.Log.verboseAdvanced({
|
|
88
|
+
indent: options.indent,
|
|
89
|
+
logLevel: options.verbose ? 'verbose' : 'info',
|
|
90
|
+
tag: 'encoder',
|
|
91
|
+
}, 'Generated FFMPEG command:');
|
|
92
|
+
logger_1.Log.verboseAdvanced({
|
|
93
|
+
indent: options.indent,
|
|
94
|
+
logLevel: options.verbose ? 'verbose' : 'info',
|
|
95
|
+
tag: 'encoder',
|
|
96
|
+
}, ffmpegArgs.join(' '));
|
|
74
97
|
const ffmpegString = ffmpegArgs.flat(2).filter(Boolean);
|
|
75
98
|
const finalFfmpegString = options.ffmpegOverride
|
|
76
99
|
? options.ffmpegOverride({ type: 'pre-stitcher', args: ffmpegString })
|
|
@@ -4,7 +4,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.shouldUseParallelEncoding = void 0;
|
|
7
|
-
const
|
|
7
|
+
const node_os_1 = __importDefault(require("node:os"));
|
|
8
8
|
const estimateMemoryUsageForPrestitcher = ({ width, height, }) => {
|
|
9
9
|
// Empirically we detected that per 1 million pixels, FFMPEG uses around 1GB of memory, relatively independent of
|
|
10
10
|
// the duration of the video.
|
|
@@ -13,7 +13,7 @@ const estimateMemoryUsageForPrestitcher = ({ width, height, }) => {
|
|
|
13
13
|
return memoryUsageOfPixel * width * height;
|
|
14
14
|
};
|
|
15
15
|
const shouldUseParallelEncoding = ({ width, height, }) => {
|
|
16
|
-
const freeMemory =
|
|
16
|
+
const freeMemory = node_os_1.default.freemem();
|
|
17
17
|
const estimatedUsage = estimateMemoryUsageForPrestitcher({
|
|
18
18
|
height,
|
|
19
19
|
width,
|
|
@@ -30,7 +30,7 @@ function isString(obj) {
|
|
|
30
30
|
return typeof obj === 'string' || obj instanceof String;
|
|
31
31
|
}
|
|
32
32
|
async function puppeteerEvaluateWithCatch({ page, pageFunction, frame, args, }) {
|
|
33
|
-
var _a, _b, _c, _d, _e, _f, _g;
|
|
33
|
+
var _a, _b, _c, _d, _e, _f, _g, _h;
|
|
34
34
|
const contextId = (await page.mainFrame().executionContext())._contextId;
|
|
35
35
|
const client = page._client();
|
|
36
36
|
const suffix = `//# sourceURL=${EVALUATION_SCRIPT_URL}`;
|
|
@@ -114,7 +114,7 @@ async function puppeteerEvaluateWithCatch({ page, pageFunction, frame, args, })
|
|
|
114
114
|
return valueFromRemoteObject(remoteObject);
|
|
115
115
|
}
|
|
116
116
|
catch (error) {
|
|
117
|
-
if (error === null || error === void 0 ? void 0 : error.originalMessage.startsWith("Object couldn't be returned by value")) {
|
|
117
|
+
if ((_h = error === null || error === void 0 ? void 0 : error.originalMessage) === null || _h === void 0 ? void 0 : _h.startsWith("Object couldn't be returned by value")) {
|
|
118
118
|
throw new Error('Could not serialize the return value of the function. Did you pass non-serializable values to defaultProps?');
|
|
119
119
|
}
|
|
120
120
|
throw error;
|
|
@@ -24,7 +24,7 @@ var __importStar = (this && this.__importStar) || function (mod) {
|
|
|
24
24
|
};
|
|
25
25
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
26
|
exports.screenshot = void 0;
|
|
27
|
-
const assert = __importStar(require("assert"));
|
|
27
|
+
const assert = __importStar(require("node:assert"));
|
|
28
28
|
const screenshot_task_1 = require("./screenshot-task");
|
|
29
29
|
const screenshot = (options) => {
|
|
30
30
|
if (options.jpegQuality) {
|
package/dist/render-frames.d.ts
CHANGED
|
@@ -4,7 +4,7 @@ import type { RenderMediaOnDownload } from './assets/download-and-map-assets-to-
|
|
|
4
4
|
import type { DownloadMap } from './assets/download-map';
|
|
5
5
|
import type { BrowserExecutable } from './browser-executable';
|
|
6
6
|
import type { BrowserLog } from './browser-log';
|
|
7
|
-
import type {
|
|
7
|
+
import type { HeadlessBrowser } from './browser/Browser';
|
|
8
8
|
import type { FrameRange } from './frame-range';
|
|
9
9
|
import type { VideoImageFormat } from './image-format';
|
|
10
10
|
import type { CancelSignal } from './make-cancel-signal';
|
|
@@ -14,9 +14,9 @@ declare type RenderFramesOptions = {
|
|
|
14
14
|
onStart: (data: OnStartData) => void;
|
|
15
15
|
onFrameUpdate: (framesRendered: number, frameIndex: number, timeToRenderInMilliseconds: number) => void;
|
|
16
16
|
outputDir: string | null;
|
|
17
|
-
inputProps: unknown
|
|
17
|
+
inputProps: Record<string, unknown>;
|
|
18
18
|
envVariables?: Record<string, string>;
|
|
19
|
-
imageFormat
|
|
19
|
+
imageFormat?: VideoImageFormat;
|
|
20
20
|
/**
|
|
21
21
|
* @deprecated Renamed to "jpegQuality"
|
|
22
22
|
*/
|
|
@@ -25,7 +25,7 @@ declare type RenderFramesOptions = {
|
|
|
25
25
|
frameRange?: FrameRange | null;
|
|
26
26
|
everyNthFrame?: number;
|
|
27
27
|
dumpBrowserLogs?: boolean;
|
|
28
|
-
puppeteerInstance?:
|
|
28
|
+
puppeteerInstance?: HeadlessBrowser;
|
|
29
29
|
browserExecutable?: BrowserExecutable;
|
|
30
30
|
onBrowserLog?: (log: BrowserLog) => void;
|
|
31
31
|
onFrameBuffer?: (buffer: Buffer, frame: number) => void;
|
|
@@ -40,9 +40,14 @@ declare type RenderFramesOptions = {
|
|
|
40
40
|
* @deprecated Only for Remotion internal usage
|
|
41
41
|
*/
|
|
42
42
|
downloadMap?: DownloadMap;
|
|
43
|
+
/**
|
|
44
|
+
* @deprecated Only for Remotion internal usage
|
|
45
|
+
*/
|
|
46
|
+
indent?: boolean;
|
|
43
47
|
muted?: boolean;
|
|
44
48
|
concurrency?: number | string | null;
|
|
45
49
|
serveUrl: string;
|
|
50
|
+
verbose?: boolean;
|
|
46
51
|
};
|
|
47
52
|
/**
|
|
48
53
|
* @description Renders a series of images using Puppeteer and computes information for mixing audio.
|
package/dist/render-frames.js
CHANGED
|
@@ -4,8 +4,8 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.renderFrames = void 0;
|
|
7
|
-
const
|
|
8
|
-
const
|
|
7
|
+
const node_fs_1 = __importDefault(require("node:fs"));
|
|
8
|
+
const node_path_1 = __importDefault(require("node:path"));
|
|
9
9
|
const perf_hooks_1 = require("perf_hooks");
|
|
10
10
|
const remotion_1 = require("remotion");
|
|
11
11
|
const download_and_map_assets_to_file_1 = require("./assets/download-and-map-assets-to-file");
|
|
@@ -35,10 +35,10 @@ const take_frame_and_compose_1 = require("./take-frame-and-compose");
|
|
|
35
35
|
const truthy_1 = require("./truthy");
|
|
36
36
|
const validate_scale_1 = require("./validate-scale");
|
|
37
37
|
const MAX_RETRIES_PER_FRAME = 1;
|
|
38
|
-
const innerRenderFrames = ({ onFrameUpdate, outputDir, onStart, inputProps, jpegQuality, quality, imageFormat = image_format_1.DEFAULT_VIDEO_IMAGE_FORMAT, frameRange, onError, envVariables, onBrowserLog, onFrameBuffer, onDownload, pagesArray, serveUrl, composition, timeoutInMilliseconds, scale = 1, actualConcurrency, everyNthFrame = 1, proxyPort, cancelSignal, downloadMap, muted, makeBrowser, browserReplacer, }) => {
|
|
38
|
+
const innerRenderFrames = ({ onFrameUpdate, outputDir, onStart, inputProps, jpegQuality, quality, imageFormat = image_format_1.DEFAULT_VIDEO_IMAGE_FORMAT, frameRange, onError, envVariables, onBrowserLog, onFrameBuffer, onDownload, pagesArray, serveUrl, composition, timeoutInMilliseconds, scale = 1, actualConcurrency, everyNthFrame = 1, proxyPort, cancelSignal, downloadMap, muted, makeBrowser, browserReplacer, compositor, }) => {
|
|
39
39
|
if (outputDir) {
|
|
40
|
-
if (!
|
|
41
|
-
|
|
40
|
+
if (!node_fs_1.default.existsSync(outputDir)) {
|
|
41
|
+
node_fs_1.default.mkdirSync(outputDir, {
|
|
42
42
|
recursive: true,
|
|
43
43
|
});
|
|
44
44
|
}
|
|
@@ -162,7 +162,7 @@ const innerRenderFrames = ({ onFrameUpdate, outputDir, onStart, inputProps, jpeg
|
|
|
162
162
|
freePage,
|
|
163
163
|
height,
|
|
164
164
|
imageFormat,
|
|
165
|
-
output:
|
|
165
|
+
output: node_path_1.default.join(frameDir, (0, get_frame_padded_index_1.getFrameOutputFileName)({
|
|
166
166
|
frame,
|
|
167
167
|
imageFormat,
|
|
168
168
|
index,
|
|
@@ -175,6 +175,7 @@ const innerRenderFrames = ({ onFrameUpdate, outputDir, onStart, inputProps, jpeg
|
|
|
175
175
|
scale,
|
|
176
176
|
downloadMap,
|
|
177
177
|
wantsBuffer: Boolean(onFrameBuffer),
|
|
178
|
+
compositor,
|
|
178
179
|
});
|
|
179
180
|
if (onFrameBuffer) {
|
|
180
181
|
if (!buffer) {
|
|
@@ -217,7 +218,7 @@ const innerRenderFrames = ({ onFrameUpdate, outputDir, onStart, inputProps, jpeg
|
|
|
217
218
|
});
|
|
218
219
|
});
|
|
219
220
|
};
|
|
220
|
-
const renderFrameAndRetryTargetClose = async (frame, index, retriesLeft, attempt) => {
|
|
221
|
+
const renderFrameAndRetryTargetClose = async ({ frame, index, retriesLeft, attempt, }) => {
|
|
221
222
|
try {
|
|
222
223
|
await Promise.race([
|
|
223
224
|
renderFrame(frame, index),
|
|
@@ -253,10 +254,20 @@ const innerRenderFrames = ({ onFrameUpdate, outputDir, onStart, inputProps, jpeg
|
|
|
253
254
|
pool.release(newPage);
|
|
254
255
|
}
|
|
255
256
|
});
|
|
256
|
-
await renderFrameAndRetryTargetClose(
|
|
257
|
+
await renderFrameAndRetryTargetClose({
|
|
258
|
+
frame,
|
|
259
|
+
index,
|
|
260
|
+
retriesLeft: retriesLeft - 1,
|
|
261
|
+
attempt: attempt + 1,
|
|
262
|
+
});
|
|
257
263
|
}
|
|
258
264
|
};
|
|
259
|
-
const progress = Promise.all(framesToRender.map((frame, index) => renderFrameAndRetryTargetClose(
|
|
265
|
+
const progress = Promise.all(framesToRender.map((frame, index) => renderFrameAndRetryTargetClose({
|
|
266
|
+
frame,
|
|
267
|
+
index,
|
|
268
|
+
retriesLeft: MAX_RETRIES_PER_FRAME,
|
|
269
|
+
attempt: 1,
|
|
270
|
+
})));
|
|
260
271
|
const happyPath = progress.then(() => {
|
|
261
272
|
const firstFrameIndex = countType === 'from-zero' ? 0 : framesToRender[0];
|
|
262
273
|
const returnValue = {
|
|
@@ -300,12 +311,13 @@ const renderFrames = (options) => {
|
|
|
300
311
|
(0, jpeg_quality_1.validateJpegQuality)(options.jpegQuality);
|
|
301
312
|
(0, validate_scale_1.validateScale)(options.scale);
|
|
302
313
|
const makeBrowser = () => {
|
|
303
|
-
var _a;
|
|
314
|
+
var _a, _b;
|
|
304
315
|
return (0, open_browser_1.openBrowser)(browser_1.DEFAULT_BROWSER, {
|
|
305
316
|
shouldDumpIo: options.dumpBrowserLogs,
|
|
306
317
|
browserExecutable: options.browserExecutable,
|
|
307
318
|
chromiumOptions: options.chromiumOptions,
|
|
308
319
|
forceDeviceScaleFactor: (_a = options.scale) !== null && _a !== void 0 ? _a : 1,
|
|
320
|
+
indent: (_b = options.indent) !== null && _b !== void 0 ? _b : false,
|
|
309
321
|
});
|
|
310
322
|
};
|
|
311
323
|
const browserInstance = (_a = options.puppeteerInstance) !== null && _a !== void 0 ? _a : makeBrowser();
|
|
@@ -314,7 +326,7 @@ const renderFrames = (options) => {
|
|
|
314
326
|
const actualConcurrency = (0, get_concurrency_1.getActualConcurrency)(concurrency !== null && concurrency !== void 0 ? concurrency : null);
|
|
315
327
|
const openedPages = [];
|
|
316
328
|
return new Promise((resolve, reject) => {
|
|
317
|
-
var _a;
|
|
329
|
+
var _a, _b, _c;
|
|
318
330
|
const cleanup = [];
|
|
319
331
|
if (!options.downloadMap) {
|
|
320
332
|
cleanup.push(() => (0, download_map_1.cleanDownloadMap)(downloadMap));
|
|
@@ -337,9 +349,12 @@ const renderFrames = (options) => {
|
|
|
337
349
|
port: (_a = options.port) !== null && _a !== void 0 ? _a : null,
|
|
338
350
|
downloadMap,
|
|
339
351
|
remotionRoot: (0, find_closest_package_json_1.findRemotionRoot)(),
|
|
352
|
+
concurrency: actualConcurrency,
|
|
353
|
+
verbose: (_b = options.verbose) !== null && _b !== void 0 ? _b : false,
|
|
354
|
+
indent: (_c = options.indent) !== null && _c !== void 0 ? _c : false,
|
|
340
355
|
}),
|
|
341
356
|
browserInstance,
|
|
342
|
-
]).then(([{ serveUrl, closeServer, offthreadPort }, puppeteerInstance]) => {
|
|
357
|
+
]).then(([{ serveUrl, closeServer, offthreadPort, compositor }, puppeteerInstance,]) => {
|
|
343
358
|
const browserReplacer = (0, replace_browser_1.handleBrowserCrash)(puppeteerInstance);
|
|
344
359
|
const { stopCycling } = (0, cycle_browser_tabs_1.cycleBrowserTabs)(browserReplacer, actualConcurrency);
|
|
345
360
|
cleanup.push(stopCycling);
|
|
@@ -357,6 +372,7 @@ const renderFrames = (options) => {
|
|
|
357
372
|
downloadMap,
|
|
358
373
|
makeBrowser,
|
|
359
374
|
browserReplacer,
|
|
375
|
+
compositor,
|
|
360
376
|
});
|
|
361
377
|
}),
|
|
362
378
|
])
|
package/dist/render-media.d.ts
CHANGED
|
@@ -5,7 +5,7 @@ import type { DownloadMap } from './assets/download-map';
|
|
|
5
5
|
import type { AudioCodec } from './audio-codec';
|
|
6
6
|
import type { BrowserExecutable } from './browser-executable';
|
|
7
7
|
import type { BrowserLog } from './browser-log';
|
|
8
|
-
import type {
|
|
8
|
+
import type { HeadlessBrowser } from './browser/Browser';
|
|
9
9
|
import type { Codec } from './codec';
|
|
10
10
|
import type { FfmpegOverrideFn } from './ffmpeg-override';
|
|
11
11
|
import type { FrameRange } from './frame-range';
|
|
@@ -32,7 +32,7 @@ export declare type RenderMediaOptions = {
|
|
|
32
32
|
outputLocation?: string | null;
|
|
33
33
|
codec: Codec;
|
|
34
34
|
composition: AnySmallCompMetadata;
|
|
35
|
-
inputProps?: unknown
|
|
35
|
+
inputProps?: Record<string, unknown>;
|
|
36
36
|
crf?: number | null;
|
|
37
37
|
imageFormat?: VideoImageFormat;
|
|
38
38
|
pixelFormat?: PixelFormat;
|
|
@@ -45,7 +45,7 @@ export declare type RenderMediaOptions = {
|
|
|
45
45
|
frameRange?: FrameRange | null;
|
|
46
46
|
everyNthFrame?: number;
|
|
47
47
|
numberOfGifLoops?: number | null;
|
|
48
|
-
puppeteerInstance?:
|
|
48
|
+
puppeteerInstance?: HeadlessBrowser;
|
|
49
49
|
overwrite?: boolean;
|
|
50
50
|
onProgress?: RenderMediaOnProgress;
|
|
51
51
|
onDownload?: RenderMediaOnDownload;
|
|
@@ -69,6 +69,10 @@ export declare type RenderMediaOptions = {
|
|
|
69
69
|
* @deprecated Only for Remotion internal usage
|
|
70
70
|
*/
|
|
71
71
|
onCtrlCExit?: (fn: () => void) => void;
|
|
72
|
+
/**
|
|
73
|
+
* @deprecated Only for Remotion internal usage
|
|
74
|
+
*/
|
|
75
|
+
indent?: boolean;
|
|
72
76
|
};
|
|
73
77
|
preferLossless?: boolean;
|
|
74
78
|
muted?: boolean;
|
|
@@ -77,7 +81,6 @@ export declare type RenderMediaOptions = {
|
|
|
77
81
|
audioBitrate?: string | null;
|
|
78
82
|
videoBitrate?: string | null;
|
|
79
83
|
disallowParallelEncoding?: boolean;
|
|
80
|
-
printLog?: (...data: unknown[]) => void;
|
|
81
84
|
audioCodec?: AudioCodec | null;
|
|
82
85
|
serveUrl: string;
|
|
83
86
|
concurrency?: number | string | null;
|
package/dist/render-media.js
CHANGED
|
@@ -4,9 +4,9 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.renderMedia = void 0;
|
|
7
|
-
const
|
|
8
|
-
const
|
|
9
|
-
const
|
|
7
|
+
const node_fs_1 = __importDefault(require("node:fs"));
|
|
8
|
+
const node_os_1 = __importDefault(require("node:os"));
|
|
9
|
+
const node_path_1 = __importDefault(require("node:path"));
|
|
10
10
|
const remotion_1 = require("remotion");
|
|
11
11
|
const download_map_1 = require("./assets/download-map");
|
|
12
12
|
const can_use_parallel_encoding_1 = require("./can-use-parallel-encoding");
|
|
@@ -22,6 +22,7 @@ const get_frame_to_render_1 = require("./get-frame-to-render");
|
|
|
22
22
|
const image_format_1 = require("./image-format");
|
|
23
23
|
const is_audio_codec_1 = require("./is-audio-codec");
|
|
24
24
|
const jpeg_quality_1 = require("./jpeg-quality");
|
|
25
|
+
const logger_1 = require("./logger");
|
|
25
26
|
const make_cancel_signal_1 = require("./make-cancel-signal");
|
|
26
27
|
const overwrite_1 = require("./overwrite");
|
|
27
28
|
const perf_1 = require("./perf");
|
|
@@ -45,7 +46,7 @@ const SLOWEST_FRAME_COUNT = 10;
|
|
|
45
46
|
* @see [Documentation](https://www.remotion.dev/docs/renderer/render-media)
|
|
46
47
|
*/
|
|
47
48
|
const renderMedia = ({ proResProfile, crf, composition, inputProps, pixelFormat, codec, envVariables, frameRange, puppeteerInstance, outputLocation, onProgress, overwrite, onDownload, dumpBrowserLogs, onBrowserLog, onStart, timeoutInMilliseconds, chromiumOptions, scale, browserExecutable, port, cancelSignal, muted, enforceAudioTrack, ffmpegOverride, audioBitrate, videoBitrate, audioCodec, ...options }) => {
|
|
48
|
-
var _a, _b, _c, _d, _e, _f, _g, _h;
|
|
49
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s;
|
|
49
50
|
if (options.quality) {
|
|
50
51
|
throw new Error(`The "quality" option has been renamed. Please use "jpegQuality" instead.`);
|
|
51
52
|
}
|
|
@@ -67,7 +68,7 @@ const renderMedia = ({ proResProfile, crf, composition, inputProps, pixelFormat,
|
|
|
67
68
|
});
|
|
68
69
|
}
|
|
69
70
|
const absoluteOutputLocation = outputLocation
|
|
70
|
-
?
|
|
71
|
+
? node_path_1.default.resolve(process.cwd(), outputLocation)
|
|
71
72
|
: null;
|
|
72
73
|
(0, validate_scale_1.validateScale)(scale);
|
|
73
74
|
(0, validate_ffmpeg_override_1.validateFfmpegOverride)(ffmpegOverride);
|
|
@@ -92,30 +93,47 @@ const renderMedia = ({ proResProfile, crf, composition, inputProps, pixelFormat,
|
|
|
92
93
|
const parallelEncoding = !options.disallowParallelEncoding &&
|
|
93
94
|
hasEnoughMemory &&
|
|
94
95
|
(0, can_use_parallel_encoding_1.canUseParallelEncoding)(codec);
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
96
|
+
logger_1.Log.verboseAdvanced({
|
|
97
|
+
indent: (_g = (_f = options.internal) === null || _f === void 0 ? void 0 : _f.indent) !== null && _g !== void 0 ? _g : false,
|
|
98
|
+
logLevel: options.verbose ? 'verbose' : 'info',
|
|
99
|
+
tag: 'PARALLEL ENCODING',
|
|
100
|
+
}, 'Free memory:', freeMemory, 'Estimated usage parallel encoding', estimatedUsage);
|
|
101
|
+
logger_1.Log.verboseAdvanced({
|
|
102
|
+
indent: (_j = (_h = options.internal) === null || _h === void 0 ? void 0 : _h.indent) !== null && _j !== void 0 ? _j : false,
|
|
103
|
+
logLevel: options.verbose ? 'verbose' : 'info',
|
|
104
|
+
tag: 'PARALLEL ENCODING',
|
|
105
|
+
}, 'Codec supports parallel rendering:', (0, can_use_parallel_encoding_1.canUseParallelEncoding)(codec));
|
|
106
|
+
logger_1.Log.verboseAdvanced({
|
|
107
|
+
indent: (_l = (_k = options.internal) === null || _k === void 0 ? void 0 : _k.indent) !== null && _l !== void 0 ? _l : false,
|
|
108
|
+
logLevel: options.verbose ? 'verbose' : 'info',
|
|
109
|
+
tag: 'PARALLEL ENCODING',
|
|
110
|
+
}, 'User disallowed parallel encoding:', Boolean(options.disallowParallelEncoding));
|
|
111
|
+
if (parallelEncoding) {
|
|
112
|
+
logger_1.Log.verboseAdvanced({
|
|
113
|
+
indent: (_o = (_m = options.internal) === null || _m === void 0 ? void 0 : _m.indent) !== null && _o !== void 0 ? _o : false,
|
|
114
|
+
logLevel: options.verbose ? 'verbose' : 'info',
|
|
115
|
+
tag: 'PARALLEL ENCODING',
|
|
116
|
+
}, 'Parallel encoding is enabled.');
|
|
117
|
+
}
|
|
118
|
+
else {
|
|
119
|
+
logger_1.Log.verboseAdvanced({
|
|
120
|
+
indent: (_q = (_p = options.internal) === null || _p === void 0 ? void 0 : _p.indent) !== null && _q !== void 0 ? _q : false,
|
|
121
|
+
logLevel: options.verbose ? 'verbose' : 'info',
|
|
122
|
+
tag: 'PARALLEL ENCODING',
|
|
123
|
+
}, 'Parallel encoding is disabled.');
|
|
106
124
|
}
|
|
107
125
|
const imageFormat = (0, is_audio_codec_1.isAudioCodec)(codec)
|
|
108
126
|
? 'none'
|
|
109
|
-
: (
|
|
127
|
+
: (_r = options.imageFormat) !== null && _r !== void 0 ? _r : 'jpeg';
|
|
110
128
|
const jpegQuality = imageFormat === 'jpeg' ? options.jpegQuality : undefined;
|
|
111
129
|
(0, image_format_1.validateSelectedPixelFormatAndImageFormatCombination)(pixelFormat, imageFormat);
|
|
112
130
|
const preEncodedFileLocation = parallelEncoding
|
|
113
|
-
?
|
|
131
|
+
? node_path_1.default.join(downloadMap.preEncode, 'pre-encode.' + (0, get_extension_from_codec_1.getFileExtensionFromCodec)(codec, audioCodec !== null && audioCodec !== void 0 ? audioCodec : null))
|
|
114
132
|
: null;
|
|
115
133
|
const outputDir = parallelEncoding
|
|
116
134
|
? null
|
|
117
|
-
:
|
|
118
|
-
if (((
|
|
135
|
+
: node_fs_1.default.mkdtempSync(node_path_1.default.join(node_os_1.default.tmpdir(), 'react-motion-render'));
|
|
136
|
+
if (((_s = options.internal) === null || _s === void 0 ? void 0 : _s.onCtrlCExit) && outputDir) {
|
|
119
137
|
options.internal.onCtrlCExit(() => (0, delete_directory_1.deleteDirectory)(outputDir));
|
|
120
138
|
}
|
|
121
139
|
(0, validate_even_dimensions_with_codec_1.validateEvenDimensionsWithCodec)({
|
|
@@ -147,7 +165,7 @@ const renderMedia = ({ proResProfile, crf, composition, inputProps, pixelFormat,
|
|
|
147
165
|
const fps = composition.fps / (everyNthFrame !== null && everyNthFrame !== void 0 ? everyNthFrame : 1);
|
|
148
166
|
remotion_1.Internals.validateFps(fps, 'in "renderMedia()"', codec === 'gif');
|
|
149
167
|
const createPrestitcherIfNecessary = () => {
|
|
150
|
-
var _a;
|
|
168
|
+
var _a, _b, _c;
|
|
151
169
|
if (preEncodedFileLocation) {
|
|
152
170
|
preStitcher = (0, prespawn_ffmpeg_1.prespawnFfmpeg)({
|
|
153
171
|
width: composition.width * (scale !== null && scale !== void 0 ? scale : 1),
|
|
@@ -167,6 +185,7 @@ const renderMedia = ({ proResProfile, crf, composition, inputProps, pixelFormat,
|
|
|
167
185
|
signal: cancelPrestitcher.cancelSignal,
|
|
168
186
|
ffmpegOverride: ffmpegOverride !== null && ffmpegOverride !== void 0 ? ffmpegOverride : (({ args }) => args),
|
|
169
187
|
videoBitrate: videoBitrate !== null && videoBitrate !== void 0 ? videoBitrate : null,
|
|
188
|
+
indent: (_c = (_b = options.internal) === null || _b === void 0 ? void 0 : _b.indent) !== null && _c !== void 0 ? _c : false,
|
|
170
189
|
});
|
|
171
190
|
stitcherFfmpeg = preStitcher.task;
|
|
172
191
|
}
|
|
@@ -212,6 +231,7 @@ const renderMedia = ({ proResProfile, crf, composition, inputProps, pixelFormat,
|
|
|
212
231
|
};
|
|
213
232
|
const happyPath = Promise.resolve(createPrestitcherIfNecessary())
|
|
214
233
|
.then(() => {
|
|
234
|
+
var _a, _b, _c;
|
|
215
235
|
const renderFramesProc = (0, render_frames_1.renderFrames)({
|
|
216
236
|
composition,
|
|
217
237
|
onFrameUpdate: (frame, frameIndex, timeToRenderInMilliseconds) => {
|
|
@@ -226,7 +246,7 @@ const renderMedia = ({ proResProfile, crf, composition, inputProps, pixelFormat,
|
|
|
226
246
|
callUpdate();
|
|
227
247
|
onStart === null || onStart === void 0 ? void 0 : onStart(data);
|
|
228
248
|
},
|
|
229
|
-
inputProps,
|
|
249
|
+
inputProps: inputProps !== null && inputProps !== void 0 ? inputProps : {},
|
|
230
250
|
envVariables,
|
|
231
251
|
imageFormat,
|
|
232
252
|
jpegQuality,
|
|
@@ -258,6 +278,8 @@ const renderMedia = ({ proResProfile, crf, composition, inputProps, pixelFormat,
|
|
|
258
278
|
cancelSignal: cancelRenderFrames.cancelSignal,
|
|
259
279
|
downloadMap,
|
|
260
280
|
muted: disableAudio,
|
|
281
|
+
verbose: (_a = options.verbose) !== null && _a !== void 0 ? _a : false,
|
|
282
|
+
indent: (_c = (_b = options.internal) === null || _b === void 0 ? void 0 : _b.indent) !== null && _c !== void 0 ? _c : false,
|
|
261
283
|
});
|
|
262
284
|
return renderFramesProc;
|
|
263
285
|
})
|
|
@@ -265,7 +287,7 @@ const renderMedia = ({ proResProfile, crf, composition, inputProps, pixelFormat,
|
|
|
265
287
|
return Promise.all([renderFramesReturn, waitForPrestitcherIfNecessary()]);
|
|
266
288
|
})
|
|
267
289
|
.then(([{ assetsInfo }]) => {
|
|
268
|
-
var _a;
|
|
290
|
+
var _a, _b, _c;
|
|
269
291
|
renderedDoneIn = Date.now() - renderStart;
|
|
270
292
|
callUpdate();
|
|
271
293
|
if (absoluteOutputLocation) {
|
|
@@ -282,6 +304,7 @@ const renderMedia = ({ proResProfile, crf, composition, inputProps, pixelFormat,
|
|
|
282
304
|
preEncodedFileLocation,
|
|
283
305
|
imageFormat,
|
|
284
306
|
preferLossless: (_a = options.preferLossless) !== null && _a !== void 0 ? _a : false,
|
|
307
|
+
indent: (_c = (_b = options.internal) === null || _b === void 0 ? void 0 : _b.indent) !== null && _c !== void 0 ? _c : false,
|
|
285
308
|
},
|
|
286
309
|
force: overwrite !== null && overwrite !== void 0 ? overwrite : overwrite_1.DEFAULT_OVERWRITE,
|
|
287
310
|
pixelFormat,
|
|
@@ -346,15 +369,15 @@ const renderMedia = ({ proResProfile, crf, composition, inputProps, pixelFormat,
|
|
|
346
369
|
.finally(() => {
|
|
347
370
|
var _a;
|
|
348
371
|
if (preEncodedFileLocation !== null &&
|
|
349
|
-
|
|
350
|
-
(0, delete_directory_1.deleteDirectory)(
|
|
372
|
+
node_fs_1.default.existsSync(preEncodedFileLocation)) {
|
|
373
|
+
(0, delete_directory_1.deleteDirectory)(node_path_1.default.dirname(preEncodedFileLocation));
|
|
351
374
|
}
|
|
352
375
|
// Clean download map if it was not passed in
|
|
353
376
|
if (!((_a = options.internal) === null || _a === void 0 ? void 0 : _a.downloadMap)) {
|
|
354
377
|
(0, download_map_1.cleanDownloadMap)(downloadMap);
|
|
355
378
|
}
|
|
356
379
|
// Clean temporary image frames when rendering ends or fails
|
|
357
|
-
if (outputDir &&
|
|
380
|
+
if (outputDir && node_fs_1.default.existsSync(outputDir)) {
|
|
358
381
|
(0, delete_directory_1.deleteDirectory)(outputDir);
|
|
359
382
|
}
|
|
360
383
|
});
|
package/dist/render-still.d.ts
CHANGED
|
@@ -3,7 +3,8 @@ import type { AnySmallCompMetadata } from 'remotion';
|
|
|
3
3
|
import type { RenderMediaOnDownload } from './assets/download-and-map-assets-to-file';
|
|
4
4
|
import type { DownloadMap } from './assets/download-map';
|
|
5
5
|
import type { BrowserExecutable } from './browser-executable';
|
|
6
|
-
import type {
|
|
6
|
+
import type { BrowserLog } from './browser-log';
|
|
7
|
+
import type { HeadlessBrowser } from './browser/Browser';
|
|
7
8
|
import type { StillImageFormat } from './image-format';
|
|
8
9
|
import type { CancelSignal } from './make-cancel-signal';
|
|
9
10
|
import type { ChromiumOptions } from './open-browser';
|
|
@@ -11,18 +12,19 @@ declare type InnerStillOptions = {
|
|
|
11
12
|
composition: AnySmallCompMetadata;
|
|
12
13
|
output?: string | null;
|
|
13
14
|
frame?: number;
|
|
14
|
-
inputProps?: unknown
|
|
15
|
+
inputProps?: Record<string, unknown>;
|
|
15
16
|
imageFormat?: StillImageFormat;
|
|
16
17
|
/**
|
|
17
18
|
* @deprecated Renamed to `jpegQuality`
|
|
18
19
|
*/
|
|
19
20
|
quality?: never;
|
|
20
21
|
jpegQuality?: number;
|
|
21
|
-
puppeteerInstance?:
|
|
22
|
+
puppeteerInstance?: HeadlessBrowser;
|
|
22
23
|
dumpBrowserLogs?: boolean;
|
|
23
24
|
envVariables?: Record<string, string>;
|
|
24
25
|
overwrite?: boolean;
|
|
25
26
|
browserExecutable?: BrowserExecutable;
|
|
27
|
+
onBrowserLog?: (log: BrowserLog) => void;
|
|
26
28
|
timeoutInMilliseconds?: number;
|
|
27
29
|
chromiumOptions?: ChromiumOptions;
|
|
28
30
|
scale?: number;
|
|
@@ -32,6 +34,11 @@ declare type InnerStillOptions = {
|
|
|
32
34
|
* @deprecated Only for Remotion internal usage
|
|
33
35
|
*/
|
|
34
36
|
downloadMap?: DownloadMap;
|
|
37
|
+
/**
|
|
38
|
+
* @deprecated Only for Remotion internal usage
|
|
39
|
+
*/
|
|
40
|
+
indent?: boolean;
|
|
41
|
+
verbose?: boolean;
|
|
35
42
|
};
|
|
36
43
|
declare type RenderStillReturnValue = {
|
|
37
44
|
buffer: Buffer | null;
|