@remotion/cli 4.0.50 → 4.0.52

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.
Files changed (45) hide show
  1. package/dist/benchmark.js +9 -8
  2. package/dist/config/chromium-flags.d.ts +1 -1
  3. package/dist/config/index.d.ts +3 -3
  4. package/dist/config/log.d.ts +1 -1
  5. package/dist/editor/components/CurrentComposition.d.ts +0 -1
  6. package/dist/editor/components/Modals.js +1 -1
  7. package/dist/editor/components/NewComposition/RemInput.d.ts +2 -2
  8. package/dist/editor/components/NewComposition/RemInputTypeColor.d.ts +1 -1
  9. package/dist/editor/components/RenderButton.js +2 -19
  10. package/dist/editor/components/RenderModal/RenderModal.d.ts +2 -6
  11. package/dist/editor/components/RenderModal/RenderModal.js +25 -1
  12. package/dist/editor/components/RenderModal/RenderModalAdvanced.js +9 -1
  13. package/dist/editor/components/SidebarRenderButton.js +3 -28
  14. package/dist/editor/components/Timeline/TimelineInOutPointerHandle.d.ts +4 -2
  15. package/dist/editor/components/Timeline/TimelineInOutPointerHandle.js +10 -5
  16. package/dist/editor/components/UpdateCheck.d.ts +0 -1
  17. package/dist/editor/helpers/colors.d.ts +1 -1
  18. package/dist/editor/state/modals.d.ts +2 -6
  19. package/dist/get-cli-options.d.ts +1 -1
  20. package/dist/get-cli-options.js +12 -3
  21. package/dist/get-final-output-codec.d.ts +2 -1
  22. package/dist/get-final-output-codec.js +4 -1
  23. package/dist/gpu.d.ts +2 -0
  24. package/dist/gpu.js +43 -0
  25. package/dist/index.d.ts +11 -10
  26. package/dist/index.js +4 -0
  27. package/dist/list-of-remotion-packages.js +1 -0
  28. package/dist/log.d.ts +4 -4
  29. package/dist/make-on-download.d.ts +3 -1
  30. package/dist/make-on-download.js +3 -1
  31. package/dist/preview-server/render-queue/get-default-video-contexts.d.ts +8 -4
  32. package/dist/preview-server/render-queue/get-default-video-contexts.js +21 -5
  33. package/dist/preview-server/render-queue/make-retry-payload.js +6 -28
  34. package/dist/print-help.js +37 -66
  35. package/dist/progress-bar.d.ts +2 -1
  36. package/dist/progress-bar.js +4 -3
  37. package/dist/render-flows/render.js +8 -1
  38. package/dist/render-flows/still.js +18 -4
  39. package/package.json +8 -8
  40. package/dist/config/presets-profile.d.ts +0 -3
  41. package/dist/config/presets-profile.js +0 -12
  42. package/dist/editor/components/DownloadButton.d.ts +0 -0
  43. package/dist/editor/components/DownloadButton.js +0 -1
  44. package/dist/handle-common-errors.d.ts +0 -2
  45. package/dist/handle-common-errors.js +0 -60
package/dist/index.d.ts CHANGED
@@ -63,24 +63,24 @@ export declare const CliInternals: {
63
63
  verbose: (message?: any, ...optionalParams: any[]) => void;
64
64
  verboseAdvanced: (options: {
65
65
  indent: boolean;
66
- logLevel: "verbose" | "info" | "warn" | "error";
66
+ logLevel: "error" | "verbose" | "info" | "warn";
67
67
  } & {
68
68
  tag?: string | undefined;
69
69
  }, message?: any, ...optionalParams: any[]) => void;
70
70
  info: (message?: any, ...optionalParams: any[]) => void;
71
71
  infoAdvanced: (options: {
72
72
  indent: boolean;
73
- logLevel: "verbose" | "info" | "warn" | "error";
73
+ logLevel: "error" | "verbose" | "info" | "warn";
74
74
  }, message?: any, ...optionalParams: any[]) => void;
75
75
  warn: (message?: any, ...optionalParams: any[]) => void;
76
76
  warnAdvanced: (options: {
77
77
  indent: boolean;
78
- logLevel: "verbose" | "info" | "warn" | "error";
78
+ logLevel: "error" | "verbose" | "info" | "warn";
79
79
  }, message?: any, ...optionalParams: any[]) => void;
80
80
  error: (message?: any, ...optionalParams: any[]) => void;
81
81
  errorAdvanced: (options: {
82
82
  indent: boolean;
83
- logLevel: "verbose" | "info" | "warn" | "error";
83
+ logLevel: "error" | "verbose" | "info" | "warn";
84
84
  } & {
85
85
  tag?: string | undefined;
86
86
  }, message?: any, ...optionalParams: any[]) => void;
@@ -106,7 +106,7 @@ export declare const CliInternals: {
106
106
  numberOfGifLoops: import("./config/number-of-gif-loops").Loop;
107
107
  stillFrame: number;
108
108
  browserExecutable: import("@remotion/renderer").BrowserExecutable;
109
- logLevel: "verbose" | "info" | "warn" | "error";
109
+ logLevel: "error" | "verbose" | "info" | "warn";
110
110
  scale: number;
111
111
  chromiumOptions: import("@remotion/renderer").ChromiumOptions;
112
112
  overwrite: boolean;
@@ -175,7 +175,7 @@ export declare const CliInternals: {
175
175
  runs: number;
176
176
  concurrencies: string;
177
177
  "enforce-audio-track": boolean;
178
- gl: "swangle" | "angle" | "egl" | "swiftshader" | "vulkan";
178
+ gl: "swangle" | "angle" | "egl" | "swiftshader" | "vulkan" | "angle-egl";
179
179
  "package-manager": string;
180
180
  "webpack-poll": number;
181
181
  "no-open": boolean;
@@ -190,7 +190,7 @@ export declare const CliInternals: {
190
190
  } & {
191
191
  _: string[];
192
192
  };
193
- printError: (err: Error, logLevel: "verbose" | "info" | "warn" | "error") => Promise<void>;
193
+ printError: (err: Error, logLevel: "error" | "verbose" | "info" | "warn") => Promise<void>;
194
194
  formatBytes: (number: number, options?: Intl.NumberFormatOptions & {
195
195
  locale: string;
196
196
  bits?: boolean | undefined;
@@ -220,19 +220,20 @@ export declare const CliInternals: {
220
220
  uiImageFormat: "none" | "png" | "jpeg" | null;
221
221
  }) => "none" | "png" | "jpeg";
222
222
  printCompositions: (compositions: import("remotion").VideoConfig[]) => void;
223
- getFinalOutputCodec: ({ cliFlag, configFile, downloadName, outName, uiCodec, }: {
223
+ getFinalOutputCodec: ({ cliFlag, configFile, downloadName, outName, uiCodec, compositionCodec, }: {
224
224
  cliFlag: import("@remotion/renderer").CodecOrUndefined;
225
225
  outName: string | null;
226
226
  downloadName: string | null;
227
227
  configFile: "h264" | "h265" | "vp8" | "vp9" | "mp3" | "aac" | "wav" | "prores" | "h264-mkv" | "gif" | null;
228
228
  uiCodec: "h264" | "h265" | "vp8" | "vp9" | "mp3" | "aac" | "wav" | "prores" | "h264-mkv" | "gif" | null;
229
+ compositionCodec: "h264" | "h265" | "vp8" | "vp9" | "mp3" | "aac" | "wav" | "prores" | "h264-mkv" | "gif" | null;
229
230
  }) => {
230
231
  codec: "h264" | "h265" | "vp8" | "vp9" | "mp3" | "aac" | "wav" | "prores" | "h264-mkv" | "gif";
231
232
  reason: string;
232
233
  };
233
234
  listOfRemotionPackages: string[];
234
235
  shouldUseNonOverlayingLogger: ({ logLevel, }: {
235
- logLevel: "verbose" | "info" | "warn" | "error";
236
+ logLevel: "error" | "verbose" | "info" | "warn";
236
237
  }) => boolean;
237
238
  getCompositionWithDimensionOverride: ({ height, width, args, compositionIdFromUi, chromiumOptions, envVariables, port, puppeteerInstance, timeoutInMilliseconds, browserExecutable, serveUrlOrWebpackUrl, indent, serializedInputPropsWithCustomSchema, logLevel, server, offthreadVideoCacheSizeInBytes, }: {
238
239
  height: number | null;
@@ -247,7 +248,7 @@ export declare const CliInternals: {
247
248
  browserExecutable: import("@remotion/renderer").BrowserExecutable;
248
249
  serveUrlOrWebpackUrl: string;
249
250
  indent: boolean;
250
- logLevel: "verbose" | "info" | "warn" | "error";
251
+ logLevel: "error" | "verbose" | "info" | "warn";
251
252
  serializedInputPropsWithCustomSchema: string;
252
253
  server: import("@remotion/renderer").RemotionServer;
253
254
  offthreadVideoCacheSizeInBytes: number | null;
package/dist/index.js CHANGED
@@ -35,6 +35,7 @@ const get_cli_options_1 = require("./get-cli-options");
35
35
  const get_composition_with_dimension_override_1 = require("./get-composition-with-dimension-override");
36
36
  const get_config_file_name_1 = require("./get-config-file-name");
37
37
  const get_final_output_codec_1 = require("./get-final-output-codec");
38
+ const gpu_1 = require("./gpu");
38
39
  const image_formats_1 = require("./image-formats");
39
40
  const initialize_cli_1 = require("./initialize-cli");
40
41
  const lambda_command_1 = require("./lambda-command");
@@ -103,6 +104,9 @@ const cli = async () => {
103
104
  else if (command === 'ffmpeg') {
104
105
  (0, ffmpeg_1.ffmpegCommand)(remotionRoot, process.argv.slice(3));
105
106
  }
107
+ else if (command === 'gpu') {
108
+ await (0, gpu_1.gpuCommand)(remotionRoot);
109
+ }
106
110
  else if (command === 'ffprobe') {
107
111
  (0, ffmpeg_1.ffprobeCommand)(remotionRoot, process.argv.slice(3));
108
112
  }
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.listOfRemotionPackages = void 0;
4
4
  // Keep in sync with create-video
5
5
  exports.listOfRemotionPackages = [
6
+ '@remotion/layout-utils',
6
7
  '@remotion/bundler',
7
8
  '@remotion/cli',
8
9
  '@remotion/cloudrun',
package/dist/log.d.ts CHANGED
@@ -2,24 +2,24 @@ export declare const Log: {
2
2
  verbose: (message?: any, ...optionalParams: any[]) => void;
3
3
  verboseAdvanced: (options: {
4
4
  indent: boolean;
5
- logLevel: "verbose" | "info" | "warn" | "error";
5
+ logLevel: "error" | "verbose" | "info" | "warn";
6
6
  } & {
7
7
  tag?: string | undefined;
8
8
  }, message?: any, ...optionalParams: any[]) => void;
9
9
  info: (message?: any, ...optionalParams: any[]) => void;
10
10
  infoAdvanced: (options: {
11
11
  indent: boolean;
12
- logLevel: "verbose" | "info" | "warn" | "error";
12
+ logLevel: "error" | "verbose" | "info" | "warn";
13
13
  }, message?: any, ...optionalParams: any[]) => void;
14
14
  warn: (message?: any, ...optionalParams: any[]) => void;
15
15
  warnAdvanced: (options: {
16
16
  indent: boolean;
17
- logLevel: "verbose" | "info" | "warn" | "error";
17
+ logLevel: "error" | "verbose" | "info" | "warn";
18
18
  }, message?: any, ...optionalParams: any[]) => void;
19
19
  error: (message?: any, ...optionalParams: any[]) => void;
20
20
  errorAdvanced: (options: {
21
21
  indent: boolean;
22
- logLevel: "verbose" | "info" | "warn" | "error";
22
+ logLevel: "error" | "verbose" | "info" | "warn";
23
23
  } & {
24
24
  tag?: string | undefined;
25
25
  }, message?: any, ...optionalParams: any[]) => void;
@@ -1,12 +1,14 @@
1
1
  import type { LogLevel, RenderMediaOnDownload } from '@remotion/renderer';
2
2
  import type { DownloadProgress } from './progress-types';
3
- export declare const makeOnDownload: ({ indent, logLevel, updatesDontOverwrite, downloads, updateRenderProgress, }: {
3
+ export declare const makeOnDownload: ({ indent, logLevel, updatesDontOverwrite, downloads, updateRenderProgress, isUsingParallelEncoding, }: {
4
4
  indent: boolean;
5
5
  logLevel: LogLevel;
6
6
  updatesDontOverwrite: boolean;
7
7
  downloads: DownloadProgress[];
8
+ isUsingParallelEncoding: boolean;
8
9
  updateRenderProgress: (progress: {
9
10
  newline: boolean;
10
11
  printToConsole: boolean;
12
+ isUsingParallelEncoding: boolean;
11
13
  }) => void;
12
14
  }) => RenderMediaOnDownload;
@@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.makeOnDownload = void 0;
4
4
  const format_bytes_1 = require("./format-bytes");
5
5
  const log_1 = require("./log");
6
- const makeOnDownload = ({ indent, logLevel, updatesDontOverwrite, downloads, updateRenderProgress, }) => {
6
+ const makeOnDownload = ({ indent, logLevel, updatesDontOverwrite, downloads, updateRenderProgress, isUsingParallelEncoding, }) => {
7
7
  return (src) => {
8
8
  const id = Math.random();
9
9
  const download = {
@@ -19,6 +19,7 @@ const makeOnDownload = ({ indent, logLevel, updatesDontOverwrite, downloads, upd
19
19
  updateRenderProgress({
20
20
  newline: false,
21
21
  printToConsole: !updatesDontOverwrite,
22
+ isUsingParallelEncoding,
22
23
  });
23
24
  let lastUpdate = Date.now();
24
25
  return ({ percent, downloaded, totalSize }) => {
@@ -33,6 +34,7 @@ const makeOnDownload = ({ indent, logLevel, updatesDontOverwrite, downloads, upd
33
34
  updateRenderProgress({
34
35
  newline: false,
35
36
  printToConsole: !updatesDontOverwrite,
37
+ isUsingParallelEncoding,
36
38
  });
37
39
  };
38
40
  };
@@ -1,10 +1,14 @@
1
- import type { Codec } from '@remotion/renderer';
1
+ import type { AudioCodec, Codec } from '@remotion/renderer';
2
2
  import type { RenderType } from '../../editor/components/RenderModal/RenderModalAdvanced';
3
- export declare const getDefaultCodecs: ({ defaultCodec, renderType, }: {
4
- defaultCodec: Codec;
3
+ export declare const getDefaultCodecs: ({ defaultConfigurationVideoCodec, compositionDefaultVideoCodec, renderType, defaultConfigurationAudioCodec, }: {
4
+ defaultConfigurationVideoCodec: Codec | null;
5
+ defaultConfigurationAudioCodec: AudioCodec | null;
6
+ compositionDefaultVideoCodec: Codec | null;
5
7
  renderType: RenderType;
6
8
  }) => {
7
- initialAudioCodec: Codec;
9
+ initialAudioCodec: AudioCodec;
8
10
  initialVideoCodec: Codec;
9
11
  initialRenderType: RenderType;
12
+ initialVideoCodecForAudioTab: Codec;
13
+ initialVideoCodecForVideoTab: Codec;
10
14
  };
@@ -2,12 +2,28 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.getDefaultCodecs = void 0;
4
4
  const client_1 = require("@remotion/renderer/client");
5
- const getDefaultCodecs = ({ defaultCodec, renderType, }) => {
6
- const isAudioCodec = client_1.BrowserSafeApis.isAudioCodec(defaultCodec);
5
+ const getDefaultCodecs = ({ defaultConfigurationVideoCodec, compositionDefaultVideoCodec, renderType, defaultConfigurationAudioCodec, }) => {
6
+ var _a;
7
+ const userPreferredVideoCodec = (_a = compositionDefaultVideoCodec !== null && compositionDefaultVideoCodec !== void 0 ? compositionDefaultVideoCodec : defaultConfigurationVideoCodec) !== null && _a !== void 0 ? _a : 'h264';
8
+ const isVideoCodecAnAudioCodec = client_1.BrowserSafeApis.isAudioCodec(userPreferredVideoCodec);
9
+ if (isVideoCodecAnAudioCodec) {
10
+ return {
11
+ initialAudioCodec: userPreferredVideoCodec,
12
+ initialRenderType: 'audio',
13
+ initialVideoCodec: userPreferredVideoCodec,
14
+ initialVideoCodecForAudioTab: userPreferredVideoCodec,
15
+ initialVideoCodecForVideoTab: client_1.BrowserSafeApis.isAudioCodec(defaultConfigurationVideoCodec)
16
+ ? 'h264'
17
+ : defaultConfigurationVideoCodec,
18
+ };
19
+ }
20
+ const suitableAudioCodecForVideoCodec = client_1.BrowserSafeApis.defaultAudioCodecs[userPreferredVideoCodec].compressed;
7
21
  return {
8
- initialAudioCodec: isAudioCodec ? defaultCodec : 'mp3',
9
- initialVideoCodec: isAudioCodec ? 'h264' : defaultCodec,
10
- initialRenderType: isAudioCodec ? 'audio' : renderType,
22
+ initialAudioCodec: defaultConfigurationAudioCodec !== null && defaultConfigurationAudioCodec !== void 0 ? defaultConfigurationAudioCodec : suitableAudioCodecForVideoCodec,
23
+ initialVideoCodec: userPreferredVideoCodec,
24
+ initialRenderType: renderType,
25
+ initialVideoCodecForAudioTab: userPreferredVideoCodec,
26
+ initialVideoCodecForVideoTab: userPreferredVideoCodec,
11
27
  };
12
28
  };
13
29
  exports.getDefaultCodecs = getDefaultCodecs;
@@ -2,7 +2,6 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.makeRetryPayload = void 0;
4
4
  const remotion_1 = require("remotion");
5
- const get_default_video_contexts_1 = require("./get-default-video-contexts");
6
5
  const makeRetryPayload = (job) => {
7
6
  var _a, _b, _c, _d, _e;
8
7
  const defaults = window.remotion_renderDefaults;
@@ -10,10 +9,6 @@ const makeRetryPayload = (job) => {
10
9
  throw new Error('defaults not set');
11
10
  }
12
11
  if (job.type === 'still') {
13
- const { initialAudioCodec, initialRenderType, initialVideoCodec } = (0, get_default_video_contexts_1.getDefaultCodecs)({
14
- defaultCodec: defaults.codec,
15
- renderType: 'still',
16
- });
17
12
  return {
18
13
  type: 'render',
19
14
  compositionId: job.compositionId,
@@ -21,12 +16,8 @@ const makeRetryPayload = (job) => {
21
16
  initialStillImageFormat: job.imageFormat,
22
17
  initialVideoImageFormat: defaults.videoImageFormat,
23
18
  initialJpegQuality: (_a = job.jpegQuality) !== null && _a !== void 0 ? _a : defaults.jpegQuality,
24
- initialOutName: job.outName,
25
19
  initialScale: job.scale,
26
20
  initialVerbose: job.verbose,
27
- initialVideoCodecForAudioTab: initialAudioCodec,
28
- initialRenderType,
29
- initialVideoCodecForVideoTab: initialVideoCodec,
30
21
  initialConcurrency: defaults.concurrency,
31
22
  maxConcurrency: defaults.maxConcurrency,
32
23
  minConcurrency: defaults.minConcurrency,
@@ -40,7 +31,7 @@ const makeRetryPayload = (job) => {
40
31
  initialEveryNthFrame: defaults.everyNthFrame,
41
32
  initialNumberOfGifLoops: defaults.numberOfGifLoops,
42
33
  initialDelayRenderTimeout: job.delayRenderTimeout,
43
- initialAudioCodec: defaults.audioCodec,
34
+ defaultConfigurationAudioCodec: defaults.audioCodec,
44
35
  initialEnvVariables: job.envVariables,
45
36
  initialDisableWebSecurity: job.chromiumOptions.disableWebSecurity,
46
37
  initialOpenGlRenderer: job.chromiumOptions.gl,
@@ -52,25 +43,18 @@ const makeRetryPayload = (job) => {
52
43
  initialOffthreadVideoCacheSizeInBytes: job.offthreadVideoCacheSizeInBytes,
53
44
  initialColorSpace: defaults.colorSpace,
54
45
  initialMultiProcessOnLinux: job.multiProcessOnLinux,
46
+ defaultConfigurationVideoCodec: defaults.codec,
55
47
  };
56
48
  }
57
49
  if (job.type === 'sequence') {
58
- const { initialAudioCodec, initialRenderType, initialVideoCodec } = (0, get_default_video_contexts_1.getDefaultCodecs)({
59
- defaultCodec: defaults.codec,
60
- renderType: 'sequence',
61
- });
62
50
  return {
63
51
  type: 'render',
64
52
  initialFrame: 0,
65
53
  compositionId: job.compositionId,
66
54
  initialVideoImageFormat: defaults.videoImageFormat,
67
55
  initialJpegQuality: (_b = job.jpegQuality) !== null && _b !== void 0 ? _b : defaults.jpegQuality,
68
- initialOutName: job.outName,
69
56
  initialScale: job.scale,
70
57
  initialVerbose: job.verbose,
71
- initialVideoCodecForAudioTab: initialAudioCodec,
72
- initialRenderType,
73
- initialVideoCodecForVideoTab: initialVideoCodec,
74
58
  initialConcurrency: defaults.concurrency,
75
59
  maxConcurrency: defaults.maxConcurrency,
76
60
  minConcurrency: defaults.minConcurrency,
@@ -84,7 +68,6 @@ const makeRetryPayload = (job) => {
84
68
  initialEveryNthFrame: defaults.everyNthFrame,
85
69
  initialNumberOfGifLoops: defaults.numberOfGifLoops,
86
70
  initialDelayRenderTimeout: job.delayRenderTimeout,
87
- initialAudioCodec: defaults.audioCodec,
88
71
  initialEnvVariables: job.envVariables,
89
72
  initialDisableWebSecurity: job.chromiumOptions.disableWebSecurity,
90
73
  initialOpenGlRenderer: job.chromiumOptions.gl,
@@ -97,20 +80,17 @@ const makeRetryPayload = (job) => {
97
80
  initialOffthreadVideoCacheSizeInBytes: job.offthreadVideoCacheSizeInBytes,
98
81
  initialColorSpace: defaults.colorSpace,
99
82
  initialMultiProcessOnLinux: job.multiProcessOnLinux,
83
+ defaultConfigurationVideoCodec: defaults.codec,
84
+ defaultConfigurationAudioCodec: defaults.audioCodec,
100
85
  };
101
86
  }
102
87
  if (job.type === 'video') {
103
- const { initialAudioCodec, initialRenderType, initialVideoCodec } = (0, get_default_video_contexts_1.getDefaultCodecs)({
104
- defaultCodec: job.codec,
105
- renderType: 'video',
106
- });
107
88
  return {
108
89
  type: 'render',
109
90
  compositionId: job.compositionId,
110
91
  initialStillImageFormat: defaults.stillImageFormat,
111
92
  initialVideoImageFormat: job.imageFormat,
112
93
  initialJpegQuality: (_c = job.jpegQuality) !== null && _c !== void 0 ? _c : defaults.jpegQuality,
113
- initialOutName: job.outName,
114
94
  initialScale: job.scale,
115
95
  initialVerbose: job.verbose,
116
96
  initialFrame: 0,
@@ -118,10 +98,7 @@ const makeRetryPayload = (job) => {
118
98
  maxConcurrency: defaults.maxConcurrency,
119
99
  minConcurrency: defaults.minConcurrency,
120
100
  initialMuted: job.muted,
121
- initialVideoCodecForAudioTab: initialAudioCodec,
122
101
  initialEnforceAudioTrack: job.enforceAudioTrack,
123
- initialRenderType,
124
- initialVideoCodecForVideoTab: initialVideoCodec,
125
102
  initialProResProfile: (_d = job.proResProfile) !== null && _d !== void 0 ? _d : defaults.proResProfile,
126
103
  initialx264Preset: (_e = job.x264Preset) !== null && _e !== void 0 ? _e : defaults.x264Preset,
127
104
  initialPixelFormat: job.pixelFormat,
@@ -130,7 +107,6 @@ const makeRetryPayload = (job) => {
130
107
  initialEveryNthFrame: job.everyNthFrame,
131
108
  initialNumberOfGifLoops: job.numberOfGifLoops,
132
109
  initialDelayRenderTimeout: job.delayRenderTimeout,
133
- initialAudioCodec: job.audioCodec,
134
110
  initialEnvVariables: job.envVariables,
135
111
  initialDisableWebSecurity: job.chromiumOptions.disableWebSecurity,
136
112
  initialOpenGlRenderer: job.chromiumOptions.gl,
@@ -142,6 +118,8 @@ const makeRetryPayload = (job) => {
142
118
  initialOffthreadVideoCacheSizeInBytes: job.offthreadVideoCacheSizeInBytes,
143
119
  initialColorSpace: job.colorSpace,
144
120
  initialMultiProcessOnLinux: job.multiProcessOnLinux,
121
+ defaultConfigurationVideoCodec: defaults.codec,
122
+ defaultConfigurationAudioCodec: job.audioCodec,
145
123
  };
146
124
  }
147
125
  throw new Error(`Job ${JSON.stringify(job)} Not implemented`);
@@ -2,79 +2,50 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.printHelp = void 0;
4
4
  const chalk_1 = require("./chalk");
5
+ const gpu_1 = require("./gpu");
5
6
  const log_1 = require("./log");
6
7
  const versions_1 = require("./versions");
7
8
  const packagejson = require('../package.json');
8
- const printFlags = (flags) => {
9
- flags.forEach(([flag, description]) => {
10
- log_1.Log.info(chalk_1.chalk.blue(`${flag.padEnd(22, ' ')} ${description}`));
11
- });
12
- };
13
9
  const printHelp = () => {
14
- log_1.Log.info(`@remotion/cli ${packagejson.version} © ${new Date().getFullYear()} The Remotion developers`);
10
+ log_1.Log.info(`@remotion/cli ${packagejson.version}`);
11
+ log_1.Log.info(`© ${new Date().getFullYear()} The Remotion AG`);
15
12
  log_1.Log.info();
16
13
  log_1.Log.info('Available commands:');
17
14
  log_1.Log.info('');
18
- log_1.Log.info('remotion studio <entry-point.ts>');
19
- log_1.Log.info(chalk_1.chalk.gray('Start the Remotion studio.'));
20
- printFlags([['--props', 'Pass input props as filename or as JSON']]);
21
- log_1.Log.info();
22
- log_1.Log.info('remotion render <entry-point.ts> <comp-id> <output-file.mp4>');
23
- log_1.Log.info(chalk_1.chalk.gray('Render video, audio or an image sequence.'));
24
- printFlags([
25
- ['--props', 'Pass input props as filename or as JSON'],
26
- ['--concurrency', 'How many frames to render in parallel'],
27
- ['--image-format', 'Format to render the video/still in'],
28
- ['--pixel-format', 'Custom pixel format, see docs for available values'],
29
- ['--config', 'Custom location for a Remotion config file'],
30
- ['--jpeg-quality', 'Quality for rendered frames, JPEG only, 0-100'],
31
- ['--overwrite', 'Overwrite if file exists, default true'],
32
- ['--sequence', 'Output as an image sequence'],
33
- ['--codec', 'Video of audio codec'],
34
- ['--audio-bitrate', 'Customize the output audio bitrate'],
35
- ['--video-bitrate', 'Customize the output video bitrate'],
36
- ['--crf', 'FFMPEG CRF value, controls quality, see docs for info'],
37
- ['--browser-executable', 'Custom path for browser executable'],
38
- ['--frames', 'Render a portion or a still of a video'],
39
- ['--bundle-cache', 'Cache webpack bundle, boolean, default true'],
40
- ['--log', 'Log level, "error", "warning", "verbose", "info" (default)'],
41
- ['--port', 'Custom port to use for the HTTP server'],
42
- ['--env-file', 'Specify a location for a dotenv file'],
43
- ]);
44
- log_1.Log.info();
45
- log_1.Log.info('remotion still <entry-point.ts> <comp-id> <still.png>');
46
- log_1.Log.info(chalk_1.chalk.gray('Render a still frame and save it as an image.'));
47
- printFlags([
48
- ['--frame', 'Which frame to render (default 0)'],
49
- ['--image-format', 'Format to render the video/still in'],
50
- ['--props', 'Pass input props as filename or as JSON'],
51
- ['--config', 'Custom location for a Remotion config file'],
52
- ['--jpeg-quality', 'Quality for rendered frames, JPEG only, 0-100'],
53
- ['--overwrite', 'Overwrite if file exists, default true'],
54
- ['--browser-executable', 'Custom path for browser executable'],
55
- ['--bundle-cache', 'Cache webpack bundle, boolean, default true'],
56
- ['--log', 'Log level, "error", "warning", "verbose", "info" (default)'],
57
- ['--port', 'Custom port to use for the HTTP server'],
58
- ['--env-file', 'Specify a location for a dotenv file'],
59
- ]);
60
- log_1.Log.info();
61
- log_1.Log.info('remotion compositions <index-file.ts>');
62
- log_1.Log.info(chalk_1.chalk.gray('Prints the available compositions.'));
63
- log_1.Log.info();
64
- log_1.Log.info('remotion benchmark <index-file.ts> <list-of-compositions>');
65
- log_1.Log.info(chalk_1.chalk.gray('Benchmarks rendering a composition. Same options as for render.'));
66
- log_1.Log.info();
67
- log_1.Log.info('remotion ' + versions_1.VERSIONS_COMMAND);
68
- log_1.Log.info(chalk_1.chalk.gray('Prints and validates versions of all Remotion packages.'));
69
- log_1.Log.info();
70
- log_1.Log.info('remotion upgrade');
71
- log_1.Log.info(chalk_1.chalk.gray('Ensure Remotion is on the newest version.'));
72
- printFlags([
73
- [
74
- '--package-manager',
75
- 'Force a specific package manager, defaults to use from lockfile',
76
- ],
77
- ]);
15
+ log_1.Log.info(chalk_1.chalk.blue('remotion studio') + chalk_1.chalk.gray(' <entry-point.ts>'));
16
+ log_1.Log.info('Start the Remotion studio.');
17
+ log_1.Log.info(chalk_1.chalk.gray('https://www.remotion.dev/docs/cli/studio'));
18
+ log_1.Log.info();
19
+ log_1.Log.info(chalk_1.chalk.blue('remotion render') +
20
+ chalk_1.chalk.gray(' <entry-point.ts> <comp-id> <output-file.mp4>'));
21
+ log_1.Log.info('Render video, audio or an image sequence.');
22
+ log_1.Log.info(chalk_1.chalk.gray('https://www.remotion.dev/docs/cli/render'));
23
+ log_1.Log.info();
24
+ log_1.Log.info(chalk_1.chalk.blue('remotion still') +
25
+ chalk_1.chalk.gray(' <entry-point.ts> <comp-id> <still.png>'));
26
+ log_1.Log.info('Render a still frame and save it as an image.');
27
+ log_1.Log.info(chalk_1.chalk.gray('https://www.remotion.dev/docs/cli/still'));
28
+ log_1.Log.info();
29
+ log_1.Log.info(chalk_1.chalk.blue('remotion compositions') + chalk_1.chalk.gray(' <index-file.ts>'));
30
+ log_1.Log.info('Prints the available compositions.');
31
+ log_1.Log.info(chalk_1.chalk.gray('https://www.remotion.dev/docs/cli/compositions'));
32
+ log_1.Log.info();
33
+ log_1.Log.info(chalk_1.chalk.blue('remotion benchmark') +
34
+ chalk_1.chalk.gray(' <index-file.ts> <list-of-compositions>'));
35
+ log_1.Log.info('Benchmarks rendering a composition. Same options as for render.');
36
+ log_1.Log.info(chalk_1.chalk.gray('https://www.remotion.dev/docs/cli/benchmark'));
37
+ log_1.Log.info();
38
+ log_1.Log.info(chalk_1.chalk.blue('remotion ' + versions_1.VERSIONS_COMMAND));
39
+ log_1.Log.info('Prints and validates versions of all Remotion packages.');
40
+ log_1.Log.info(chalk_1.chalk.gray('https://www.remotion.dev/docs/cli/versions'));
41
+ log_1.Log.info();
42
+ log_1.Log.info(chalk_1.chalk.blue('remotion ' + gpu_1.GPU_COMMAND));
43
+ log_1.Log.info('Prints information about how Chrome uses the CPU.');
44
+ log_1.Log.info(chalk_1.chalk.gray('https://www.remotion.dev/docs/cli/gpu'));
45
+ log_1.Log.info();
46
+ log_1.Log.info(chalk_1.chalk.blue('remotion upgrade'));
47
+ log_1.Log.info('Ensure Remotion is on the newest version.');
48
+ log_1.Log.info(chalk_1.chalk.gray('https://www.remotion.dev/docs/cli/upgrade'));
78
49
  log_1.Log.info();
79
50
  log_1.Log.info('Visit https://www.remotion.dev/docs/cli for browsable CLI documentation.');
80
51
  };
@@ -25,10 +25,11 @@ export declare const makeBundlingAndCopyProgress: ({ bundling, copying, symLinks
25
25
  copying: CopyingState;
26
26
  symLinks: SymbolicLinksState;
27
27
  }, bundlingStep: number, steps: number) => string;
28
- export declare const makeRenderingAndStitchingProgress: ({ prog, steps, stitchingStep, }: {
28
+ export declare const makeRenderingAndStitchingProgress: ({ prog, steps, stitchingStep, isUsingParallelEncoding, }: {
29
29
  prog: AggregateRenderProgress;
30
30
  steps: number;
31
31
  stitchingStep: number;
32
+ isUsingParallelEncoding: boolean;
32
33
  }) => {
33
34
  output: string;
34
35
  progress: number;
@@ -122,7 +122,7 @@ const makeRenderingProgress = ({ frames, totalFrames, steps, concurrency, doneIn
122
122
  .filter(truthy_1.truthy)
123
123
  .join(' ');
124
124
  };
125
- const makeStitchingProgress = ({ stitchingProgress, steps, stitchingStep, }) => {
125
+ const makeStitchingProgress = ({ stitchingProgress, steps, stitchingStep, isUsingParallelEncoding, }) => {
126
126
  const { frames, totalFrames, doneIn, stage, codec } = stitchingProgress;
127
127
  const progress = frames / totalFrames;
128
128
  const mediaType = codec === 'gif'
@@ -133,7 +133,7 @@ const makeStitchingProgress = ({ stitchingProgress, steps, stitchingStep, }) =>
133
133
  return [
134
134
  `(${stitchingStep + 1}/${steps})`,
135
135
  (0, make_progress_bar_1.makeProgressBar)(progress),
136
- stage === 'muxing' && renderer_1.RenderInternals.canUseParallelEncoding(codec)
136
+ stage === 'muxing' && isUsingParallelEncoding
137
137
  ? `${doneIn ? 'Muxed' : 'Muxing'} ${mediaType}`
138
138
  : `${doneIn ? 'Encoded' : 'Encoding'} ${mediaType}`,
139
139
  doneIn === null ? `${frames}/${totalFrames}` : chalk_1.chalk.gray(`${doneIn}ms`),
@@ -141,7 +141,7 @@ const makeStitchingProgress = ({ stitchingProgress, steps, stitchingStep, }) =>
141
141
  .filter(truthy_1.truthy)
142
142
  .join(' ');
143
143
  };
144
- const makeRenderingAndStitchingProgress = ({ prog, steps, stitchingStep, }) => {
144
+ const makeRenderingAndStitchingProgress = ({ prog, steps, stitchingStep, isUsingParallelEncoding, }) => {
145
145
  const { rendering, stitching, downloads, bundling } = prog;
146
146
  const output = [
147
147
  rendering ? makeRenderingProgress(rendering) : null,
@@ -152,6 +152,7 @@ const makeRenderingAndStitchingProgress = ({ prog, steps, stitchingStep, }) => {
152
152
  stitchingProgress: stitching,
153
153
  steps,
154
154
  stitchingStep,
155
+ isUsingParallelEncoding,
155
156
  }),
156
157
  ]
157
158
  .filter(truthy_1.truthy)
@@ -62,6 +62,7 @@ const renderVideoFlow = async ({ remotionRoot, fullEntryPoint, indent, logLevel,
62
62
  viewport: null,
63
63
  logLevel,
64
64
  });
65
+ let isUsingParallelEncoding = false;
65
66
  const updatesDontOverwrite = (0, should_use_non_overlaying_logger_1.shouldUseNonOverlayingLogger)({ logLevel });
66
67
  const renderProgress = (0, progress_bar_1.createOverwriteableCliOutput)({
67
68
  quiet,
@@ -96,6 +97,7 @@ const renderVideoFlow = async ({ remotionRoot, fullEntryPoint, indent, logLevel,
96
97
  prog: aggregateRenderProgress,
97
98
  steps: steps.length,
98
99
  stitchingStep: steps.indexOf('stitching'),
100
+ isUsingParallelEncoding,
99
101
  });
100
102
  onProgress({ message, value: progress, ...aggregateRenderProgress });
101
103
  if (printToConsole) {
@@ -127,6 +129,7 @@ const renderVideoFlow = async ({ remotionRoot, fullEntryPoint, indent, logLevel,
127
129
  logLevel,
128
130
  updateRenderProgress,
129
131
  updatesDontOverwrite,
132
+ isUsingParallelEncoding,
130
133
  });
131
134
  const puppeteerInstance = await browserInstance;
132
135
  addCleanupCallback(() => puppeteerInstance.close(false, logLevel, indent));
@@ -165,6 +168,7 @@ const renderVideoFlow = async ({ remotionRoot, fullEntryPoint, indent, logLevel,
165
168
  downloadName: null,
166
169
  outName: (0, user_passed_output_location_1.getUserPassedOutputLocation)(argsAfterComposition, outputLocationFromUI),
167
170
  uiCodec,
171
+ compositionCodec: config.defaultCodec,
168
172
  });
169
173
  renderer_1.RenderInternals.validateEvenDimensionsWithCodec({
170
174
  width: config.width,
@@ -217,7 +221,9 @@ const renderVideoFlow = async ({ remotionRoot, fullEntryPoint, indent, logLevel,
217
221
  renderingProgress.frames = rendered;
218
222
  updateRenderProgress({ newline: false, printToConsole: true });
219
223
  },
220
- onStart: () => undefined,
224
+ onStart: ({ parallelEncoding }) => {
225
+ isUsingParallelEncoding = parallelEncoding;
226
+ },
221
227
  onDownload,
222
228
  cancelSignal: cancelSignal !== null && cancelSignal !== void 0 ? cancelSignal : undefined,
223
229
  outputDir,
@@ -246,6 +252,7 @@ const renderVideoFlow = async ({ remotionRoot, fullEntryPoint, indent, logLevel,
246
252
  data: config.props,
247
253
  }).serializedString,
248
254
  offthreadVideoCacheSizeInBytes,
255
+ parallelEncodingEnabled: isUsingParallelEncoding,
249
256
  });
250
257
  updateRenderProgress({ newline: true, printToConsole: true });
251
258
  log_1.Log.infoAdvanced({ indent, logLevel }, chalk_1.chalk.blue(`▶ ${absoluteOutputFile}`));