@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.
@@ -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
- exports.validColorSpaces = ['default', 'bt709', 'bt2020-ncl'];
6
- let colorSpace = 'default';
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: ['"', "default", '"'] }), ",", ' ', (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", {}), "If a non-default colorspace is used, it is recommended to also use", ' ', (0, jsx_runtime_1.jsxs)("code", { children: ['"', "png", '"'] }), ' ', "as the image format to have accurate color transformations throughout. Only since v4.0.83, colorspace conversion is actually performed, previously it would only tag the metadata of the video."] })),
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: 'default',
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 !== 'default') {
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: 'default',
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
- let multiProcessOnLinux = true;
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: false,
30
+ value: DEFAULT_VALUE,
30
31
  };
31
32
  },
32
33
  setConfig: (value) => {
@@ -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" | "medium" | "slow" | "slower" | "veryslow" | "placebo" | null;
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" | "medium" | "slow" | "slower" | "veryslow" | "placebo";
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" | "medium" | "slow" | "slower" | "veryslow" | "placebo" | null) => void;
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" | "medium" | "slow" | "slower" | "veryslow" | "placebo" | null;
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" | "medium" | "slow" | "slower" | "veryslow" | "placebo";
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" | "medium" | "slow" | "slower" | "veryslow" | "placebo" | null) => void;
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" | "medium" | "slow" | "slower" | "veryslow" | "placebo" | null;
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" | "medium" | "slow" | "slower" | "veryslow" | "placebo";
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" | "medium" | "slow" | "slower" | "veryslow" | "placebo" | null) => void;
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" | "medium" | "slow" | "slower" | "veryslow" | "placebo" | null;
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" | "medium" | "slow" | "slower" | "veryslow" | "placebo";
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" | "medium" | "slow" | "slower" | "veryslow" | "placebo" | null) => void;
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" | "medium" | "slow" | "slower" | "veryslow" | "placebo" | null;
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" | "medium" | "slow" | "slower" | "veryslow" | "placebo";
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) => {
@@ -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 { ColorSpace } from './options/color-space';
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;
@@ -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, finishRenderProgress, binariesDirectory, separateAudioTo, forSeamlessAacConcatenation, compositionStart, onBrowserDownload, }) => {
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
- callUpdate();
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, stitchStart]) => {
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 : 'default',
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 { ColorSpace } from './options/color-space';
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: () => updateProgress(0),
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 : 'default',
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.147",
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.147"
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.2.48",
35
- "@types/react-dom": "18.2.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.2.0",
41
- "react-dom": "18.2.0",
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.147",
47
- "@remotion/compositor-darwin-x64": "4.0.147",
48
- "@remotion/compositor-linux-arm64-gnu": "4.0.147",
49
- "@remotion/compositor-linux-x64-gnu": "4.0.147",
50
- "@remotion/compositor-linux-x64-musl": "4.0.147",
51
- "@remotion/compositor-win32-x64-msvc": "4.0.147",
52
- "@remotion/compositor-linux-arm64-musl": "4.0.147"
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
- "watch": "tsc -w",
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
  }