@remotion/renderer 4.0.149 → 4.0.151

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 CHANGED
@@ -250,7 +250,7 @@ dependencies = [
250
250
  [[package]]
251
251
  name = "ffmpeg-next"
252
252
  version = "6.0.0"
253
- source = "git+https://github.com/remotion-dev/rust-ffmpeg?rev=4b95450bfe5fb3165f8d2140f0c36ea7c1d1d4a0#4b95450bfe5fb3165f8d2140f0c36ea7c1d1d4a0"
253
+ source = "git+https://github.com/remotion-dev/rust-ffmpeg?rev=675dd103871633dd0ad8a3a2ca7f12e9a42edec1#675dd103871633dd0ad8a3a2ca7f12e9a42edec1"
254
254
  dependencies = [
255
255
  "bitflags",
256
256
  "ffmpeg-sys-next",
@@ -260,7 +260,7 @@ dependencies = [
260
260
  [[package]]
261
261
  name = "ffmpeg-sys-next"
262
262
  version = "6.0.1"
263
- source = "git+https://github.com/remotion-dev/rust-ffmpeg-sys?rev=d22035366ee5ffbfdf95593f22d7b517f09bd29c#d22035366ee5ffbfdf95593f22d7b517f09bd29c"
263
+ source = "git+https://github.com/remotion-dev/rust-ffmpeg-sys?rev=7da943df1ea7be22868b3f8e236b6a9f5b8c1559#7da943df1ea7be22868b3f8e236b6a9f5b8c1559"
264
264
  dependencies = [
265
265
  "bindgen",
266
266
  "cc",
package/Cargo.toml CHANGED
@@ -19,7 +19,7 @@ image = "0.23.7"
19
19
  arboard = "3.2.0"
20
20
  sysinfo = "0.30.7"
21
21
  mp4 = {git = "https://github.com/jonnyburger/mp4-rust", rev = "92ba375738cc2f05a4d754e1f968cf2e97d06641"}
22
- ffmpeg-next = {git = "https://github.com/remotion-dev/rust-ffmpeg", rev ="4b95450bfe5fb3165f8d2140f0c36ea7c1d1d4a0"}
22
+ ffmpeg-next = {git = "https://github.com/remotion-dev/rust-ffmpeg", rev ="675dd103871633dd0ad8a3a2ca7f12e9a42edec1"}
23
23
 
24
24
  [[bin]]
25
25
  name = "remotion"
package/dist/client.d.ts CHANGED
@@ -22,6 +22,7 @@ export declare const BrowserSafeApis: {
22
22
  readonly 'h264-mkv': readonly ["pcm-16", "mp3"];
23
23
  readonly 'h264-ts': readonly ["pcm-16", "aac"];
24
24
  readonly aac: readonly ["aac", "pcm-16"];
25
+ readonly avi: readonly [];
25
26
  readonly gif: readonly [];
26
27
  readonly h265: readonly ["aac", "pcm-16"];
27
28
  readonly mp3: readonly ["mp3", "pcm-16"];
@@ -466,19 +467,19 @@ export declare const BrowserSafeApis: {
466
467
  cliFlag: "gl";
467
468
  docLink: string;
468
469
  name: string;
469
- type: "angle" | "swangle" | "egl" | "swiftshader" | "vulkan" | "angle-egl" | null;
470
+ type: "swangle" | "angle" | "egl" | "swiftshader" | "vulkan" | "angle-egl" | null;
470
471
  ssrName: string;
471
472
  description: () => import("react/jsx-runtime").JSX.Element;
472
473
  getValue: ({ commandLine }: {
473
474
  commandLine: Record<string, unknown>;
474
475
  }) => {
475
- value: "angle" | "swangle" | "egl" | "swiftshader" | "vulkan" | "angle-egl";
476
+ value: "swangle" | "angle" | "egl" | "swiftshader" | "vulkan" | "angle-egl";
476
477
  source: string;
477
478
  } | {
478
479
  value: null;
479
480
  source: string;
480
481
  };
481
- setConfig: (value: "angle" | "swangle" | "egl" | "swiftshader" | "vulkan" | "angle-egl" | null) => void;
482
+ setConfig: (value: "swangle" | "angle" | "egl" | "swiftshader" | "vulkan" | "angle-egl" | null) => void;
482
483
  };
483
484
  enableLambdaInsights: {
484
485
  name: string;
@@ -603,17 +604,17 @@ export declare const BrowserSafeApis: {
603
604
  description: () => import("react/jsx-runtime").JSX.Element;
604
605
  ssrName: "x264Preset";
605
606
  docLink: string;
606
- type: "medium" | "ultrafast" | "superfast" | "veryfast" | "faster" | "fast" | "slow" | "slower" | "veryslow" | "placebo" | null;
607
+ type: "ultrafast" | "superfast" | "veryfast" | "faster" | "fast" | "medium" | "slow" | "slower" | "veryslow" | "placebo" | null;
607
608
  getValue: ({ commandLine }: {
608
609
  commandLine: Record<string, unknown>;
609
610
  }) => {
610
- value: "medium" | "ultrafast" | "superfast" | "veryfast" | "faster" | "fast" | "slow" | "slower" | "veryslow" | "placebo";
611
+ value: "ultrafast" | "superfast" | "veryfast" | "faster" | "fast" | "medium" | "slow" | "slower" | "veryslow" | "placebo";
611
612
  source: string;
612
613
  } | {
613
614
  value: null;
614
615
  source: string;
615
616
  };
616
- setConfig: (profile: "medium" | "ultrafast" | "superfast" | "veryfast" | "faster" | "fast" | "slow" | "slower" | "veryslow" | "placebo" | null) => void;
617
+ setConfig: (profile: "ultrafast" | "superfast" | "veryfast" | "faster" | "fast" | "medium" | "slow" | "slower" | "veryslow" | "placebo" | null) => void;
617
618
  };
618
619
  logLevelOption: {
619
620
  cliFlag: "log";
@@ -863,17 +864,17 @@ export declare const BrowserSafeApis: {
863
864
  description: () => import("react/jsx-runtime").JSX.Element;
864
865
  ssrName: "x264Preset";
865
866
  docLink: string;
866
- type: "medium" | "ultrafast" | "superfast" | "veryfast" | "faster" | "fast" | "slow" | "slower" | "veryslow" | "placebo" | null;
867
+ type: "ultrafast" | "superfast" | "veryfast" | "faster" | "fast" | "medium" | "slow" | "slower" | "veryslow" | "placebo" | null;
867
868
  getValue: ({ commandLine }: {
868
869
  commandLine: Record<string, unknown>;
869
870
  }) => {
870
- value: "medium" | "ultrafast" | "superfast" | "veryfast" | "faster" | "fast" | "slow" | "slower" | "veryslow" | "placebo";
871
+ value: "ultrafast" | "superfast" | "veryfast" | "faster" | "fast" | "medium" | "slow" | "slower" | "veryslow" | "placebo";
871
872
  source: string;
872
873
  } | {
873
874
  value: null;
874
875
  source: string;
875
876
  };
876
- setConfig: (profile: "medium" | "ultrafast" | "superfast" | "veryfast" | "faster" | "fast" | "slow" | "slower" | "veryslow" | "placebo" | null) => void;
877
+ setConfig: (profile: "ultrafast" | "superfast" | "veryfast" | "faster" | "fast" | "medium" | "slow" | "slower" | "veryslow" | "placebo" | null) => void;
877
878
  };
878
879
  readonly audioBitrate: {
879
880
  name: string;
@@ -1585,17 +1586,17 @@ export declare const BrowserSafeApis: {
1585
1586
  description: () => import("react/jsx-runtime").JSX.Element;
1586
1587
  ssrName: "x264Preset";
1587
1588
  docLink: string;
1588
- type: "medium" | "ultrafast" | "superfast" | "veryfast" | "faster" | "fast" | "slow" | "slower" | "veryslow" | "placebo" | null;
1589
+ type: "ultrafast" | "superfast" | "veryfast" | "faster" | "fast" | "medium" | "slow" | "slower" | "veryslow" | "placebo" | null;
1589
1590
  getValue: ({ commandLine }: {
1590
1591
  commandLine: Record<string, unknown>;
1591
1592
  }) => {
1592
- value: "medium" | "ultrafast" | "superfast" | "veryfast" | "faster" | "fast" | "slow" | "slower" | "veryslow" | "placebo";
1593
+ value: "ultrafast" | "superfast" | "veryfast" | "faster" | "fast" | "medium" | "slow" | "slower" | "veryslow" | "placebo";
1593
1594
  source: string;
1594
1595
  } | {
1595
1596
  value: null;
1596
1597
  source: string;
1597
1598
  };
1598
- setConfig: (profile: "medium" | "ultrafast" | "superfast" | "veryfast" | "faster" | "fast" | "slow" | "slower" | "veryslow" | "placebo" | null) => void;
1599
+ setConfig: (profile: "ultrafast" | "superfast" | "veryfast" | "faster" | "fast" | "medium" | "slow" | "slower" | "veryslow" | "placebo" | null) => void;
1599
1600
  };
1600
1601
  readonly encodingMaxRate: {
1601
1602
  name: string;
@@ -1951,17 +1952,17 @@ export declare const BrowserSafeApis: {
1951
1952
  description: () => import("react/jsx-runtime").JSX.Element;
1952
1953
  ssrName: "x264Preset";
1953
1954
  docLink: string;
1954
- type: "medium" | "ultrafast" | "superfast" | "veryfast" | "faster" | "fast" | "slow" | "slower" | "veryslow" | "placebo" | null;
1955
+ type: "ultrafast" | "superfast" | "veryfast" | "faster" | "fast" | "medium" | "slow" | "slower" | "veryslow" | "placebo" | null;
1955
1956
  getValue: ({ commandLine }: {
1956
1957
  commandLine: Record<string, unknown>;
1957
1958
  }) => {
1958
- value: "medium" | "ultrafast" | "superfast" | "veryfast" | "faster" | "fast" | "slow" | "slower" | "veryslow" | "placebo";
1959
+ value: "ultrafast" | "superfast" | "veryfast" | "faster" | "fast" | "medium" | "slow" | "slower" | "veryslow" | "placebo";
1959
1960
  source: string;
1960
1961
  } | {
1961
1962
  value: null;
1962
1963
  source: string;
1963
1964
  };
1964
- setConfig: (profile: "medium" | "ultrafast" | "superfast" | "veryfast" | "faster" | "fast" | "slow" | "slower" | "veryslow" | "placebo" | null) => void;
1965
+ setConfig: (profile: "ultrafast" | "superfast" | "veryfast" | "faster" | "fast" | "medium" | "slow" | "slower" | "veryslow" | "placebo" | null) => void;
1965
1966
  };
1966
1967
  readonly encodingMaxRate: {
1967
1968
  name: string;
@@ -32,8 +32,6 @@ const combineVideoStreams = async ({ fps, codec, filelistDir, numberOfGifLoops,
32
32
  '-an',
33
33
  '-c:v',
34
34
  encoder,
35
- encoder === 'gif' ? '-filter_complex' : null,
36
- encoder === 'gif' ? 'split[v],palettegen,[v]paletteuse' : null,
37
35
  codec === 'h264' ? '-movflags' : null,
38
36
  codec === 'h264' ? 'faststart' : null,
39
37
  addRemotionMetadata ? `-metadata` : null,
package/dist/crf.js CHANGED
@@ -2,54 +2,46 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.validateQualitySettings = exports.getValidCrfRanges = exports.getDefaultCrfForCodec = void 0;
4
4
  const audio_codec_1 = require("./options/audio-codec");
5
+ const defaultCrfMap = {
6
+ h264: 18,
7
+ h265: 23,
8
+ vp8: 9,
9
+ vp9: 28,
10
+ prores: 0,
11
+ gif: 0,
12
+ 'h264-mkv': 18,
13
+ 'h264-ts': 18,
14
+ aac: 0,
15
+ mp3: 0,
16
+ wav: 0,
17
+ };
5
18
  const getDefaultCrfForCodec = (codec) => {
6
- if ((0, audio_codec_1.isAudioCodec)(codec)) {
7
- return 0;
8
- }
9
- if (codec === 'h264' || codec === 'h264-mkv' || codec === 'h264-ts') {
10
- return 18; // FFMPEG default 23
11
- }
12
- if (codec === 'h265') {
13
- return 23; // FFMPEG default 28
14
- }
15
- if (codec === 'vp8') {
16
- return 9; // FFMPEG default 10
17
- }
18
- if (codec === 'vp9') {
19
- return 28; // FFMPEG recommendation 31
20
- }
21
- if (codec === 'prores') {
22
- return 0;
23
- }
24
- if (codec === 'gif') {
25
- return 0;
19
+ const val = defaultCrfMap[codec];
20
+ if (val === undefined) {
21
+ throw new TypeError(`Got unexpected codec "${codec}"`);
26
22
  }
27
- throw new TypeError(`Got unexpected codec "${codec}"`);
23
+ return val;
28
24
  };
29
25
  exports.getDefaultCrfForCodec = getDefaultCrfForCodec;
26
+ const crfRanges = {
27
+ h264: [1, 51],
28
+ h265: [0, 51],
29
+ vp8: [4, 63],
30
+ vp9: [0, 63],
31
+ prores: [0, 0],
32
+ gif: [0, 0],
33
+ 'h264-mkv': [1, 51],
34
+ 'h264-ts': [1, 51],
35
+ aac: [0, 0],
36
+ mp3: [0, 0],
37
+ wav: [0, 0],
38
+ };
30
39
  const getValidCrfRanges = (codec) => {
31
- if ((0, audio_codec_1.isAudioCodec)(codec)) {
32
- return [0, 0];
33
- }
34
- if (codec === 'prores') {
35
- return [0, 0];
36
- }
37
- if (codec === 'gif') {
38
- return [0, 0];
39
- }
40
- if (codec === 'h264' || codec === 'h264-mkv' || codec === 'h264-ts') {
41
- return [1, 51];
42
- }
43
- if (codec === 'h265') {
44
- return [0, 51];
45
- }
46
- if (codec === 'vp8') {
47
- return [4, 63];
48
- }
49
- if (codec === 'vp9') {
50
- return [0, 63];
40
+ const val = crfRanges[codec];
41
+ if (val === undefined) {
42
+ throw new TypeError(`Got unexpected codec "${codec}"`);
51
43
  }
52
- throw new TypeError(`Got unexpected codec "${codec}"`);
44
+ return val;
53
45
  };
54
46
  exports.getValidCrfRanges = getValidCrfRanges;
55
47
  const validateQualitySettings = ({ codec, crf, videoBitrate, encodingMaxRate, encodingBufferSize, }) => {
@@ -1,29 +1,20 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.getCodecName = void 0;
4
- const audio_codec_1 = require("./options/audio-codec");
4
+ const map = {
5
+ h264: 'libx264',
6
+ h265: 'libx265',
7
+ vp8: 'libvpx',
8
+ vp9: 'libvpx-vp9',
9
+ prores: 'prores_ks',
10
+ gif: 'gif',
11
+ mp3: null,
12
+ aac: null,
13
+ wav: null,
14
+ 'h264-mkv': 'libx264',
15
+ 'h264-ts': 'libx264',
16
+ };
5
17
  const getCodecName = (codec) => {
6
- if ((0, audio_codec_1.isAudioCodec)(codec)) {
7
- return null;
8
- }
9
- if (codec === 'h264' || codec === 'h264-mkv' || codec === 'h264-ts') {
10
- return 'libx264';
11
- }
12
- if (codec === 'h265') {
13
- return 'libx265';
14
- }
15
- if (codec === 'vp8') {
16
- return 'libvpx';
17
- }
18
- if (codec === 'vp9') {
19
- return 'libvpx-vp9';
20
- }
21
- if (codec === 'prores') {
22
- return 'prores_ks';
23
- }
24
- if (codec === 'gif') {
25
- return 'gif';
26
- }
27
- throw new TypeError(`Cannot find FFMPEG codec for ${codec}`);
18
+ return map[codec];
28
19
  };
29
20
  exports.getCodecName = getCodecName;
package/dist/index.d.ts CHANGED
@@ -69,10 +69,10 @@ export declare const RenderInternals: {
69
69
  width: number;
70
70
  height: number;
71
71
  scale: number;
72
- codec: "aac" | "mp3" | "wav" | "h264" | "h265" | "vp8" | "vp9" | "prores" | "h264-mkv" | "h264-ts" | "gif";
72
+ codec: "h264" | "h265" | "vp8" | "vp9" | "mp3" | "aac" | "wav" | "prores" | "h264-mkv" | "h264-ts" | "gif";
73
73
  wantsImageSequence: boolean;
74
74
  }) => void;
75
- getFileExtensionFromCodec: <T extends "aac" | "mp3" | "wav" | "h264" | "h265" | "vp8" | "vp9" | "prores" | "h264-mkv" | "h264-ts" | "gif">(codec: T, audioCodec: "pcm-16" | "aac" | "mp3" | "opus" | null) => import("./file-extensions").FileExtension;
75
+ getFileExtensionFromCodec: <T extends "h264" | "h265" | "vp8" | "vp9" | "mp3" | "aac" | "wav" | "prores" | "h264-mkv" | "h264-ts" | "gif">(codec: T, audioCodec: "mp3" | "aac" | "pcm-16" | "opus" | null) => import("./file-extensions").FileExtension;
76
76
  tmpDir: (str: string) => string;
77
77
  deleteDirectory: (directory: string) => void;
78
78
  isServeUrl: (potentialUrl: string) => boolean;
@@ -129,7 +129,7 @@ export declare const RenderInternals: {
129
129
  };
130
130
  registerErrorSymbolicationLock: () => number;
131
131
  unlockErrorSymbolicationLock: (id: number) => void;
132
- canUseParallelEncoding: (codec: "aac" | "mp3" | "wav" | "h264" | "h265" | "vp8" | "vp9" | "prores" | "h264-mkv" | "h264-ts" | "gif") => boolean;
132
+ canUseParallelEncoding: (codec: "h264" | "h265" | "vp8" | "vp9" | "mp3" | "aac" | "wav" | "prores" | "h264-mkv" | "h264-ts" | "gif") => boolean;
133
133
  mimeContentType: typeof mimeContentType;
134
134
  mimeLookup: typeof mimeLookup;
135
135
  validateConcurrency: ({ setting, value, checkIfValidForCurrentMachine, }: {
@@ -146,8 +146,8 @@ export declare const RenderInternals: {
146
146
  DEFAULT_PIXEL_FORMAT: "yuv420p" | "yuva420p" | "yuv422p" | "yuv444p" | "yuv420p10le" | "yuv422p10le" | "yuv444p10le" | "yuva444p10le";
147
147
  validateJpegQuality: (q: unknown) => void;
148
148
  DEFAULT_TIMEOUT: number;
149
- DEFAULT_CODEC: "aac" | "mp3" | "wav" | "h264" | "h265" | "vp8" | "vp9" | "prores" | "h264-mkv" | "h264-ts" | "gif";
150
- isAudioCodec: (codec: "aac" | "mp3" | "wav" | "h264" | "h265" | "vp8" | "vp9" | "prores" | "h264-mkv" | "h264-ts" | "gif" | null | undefined) => boolean;
149
+ DEFAULT_CODEC: "h264" | "h265" | "vp8" | "vp9" | "mp3" | "aac" | "wav" | "prores" | "h264-mkv" | "h264-ts" | "gif";
150
+ isAudioCodec: (codec: "h264" | "h265" | "vp8" | "vp9" | "mp3" | "aac" | "wav" | "prores" | "h264-mkv" | "h264-ts" | "gif" | null | undefined) => boolean;
151
151
  logLevels: readonly ["verbose", "info", "warn", "error"];
152
152
  isEqualOrBelowLogLevel: (currentLevel: "verbose" | "info" | "warn" | "error", level: "verbose" | "info" | "warn" | "error") => boolean;
153
153
  isValidLogLevel: (level: string) => boolean;
@@ -164,10 +164,10 @@ export declare const RenderInternals: {
164
164
  output: string;
165
165
  onProgress: (p: number) => void;
166
166
  numberOfFrames: number;
167
- codec: "aac" | "mp3" | "wav" | "h264" | "h265" | "vp8" | "vp9" | "prores" | "h264-mkv" | "h264-ts" | "gif";
167
+ codec: "h264" | "h265" | "vp8" | "vp9" | "mp3" | "aac" | "wav" | "prores" | "h264-mkv" | "h264-ts" | "gif";
168
168
  fps: number;
169
169
  numberOfGifLoops: number | null;
170
- resolvedAudioCodec: "pcm-16" | "aac" | "mp3" | "opus" | null;
170
+ resolvedAudioCodec: "mp3" | "aac" | "pcm-16" | "opus" | null;
171
171
  audioBitrate: string | null;
172
172
  indent: boolean;
173
173
  logLevel: "verbose" | "info" | "warn" | "error";
@@ -181,14 +181,14 @@ export declare const RenderInternals: {
181
181
  getMinConcurrency: () => number;
182
182
  getMaxConcurrency: () => number;
183
183
  getDefaultAudioCodec: ({ codec, preferLossless, }: {
184
- codec: "aac" | "mp3" | "wav" | "h264" | "h265" | "vp8" | "vp9" | "prores" | "h264-mkv" | "h264-ts" | "gif";
184
+ codec: "h264" | "h265" | "vp8" | "vp9" | "mp3" | "aac" | "wav" | "prores" | "h264-mkv" | "h264-ts" | "gif";
185
185
  preferLossless: boolean;
186
- }) => "pcm-16" | "aac" | "mp3" | "opus" | null;
186
+ }) => "mp3" | "aac" | "pcm-16" | "opus" | null;
187
187
  defaultFileExtensionMap: {
188
- aac: {
188
+ h264: {
189
189
  default: import("./file-extensions").FileExtension;
190
190
  forAudioCodec: {
191
- "pcm-16": {
191
+ mp3: {
192
192
  possible: import("./file-extensions").FileExtension[];
193
193
  default: import("./file-extensions").FileExtension;
194
194
  };
@@ -196,94 +196,94 @@ export declare const RenderInternals: {
196
196
  possible: import("./file-extensions").FileExtension[];
197
197
  default: import("./file-extensions").FileExtension;
198
198
  };
199
+ "pcm-16": {
200
+ possible: import("./file-extensions").FileExtension[];
201
+ default: import("./file-extensions").FileExtension;
202
+ };
199
203
  };
200
204
  };
201
- mp3: {
205
+ h265: {
202
206
  default: import("./file-extensions").FileExtension;
203
207
  forAudioCodec: {
204
- "pcm-16": {
208
+ aac: {
205
209
  possible: import("./file-extensions").FileExtension[];
206
210
  default: import("./file-extensions").FileExtension;
207
211
  };
208
- mp3: {
212
+ "pcm-16": {
209
213
  possible: import("./file-extensions").FileExtension[];
210
214
  default: import("./file-extensions").FileExtension;
211
215
  };
212
216
  };
213
217
  };
214
- wav: {
218
+ vp8: {
215
219
  default: import("./file-extensions").FileExtension;
216
220
  forAudioCodec: {
217
221
  "pcm-16": {
218
222
  possible: import("./file-extensions").FileExtension[];
219
223
  default: import("./file-extensions").FileExtension;
220
224
  };
225
+ opus: {
226
+ possible: import("./file-extensions").FileExtension[];
227
+ default: import("./file-extensions").FileExtension;
228
+ };
221
229
  };
222
230
  };
223
- h264: {
231
+ vp9: {
224
232
  default: import("./file-extensions").FileExtension;
225
233
  forAudioCodec: {
226
234
  "pcm-16": {
227
235
  possible: import("./file-extensions").FileExtension[];
228
236
  default: import("./file-extensions").FileExtension;
229
237
  };
230
- aac: {
231
- possible: import("./file-extensions").FileExtension[];
232
- default: import("./file-extensions").FileExtension;
233
- };
234
- mp3: {
238
+ opus: {
235
239
  possible: import("./file-extensions").FileExtension[];
236
240
  default: import("./file-extensions").FileExtension;
237
241
  };
238
242
  };
239
243
  };
240
- h265: {
244
+ mp3: {
241
245
  default: import("./file-extensions").FileExtension;
242
246
  forAudioCodec: {
243
- "pcm-16": {
247
+ mp3: {
244
248
  possible: import("./file-extensions").FileExtension[];
245
249
  default: import("./file-extensions").FileExtension;
246
250
  };
247
- aac: {
251
+ "pcm-16": {
248
252
  possible: import("./file-extensions").FileExtension[];
249
253
  default: import("./file-extensions").FileExtension;
250
254
  };
251
255
  };
252
256
  };
253
- vp8: {
257
+ aac: {
254
258
  default: import("./file-extensions").FileExtension;
255
259
  forAudioCodec: {
256
- "pcm-16": {
260
+ aac: {
257
261
  possible: import("./file-extensions").FileExtension[];
258
262
  default: import("./file-extensions").FileExtension;
259
263
  };
260
- opus: {
264
+ "pcm-16": {
261
265
  possible: import("./file-extensions").FileExtension[];
262
266
  default: import("./file-extensions").FileExtension;
263
267
  };
264
268
  };
265
269
  };
266
- vp9: {
270
+ wav: {
267
271
  default: import("./file-extensions").FileExtension;
268
272
  forAudioCodec: {
269
273
  "pcm-16": {
270
274
  possible: import("./file-extensions").FileExtension[];
271
275
  default: import("./file-extensions").FileExtension;
272
276
  };
273
- opus: {
274
- possible: import("./file-extensions").FileExtension[];
275
- default: import("./file-extensions").FileExtension;
276
- };
277
277
  };
278
278
  };
279
279
  prores: {
280
280
  default: import("./file-extensions").FileExtension;
281
281
  forAudioCodec: {
282
- "pcm-16": {
282
+ aac: {
283
283
  possible: import("./file-extensions").FileExtension[];
284
284
  default: import("./file-extensions").FileExtension;
285
285
  };
286
- aac: {
286
+ "pcm-16": {
287
287
  possible: import("./file-extensions").FileExtension[];
288
288
  default: import("./file-extensions").FileExtension;
289
289
  };
@@ -292,11 +292,11 @@ export declare const RenderInternals: {
292
292
  "h264-mkv": {
293
293
  default: import("./file-extensions").FileExtension;
294
294
  forAudioCodec: {
295
- "pcm-16": {
295
+ mp3: {
296
296
  possible: import("./file-extensions").FileExtension[];
297
297
  default: import("./file-extensions").FileExtension;
298
298
  };
299
- mp3: {
299
+ "pcm-16": {
300
300
  possible: import("./file-extensions").FileExtension[];
301
301
  default: import("./file-extensions").FileExtension;
302
302
  };
@@ -305,11 +305,11 @@ export declare const RenderInternals: {
305
305
  "h264-ts": {
306
306
  default: import("./file-extensions").FileExtension;
307
307
  forAudioCodec: {
308
- "pcm-16": {
308
+ aac: {
309
309
  possible: import("./file-extensions").FileExtension[];
310
310
  default: import("./file-extensions").FileExtension;
311
311
  };
312
- aac: {
312
+ "pcm-16": {
313
313
  possible: import("./file-extensions").FileExtension[];
314
314
  default: import("./file-extensions").FileExtension;
315
315
  };
@@ -325,6 +325,7 @@ export declare const RenderInternals: {
325
325
  readonly 'h264-mkv': readonly ["pcm-16", "mp3"];
326
326
  readonly 'h264-ts': readonly ["pcm-16", "aac"];
327
327
  readonly aac: readonly ["aac", "pcm-16"];
328
+ readonly avi: readonly [];
328
329
  readonly gif: readonly [];
329
330
  readonly h265: readonly ["aac", "pcm-16"];
330
331
  readonly mp3: readonly ["mp3", "pcm-16"];
@@ -333,10 +334,10 @@ export declare const RenderInternals: {
333
334
  readonly vp9: readonly ["opus", "pcm-16"];
334
335
  readonly wav: readonly ["pcm-16"];
335
336
  };
336
- makeFileExtensionMap: () => Record<string, ("aac" | "mp3" | "wav" | "h264" | "h265" | "vp8" | "vp9" | "prores" | "h264-mkv" | "h264-ts" | "gif")[]>;
337
- defaultCodecsForFileExtension: Record<import("./file-extensions").FileExtension, "aac" | "mp3" | "wav" | "h264" | "h265" | "vp8" | "vp9" | "prores" | "h264-mkv" | "h264-ts" | "gif">;
337
+ makeFileExtensionMap: () => Record<string, ("h264" | "h265" | "vp8" | "vp9" | "mp3" | "aac" | "wav" | "prores" | "h264-mkv" | "h264-ts" | "gif")[]>;
338
+ defaultCodecsForFileExtension: Record<import("./file-extensions").FileExtension, "h264" | "h265" | "vp8" | "vp9" | "mp3" | "aac" | "wav" | "prores" | "h264-mkv" | "h264-ts" | "gif">;
338
339
  getExecutablePath: ({ indent, logLevel, type, binariesDirectory, }: {
339
- type: "ffmpeg" | "ffprobe" | "compositor";
340
+ type: "compositor" | "ffmpeg" | "ffprobe";
340
341
  indent: boolean;
341
342
  logLevel: "verbose" | "info" | "warn" | "error";
342
343
  binariesDirectory: string | null;
@@ -770,21 +771,21 @@ export declare const RenderInternals: {
770
771
  hostsToTry: string[];
771
772
  };
772
773
  makeDownloadMap: () => import("./assets/download-map").DownloadMap;
773
- getExtensionFromAudioCodec: (audioCodec: "pcm-16" | "aac" | "mp3" | "opus") => "aac" | "mp3" | "opus" | "wav";
774
+ getExtensionFromAudioCodec: (audioCodec: "mp3" | "aac" | "pcm-16" | "opus") => "mp3" | "aac" | "wav" | "opus";
774
775
  makeFileExecutableIfItIsNot: (path: string) => void;
775
776
  resolveAudioCodec: ({ codec, setting, preferLossless, separateAudioTo, }: {
776
- setting: "pcm-16" | "aac" | "mp3" | "opus" | null;
777
- codec: "aac" | "mp3" | "wav" | "h264" | "h265" | "vp8" | "vp9" | "prores" | "h264-mkv" | "h264-ts" | "gif";
777
+ setting: "mp3" | "aac" | "pcm-16" | "opus" | null;
778
+ codec: "h264" | "h265" | "vp8" | "vp9" | "mp3" | "aac" | "wav" | "prores" | "h264-mkv" | "h264-ts" | "gif";
778
779
  preferLossless: boolean;
779
780
  separateAudioTo: string | null;
780
- }) => "pcm-16" | "aac" | "mp3" | "opus" | null;
781
+ }) => "mp3" | "aac" | "pcm-16" | "opus" | null;
781
782
  getShouldRenderAudio: ({ codec, assetsInfo, enforceAudioTrack, muted, }: {
782
- codec: "aac" | "mp3" | "wav" | "h264" | "h265" | "vp8" | "vp9" | "prores" | "h264-mkv" | "h264-ts" | "gif";
783
+ codec: "h264" | "h265" | "vp8" | "vp9" | "mp3" | "aac" | "wav" | "prores" | "h264-mkv" | "h264-ts" | "gif";
783
784
  assetsInfo: import("./assets/download-map").RenderAssetInfo | null;
784
785
  enforceAudioTrack: boolean;
785
786
  muted: boolean;
786
787
  }) => "yes" | "maybe" | "no";
787
- codecSupportsMedia: (codec: "aac" | "mp3" | "wav" | "h264" | "h265" | "vp8" | "vp9" | "prores" | "h264-mkv" | "h264-ts" | "gif") => {
788
+ codecSupportsMedia: (codec: "h264" | "h265" | "vp8" | "vp9" | "mp3" | "aac" | "wav" | "prores" | "h264-mkv" | "h264-ts" | "gif") => {
788
789
  video: boolean;
789
790
  audio: boolean;
790
791
  };
@@ -819,4 +820,24 @@ export declare const RenderInternals: {
819
820
  setConfig: () => never;
820
821
  };
821
822
  }>) => Promise<import("./ensure-browser").BrowserStatus>;
823
+ exampleVideos: {
824
+ bigBuckBunny: string;
825
+ transparentWebm: string;
826
+ framerWithoutFileExtension: string;
827
+ corrupted: string;
828
+ customDar: string;
829
+ screenrecording: string;
830
+ nofps: string;
831
+ variablefps: string;
832
+ zerotimestamp: string;
833
+ webcam: string;
834
+ iphonevideo: string;
835
+ av1: string;
836
+ framer24fps: string;
837
+ music: string;
838
+ notavideo: string;
839
+ notafile: string;
840
+ transparentwithdar: string;
841
+ iphonehevc: string;
842
+ };
822
843
  };
package/dist/index.js CHANGED
@@ -115,6 +115,7 @@ const make_file_executable_1 = require("./compositor/make-file-executable");
115
115
  const ensure_browser_2 = require("./ensure-browser");
116
116
  const audio_codec_1 = require("./options/audio-codec");
117
117
  const render_has_audio_1 = require("./render-has-audio");
118
+ const example_videos_1 = require("./test/example-videos");
118
119
  const to_megabytes_1 = require("./to-megabytes");
119
120
  const validate_puppeteer_timeout_1 = require("./validate-puppeteer-timeout");
120
121
  const validate_videobitrate_1 = require("./validate-videobitrate");
@@ -205,6 +206,7 @@ exports.RenderInternals = {
205
206
  codecSupportsMedia: codec_supports_media_1.codecSupportsMedia,
206
207
  toMegabytes: to_megabytes_1.toMegabytes,
207
208
  internalEnsureBrowser: ensure_browser_2.internalEnsureBrowser,
209
+ exampleVideos: example_videos_1.exampleVideos,
208
210
  };
209
211
  // Warn of potential performance issues with Apple Silicon (M1 chip under Rosetta)
210
212
  (0, check_version_requirements_1.checkRuntimeVersion)('info', false);
@@ -7,6 +7,7 @@ export declare const supportedAudioCodecs: {
7
7
  readonly 'h264-mkv': readonly ["pcm-16", "mp3"];
8
8
  readonly 'h264-ts': readonly ["pcm-16", "aac"];
9
9
  readonly aac: readonly ["aac", "pcm-16"];
10
+ readonly avi: readonly [];
10
11
  readonly gif: readonly [];
11
12
  readonly h265: readonly ["aac", "pcm-16"];
12
13
  readonly mp3: readonly ["mp3", "pcm-16"];
@@ -12,6 +12,7 @@ exports.supportedAudioCodecs = {
12
12
  'h264-mkv': ['pcm-16', 'mp3'],
13
13
  'h264-ts': ['pcm-16', 'aac'],
14
14
  aac: ['aac', 'pcm-16'],
15
+ avi: [],
15
16
  gif: [],
16
17
  h265: ['aac', 'pcm-16'],
17
18
  mp3: ['mp3', 'pcm-16'],
@@ -1,19 +1,19 @@
1
1
  export declare const validOpenGlRenderers: readonly ["swangle", "angle", "egl", "swiftshader", "vulkan", "angle-egl"];
2
2
  export type OpenGlRenderer = (typeof validOpenGlRenderers)[number];
3
3
  export declare const DEFAULT_OPENGL_RENDERER: OpenGlRenderer | null;
4
- export declare const getChromiumOpenGlRenderer: () => "angle" | "swangle" | "egl" | "swiftshader" | "vulkan" | "angle-egl" | null;
4
+ export declare const getChromiumOpenGlRenderer: () => "swangle" | "angle" | "egl" | "swiftshader" | "vulkan" | "angle-egl" | null;
5
5
  export declare const setChromiumOpenGlRenderer: (renderer: OpenGlRenderer) => void;
6
6
  export declare const glOption: {
7
7
  cliFlag: "gl";
8
8
  docLink: string;
9
9
  name: string;
10
- type: "angle" | "swangle" | "egl" | "swiftshader" | "vulkan" | "angle-egl" | null;
10
+ type: "swangle" | "angle" | "egl" | "swiftshader" | "vulkan" | "angle-egl" | null;
11
11
  ssrName: string;
12
12
  description: () => import("react/jsx-runtime").JSX.Element;
13
13
  getValue: ({ commandLine }: {
14
14
  commandLine: Record<string, unknown>;
15
15
  }) => {
16
- value: "angle" | "swangle" | "egl" | "swiftshader" | "vulkan" | "angle-egl";
16
+ value: "swangle" | "angle" | "egl" | "swiftshader" | "vulkan" | "angle-egl";
17
17
  source: string;
18
18
  } | {
19
19
  value: null;
@@ -245,19 +245,19 @@ export declare const allOptions: {
245
245
  cliFlag: "gl";
246
246
  docLink: string;
247
247
  name: string;
248
- type: "angle" | "swangle" | "egl" | "swiftshader" | "vulkan" | "angle-egl" | null;
248
+ type: "swangle" | "angle" | "egl" | "swiftshader" | "vulkan" | "angle-egl" | null;
249
249
  ssrName: string;
250
250
  description: () => import("react/jsx-runtime").JSX.Element;
251
251
  getValue: ({ commandLine }: {
252
252
  commandLine: Record<string, unknown>;
253
253
  }) => {
254
- value: "angle" | "swangle" | "egl" | "swiftshader" | "vulkan" | "angle-egl";
254
+ value: "swangle" | "angle" | "egl" | "swiftshader" | "vulkan" | "angle-egl";
255
255
  source: string;
256
256
  } | {
257
257
  value: null;
258
258
  source: string;
259
259
  };
260
- setConfig: (value: "angle" | "swangle" | "egl" | "swiftshader" | "vulkan" | "angle-egl" | null) => void;
260
+ setConfig: (value: "swangle" | "angle" | "egl" | "swiftshader" | "vulkan" | "angle-egl" | null) => void;
261
261
  };
262
262
  enableLambdaInsights: {
263
263
  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: "medium" | "ultrafast" | "superfast" | "veryfast" | "faster" | "fast" | "slow" | "slower" | "veryslow" | "placebo" | null;
385
+ type: "ultrafast" | "superfast" | "veryfast" | "faster" | "fast" | "medium" | "slow" | "slower" | "veryslow" | "placebo" | null;
386
386
  getValue: ({ commandLine }: {
387
387
  commandLine: Record<string, unknown>;
388
388
  }) => {
389
- value: "medium" | "ultrafast" | "superfast" | "veryfast" | "faster" | "fast" | "slow" | "slower" | "veryslow" | "placebo";
389
+ value: "ultrafast" | "superfast" | "veryfast" | "faster" | "fast" | "medium" | "slow" | "slower" | "veryslow" | "placebo";
390
390
  source: string;
391
391
  } | {
392
392
  value: null;
393
393
  source: string;
394
394
  };
395
- setConfig: (profile: "medium" | "ultrafast" | "superfast" | "veryfast" | "faster" | "fast" | "slow" | "slower" | "veryslow" | "placebo" | null) => void;
395
+ setConfig: (profile: "ultrafast" | "superfast" | "veryfast" | "faster" | "fast" | "medium" | "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: "medium" | "ultrafast" | "superfast" | "veryfast" | "faster" | "fast" | "slow" | "slower" | "veryslow" | "placebo" | null;
75
+ type: "ultrafast" | "superfast" | "veryfast" | "faster" | "fast" | "medium" | "slow" | "slower" | "veryslow" | "placebo" | null;
76
76
  getValue: ({ commandLine }: {
77
77
  commandLine: Record<string, unknown>;
78
78
  }) => {
79
- value: "medium" | "ultrafast" | "superfast" | "veryfast" | "faster" | "fast" | "slow" | "slower" | "veryslow" | "placebo";
79
+ value: "ultrafast" | "superfast" | "veryfast" | "faster" | "fast" | "medium" | "slow" | "slower" | "veryslow" | "placebo";
80
80
  source: string;
81
81
  } | {
82
82
  value: null;
83
83
  source: string;
84
84
  };
85
- setConfig: (profile: "medium" | "ultrafast" | "superfast" | "veryfast" | "faster" | "fast" | "slow" | "slower" | "veryslow" | "placebo" | null) => void;
85
+ setConfig: (profile: "ultrafast" | "superfast" | "veryfast" | "faster" | "fast" | "medium" | "slow" | "slower" | "veryslow" | "placebo" | null) => void;
86
86
  };
87
87
  readonly audioBitrate: {
88
88
  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: "medium" | "ultrafast" | "superfast" | "veryfast" | "faster" | "fast" | "slow" | "slower" | "veryslow" | "placebo" | null;
797
+ type: "ultrafast" | "superfast" | "veryfast" | "faster" | "fast" | "medium" | "slow" | "slower" | "veryslow" | "placebo" | null;
798
798
  getValue: ({ commandLine }: {
799
799
  commandLine: Record<string, unknown>;
800
800
  }) => {
801
- value: "medium" | "ultrafast" | "superfast" | "veryfast" | "faster" | "fast" | "slow" | "slower" | "veryslow" | "placebo";
801
+ value: "ultrafast" | "superfast" | "veryfast" | "faster" | "fast" | "medium" | "slow" | "slower" | "veryslow" | "placebo";
802
802
  source: string;
803
803
  } | {
804
804
  value: null;
805
805
  source: string;
806
806
  };
807
- setConfig: (profile: "medium" | "ultrafast" | "superfast" | "veryfast" | "faster" | "fast" | "slow" | "slower" | "veryslow" | "placebo" | null) => void;
807
+ setConfig: (profile: "ultrafast" | "superfast" | "veryfast" | "faster" | "fast" | "medium" | "slow" | "slower" | "veryslow" | "placebo" | null) => void;
808
808
  };
809
809
  readonly encodingMaxRate: {
810
810
  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: "medium" | "ultrafast" | "superfast" | "veryfast" | "faster" | "fast" | "slow" | "slower" | "veryslow" | "placebo" | null;
1163
+ type: "ultrafast" | "superfast" | "veryfast" | "faster" | "fast" | "medium" | "slow" | "slower" | "veryslow" | "placebo" | null;
1164
1164
  getValue: ({ commandLine }: {
1165
1165
  commandLine: Record<string, unknown>;
1166
1166
  }) => {
1167
- value: "medium" | "ultrafast" | "superfast" | "veryfast" | "faster" | "fast" | "slow" | "slower" | "veryslow" | "placebo";
1167
+ value: "ultrafast" | "superfast" | "veryfast" | "faster" | "fast" | "medium" | "slow" | "slower" | "veryslow" | "placebo";
1168
1168
  source: string;
1169
1169
  } | {
1170
1170
  value: null;
1171
1171
  source: string;
1172
1172
  };
1173
- setConfig: (profile: "medium" | "ultrafast" | "superfast" | "veryfast" | "faster" | "fast" | "slow" | "slower" | "veryslow" | "placebo" | null) => void;
1173
+ setConfig: (profile: "ultrafast" | "superfast" | "veryfast" | "faster" | "fast" | "medium" | "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: "medium" | "ultrafast" | "superfast" | "veryfast" | "faster" | "fast" | "slow" | "slower" | "veryslow" | "placebo" | null;
14
+ type: "ultrafast" | "superfast" | "veryfast" | "faster" | "fast" | "medium" | "slow" | "slower" | "veryslow" | "placebo" | null;
15
15
  getValue: ({ commandLine }: {
16
16
  commandLine: Record<string, unknown>;
17
17
  }) => {
18
- value: "medium" | "ultrafast" | "superfast" | "veryfast" | "faster" | "fast" | "slow" | "slower" | "veryslow" | "placebo";
18
+ value: "ultrafast" | "superfast" | "veryfast" | "faster" | "fast" | "medium" | "slow" | "slower" | "veryslow" | "placebo";
19
19
  source: string;
20
20
  } | {
21
21
  value: null;
@@ -94,7 +94,7 @@ const internalRenderMediaRaw = ({ proResProfile, x264Preset, crf, composition, s
94
94
  : null;
95
95
  (0, validate_scale_1.validateScale)(scale);
96
96
  (0, validate_ffmpeg_override_1.validateFfmpegOverride)(ffmpegOverride);
97
- (0, validate_every_nth_frame_1.validateEveryNthFrame)(everyNthFrame, codec);
97
+ (0, validate_every_nth_frame_1.validateEveryNthFrame)(everyNthFrame);
98
98
  (0, validate_number_of_gif_loops_1.validateNumberOfGifLoops)(numberOfGifLoops, codec);
99
99
  let stitchStage = 'encoding';
100
100
  let stitcherFfmpeg;
@@ -1,2 +1 @@
1
- import type { Codec } from './codec';
2
- export declare const validateEveryNthFrame: (everyNthFrame: unknown, codec: Codec) => 1 | undefined;
1
+ export declare const validateEveryNthFrame: (everyNthFrame: unknown) => 1 | undefined;
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.validateEveryNthFrame = void 0;
4
- const validateEveryNthFrame = (everyNthFrame, codec) => {
4
+ const validateEveryNthFrame = (everyNthFrame) => {
5
5
  if (typeof everyNthFrame === 'undefined') {
6
6
  throw new TypeError(`Argument missing for parameter "everyNthFrame"`);
7
7
  }
@@ -20,9 +20,5 @@ const validateEveryNthFrame = (everyNthFrame, codec) => {
20
20
  if (everyNthFrame === 1) {
21
21
  return everyNthFrame;
22
22
  }
23
- // h264-mkv because that is what is being used on Lambda
24
- if (codec !== 'gif' && codec !== 'h264-mkv') {
25
- throw new Error(`"everyNthFrame" can only be set if "codec" is set to "gif". The codec is "${codec}"`);
26
- }
27
23
  };
28
24
  exports.validateEveryNthFrame = validateEveryNthFrame;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@remotion/renderer",
3
- "version": "4.0.149",
3
+ "version": "4.0.151",
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.149"
21
+ "remotion": "4.0.151"
22
22
  },
23
23
  "peerDependencies": {
24
24
  "react": ">=16.8.0",
@@ -43,13 +43,13 @@
43
43
  "@types/ws": "8.5.10"
44
44
  },
45
45
  "optionalDependencies": {
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"
46
+ "@remotion/compositor-darwin-arm64": "4.0.151",
47
+ "@remotion/compositor-darwin-x64": "4.0.151",
48
+ "@remotion/compositor-linux-arm64-gnu": "4.0.151",
49
+ "@remotion/compositor-linux-x64-musl": "4.0.151",
50
+ "@remotion/compositor-linux-arm64-musl": "4.0.151",
51
+ "@remotion/compositor-win32-x64-msvc": "4.0.151",
52
+ "@remotion/compositor-linux-x64-gnu": "4.0.151"
53
53
  },
54
54
  "keywords": [
55
55
  "remotion",