@remotion/renderer 4.0.147 → 4.0.149
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/Cargo.lock +1207 -0
- package/Cargo.toml +27 -0
- package/dist/browser/BrowserRunner.js +1 -3
- package/dist/client.d.ts +21 -20
- package/dist/client.js +1 -0
- package/dist/compositor/make-file-executable.js +2 -1
- package/dist/create-audio.js +3 -2
- package/dist/ffmpeg-args.d.ts +2 -2
- package/dist/ffmpeg-args.js +4 -2
- package/dist/index.d.ts +51 -51
- package/dist/open-browser.js +1 -0
- package/dist/options/color-space.d.ts +3 -2
- package/dist/options/color-space.js +14 -8
- package/dist/options/enable-multiprocess-on-linux.js +3 -2
- package/dist/options/index.d.ts +5 -5
- package/dist/options/options-map.d.ts +15 -15
- package/dist/options/x264-preset.d.ts +2 -2
- package/dist/perf.js +1 -1
- package/dist/prespawn-ffmpeg.d.ts +1 -1
- package/dist/render-media.d.ts +2 -2
- package/dist/render-media.js +18 -11
- package/dist/stitch-frames-to-video.d.ts +2 -2
- package/dist/stitch-frames-to-video.js +10 -2
- package/package.json +14 -15
|
@@ -1,17 +1,23 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.validateColorSpace = exports.colorSpaceOption = exports.validColorSpaces = void 0;
|
|
3
|
+
exports.validateColorSpace = exports.colorSpaceOption = exports.DEFAULT_COLOR_SPACE = exports.validColorSpaces = void 0;
|
|
4
4
|
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
5
|
-
|
|
6
|
-
|
|
5
|
+
const no_react_1 = require("remotion/no-react");
|
|
6
|
+
const validV4ColorSpaces = ['default', 'bt709', 'bt2020-ncl'];
|
|
7
|
+
const validV5ColorSpaces = ['bt601', 'bt709', 'bt2020-ncl'];
|
|
8
|
+
exports.validColorSpaces = (no_react_1.NoReactInternals.ENABLE_V5_BREAKING_CHANGES
|
|
9
|
+
? validV5ColorSpaces
|
|
10
|
+
: validV4ColorSpaces);
|
|
11
|
+
exports.DEFAULT_COLOR_SPACE = (no_react_1.NoReactInternals.ENABLE_V5_BREAKING_CHANGES ? 'bt709' : 'default');
|
|
12
|
+
let colorSpace = exports.DEFAULT_COLOR_SPACE;
|
|
7
13
|
const cliFlag = 'color-space';
|
|
8
14
|
exports.colorSpaceOption = {
|
|
9
15
|
name: 'Color space',
|
|
10
16
|
cliFlag: 'color-space',
|
|
11
|
-
description: () => ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: ["Color space to use for the video. Acceptable values:", ' ', (0, jsx_runtime_1.jsxs)("code", { children: ['"',
|
|
17
|
+
description: () => ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: ["Color space to use for the video. Acceptable values:", ' ', (0, jsx_runtime_1.jsxs)("code", { children: ['"', exports.DEFAULT_COLOR_SPACE, '"'] }), "(default since 5.0),", ' ', no_react_1.NoReactInternals.ENABLE_V5_BREAKING_CHANGES ? ((0, jsx_runtime_1.jsxs)("code", { children: ['"', "bt601", '"', ', '] })) : ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsxs)("code", { children: ['"', "bt709", '"'] }), ' ', "(since v4.0.28),", ' '] })), (0, jsx_runtime_1.jsxs)("code", { children: ['"', "bt2020-ncl", '"'] }), ' ', "(since v4.0.88),", ' ', (0, jsx_runtime_1.jsxs)("code", { children: ['"', "bt2020-cl", '"'] }), ' ', "(since v4.0.88), .", (0, jsx_runtime_1.jsx)("br", {}), "For best color accuracy, it is recommended to also use", ' ', (0, jsx_runtime_1.jsxs)("code", { children: ['"', "png", '"'] }), ' ', "as the image format to have accurate color transformations throughout.", (0, jsx_runtime_1.jsx)("br", {}), "Only since v4.0.83, colorspace conversion is actually performed, previously it would only tag the metadata of the video."] })),
|
|
12
18
|
docLink: 'https://www.remotion.dev/docs/renderer/render-media#colorspace',
|
|
13
19
|
ssrName: 'colorSpace',
|
|
14
|
-
type:
|
|
20
|
+
type: exports.DEFAULT_COLOR_SPACE,
|
|
15
21
|
getValue: ({ commandLine }) => {
|
|
16
22
|
if (commandLine[cliFlag] !== undefined) {
|
|
17
23
|
return {
|
|
@@ -19,7 +25,7 @@ exports.colorSpaceOption = {
|
|
|
19
25
|
value: commandLine[cliFlag],
|
|
20
26
|
};
|
|
21
27
|
}
|
|
22
|
-
if (colorSpace !==
|
|
28
|
+
if (colorSpace !== exports.DEFAULT_COLOR_SPACE) {
|
|
23
29
|
return {
|
|
24
30
|
source: 'config',
|
|
25
31
|
value: colorSpace,
|
|
@@ -27,11 +33,11 @@ exports.colorSpaceOption = {
|
|
|
27
33
|
}
|
|
28
34
|
return {
|
|
29
35
|
source: 'default',
|
|
30
|
-
value:
|
|
36
|
+
value: exports.DEFAULT_COLOR_SPACE,
|
|
31
37
|
};
|
|
32
38
|
},
|
|
33
39
|
setConfig: (value) => {
|
|
34
|
-
colorSpace = value;
|
|
40
|
+
colorSpace = value !== null && value !== void 0 ? value : exports.DEFAULT_COLOR_SPACE;
|
|
35
41
|
},
|
|
36
42
|
};
|
|
37
43
|
const validateColorSpace = (option) => {
|
|
@@ -2,7 +2,8 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.enableMultiprocessOnLinuxOption = void 0;
|
|
4
4
|
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
5
|
-
|
|
5
|
+
const DEFAULT_VALUE = true;
|
|
6
|
+
let multiProcessOnLinux = DEFAULT_VALUE;
|
|
6
7
|
const cliFlag = 'enable-multiprocess-on-linux';
|
|
7
8
|
exports.enableMultiprocessOnLinuxOption = {
|
|
8
9
|
name: 'Enable Multiprocess on Linux',
|
|
@@ -26,7 +27,7 @@ exports.enableMultiprocessOnLinuxOption = {
|
|
|
26
27
|
}
|
|
27
28
|
return {
|
|
28
29
|
source: 'default',
|
|
29
|
-
value:
|
|
30
|
+
value: DEFAULT_VALUE,
|
|
30
31
|
};
|
|
31
32
|
},
|
|
32
33
|
setConfig: (value) => {
|
package/dist/options/index.d.ts
CHANGED
|
@@ -184,14 +184,14 @@ export declare const allOptions: {
|
|
|
184
184
|
description: () => import("react/jsx-runtime").JSX.Element;
|
|
185
185
|
docLink: string;
|
|
186
186
|
ssrName: string;
|
|
187
|
-
type: "default" | "bt709" | "bt2020-ncl";
|
|
187
|
+
type: "default" | "bt709" | "bt2020-ncl" | null;
|
|
188
188
|
getValue: ({ commandLine }: {
|
|
189
189
|
commandLine: Record<string, unknown>;
|
|
190
190
|
}) => {
|
|
191
191
|
source: string;
|
|
192
192
|
value: "default" | "bt709" | "bt2020-ncl";
|
|
193
193
|
};
|
|
194
|
-
setConfig: (value: "default" | "bt709" | "bt2020-ncl") => void;
|
|
194
|
+
setConfig: (value: "default" | "bt709" | "bt2020-ncl" | null) => void;
|
|
195
195
|
};
|
|
196
196
|
deleteAfterOption: {
|
|
197
197
|
name: string;
|
|
@@ -382,17 +382,17 @@ export declare const allOptions: {
|
|
|
382
382
|
description: () => import("react/jsx-runtime").JSX.Element;
|
|
383
383
|
ssrName: "x264Preset";
|
|
384
384
|
docLink: string;
|
|
385
|
-
type: "ultrafast" | "superfast" | "veryfast" | "faster" | "fast" | "
|
|
385
|
+
type: "medium" | "ultrafast" | "superfast" | "veryfast" | "faster" | "fast" | "slow" | "slower" | "veryslow" | "placebo" | null;
|
|
386
386
|
getValue: ({ commandLine }: {
|
|
387
387
|
commandLine: Record<string, unknown>;
|
|
388
388
|
}) => {
|
|
389
|
-
value: "ultrafast" | "superfast" | "veryfast" | "faster" | "fast" | "
|
|
389
|
+
value: "medium" | "ultrafast" | "superfast" | "veryfast" | "faster" | "fast" | "slow" | "slower" | "veryslow" | "placebo";
|
|
390
390
|
source: string;
|
|
391
391
|
} | {
|
|
392
392
|
value: null;
|
|
393
393
|
source: string;
|
|
394
394
|
};
|
|
395
|
-
setConfig: (profile: "ultrafast" | "superfast" | "veryfast" | "faster" | "fast" | "
|
|
395
|
+
setConfig: (profile: "medium" | "ultrafast" | "superfast" | "veryfast" | "faster" | "fast" | "slow" | "slower" | "veryslow" | "placebo" | null) => void;
|
|
396
396
|
};
|
|
397
397
|
logLevelOption: {
|
|
398
398
|
cliFlag: "log";
|
|
@@ -72,17 +72,17 @@ export declare const optionsMap: {
|
|
|
72
72
|
description: () => import("react/jsx-runtime").JSX.Element;
|
|
73
73
|
ssrName: "x264Preset";
|
|
74
74
|
docLink: string;
|
|
75
|
-
type: "ultrafast" | "superfast" | "veryfast" | "faster" | "fast" | "
|
|
75
|
+
type: "medium" | "ultrafast" | "superfast" | "veryfast" | "faster" | "fast" | "slow" | "slower" | "veryslow" | "placebo" | null;
|
|
76
76
|
getValue: ({ commandLine }: {
|
|
77
77
|
commandLine: Record<string, unknown>;
|
|
78
78
|
}) => {
|
|
79
|
-
value: "ultrafast" | "superfast" | "veryfast" | "faster" | "fast" | "
|
|
79
|
+
value: "medium" | "ultrafast" | "superfast" | "veryfast" | "faster" | "fast" | "slow" | "slower" | "veryslow" | "placebo";
|
|
80
80
|
source: string;
|
|
81
81
|
} | {
|
|
82
82
|
value: null;
|
|
83
83
|
source: string;
|
|
84
84
|
};
|
|
85
|
-
setConfig: (profile: "ultrafast" | "superfast" | "veryfast" | "faster" | "fast" | "
|
|
85
|
+
setConfig: (profile: "medium" | "ultrafast" | "superfast" | "veryfast" | "faster" | "fast" | "slow" | "slower" | "veryslow" | "placebo" | null) => void;
|
|
86
86
|
};
|
|
87
87
|
readonly audioBitrate: {
|
|
88
88
|
name: string;
|
|
@@ -108,14 +108,14 @@ export declare const optionsMap: {
|
|
|
108
108
|
description: () => import("react/jsx-runtime").JSX.Element;
|
|
109
109
|
docLink: string;
|
|
110
110
|
ssrName: string;
|
|
111
|
-
type: "default" | "bt709" | "bt2020-ncl";
|
|
111
|
+
type: "default" | "bt709" | "bt2020-ncl" | null;
|
|
112
112
|
getValue: ({ commandLine }: {
|
|
113
113
|
commandLine: Record<string, unknown>;
|
|
114
114
|
}) => {
|
|
115
115
|
source: string;
|
|
116
116
|
value: "default" | "bt709" | "bt2020-ncl";
|
|
117
117
|
};
|
|
118
|
-
setConfig: (value: "default" | "bt709" | "bt2020-ncl") => void;
|
|
118
|
+
setConfig: (value: "default" | "bt709" | "bt2020-ncl" | null) => void;
|
|
119
119
|
};
|
|
120
120
|
readonly codec: {
|
|
121
121
|
name: string;
|
|
@@ -794,17 +794,17 @@ export declare const optionsMap: {
|
|
|
794
794
|
description: () => import("react/jsx-runtime").JSX.Element;
|
|
795
795
|
ssrName: "x264Preset";
|
|
796
796
|
docLink: string;
|
|
797
|
-
type: "ultrafast" | "superfast" | "veryfast" | "faster" | "fast" | "
|
|
797
|
+
type: "medium" | "ultrafast" | "superfast" | "veryfast" | "faster" | "fast" | "slow" | "slower" | "veryslow" | "placebo" | null;
|
|
798
798
|
getValue: ({ commandLine }: {
|
|
799
799
|
commandLine: Record<string, unknown>;
|
|
800
800
|
}) => {
|
|
801
|
-
value: "ultrafast" | "superfast" | "veryfast" | "faster" | "fast" | "
|
|
801
|
+
value: "medium" | "ultrafast" | "superfast" | "veryfast" | "faster" | "fast" | "slow" | "slower" | "veryslow" | "placebo";
|
|
802
802
|
source: string;
|
|
803
803
|
} | {
|
|
804
804
|
value: null;
|
|
805
805
|
source: string;
|
|
806
806
|
};
|
|
807
|
-
setConfig: (profile: "ultrafast" | "superfast" | "veryfast" | "faster" | "fast" | "
|
|
807
|
+
setConfig: (profile: "medium" | "ultrafast" | "superfast" | "veryfast" | "faster" | "fast" | "slow" | "slower" | "veryslow" | "placebo" | null) => void;
|
|
808
808
|
};
|
|
809
809
|
readonly encodingMaxRate: {
|
|
810
810
|
name: string;
|
|
@@ -848,14 +848,14 @@ export declare const optionsMap: {
|
|
|
848
848
|
description: () => import("react/jsx-runtime").JSX.Element;
|
|
849
849
|
docLink: string;
|
|
850
850
|
ssrName: string;
|
|
851
|
-
type: "default" | "bt709" | "bt2020-ncl";
|
|
851
|
+
type: "default" | "bt709" | "bt2020-ncl" | null;
|
|
852
852
|
getValue: ({ commandLine }: {
|
|
853
853
|
commandLine: Record<string, unknown>;
|
|
854
854
|
}) => {
|
|
855
855
|
source: string;
|
|
856
856
|
value: "default" | "bt709" | "bt2020-ncl";
|
|
857
857
|
};
|
|
858
|
-
setConfig: (value: "default" | "bt709" | "bt2020-ncl") => void;
|
|
858
|
+
setConfig: (value: "default" | "bt709" | "bt2020-ncl" | null) => void;
|
|
859
859
|
};
|
|
860
860
|
readonly muted: {
|
|
861
861
|
name: string;
|
|
@@ -1112,14 +1112,14 @@ export declare const optionsMap: {
|
|
|
1112
1112
|
description: () => import("react/jsx-runtime").JSX.Element;
|
|
1113
1113
|
docLink: string;
|
|
1114
1114
|
ssrName: string;
|
|
1115
|
-
type: "default" | "bt709" | "bt2020-ncl";
|
|
1115
|
+
type: "default" | "bt709" | "bt2020-ncl" | null;
|
|
1116
1116
|
getValue: ({ commandLine }: {
|
|
1117
1117
|
commandLine: Record<string, unknown>;
|
|
1118
1118
|
}) => {
|
|
1119
1119
|
source: string;
|
|
1120
1120
|
value: "default" | "bt709" | "bt2020-ncl";
|
|
1121
1121
|
};
|
|
1122
|
-
setConfig: (value: "default" | "bt709" | "bt2020-ncl") => void;
|
|
1122
|
+
setConfig: (value: "default" | "bt709" | "bt2020-ncl" | null) => void;
|
|
1123
1123
|
};
|
|
1124
1124
|
readonly audioBitrate: {
|
|
1125
1125
|
name: string;
|
|
@@ -1160,17 +1160,17 @@ export declare const optionsMap: {
|
|
|
1160
1160
|
description: () => import("react/jsx-runtime").JSX.Element;
|
|
1161
1161
|
ssrName: "x264Preset";
|
|
1162
1162
|
docLink: string;
|
|
1163
|
-
type: "ultrafast" | "superfast" | "veryfast" | "faster" | "fast" | "
|
|
1163
|
+
type: "medium" | "ultrafast" | "superfast" | "veryfast" | "faster" | "fast" | "slow" | "slower" | "veryslow" | "placebo" | null;
|
|
1164
1164
|
getValue: ({ commandLine }: {
|
|
1165
1165
|
commandLine: Record<string, unknown>;
|
|
1166
1166
|
}) => {
|
|
1167
|
-
value: "ultrafast" | "superfast" | "veryfast" | "faster" | "fast" | "
|
|
1167
|
+
value: "medium" | "ultrafast" | "superfast" | "veryfast" | "faster" | "fast" | "slow" | "slower" | "veryslow" | "placebo";
|
|
1168
1168
|
source: string;
|
|
1169
1169
|
} | {
|
|
1170
1170
|
value: null;
|
|
1171
1171
|
source: string;
|
|
1172
1172
|
};
|
|
1173
|
-
setConfig: (profile: "ultrafast" | "superfast" | "veryfast" | "faster" | "fast" | "
|
|
1173
|
+
setConfig: (profile: "medium" | "ultrafast" | "superfast" | "veryfast" | "faster" | "fast" | "slow" | "slower" | "veryslow" | "placebo" | null) => void;
|
|
1174
1174
|
};
|
|
1175
1175
|
readonly encodingMaxRate: {
|
|
1176
1176
|
name: string;
|
|
@@ -11,11 +11,11 @@ export declare const x264Option: {
|
|
|
11
11
|
description: () => import("react/jsx-runtime").JSX.Element;
|
|
12
12
|
ssrName: "x264Preset";
|
|
13
13
|
docLink: string;
|
|
14
|
-
type: "ultrafast" | "superfast" | "veryfast" | "faster" | "fast" | "
|
|
14
|
+
type: "medium" | "ultrafast" | "superfast" | "veryfast" | "faster" | "fast" | "slow" | "slower" | "veryslow" | "placebo" | null;
|
|
15
15
|
getValue: ({ commandLine }: {
|
|
16
16
|
commandLine: Record<string, unknown>;
|
|
17
17
|
}) => {
|
|
18
|
-
value: "ultrafast" | "superfast" | "veryfast" | "faster" | "fast" | "
|
|
18
|
+
value: "medium" | "ultrafast" | "superfast" | "veryfast" | "faster" | "fast" | "slow" | "slower" | "veryslow" | "placebo";
|
|
19
19
|
source: string;
|
|
20
20
|
} | {
|
|
21
21
|
value: null;
|
package/dist/perf.js
CHANGED
|
@@ -32,7 +32,7 @@ const getPerf = () => {
|
|
|
32
32
|
...Object.keys(perf)
|
|
33
33
|
.filter((p) => perf[p].length)
|
|
34
34
|
.map((p) => {
|
|
35
|
-
return ` ${p} => ${perf[p].reduce((a, b) => a + b, 0) / perf[p].length}ms (n = ${perf[p].length})`;
|
|
35
|
+
return ` ${p} => ${Math.round(perf[p].reduce((a, b) => a + b, 0) / perf[p].length)}ms (n = ${perf[p].length})`;
|
|
36
36
|
}),
|
|
37
37
|
];
|
|
38
38
|
};
|
|
@@ -36,7 +36,7 @@ type PreStitcherOptions = {
|
|
|
36
36
|
encodingMaxRate: string | null;
|
|
37
37
|
encodingBufferSize: string | null;
|
|
38
38
|
indent: boolean;
|
|
39
|
-
colorSpace: ColorSpace;
|
|
39
|
+
colorSpace: ColorSpace | null;
|
|
40
40
|
binariesDirectory: string | null;
|
|
41
41
|
};
|
|
42
42
|
export declare const prespawnFfmpeg: (options: PreStitcherOptions) => {
|
package/dist/render-media.d.ts
CHANGED
|
@@ -10,7 +10,7 @@ import type { FrameRange } from './frame-range';
|
|
|
10
10
|
import type { VideoImageFormat } from './image-format';
|
|
11
11
|
import type { CancelSignal } from './make-cancel-signal';
|
|
12
12
|
import type { ChromiumOptions } from './open-browser';
|
|
13
|
-
import type
|
|
13
|
+
import { type ColorSpace } from './options/color-space';
|
|
14
14
|
import type { ToOptions } from './options/option';
|
|
15
15
|
import type { optionsMap } from './options/options-map';
|
|
16
16
|
import type { PixelFormat } from './pixel-format';
|
|
@@ -27,6 +27,7 @@ export type RenderMediaOnProgress = (progress: {
|
|
|
27
27
|
encodedFrames: number;
|
|
28
28
|
encodedDoneIn: number | null;
|
|
29
29
|
renderedDoneIn: number | null;
|
|
30
|
+
renderEstimatedTime: number;
|
|
30
31
|
progress: number;
|
|
31
32
|
stitchStage: StitchingState;
|
|
32
33
|
}) => void;
|
|
@@ -63,7 +64,6 @@ export type InternalRenderMediaOptions = {
|
|
|
63
64
|
disallowParallelEncoding: boolean;
|
|
64
65
|
serveUrl: string;
|
|
65
66
|
concurrency: number | string | null;
|
|
66
|
-
finishRenderProgress: () => void;
|
|
67
67
|
binariesDirectory: string | null;
|
|
68
68
|
compositionStart: number;
|
|
69
69
|
} & MoreRenderMediaOptions;
|
package/dist/render-media.js
CHANGED
|
@@ -27,6 +27,7 @@ const jpeg_quality_1 = require("./jpeg-quality");
|
|
|
27
27
|
const logger_1 = require("./logger");
|
|
28
28
|
const make_cancel_signal_1 = require("./make-cancel-signal");
|
|
29
29
|
const audio_codec_1 = require("./options/audio-codec");
|
|
30
|
+
const color_space_1 = require("./options/color-space");
|
|
30
31
|
const x264_preset_1 = require("./options/x264-preset");
|
|
31
32
|
const overwrite_1 = require("./overwrite");
|
|
32
33
|
const perf_1 = require("./perf");
|
|
@@ -48,7 +49,7 @@ const validate_scale_1 = require("./validate-scale");
|
|
|
48
49
|
const validate_videobitrate_1 = require("./validate-videobitrate");
|
|
49
50
|
const wrap_with_error_handling_1 = require("./wrap-with-error-handling");
|
|
50
51
|
const SLOWEST_FRAME_COUNT = 10;
|
|
51
|
-
const internalRenderMediaRaw = ({ proResProfile, x264Preset, 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, encodingMaxRate, encodingBufferSize, audioCodec, concurrency, disallowParallelEncoding, everyNthFrame, imageFormat: provisionalImageFormat, indent, jpegQuality, numberOfGifLoops, onCtrlCExit, preferLossless, serveUrl, server: reusedServer, logLevel, serializedResolvedPropsWithCustomSchema, offthreadVideoCacheSizeInBytes, colorSpace, repro,
|
|
52
|
+
const internalRenderMediaRaw = ({ proResProfile, x264Preset, 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, encodingMaxRate, encodingBufferSize, audioCodec, concurrency, disallowParallelEncoding, everyNthFrame, imageFormat: provisionalImageFormat, indent, jpegQuality, numberOfGifLoops, onCtrlCExit, preferLossless, serveUrl, server: reusedServer, logLevel, serializedResolvedPropsWithCustomSchema, offthreadVideoCacheSizeInBytes, colorSpace, repro, binariesDirectory, separateAudioTo, forSeamlessAacConcatenation, compositionStart, onBrowserDownload, }) => {
|
|
52
53
|
if (repro) {
|
|
53
54
|
(0, repro_1.enableRepro)({
|
|
54
55
|
serveUrl,
|
|
@@ -104,6 +105,8 @@ const internalRenderMediaRaw = ({ proResProfile, x264Preset, crf, composition, s
|
|
|
104
105
|
let renderedDoneIn = null;
|
|
105
106
|
let encodedDoneIn = null;
|
|
106
107
|
let cancelled = false;
|
|
108
|
+
let renderEstimatedTime = 0;
|
|
109
|
+
let totalTimeSpentOnFrames = 0;
|
|
107
110
|
const renderStart = Date.now();
|
|
108
111
|
const { estimatedUsage, freeMemory, hasEnoughMemory } = (0, prestitcher_memory_usage_1.shouldUseParallelEncoding)({
|
|
109
112
|
height: composition.height,
|
|
@@ -178,6 +181,7 @@ const internalRenderMediaRaw = ({ proResProfile, x264Preset, crf, composition, s
|
|
|
178
181
|
encodedFrames: encoded,
|
|
179
182
|
renderedDoneIn,
|
|
180
183
|
renderedFrames,
|
|
184
|
+
renderEstimatedTime,
|
|
181
185
|
stitchStage,
|
|
182
186
|
progress: Math.round((70 * renderedFrames + 30 * encoded) / totalFramesToRender) /
|
|
183
187
|
100,
|
|
@@ -286,6 +290,11 @@ const internalRenderMediaRaw = ({ proResProfile, x264Preset, crf, composition, s
|
|
|
286
290
|
composition,
|
|
287
291
|
onFrameUpdate: (frame, frameIndex, timeToRenderInMilliseconds) => {
|
|
288
292
|
renderedFrames = frame;
|
|
293
|
+
totalTimeSpentOnFrames += timeToRenderInMilliseconds;
|
|
294
|
+
const newAverage = totalTimeSpentOnFrames / renderedFrames;
|
|
295
|
+
const remainingFrames = totalFramesToRender - renderedFrames;
|
|
296
|
+
// Get estimated time by multiplying the avarage render time by the remaining frames
|
|
297
|
+
renderEstimatedTime = Math.round(remainingFrames * newAverage);
|
|
289
298
|
callUpdate();
|
|
290
299
|
recordFrameTime(frameIndex, timeToRenderInMilliseconds);
|
|
291
300
|
},
|
|
@@ -354,7 +363,6 @@ const internalRenderMediaRaw = ({ proResProfile, x264Preset, crf, composition, s
|
|
|
354
363
|
})
|
|
355
364
|
.then(([{ assetsInfo }]) => {
|
|
356
365
|
renderedDoneIn = Date.now() - renderStart;
|
|
357
|
-
callUpdate();
|
|
358
366
|
logger_1.Log.verbose({ indent, logLevel }, 'Rendering frames done in', renderedDoneIn + 'ms');
|
|
359
367
|
if (absoluteOutputLocation) {
|
|
360
368
|
(0, ensure_output_directory_1.ensureOutputDirectory)(absoluteOutputLocation);
|
|
@@ -384,7 +392,12 @@ const internalRenderMediaRaw = ({ proResProfile, x264Preset, crf, composition, s
|
|
|
384
392
|
muxedFrames = frame;
|
|
385
393
|
encodedFrames = frame;
|
|
386
394
|
}
|
|
387
|
-
|
|
395
|
+
if (encodedFrames === totalFramesToRender) {
|
|
396
|
+
encodedDoneIn = Date.now() - stitchStart;
|
|
397
|
+
}
|
|
398
|
+
if (frame > 0) {
|
|
399
|
+
callUpdate();
|
|
400
|
+
}
|
|
388
401
|
},
|
|
389
402
|
onDownload,
|
|
390
403
|
numberOfGifLoops,
|
|
@@ -403,20 +416,15 @@ const internalRenderMediaRaw = ({ proResProfile, x264Preset, crf, composition, s
|
|
|
403
416
|
binariesDirectory,
|
|
404
417
|
separateAudioTo,
|
|
405
418
|
}),
|
|
406
|
-
stitchStart,
|
|
407
419
|
]);
|
|
408
420
|
})
|
|
409
|
-
.then(([buffer
|
|
410
|
-
encodedFrames = totalFramesToRender;
|
|
411
|
-
encodedDoneIn = Date.now() - stitchStart;
|
|
412
|
-
callUpdate();
|
|
421
|
+
.then(([buffer]) => {
|
|
413
422
|
logger_1.Log.verbose({ indent, logLevel }, 'Stitching done in', encodedDoneIn + 'ms');
|
|
414
423
|
slowestFrames.sort((a, b) => b.time - a.time);
|
|
415
424
|
const result = {
|
|
416
425
|
buffer,
|
|
417
426
|
slowestFrames,
|
|
418
427
|
};
|
|
419
|
-
finishRenderProgress();
|
|
420
428
|
if ((0, repro_1.isReproEnabled)()) {
|
|
421
429
|
(0, repro_1.getReproWriter)()
|
|
422
430
|
.onRenderSucceed({ indent, logLevel, output: absoluteOutputLocation })
|
|
@@ -547,9 +555,8 @@ const renderMedia = ({ proResProfile, x264Preset, crf, composition, inputProps,
|
|
|
547
555
|
data: (_b = composition.props) !== null && _b !== void 0 ? _b : {},
|
|
548
556
|
}).serializedString,
|
|
549
557
|
offthreadVideoCacheSizeInBytes: offthreadVideoCacheSizeInBytes !== null && offthreadVideoCacheSizeInBytes !== void 0 ? offthreadVideoCacheSizeInBytes : null,
|
|
550
|
-
colorSpace: colorSpace !== null && colorSpace !== void 0 ? colorSpace :
|
|
558
|
+
colorSpace: colorSpace !== null && colorSpace !== void 0 ? colorSpace : color_space_1.DEFAULT_COLOR_SPACE,
|
|
551
559
|
repro: repro !== null && repro !== void 0 ? repro : false,
|
|
552
|
-
finishRenderProgress: () => undefined,
|
|
553
560
|
binariesDirectory: binariesDirectory !== null && binariesDirectory !== void 0 ? binariesDirectory : null,
|
|
554
561
|
separateAudioTo: separateAudioTo !== null && separateAudioTo !== void 0 ? separateAudioTo : null,
|
|
555
562
|
forSeamlessAacConcatenation: forSeamlessAacConcatenation !== null && forSeamlessAacConcatenation !== void 0 ? forSeamlessAacConcatenation : false,
|
|
@@ -6,7 +6,7 @@ import type { FfmpegOverrideFn } from './ffmpeg-override';
|
|
|
6
6
|
import type { LogLevel } from './log-level';
|
|
7
7
|
import type { CancelSignal } from './make-cancel-signal';
|
|
8
8
|
import type { AudioCodec } from './options/audio-codec';
|
|
9
|
-
import type
|
|
9
|
+
import { type ColorSpace } from './options/color-space';
|
|
10
10
|
import type { ToOptions } from './options/option';
|
|
11
11
|
import type { optionsMap } from './options/options-map';
|
|
12
12
|
import type { X264Preset } from './options/x264-preset';
|
|
@@ -40,7 +40,7 @@ type InternalStitchFramesToVideoOptions = {
|
|
|
40
40
|
x264Preset: X264Preset | null;
|
|
41
41
|
enforceAudioTrack: boolean;
|
|
42
42
|
ffmpegOverride: null | FfmpegOverrideFn;
|
|
43
|
-
colorSpace: ColorSpace;
|
|
43
|
+
colorSpace: ColorSpace | null;
|
|
44
44
|
binariesDirectory: string | null;
|
|
45
45
|
} & ToOptions<typeof optionsMap.stitchFramesToVideo>;
|
|
46
46
|
export type StitchFramesToVideoOptions = {
|
|
@@ -22,6 +22,7 @@ const get_prores_profile_name_1 = require("./get-prores-profile-name");
|
|
|
22
22
|
const logger_1 = require("./logger");
|
|
23
23
|
const make_cancel_signal_1 = require("./make-cancel-signal");
|
|
24
24
|
const audio_codec_1 = require("./options/audio-codec");
|
|
25
|
+
const color_space_1 = require("./options/color-space");
|
|
25
26
|
const parse_ffmpeg_progress_1 = require("./parse-ffmpeg-progress");
|
|
26
27
|
const pixel_format_1 = require("./pixel-format");
|
|
27
28
|
const prores_profile_1 = require("./prores-profile");
|
|
@@ -119,7 +120,14 @@ const innerStitchFramesToVideo = async ({ assetsInfo, audioBitrate, audioCodec:
|
|
|
119
120
|
fps,
|
|
120
121
|
chunkLengthInSeconds: assetsInfo.chunkLengthInSeconds,
|
|
121
122
|
logLevel,
|
|
122
|
-
onProgress: () =>
|
|
123
|
+
onProgress: (progress) => {
|
|
124
|
+
// TODO: This can be added to the overall progress calcuation
|
|
125
|
+
logger_1.Log.verbose({
|
|
126
|
+
indent,
|
|
127
|
+
logLevel,
|
|
128
|
+
tag: 'audio',
|
|
129
|
+
}, `Encoding progress: ${Math.round(progress * 100)}%`);
|
|
130
|
+
},
|
|
123
131
|
downloadMap: assetsInfo.downloadMap,
|
|
124
132
|
remotionRoot,
|
|
125
133
|
indent,
|
|
@@ -326,7 +334,7 @@ const stitchFramesToVideo = ({ assetsInfo, force, fps, height, width, audioBitra
|
|
|
326
334
|
preEncodedFileLocation: null,
|
|
327
335
|
preferLossless: false,
|
|
328
336
|
x264Preset: x264Preset !== null && x264Preset !== void 0 ? x264Preset : null,
|
|
329
|
-
colorSpace: colorSpace !== null && colorSpace !== void 0 ? colorSpace :
|
|
337
|
+
colorSpace: colorSpace !== null && colorSpace !== void 0 ? colorSpace : color_space_1.DEFAULT_COLOR_SPACE,
|
|
330
338
|
binariesDirectory: binariesDirectory !== null && binariesDirectory !== void 0 ? binariesDirectory : null,
|
|
331
339
|
separateAudioTo: separateAudioTo !== null && separateAudioTo !== void 0 ? separateAudioTo : null,
|
|
332
340
|
});
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@remotion/renderer",
|
|
3
|
-
"version": "4.0.
|
|
3
|
+
"version": "4.0.149",
|
|
4
4
|
"description": "Renderer for Remotion",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
"extract-zip": "2.0.1",
|
|
19
19
|
"source-map": "^0.8.0-beta.0",
|
|
20
20
|
"ws": "8.7.0",
|
|
21
|
-
"remotion": "4.0.
|
|
21
|
+
"remotion": "4.0.149"
|
|
22
22
|
},
|
|
23
23
|
"peerDependencies": {
|
|
24
24
|
"react": ">=16.8.0",
|
|
@@ -31,25 +31,25 @@
|
|
|
31
31
|
"@types/node": "18.14.6",
|
|
32
32
|
"@types/progress": "2.0.5",
|
|
33
33
|
"@types/bun": "1.0.12",
|
|
34
|
-
"@types/react": "18.
|
|
35
|
-
"@types/react-dom": "18.
|
|
34
|
+
"@types/react": "18.3.1",
|
|
35
|
+
"@types/react-dom": "18.3.0",
|
|
36
36
|
"jsdom": "^24.0.0",
|
|
37
37
|
"eslint": "8.56.0",
|
|
38
38
|
"prettier": "3.2.5",
|
|
39
39
|
"prettier-plugin-organize-imports": "3.2.4",
|
|
40
|
-
"react": "18.
|
|
41
|
-
"react-dom": "18.
|
|
40
|
+
"react": "18.3.1",
|
|
41
|
+
"react-dom": "18.3.1",
|
|
42
42
|
"vitest": "0.31.1",
|
|
43
43
|
"@types/ws": "8.5.10"
|
|
44
44
|
},
|
|
45
45
|
"optionalDependencies": {
|
|
46
|
-
"@remotion/compositor-darwin-arm64": "4.0.
|
|
47
|
-
"@remotion/compositor-darwin-x64": "4.0.
|
|
48
|
-
"@remotion/compositor-linux-arm64-gnu": "4.0.
|
|
49
|
-
"@remotion/compositor-linux-
|
|
50
|
-
"@remotion/compositor-linux-x64-
|
|
51
|
-
"@remotion/compositor-win32-x64-msvc": "4.0.
|
|
52
|
-
"@remotion/compositor-linux-
|
|
46
|
+
"@remotion/compositor-darwin-arm64": "4.0.149",
|
|
47
|
+
"@remotion/compositor-darwin-x64": "4.0.149",
|
|
48
|
+
"@remotion/compositor-linux-arm64-gnu": "4.0.149",
|
|
49
|
+
"@remotion/compositor-linux-arm64-musl": "4.0.149",
|
|
50
|
+
"@remotion/compositor-linux-x64-gnu": "4.0.149",
|
|
51
|
+
"@remotion/compositor-win32-x64-msvc": "4.0.149",
|
|
52
|
+
"@remotion/compositor-linux-x64-musl": "4.0.149"
|
|
53
53
|
},
|
|
54
54
|
"keywords": [
|
|
55
55
|
"remotion",
|
|
@@ -65,8 +65,7 @@
|
|
|
65
65
|
"formatting": "prettier src --check",
|
|
66
66
|
"lint": "eslint src --ext ts,tsx",
|
|
67
67
|
"test": "vitest --run",
|
|
68
|
-
"
|
|
69
|
-
"build": "node build.mjs && tsc -d",
|
|
68
|
+
"build": "node build.mjs --debug",
|
|
70
69
|
"build-all": "node build.mjs --all"
|
|
71
70
|
}
|
|
72
71
|
}
|