@remotion/renderer 4.0.522 → 4.0.523
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/dist/client.d.ts +2 -2
- package/dist/create-audio.d.ts +3 -2
- package/dist/create-audio.js +6 -1
- package/dist/esm/client.mjs +163 -107
- package/dist/esm/index.mjs +20 -9
- package/dist/esm/pure.mjs +1 -1
- package/dist/options/enforce-audio.d.ts +1 -1
- package/dist/options/enforce-audio.js +15 -1
- package/dist/options/index.d.ts +1 -1
- package/dist/options/options-map.d.ts +1 -1
- package/dist/options/separate-audio.js +1 -1
- package/dist/render-has-audio.js +7 -1
- package/dist/stitch-frames-to-video.js +7 -5
- package/package.json +13 -13
package/dist/client.d.ts
CHANGED
|
@@ -422,7 +422,7 @@ export declare const BrowserSafeApis: {
|
|
|
422
422
|
enforceAudioOption: {
|
|
423
423
|
name: string;
|
|
424
424
|
cliFlag: "enforce-audio-track";
|
|
425
|
-
description: () => import("react/jsx-runtime").JSX.Element;
|
|
425
|
+
description: (mode: "cli" | "ssr") => import("react/jsx-runtime").JSX.Element;
|
|
426
426
|
ssrName: string;
|
|
427
427
|
docLink: string;
|
|
428
428
|
type: boolean;
|
|
@@ -3973,7 +3973,7 @@ export declare const BrowserSafeApis: {
|
|
|
3973
3973
|
readonly enforceAudioTrack: {
|
|
3974
3974
|
name: string;
|
|
3975
3975
|
cliFlag: "enforce-audio-track";
|
|
3976
|
-
description: () => import("react/jsx-runtime").JSX.Element;
|
|
3976
|
+
description: (mode: "cli" | "ssr") => import("react/jsx-runtime").JSX.Element;
|
|
3977
3977
|
ssrName: string;
|
|
3978
3978
|
docLink: string;
|
|
3979
3979
|
type: boolean;
|
package/dist/create-audio.d.ts
CHANGED
|
@@ -7,7 +7,7 @@ export type SeamlessAudioInfo = {
|
|
|
7
7
|
trimLeftOffset: number;
|
|
8
8
|
trimRightOffset: number;
|
|
9
9
|
};
|
|
10
|
-
export declare const createAudio: ({ assets, onDownload, fps, logLevel, onProgress, downloadMap, remotionRoot, indent, binariesDirectory, audioBitrate, audioCodec, cancelSignal, chunkLengthInSeconds, trimLeftOffset, trimRightOffset, forSeamlessAacConcatenation, sampleRate, }: {
|
|
10
|
+
export declare const createAudio: ({ assets, onDownload, fps, logLevel, onProgress, downloadMap, remotionRoot, indent, binariesDirectory, audioBitrate, audioCodec, cancelSignal, chunkLengthInSeconds, trimLeftOffset, trimRightOffset, forSeamlessAacConcatenation, sampleRate, enforceAudioTrack, }: {
|
|
11
11
|
assets: FrameAndAssets[];
|
|
12
12
|
onDownload: RenderMediaOnDownload | undefined;
|
|
13
13
|
fps: number;
|
|
@@ -25,4 +25,5 @@ export declare const createAudio: ({ assets, onDownload, fps, logLevel, onProgre
|
|
|
25
25
|
trimRightOffset: number;
|
|
26
26
|
forSeamlessAacConcatenation: boolean;
|
|
27
27
|
sampleRate: number;
|
|
28
|
-
|
|
28
|
+
enforceAudioTrack: boolean;
|
|
29
|
+
}) => Promise<string | null>;
|
package/dist/create-audio.js
CHANGED
|
@@ -16,7 +16,7 @@ const merge_inline_audio_tracks_1 = require("./merge-inline-audio-tracks");
|
|
|
16
16
|
const audio_codec_1 = require("./options/audio-codec");
|
|
17
17
|
const preprocess_audio_track_1 = require("./preprocess-audio-track");
|
|
18
18
|
const truthy_1 = require("./truthy");
|
|
19
|
-
const createAudio = async ({ assets, onDownload, fps, logLevel, onProgress, downloadMap, remotionRoot, indent, binariesDirectory, audioBitrate, audioCodec, cancelSignal, chunkLengthInSeconds, trimLeftOffset, trimRightOffset, forSeamlessAacConcatenation, sampleRate, }) => {
|
|
19
|
+
const createAudio = async ({ assets, onDownload, fps, logLevel, onProgress, downloadMap, remotionRoot, indent, binariesDirectory, audioBitrate, audioCodec, cancelSignal, chunkLengthInSeconds, trimLeftOffset, trimRightOffset, forSeamlessAacConcatenation, sampleRate, enforceAudioTrack, }) => {
|
|
20
20
|
const fileUrlAssets = await (0, convert_assets_to_file_urls_1.convertAssetsToFileUrls)({
|
|
21
21
|
assets,
|
|
22
22
|
onDownload: onDownload !== null && onDownload !== void 0 ? onDownload : (() => () => undefined),
|
|
@@ -98,6 +98,11 @@ const createAudio = async ({ assets, onDownload, fps, logLevel, onProgress, down
|
|
|
98
98
|
]
|
|
99
99
|
: []),
|
|
100
100
|
];
|
|
101
|
+
if (!enforceAudioTrack && preprocessed.length === 0) {
|
|
102
|
+
(0, delete_directory_1.deleteDirectory)(downloadMap.audioMixing);
|
|
103
|
+
onProgress(1);
|
|
104
|
+
return null;
|
|
105
|
+
}
|
|
101
106
|
const merged = path_1.default.join(downloadMap.audioPreprocessing, 'merged.wav');
|
|
102
107
|
const extension = (0, audio_codec_1.getExtensionFromAudioCodec)(audioCodec);
|
|
103
108
|
const outName = path_1.default.join(downloadMap.audioPreprocessing, `audio.${extension}`);
|
package/dist/esm/client.mjs
CHANGED
|
@@ -480,7 +480,7 @@ var DEFAULT = null;
|
|
|
480
480
|
var cliFlag5 = "separate-audio-to";
|
|
481
481
|
var separateAudioOption = {
|
|
482
482
|
cliFlag: cliFlag5,
|
|
483
|
-
description: () => `If set, the audio will not be included in the main output but rendered as a separate file at the location you pass. It is recommended to use an absolute path. If a relative path is passed, it is relative to the Remotion Root.`,
|
|
483
|
+
description: () => `If set, the audio will not be included in the main output but rendered as a separate file at the location you pass. If the render contains no audio, a silent audio file is produced even when enforceAudioTrack is false. The muted option still takes precedence. It is recommended to use an absolute path. If a relative path is passed, it is relative to the Remotion Root.`,
|
|
484
484
|
docLink: "https://remotion.dev/docs/renderer/render-media",
|
|
485
485
|
getValue: ({ commandLine }) => {
|
|
486
486
|
if (commandLine[cliFlag5]) {
|
|
@@ -1891,15 +1891,71 @@ var encodingMaxRateOption = {
|
|
|
1891
1891
|
};
|
|
1892
1892
|
|
|
1893
1893
|
// src/options/enforce-audio.tsx
|
|
1894
|
-
import { jsx as jsx28, Fragment as Fragment28 } from "react/jsx-runtime";
|
|
1894
|
+
import { jsx as jsx28, jsxs as jsxs21, Fragment as Fragment28 } from "react/jsx-runtime";
|
|
1895
1895
|
var DEFAULT_ENFORCE_AUDIO_TRACK = false;
|
|
1896
1896
|
var enforceAudioTrackState = DEFAULT_ENFORCE_AUDIO_TRACK;
|
|
1897
1897
|
var cliFlag31 = "enforce-audio-track";
|
|
1898
1898
|
var enforceAudioOption = {
|
|
1899
1899
|
name: "Enforce Audio Track",
|
|
1900
1900
|
cliFlag: cliFlag31,
|
|
1901
|
-
description: () => /* @__PURE__ */
|
|
1902
|
-
children:
|
|
1901
|
+
description: (mode) => /* @__PURE__ */ jsxs21(Fragment28, {
|
|
1902
|
+
children: [
|
|
1903
|
+
/* @__PURE__ */ jsxs21("p", {
|
|
1904
|
+
children: [
|
|
1905
|
+
"Defaults to ",
|
|
1906
|
+
/* @__PURE__ */ jsx28("code", {
|
|
1907
|
+
children: "false"
|
|
1908
|
+
}),
|
|
1909
|
+
". If ",
|
|
1910
|
+
/* @__PURE__ */ jsx28("code", {
|
|
1911
|
+
children: "true"
|
|
1912
|
+
}),
|
|
1913
|
+
", include a silent audio track when the render contains no audio. If ",
|
|
1914
|
+
/* @__PURE__ */ jsx28("code", {
|
|
1915
|
+
children: "false"
|
|
1916
|
+
}),
|
|
1917
|
+
", omit the audio track when no audio is present. Audio-only exports and",
|
|
1918
|
+
" ",
|
|
1919
|
+
/* @__PURE__ */ jsx28("code", {
|
|
1920
|
+
children: mode === "cli" ? "--separate-audio-to" : "separateAudioTo"
|
|
1921
|
+
}),
|
|
1922
|
+
" ",
|
|
1923
|
+
"still produce an audio file, even when silent."
|
|
1924
|
+
]
|
|
1925
|
+
}),
|
|
1926
|
+
/* @__PURE__ */ jsxs21("p", {
|
|
1927
|
+
children: [
|
|
1928
|
+
mode === "cli" ? /* @__PURE__ */ jsxs21(Fragment28, {
|
|
1929
|
+
children: [
|
|
1930
|
+
"Pass ",
|
|
1931
|
+
/* @__PURE__ */ jsx28("code", {
|
|
1932
|
+
children: "--enforce-audio-track"
|
|
1933
|
+
})
|
|
1934
|
+
]
|
|
1935
|
+
}) : /* @__PURE__ */ jsxs21(Fragment28, {
|
|
1936
|
+
children: [
|
|
1937
|
+
"Set this to ",
|
|
1938
|
+
/* @__PURE__ */ jsx28("code", {
|
|
1939
|
+
children: "true"
|
|
1940
|
+
})
|
|
1941
|
+
]
|
|
1942
|
+
}),
|
|
1943
|
+
" ",
|
|
1944
|
+
"for",
|
|
1945
|
+
" ",
|
|
1946
|
+
/* @__PURE__ */ jsx28("a", {
|
|
1947
|
+
href: "/docs/distributed-rendering",
|
|
1948
|
+
children: "chunks that will later be concatenated"
|
|
1949
|
+
}),
|
|
1950
|
+
", because other chunks may contain audio.",
|
|
1951
|
+
" ",
|
|
1952
|
+
/* @__PURE__ */ jsx28("code", {
|
|
1953
|
+
children: mode === "cli" ? "--muted" : "muted: true"
|
|
1954
|
+
}),
|
|
1955
|
+
" takes precedence."
|
|
1956
|
+
]
|
|
1957
|
+
})
|
|
1958
|
+
]
|
|
1903
1959
|
}),
|
|
1904
1960
|
ssrName: "enforceAudioTrack",
|
|
1905
1961
|
docLink: "https://www.remotion.dev/docs/config#setenforceaudiotrack-",
|
|
@@ -1929,13 +1985,13 @@ var enforceAudioOption = {
|
|
|
1929
1985
|
};
|
|
1930
1986
|
|
|
1931
1987
|
// src/options/env-file.tsx
|
|
1932
|
-
import { jsx as jsx29, jsxs as
|
|
1988
|
+
import { jsx as jsx29, jsxs as jsxs22, Fragment as Fragment29 } from "react/jsx-runtime";
|
|
1933
1989
|
var cliFlag32 = "env-file";
|
|
1934
1990
|
var envFileLocation = null;
|
|
1935
1991
|
var envFileOption = {
|
|
1936
1992
|
name: "Env File",
|
|
1937
1993
|
cliFlag: cliFlag32,
|
|
1938
|
-
description: () => /* @__PURE__ */
|
|
1994
|
+
description: () => /* @__PURE__ */ jsxs22(Fragment29, {
|
|
1939
1995
|
children: [
|
|
1940
1996
|
"Specify a location for a dotenv file. Default ",
|
|
1941
1997
|
/* @__PURE__ */ jsx29("code", {
|
|
@@ -1972,14 +2028,14 @@ var envFileOption = {
|
|
|
1972
2028
|
};
|
|
1973
2029
|
|
|
1974
2030
|
// src/options/every-nth-frame.tsx
|
|
1975
|
-
import { jsx as jsx30, jsxs as
|
|
2031
|
+
import { jsx as jsx30, jsxs as jsxs23, Fragment as Fragment30 } from "react/jsx-runtime";
|
|
1976
2032
|
var DEFAULT_EVERY_NTH_FRAME = 1;
|
|
1977
2033
|
var everyNthFrame = DEFAULT_EVERY_NTH_FRAME;
|
|
1978
2034
|
var cliFlag33 = "every-nth-frame";
|
|
1979
2035
|
var everyNthFrameOption = {
|
|
1980
2036
|
name: "Every nth frame",
|
|
1981
2037
|
cliFlag: cliFlag33,
|
|
1982
|
-
description: () => /* @__PURE__ */
|
|
2038
|
+
description: () => /* @__PURE__ */ jsxs23(Fragment30, {
|
|
1983
2039
|
children: [
|
|
1984
2040
|
"This option may only be set when rendering GIFs. It determines how many frames are rendered, while the other ones get skipped in order to lower the FPS of the GIF. For example, if the ",
|
|
1985
2041
|
/* @__PURE__ */ jsx30("code", {
|
|
@@ -2025,13 +2081,13 @@ var everyNthFrameOption = {
|
|
|
2025
2081
|
};
|
|
2026
2082
|
|
|
2027
2083
|
// src/options/experimental-keep-audio-context-alive.tsx
|
|
2028
|
-
import { jsx as jsx31, jsxs as
|
|
2084
|
+
import { jsx as jsx31, jsxs as jsxs24, Fragment as Fragment31 } from "react/jsx-runtime";
|
|
2029
2085
|
var experimentalKeepAudioContextAlive = false;
|
|
2030
2086
|
var cliFlag34 = "experimental-keep-audio-context-alive";
|
|
2031
2087
|
var experimentalKeepAudioContextAliveOption = {
|
|
2032
2088
|
name: "Keep AudioContext alive (experimental)",
|
|
2033
2089
|
cliFlag: cliFlag34,
|
|
2034
|
-
description: () => /* @__PURE__ */
|
|
2090
|
+
description: () => /* @__PURE__ */ jsxs24(Fragment31, {
|
|
2035
2091
|
children: [
|
|
2036
2092
|
"Keeps the shared ",
|
|
2037
2093
|
/* @__PURE__ */ jsx31("code", {
|
|
@@ -2062,14 +2118,14 @@ var experimentalKeepAudioContextAliveOption = {
|
|
|
2062
2118
|
};
|
|
2063
2119
|
|
|
2064
2120
|
// src/options/folder-expiry.tsx
|
|
2065
|
-
import { jsx as jsx32, jsxs as
|
|
2121
|
+
import { jsx as jsx32, jsxs as jsxs25, Fragment as Fragment32 } from "react/jsx-runtime";
|
|
2066
2122
|
var enableFolderExpiry = null;
|
|
2067
2123
|
var cliFlag35 = "enable-folder-expiry";
|
|
2068
2124
|
var folderExpiryOption = {
|
|
2069
2125
|
name: "Lambda render expiration",
|
|
2070
2126
|
cliFlag: cliFlag35,
|
|
2071
2127
|
description: () => {
|
|
2072
|
-
return /* @__PURE__ */
|
|
2128
|
+
return /* @__PURE__ */ jsxs25(Fragment32, {
|
|
2073
2129
|
children: [
|
|
2074
2130
|
"When deploying sites, enable or disable S3 Lifecycle policies which allow for renders to auto-delete after a certain time. Default is",
|
|
2075
2131
|
" ",
|
|
@@ -2113,14 +2169,14 @@ var folderExpiryOption = {
|
|
|
2113
2169
|
};
|
|
2114
2170
|
|
|
2115
2171
|
// src/options/for-seamless-aac-concatenation.tsx
|
|
2116
|
-
import { jsx as jsx33, jsxs as
|
|
2172
|
+
import { jsx as jsx33, jsxs as jsxs26, Fragment as Fragment33 } from "react/jsx-runtime";
|
|
2117
2173
|
var DEFAULT3 = false;
|
|
2118
2174
|
var forSeamlessAacConcatenation = DEFAULT3;
|
|
2119
2175
|
var cliFlag36 = "for-seamless-aac-concatenation";
|
|
2120
2176
|
var forSeamlessAacConcatenationOption = {
|
|
2121
2177
|
name: "For seamless AAC concatenation",
|
|
2122
2178
|
cliFlag: cliFlag36,
|
|
2123
|
-
description: () => /* @__PURE__ */
|
|
2179
|
+
description: () => /* @__PURE__ */ jsxs26(Fragment33, {
|
|
2124
2180
|
children: [
|
|
2125
2181
|
"If enabled, the audio is trimmed to the nearest AAC frame, which is required for seamless concatenation of AAC files. This is a requirement if you later want to combine multiple video snippets seamlessly.",
|
|
2126
2182
|
/* @__PURE__ */ jsx33("br", {}),
|
|
@@ -2302,7 +2358,7 @@ var validateSelectedFrames = ({
|
|
|
2302
2358
|
};
|
|
2303
2359
|
|
|
2304
2360
|
// src/options/frames.tsx
|
|
2305
|
-
import { jsx as jsx35, jsxs as
|
|
2361
|
+
import { jsx as jsx35, jsxs as jsxs27, Fragment as Fragment35 } from "react/jsx-runtime";
|
|
2306
2362
|
var cliFlag38 = "frames";
|
|
2307
2363
|
var frameSelection = null;
|
|
2308
2364
|
var parseFrameRangeFromCli = (newFrameRange) => {
|
|
@@ -2381,7 +2437,7 @@ var parseFrameRangeFromCli = (newFrameRange) => {
|
|
|
2381
2437
|
var framesOption = {
|
|
2382
2438
|
name: "Frame Range",
|
|
2383
2439
|
cliFlag: cliFlag38,
|
|
2384
|
-
description: () => /* @__PURE__ */
|
|
2440
|
+
description: () => /* @__PURE__ */ jsxs27(Fragment35, {
|
|
2385
2441
|
children: [
|
|
2386
2442
|
"Render a subset of a video. Pass a single number to render a still, or a range (e.g. ",
|
|
2387
2443
|
/* @__PURE__ */ jsx35("code", {
|
|
@@ -2432,7 +2488,7 @@ var framesOption = {
|
|
|
2432
2488
|
|
|
2433
2489
|
// src/options/gl.tsx
|
|
2434
2490
|
import { NoReactInternals as NoReactInternals2 } from "remotion/no-react";
|
|
2435
|
-
import { jsx as jsx36, jsxs as
|
|
2491
|
+
import { jsx as jsx36, jsxs as jsxs28, Fragment as Fragment36 } from "react/jsx-runtime";
|
|
2436
2492
|
var validOpenGlRenderers = [
|
|
2437
2493
|
"swangle",
|
|
2438
2494
|
"angle",
|
|
@@ -2447,15 +2503,15 @@ var getDefaultOpenGlRenderer = (enableV5BreakingChanges) => {
|
|
|
2447
2503
|
var DEFAULT_OPENGL_RENDERER = getDefaultOpenGlRenderer(NoReactInternals2.ENABLE_V5_BREAKING_CHANGES);
|
|
2448
2504
|
var openGlRenderer = DEFAULT_OPENGL_RENDERER;
|
|
2449
2505
|
var AngleChangelog = () => {
|
|
2450
|
-
return /* @__PURE__ */
|
|
2506
|
+
return /* @__PURE__ */ jsxs28("details", {
|
|
2451
2507
|
style: { fontSize: "0.9em", marginBottom: "1em" },
|
|
2452
2508
|
children: [
|
|
2453
2509
|
/* @__PURE__ */ jsx36("summary", {
|
|
2454
2510
|
children: "Changelog"
|
|
2455
2511
|
}),
|
|
2456
|
-
/* @__PURE__ */
|
|
2512
|
+
/* @__PURE__ */ jsxs28("ul", {
|
|
2457
2513
|
children: [
|
|
2458
|
-
/* @__PURE__ */
|
|
2514
|
+
/* @__PURE__ */ jsxs28("li", {
|
|
2459
2515
|
children: [
|
|
2460
2516
|
"From Remotion v2.6.7 until v3.0.7, the default for Remotion Lambda was",
|
|
2461
2517
|
" ",
|
|
@@ -2470,7 +2526,7 @@ var AngleChangelog = () => {
|
|
|
2470
2526
|
" (Swiftshader on Angle) since Chrome 101 added support for it."
|
|
2471
2527
|
]
|
|
2472
2528
|
}),
|
|
2473
|
-
/* @__PURE__ */
|
|
2529
|
+
/* @__PURE__ */ jsxs28("li", {
|
|
2474
2530
|
children: [
|
|
2475
2531
|
"From Remotion v2.4.3 until v2.6.6, the default was ",
|
|
2476
2532
|
/* @__PURE__ */ jsx36("code", {
|
|
@@ -2479,7 +2535,7 @@ var AngleChangelog = () => {
|
|
|
2479
2535
|
", however it turns out to have a small memory leak that could crash long Remotion renders."
|
|
2480
2536
|
]
|
|
2481
2537
|
}),
|
|
2482
|
-
NoReactInternals2.ENABLE_V5_BREAKING_CHANGES ? /* @__PURE__ */
|
|
2538
|
+
NoReactInternals2.ENABLE_V5_BREAKING_CHANGES ? /* @__PURE__ */ jsxs28("li", {
|
|
2483
2539
|
children: [
|
|
2484
2540
|
"From Remotion v5.0, the default is ",
|
|
2485
2541
|
/* @__PURE__ */ jsx36("code", {
|
|
@@ -2501,17 +2557,17 @@ var glOption = {
|
|
|
2501
2557
|
type: "angle",
|
|
2502
2558
|
ssrName: "gl",
|
|
2503
2559
|
description: () => {
|
|
2504
|
-
return /* @__PURE__ */
|
|
2560
|
+
return /* @__PURE__ */ jsxs28(Fragment36, {
|
|
2505
2561
|
children: [
|
|
2506
2562
|
/* @__PURE__ */ jsx36(AngleChangelog, {}),
|
|
2507
|
-
/* @__PURE__ */
|
|
2563
|
+
/* @__PURE__ */ jsxs28("p", {
|
|
2508
2564
|
children: [
|
|
2509
2565
|
"Select the OpenGL renderer backend for Chromium. ",
|
|
2510
2566
|
/* @__PURE__ */ jsx36("br", {}),
|
|
2511
2567
|
"Accepted values:"
|
|
2512
2568
|
]
|
|
2513
2569
|
}),
|
|
2514
|
-
/* @__PURE__ */
|
|
2570
|
+
/* @__PURE__ */ jsxs28("ul", {
|
|
2515
2571
|
children: [
|
|
2516
2572
|
/* @__PURE__ */ jsx36("li", {
|
|
2517
2573
|
children: /* @__PURE__ */ jsx36("code", {
|
|
@@ -2533,7 +2589,7 @@ var glOption = {
|
|
|
2533
2589
|
children: '"swangle"'
|
|
2534
2590
|
})
|
|
2535
2591
|
}),
|
|
2536
|
-
/* @__PURE__ */
|
|
2592
|
+
/* @__PURE__ */ jsxs28("li", {
|
|
2537
2593
|
children: [
|
|
2538
2594
|
/* @__PURE__ */ jsx36("code", {
|
|
2539
2595
|
children: '"vulkan"'
|
|
@@ -2545,7 +2601,7 @@ var glOption = {
|
|
|
2545
2601
|
")"
|
|
2546
2602
|
]
|
|
2547
2603
|
}),
|
|
2548
|
-
/* @__PURE__ */
|
|
2604
|
+
/* @__PURE__ */ jsxs28("li", {
|
|
2549
2605
|
children: [
|
|
2550
2606
|
/* @__PURE__ */ jsx36("code", {
|
|
2551
2607
|
children: '"angle-egl"'
|
|
@@ -2559,7 +2615,7 @@ var glOption = {
|
|
|
2559
2615
|
})
|
|
2560
2616
|
]
|
|
2561
2617
|
}),
|
|
2562
|
-
/* @__PURE__ */
|
|
2618
|
+
/* @__PURE__ */ jsxs28("p", {
|
|
2563
2619
|
children: [
|
|
2564
2620
|
"The default is",
|
|
2565
2621
|
" ",
|
|
@@ -2612,7 +2668,7 @@ var validateOpenGlRenderer = (option2) => {
|
|
|
2612
2668
|
};
|
|
2613
2669
|
|
|
2614
2670
|
// src/options/gop-size.tsx
|
|
2615
|
-
import { jsx as jsx37, jsxs as
|
|
2671
|
+
import { jsx as jsx37, jsxs as jsxs29, Fragment as Fragment37 } from "react/jsx-runtime";
|
|
2616
2672
|
var gopSize = null;
|
|
2617
2673
|
var validateGopSize = (value) => {
|
|
2618
2674
|
if (value === null) {
|
|
@@ -2626,7 +2682,7 @@ var cliFlag40 = "gop";
|
|
|
2626
2682
|
var gopSizeOption = {
|
|
2627
2683
|
name: "GOP size",
|
|
2628
2684
|
cliFlag: cliFlag40,
|
|
2629
|
-
description: () => /* @__PURE__ */
|
|
2685
|
+
description: () => /* @__PURE__ */ jsxs29(Fragment37, {
|
|
2630
2686
|
children: [
|
|
2631
2687
|
"Set the maximum number of frames between two keyframes. This maps to FFmpeg's ",
|
|
2632
2688
|
/* @__PURE__ */ jsx37("code", {
|
|
@@ -2706,14 +2762,14 @@ var hardwareAccelerationOption = {
|
|
|
2706
2762
|
};
|
|
2707
2763
|
|
|
2708
2764
|
// src/options/headless.tsx
|
|
2709
|
-
import { jsx as jsx38, jsxs as
|
|
2765
|
+
import { jsx as jsx38, jsxs as jsxs30, Fragment as Fragment38 } from "react/jsx-runtime";
|
|
2710
2766
|
var DEFAULT4 = true;
|
|
2711
2767
|
var headlessMode = DEFAULT4;
|
|
2712
2768
|
var cliFlag42 = "disable-headless";
|
|
2713
2769
|
var headlessOption = {
|
|
2714
2770
|
name: "Disable Headless Mode",
|
|
2715
2771
|
cliFlag: cliFlag42,
|
|
2716
|
-
description: () => /* @__PURE__ */
|
|
2772
|
+
description: () => /* @__PURE__ */ jsxs30(Fragment38, {
|
|
2717
2773
|
children: [
|
|
2718
2774
|
"If disabled, the render will open an actual Chrome window where you can see the render happen. This requires",
|
|
2719
2775
|
" ",
|
|
@@ -2790,13 +2846,13 @@ var ignoreCertificateErrorsOption = {
|
|
|
2790
2846
|
};
|
|
2791
2847
|
|
|
2792
2848
|
// src/options/image-sequence.tsx
|
|
2793
|
-
import { jsx as jsx40, jsxs as
|
|
2849
|
+
import { jsx as jsx40, jsxs as jsxs31, Fragment as Fragment40 } from "react/jsx-runtime";
|
|
2794
2850
|
var cliFlag44 = "sequence";
|
|
2795
2851
|
var imageSequence = false;
|
|
2796
2852
|
var imageSequenceOption = {
|
|
2797
2853
|
name: "Image Sequence",
|
|
2798
2854
|
cliFlag: cliFlag44,
|
|
2799
|
-
description: () => /* @__PURE__ */
|
|
2855
|
+
description: () => /* @__PURE__ */ jsxs31(Fragment40, {
|
|
2800
2856
|
children: [
|
|
2801
2857
|
"Pass this flag to output an image sequence instead of a video. The default image format is JPEG. See",
|
|
2802
2858
|
" ",
|
|
@@ -2832,14 +2888,14 @@ var imageSequenceOption = {
|
|
|
2832
2888
|
};
|
|
2833
2889
|
|
|
2834
2890
|
// src/options/image-sequence-pattern.tsx
|
|
2835
|
-
import { jsx as jsx41, jsxs as
|
|
2891
|
+
import { jsx as jsx41, jsxs as jsxs32, Fragment as Fragment41 } from "react/jsx-runtime";
|
|
2836
2892
|
var cliFlag45 = "image-sequence-pattern";
|
|
2837
2893
|
var currentImageSequencePattern = null;
|
|
2838
2894
|
var imageSequencePatternOption = {
|
|
2839
2895
|
name: "Image Sequence Pattern",
|
|
2840
2896
|
cliFlag: cliFlag45,
|
|
2841
2897
|
ssrName: "imageSequencePattern",
|
|
2842
|
-
description: () => /* @__PURE__ */
|
|
2898
|
+
description: () => /* @__PURE__ */ jsxs32(Fragment41, {
|
|
2843
2899
|
children: [
|
|
2844
2900
|
"Pattern for naming image sequence files. Supports ",
|
|
2845
2901
|
/* @__PURE__ */ jsx41("code", {
|
|
@@ -2946,13 +3002,13 @@ var ipv4Option = {
|
|
|
2946
3002
|
};
|
|
2947
3003
|
|
|
2948
3004
|
// src/options/is-production.tsx
|
|
2949
|
-
import { jsx as jsx44, jsxs as
|
|
3005
|
+
import { jsx as jsx44, jsxs as jsxs33, Fragment as Fragment44 } from "react/jsx-runtime";
|
|
2950
3006
|
var cliFlag48 = "is-production";
|
|
2951
3007
|
var currentIsProductionKey = null;
|
|
2952
3008
|
var isProductionOption = {
|
|
2953
3009
|
name: "Is Production",
|
|
2954
3010
|
cliFlag: cliFlag48,
|
|
2955
|
-
description: () => /* @__PURE__ */
|
|
3011
|
+
description: () => /* @__PURE__ */ jsxs33(Fragment44, {
|
|
2956
3012
|
children: [
|
|
2957
3013
|
"Pass ",
|
|
2958
3014
|
/* @__PURE__ */ jsx44("code", {
|
|
@@ -3078,13 +3134,13 @@ var keyboardShortcutsOption = {
|
|
|
3078
3134
|
};
|
|
3079
3135
|
|
|
3080
3136
|
// src/options/latency-hint.tsx
|
|
3081
|
-
import { jsx as jsx47, jsxs as
|
|
3137
|
+
import { jsx as jsx47, jsxs as jsxs34, Fragment as Fragment47 } from "react/jsx-runtime";
|
|
3082
3138
|
var cliFlag51 = "audio-latency-hint";
|
|
3083
3139
|
var value = null;
|
|
3084
3140
|
var audioLatencyHintOption = {
|
|
3085
3141
|
name: "Audio Latency Hint",
|
|
3086
3142
|
cliFlag: cliFlag51,
|
|
3087
|
-
description: () => /* @__PURE__ */
|
|
3143
|
+
description: () => /* @__PURE__ */ jsxs34(Fragment47, {
|
|
3088
3144
|
children: [
|
|
3089
3145
|
"Sets the",
|
|
3090
3146
|
" ",
|
|
@@ -3138,13 +3194,13 @@ var audioLatencyHintOption = {
|
|
|
3138
3194
|
};
|
|
3139
3195
|
|
|
3140
3196
|
// src/options/license-key.tsx
|
|
3141
|
-
import { jsx as jsx48, jsxs as
|
|
3197
|
+
import { jsx as jsx48, jsxs as jsxs35, Fragment as Fragment48 } from "react/jsx-runtime";
|
|
3142
3198
|
var currentLicenseKey = null;
|
|
3143
3199
|
var cliFlag52 = "license-key";
|
|
3144
3200
|
var licenseKeyOption = {
|
|
3145
3201
|
name: "License key",
|
|
3146
3202
|
cliFlag: cliFlag52,
|
|
3147
|
-
description: () => /* @__PURE__ */
|
|
3203
|
+
description: () => /* @__PURE__ */ jsxs35(Fragment48, {
|
|
3148
3204
|
children: [
|
|
3149
3205
|
"License key for sending a usage event using",
|
|
3150
3206
|
" ",
|
|
@@ -3176,7 +3232,7 @@ var licenseKeyOption = {
|
|
|
3176
3232
|
};
|
|
3177
3233
|
|
|
3178
3234
|
// src/options/log-level.tsx
|
|
3179
|
-
import { jsx as jsx49, jsxs as
|
|
3235
|
+
import { jsx as jsx49, jsxs as jsxs36, Fragment as Fragment49 } from "react/jsx-runtime";
|
|
3180
3236
|
var logLevel = "info";
|
|
3181
3237
|
var configuredLogLevel = null;
|
|
3182
3238
|
var cliFlag53 = "log";
|
|
@@ -3184,7 +3240,7 @@ var logLevelOption = {
|
|
|
3184
3240
|
cliFlag: cliFlag53,
|
|
3185
3241
|
name: "Log Level",
|
|
3186
3242
|
ssrName: "logLevel",
|
|
3187
|
-
description: () => /* @__PURE__ */
|
|
3243
|
+
description: () => /* @__PURE__ */ jsxs36(Fragment49, {
|
|
3188
3244
|
children: [
|
|
3189
3245
|
"One of ",
|
|
3190
3246
|
/* @__PURE__ */ jsx49("code", {
|
|
@@ -3246,7 +3302,7 @@ var logLevelOption = {
|
|
|
3246
3302
|
};
|
|
3247
3303
|
|
|
3248
3304
|
// src/options/metadata.tsx
|
|
3249
|
-
import { jsx as jsx50, jsxs as
|
|
3305
|
+
import { jsx as jsx50, jsxs as jsxs37, Fragment as Fragment50 } from "react/jsx-runtime";
|
|
3250
3306
|
var metadata = {};
|
|
3251
3307
|
var cliFlag54 = "metadata";
|
|
3252
3308
|
var metadataOption = {
|
|
@@ -3254,7 +3310,7 @@ var metadataOption = {
|
|
|
3254
3310
|
cliFlag: cliFlag54,
|
|
3255
3311
|
description: (mode) => {
|
|
3256
3312
|
if (mode === "ssr") {
|
|
3257
|
-
return /* @__PURE__ */
|
|
3313
|
+
return /* @__PURE__ */ jsxs37(Fragment50, {
|
|
3258
3314
|
children: [
|
|
3259
3315
|
"An object containing metadata to be embedded in the video. See",
|
|
3260
3316
|
" ",
|
|
@@ -3266,7 +3322,7 @@ var metadataOption = {
|
|
|
3266
3322
|
]
|
|
3267
3323
|
});
|
|
3268
3324
|
}
|
|
3269
|
-
return /* @__PURE__ */
|
|
3325
|
+
return /* @__PURE__ */ jsxs37(Fragment50, {
|
|
3270
3326
|
children: [
|
|
3271
3327
|
"Metadata to be embedded in the video. See",
|
|
3272
3328
|
" ",
|
|
@@ -3393,7 +3449,7 @@ var noOpenOption = {
|
|
|
3393
3449
|
};
|
|
3394
3450
|
|
|
3395
3451
|
// src/options/number-of-gif-loops.tsx
|
|
3396
|
-
import { jsx as jsx53, jsxs as
|
|
3452
|
+
import { jsx as jsx53, jsxs as jsxs38, Fragment as Fragment53 } from "react/jsx-runtime";
|
|
3397
3453
|
var currentLoop = null;
|
|
3398
3454
|
var validate = (newLoop) => {
|
|
3399
3455
|
if (newLoop !== null && typeof newLoop !== "number") {
|
|
@@ -3405,12 +3461,12 @@ var numberOfGifLoopsOption = {
|
|
|
3405
3461
|
name: "Number of GIF loops",
|
|
3406
3462
|
cliFlag: cliFlag57,
|
|
3407
3463
|
description: () => {
|
|
3408
|
-
return /* @__PURE__ */
|
|
3464
|
+
return /* @__PURE__ */ jsxs38(Fragment53, {
|
|
3409
3465
|
children: [
|
|
3410
3466
|
"Allows you to set the number of loops as follows:",
|
|
3411
|
-
/* @__PURE__ */
|
|
3467
|
+
/* @__PURE__ */ jsxs38("ul", {
|
|
3412
3468
|
children: [
|
|
3413
|
-
/* @__PURE__ */
|
|
3469
|
+
/* @__PURE__ */ jsxs38("li", {
|
|
3414
3470
|
children: [
|
|
3415
3471
|
/* @__PURE__ */ jsx53("code", {
|
|
3416
3472
|
children: "null"
|
|
@@ -3418,7 +3474,7 @@ var numberOfGifLoopsOption = {
|
|
|
3418
3474
|
" (or omitting in the CLI) plays the GIF indefinitely."
|
|
3419
3475
|
]
|
|
3420
3476
|
}),
|
|
3421
|
-
/* @__PURE__ */
|
|
3477
|
+
/* @__PURE__ */ jsxs38("li", {
|
|
3422
3478
|
children: [
|
|
3423
3479
|
/* @__PURE__ */ jsx53("code", {
|
|
3424
3480
|
children: "0"
|
|
@@ -3426,7 +3482,7 @@ var numberOfGifLoopsOption = {
|
|
|
3426
3482
|
" disables looping"
|
|
3427
3483
|
]
|
|
3428
3484
|
}),
|
|
3429
|
-
/* @__PURE__ */
|
|
3485
|
+
/* @__PURE__ */ jsxs38("li", {
|
|
3430
3486
|
children: [
|
|
3431
3487
|
/* @__PURE__ */ jsx53("code", {
|
|
3432
3488
|
children: "1"
|
|
@@ -3434,7 +3490,7 @@ var numberOfGifLoopsOption = {
|
|
|
3434
3490
|
" loops the GIF once (plays twice in total)"
|
|
3435
3491
|
]
|
|
3436
3492
|
}),
|
|
3437
|
-
/* @__PURE__ */
|
|
3493
|
+
/* @__PURE__ */ jsxs38("li", {
|
|
3438
3494
|
children: [
|
|
3439
3495
|
/* @__PURE__ */ jsx53("code", {
|
|
3440
3496
|
children: "2"
|
|
@@ -3477,14 +3533,14 @@ var numberOfGifLoopsOption = {
|
|
|
3477
3533
|
};
|
|
3478
3534
|
|
|
3479
3535
|
// src/options/number-of-shared-audio-tags.tsx
|
|
3480
|
-
import { jsx as jsx54, jsxs as
|
|
3536
|
+
import { jsx as jsx54, jsxs as jsxs39, Fragment as Fragment54 } from "react/jsx-runtime";
|
|
3481
3537
|
var numberOfSharedAudioTags = 0;
|
|
3482
3538
|
var configuredNumberOfSharedAudioTags = null;
|
|
3483
3539
|
var cliFlag58 = "number-of-shared-audio-tags";
|
|
3484
3540
|
var numberOfSharedAudioTagsOption = {
|
|
3485
3541
|
name: "Number of shared audio tags",
|
|
3486
3542
|
cliFlag: cliFlag58,
|
|
3487
|
-
description: () => /* @__PURE__ */
|
|
3543
|
+
description: () => /* @__PURE__ */ jsxs39(Fragment54, {
|
|
3488
3544
|
children: [
|
|
3489
3545
|
"Set number of shared audio tags. See",
|
|
3490
3546
|
" ",
|
|
@@ -3524,13 +3580,13 @@ var numberOfSharedAudioTagsOption = {
|
|
|
3524
3580
|
};
|
|
3525
3581
|
|
|
3526
3582
|
// src/options/offthreadvideo-cache-size.tsx
|
|
3527
|
-
import { jsx as jsx55, jsxs as
|
|
3583
|
+
import { jsx as jsx55, jsxs as jsxs40, Fragment as Fragment55 } from "react/jsx-runtime";
|
|
3528
3584
|
var offthreadVideoCacheSizeInBytes = null;
|
|
3529
3585
|
var cliFlag59 = "offthreadvideo-cache-size-in-bytes";
|
|
3530
3586
|
var offthreadVideoCacheSizeInBytesOption = {
|
|
3531
3587
|
name: "OffthreadVideo cache size",
|
|
3532
3588
|
cliFlag: cliFlag59,
|
|
3533
|
-
description: () => /* @__PURE__ */
|
|
3589
|
+
description: () => /* @__PURE__ */ jsxs40(Fragment55, {
|
|
3534
3590
|
children: [
|
|
3535
3591
|
"From v4.0, Remotion has a cache for",
|
|
3536
3592
|
" ",
|
|
@@ -3585,13 +3641,13 @@ var offthreadVideoCacheSizeInBytesOption = {
|
|
|
3585
3641
|
};
|
|
3586
3642
|
|
|
3587
3643
|
// src/options/offthreadvideo-threads.tsx
|
|
3588
|
-
import { jsx as jsx56, jsxs as
|
|
3644
|
+
import { jsx as jsx56, jsxs as jsxs41, Fragment as Fragment56 } from "react/jsx-runtime";
|
|
3589
3645
|
var value2 = null;
|
|
3590
3646
|
var cliFlag60 = "offthreadvideo-video-threads";
|
|
3591
3647
|
var offthreadVideoThreadsOption = {
|
|
3592
3648
|
name: "OffthreadVideo threads",
|
|
3593
3649
|
cliFlag: cliFlag60,
|
|
3594
|
-
description: () => /* @__PURE__ */
|
|
3650
|
+
description: () => /* @__PURE__ */ jsxs41(Fragment56, {
|
|
3595
3651
|
children: [
|
|
3596
3652
|
"The number of threads that",
|
|
3597
3653
|
/* @__PURE__ */ jsx56("a", {
|
|
@@ -3636,12 +3692,12 @@ var offthreadVideoThreadsOption = {
|
|
|
3636
3692
|
var DEFAULT_RENDER_FRAMES_OFFTHREAD_VIDEO_THREADS = 2;
|
|
3637
3693
|
|
|
3638
3694
|
// src/options/on-browser-download.tsx
|
|
3639
|
-
import { jsx as jsx57, jsxs as
|
|
3695
|
+
import { jsx as jsx57, jsxs as jsxs42, Fragment as Fragment57 } from "react/jsx-runtime";
|
|
3640
3696
|
var cliFlag61 = "on-browser-download";
|
|
3641
3697
|
var onBrowserDownloadOption = {
|
|
3642
3698
|
name: "Browser download callback function",
|
|
3643
3699
|
cliFlag: cliFlag61,
|
|
3644
|
-
description: () => /* @__PURE__ */
|
|
3700
|
+
description: () => /* @__PURE__ */ jsxs42(Fragment57, {
|
|
3645
3701
|
children: [
|
|
3646
3702
|
"Gets called when no compatible local browser is detected on the system and this API needs to download a browser. Return a callback to observe progress.",
|
|
3647
3703
|
" ",
|
|
@@ -3664,14 +3720,14 @@ var onBrowserDownloadOption = {
|
|
|
3664
3720
|
};
|
|
3665
3721
|
|
|
3666
3722
|
// src/options/out-dir.tsx
|
|
3667
|
-
import { jsx as jsx58, jsxs as
|
|
3723
|
+
import { jsx as jsx58, jsxs as jsxs43, Fragment as Fragment58 } from "react/jsx-runtime";
|
|
3668
3724
|
var cliFlag62 = "out-dir";
|
|
3669
3725
|
var currentOutDir = null;
|
|
3670
3726
|
var outDirOption = {
|
|
3671
3727
|
name: "Output Directory",
|
|
3672
3728
|
cliFlag: cliFlag62,
|
|
3673
3729
|
description: () => {
|
|
3674
|
-
return /* @__PURE__ */
|
|
3730
|
+
return /* @__PURE__ */ jsxs43(Fragment58, {
|
|
3675
3731
|
children: [
|
|
3676
3732
|
"Define the location of the resulting bundle. By default it is a folder called ",
|
|
3677
3733
|
/* @__PURE__ */ jsx58("code", {
|
|
@@ -3899,7 +3955,7 @@ var overrideWidthOption = {
|
|
|
3899
3955
|
};
|
|
3900
3956
|
|
|
3901
3957
|
// src/options/overwrite.tsx
|
|
3902
|
-
import { jsx as jsx63, jsxs as
|
|
3958
|
+
import { jsx as jsx63, jsxs as jsxs44, Fragment as Fragment63 } from "react/jsx-runtime";
|
|
3903
3959
|
var shouldOverwrite = null;
|
|
3904
3960
|
var cliFlag67 = "overwrite";
|
|
3905
3961
|
var validate2 = (value3) => {
|
|
@@ -3910,7 +3966,7 @@ var validate2 = (value3) => {
|
|
|
3910
3966
|
var overwriteOption = {
|
|
3911
3967
|
name: "Overwrite output",
|
|
3912
3968
|
cliFlag: cliFlag67,
|
|
3913
|
-
description: () => /* @__PURE__ */
|
|
3969
|
+
description: () => /* @__PURE__ */ jsxs44(Fragment63, {
|
|
3914
3970
|
children: [
|
|
3915
3971
|
"If set to ",
|
|
3916
3972
|
/* @__PURE__ */ jsx63("code", {
|
|
@@ -3956,14 +4012,14 @@ var overwriteOption = {
|
|
|
3956
4012
|
};
|
|
3957
4013
|
|
|
3958
4014
|
// src/options/package-manager.tsx
|
|
3959
|
-
import { jsx as jsx64, jsxs as
|
|
4015
|
+
import { jsx as jsx64, jsxs as jsxs45, Fragment as Fragment64 } from "react/jsx-runtime";
|
|
3960
4016
|
var cliFlag68 = "package-manager";
|
|
3961
4017
|
var currentPackageManager = null;
|
|
3962
4018
|
var packageManagerOption = {
|
|
3963
4019
|
name: "Package Manager",
|
|
3964
4020
|
cliFlag: cliFlag68,
|
|
3965
4021
|
description: () => {
|
|
3966
|
-
return /* @__PURE__ */
|
|
4022
|
+
return /* @__PURE__ */ jsxs45(Fragment64, {
|
|
3967
4023
|
children: [
|
|
3968
4024
|
"Forces a specific package manager to be used. By default, Remotion will auto-detect the package manager based on your lockfile.",
|
|
3969
4025
|
/* @__PURE__ */ jsx64("br", {}),
|
|
@@ -4039,13 +4095,13 @@ var validPixelFormatsForCodec = (codec) => {
|
|
|
4039
4095
|
};
|
|
4040
4096
|
|
|
4041
4097
|
// src/options/pixel-format.tsx
|
|
4042
|
-
import { jsx as jsx65, jsxs as
|
|
4098
|
+
import { jsx as jsx65, jsxs as jsxs46, Fragment as Fragment65 } from "react/jsx-runtime";
|
|
4043
4099
|
var currentPixelFormat = DEFAULT_PIXEL_FORMAT;
|
|
4044
4100
|
var cliFlag69 = "pixel-format";
|
|
4045
4101
|
var pixelFormatOption = {
|
|
4046
4102
|
name: "Pixel format",
|
|
4047
4103
|
cliFlag: cliFlag69,
|
|
4048
|
-
description: () => /* @__PURE__ */
|
|
4104
|
+
description: () => /* @__PURE__ */ jsxs46(Fragment65, {
|
|
4049
4105
|
children: [
|
|
4050
4106
|
"Sets the pixel format in FFmpeg. See",
|
|
4051
4107
|
" ",
|
|
@@ -4138,13 +4194,13 @@ var portOption = {
|
|
|
4138
4194
|
};
|
|
4139
4195
|
|
|
4140
4196
|
// src/options/prefer-lossless.tsx
|
|
4141
|
-
import { jsx as jsx67, jsxs as
|
|
4197
|
+
import { jsx as jsx67, jsxs as jsxs47, Fragment as Fragment67 } from "react/jsx-runtime";
|
|
4142
4198
|
var cliFlag71 = "prefer-lossless";
|
|
4143
4199
|
var input = false;
|
|
4144
4200
|
var preferLosslessAudioOption = {
|
|
4145
4201
|
name: "Prefer lossless",
|
|
4146
4202
|
cliFlag: cliFlag71,
|
|
4147
|
-
description: () => /* @__PURE__ */
|
|
4203
|
+
description: () => /* @__PURE__ */ jsxs47(Fragment67, {
|
|
4148
4204
|
children: [
|
|
4149
4205
|
"Uses a lossless audio codec, if one is available for the codec. If you set",
|
|
4150
4206
|
/* @__PURE__ */ jsx67("code", {
|
|
@@ -4177,13 +4233,13 @@ var preferLosslessAudioOption = {
|
|
|
4177
4233
|
};
|
|
4178
4234
|
|
|
4179
4235
|
// src/options/preview-sample-rate.tsx
|
|
4180
|
-
import { jsx as jsx68, jsxs as
|
|
4236
|
+
import { jsx as jsx68, jsxs as jsxs48, Fragment as Fragment68 } from "react/jsx-runtime";
|
|
4181
4237
|
var cliFlag72 = "preview-sample-rate";
|
|
4182
4238
|
var currentPreviewSampleRate = null;
|
|
4183
4239
|
var previewSampleRateOption = {
|
|
4184
4240
|
name: "Preview Sample Rate",
|
|
4185
4241
|
cliFlag: cliFlag72,
|
|
4186
|
-
description: () => /* @__PURE__ */
|
|
4242
|
+
description: () => /* @__PURE__ */ jsxs48(Fragment68, {
|
|
4187
4243
|
children: [
|
|
4188
4244
|
"Controls the sample rate used for audio playback during preview. When unset, Remotion uses ",
|
|
4189
4245
|
/* @__PURE__ */ jsx68("code", {
|
|
@@ -4211,15 +4267,15 @@ var previewSampleRateOption = {
|
|
|
4211
4267
|
};
|
|
4212
4268
|
|
|
4213
4269
|
// src/options/props.tsx
|
|
4214
|
-
import { jsx as jsx69, jsxs as
|
|
4270
|
+
import { jsx as jsx69, jsxs as jsxs49, Fragment as Fragment69 } from "react/jsx-runtime";
|
|
4215
4271
|
var cliFlag73 = "props";
|
|
4216
4272
|
var propsOption = {
|
|
4217
4273
|
name: "Input Props",
|
|
4218
4274
|
cliFlag: cliFlag73,
|
|
4219
|
-
description: () => /* @__PURE__ */
|
|
4275
|
+
description: () => /* @__PURE__ */ jsxs49(Fragment69, {
|
|
4220
4276
|
children: [
|
|
4221
4277
|
"Input Props to pass to the selected composition of your video. Must be a serialized JSON string (",
|
|
4222
|
-
/* @__PURE__ */
|
|
4278
|
+
/* @__PURE__ */ jsxs49("code", {
|
|
4223
4279
|
children: [
|
|
4224
4280
|
"--props='",
|
|
4225
4281
|
"{",
|
|
@@ -4257,7 +4313,7 @@ var propsOption = {
|
|
|
4257
4313
|
};
|
|
4258
4314
|
|
|
4259
4315
|
// src/options/prores-profile.tsx
|
|
4260
|
-
import { jsx as jsx70, jsxs as
|
|
4316
|
+
import { jsx as jsx70, jsxs as jsxs50, Fragment as Fragment70 } from "react/jsx-runtime";
|
|
4261
4317
|
var validProResProfiles = [
|
|
4262
4318
|
"4444-xq",
|
|
4263
4319
|
"4444",
|
|
@@ -4271,7 +4327,7 @@ var cliFlag74 = "prores-profile";
|
|
|
4271
4327
|
var proResProfileOption = {
|
|
4272
4328
|
name: "ProRes profile",
|
|
4273
4329
|
cliFlag: cliFlag74,
|
|
4274
|
-
description: () => /* @__PURE__ */
|
|
4330
|
+
description: () => /* @__PURE__ */ jsxs50(Fragment70, {
|
|
4275
4331
|
children: [
|
|
4276
4332
|
"Set the ProRes profile. This option is only valid if the codec has been set to ",
|
|
4277
4333
|
/* @__PURE__ */ jsx70("code", {
|
|
@@ -4334,14 +4390,14 @@ var proResProfileOption = {
|
|
|
4334
4390
|
};
|
|
4335
4391
|
|
|
4336
4392
|
// src/options/public-dir.tsx
|
|
4337
|
-
import { jsx as jsx71, jsxs as
|
|
4393
|
+
import { jsx as jsx71, jsxs as jsxs51, Fragment as Fragment71 } from "react/jsx-runtime";
|
|
4338
4394
|
var cliFlag75 = "public-dir";
|
|
4339
4395
|
var currentPublicDir = null;
|
|
4340
4396
|
var publicDirOption = {
|
|
4341
4397
|
name: "Public Directory",
|
|
4342
4398
|
cliFlag: cliFlag75,
|
|
4343
4399
|
description: () => {
|
|
4344
|
-
return /* @__PURE__ */
|
|
4400
|
+
return /* @__PURE__ */ jsxs51(Fragment71, {
|
|
4345
4401
|
children: [
|
|
4346
4402
|
"Define the location of the",
|
|
4347
4403
|
" ",
|
|
@@ -4383,13 +4439,13 @@ var publicDirOption = {
|
|
|
4383
4439
|
};
|
|
4384
4440
|
|
|
4385
4441
|
// src/options/public-license-key.tsx
|
|
4386
|
-
import { jsx as jsx72, jsxs as
|
|
4442
|
+
import { jsx as jsx72, jsxs as jsxs52, Fragment as Fragment72 } from "react/jsx-runtime";
|
|
4387
4443
|
var cliFlag76 = "public-license-key";
|
|
4388
4444
|
var currentPublicLicenseKey = null;
|
|
4389
4445
|
var publicLicenseKeyOption = {
|
|
4390
4446
|
name: "Public License Key",
|
|
4391
4447
|
cliFlag: cliFlag76,
|
|
4392
|
-
description: () => /* @__PURE__ */
|
|
4448
|
+
description: () => /* @__PURE__ */ jsxs52(Fragment72, {
|
|
4393
4449
|
children: [
|
|
4394
4450
|
"The public license key for your company license, obtained from the License keys page on ",
|
|
4395
4451
|
/* @__PURE__ */ jsx72("a", {
|
|
@@ -4430,14 +4486,14 @@ var publicLicenseKeyOption = {
|
|
|
4430
4486
|
};
|
|
4431
4487
|
|
|
4432
4488
|
// src/options/public-path.tsx
|
|
4433
|
-
import { jsx as jsx73, jsxs as
|
|
4489
|
+
import { jsx as jsx73, jsxs as jsxs53, Fragment as Fragment73 } from "react/jsx-runtime";
|
|
4434
4490
|
var cliFlag77 = "public-path";
|
|
4435
4491
|
var currentPublicPath = null;
|
|
4436
4492
|
var publicPathOption = {
|
|
4437
4493
|
name: "Public Path",
|
|
4438
4494
|
cliFlag: cliFlag77,
|
|
4439
4495
|
description: () => {
|
|
4440
|
-
return /* @__PURE__ */
|
|
4496
|
+
return /* @__PURE__ */ jsxs53(Fragment73, {
|
|
4441
4497
|
children: [
|
|
4442
4498
|
"The path of the URL where the bundle is going to be hosted. By default it is ",
|
|
4443
4499
|
/* @__PURE__ */ jsx73("code", {
|
|
@@ -4555,14 +4611,14 @@ var rspackOption = {
|
|
|
4555
4611
|
};
|
|
4556
4612
|
|
|
4557
4613
|
// src/options/runs.tsx
|
|
4558
|
-
import { jsx as jsx76, jsxs as
|
|
4614
|
+
import { jsx as jsx76, jsxs as jsxs54, Fragment as Fragment76 } from "react/jsx-runtime";
|
|
4559
4615
|
var DEFAULT_RUNS = 3;
|
|
4560
4616
|
var currentRuns = DEFAULT_RUNS;
|
|
4561
4617
|
var cliFlag80 = "runs";
|
|
4562
4618
|
var runsOption = {
|
|
4563
4619
|
name: "Benchmark runs",
|
|
4564
4620
|
cliFlag: cliFlag80,
|
|
4565
|
-
description: () => /* @__PURE__ */
|
|
4621
|
+
description: () => /* @__PURE__ */ jsxs54(Fragment76, {
|
|
4566
4622
|
children: [
|
|
4567
4623
|
"Specify how many times the video should be rendered during a benchmark. Default ",
|
|
4568
4624
|
/* @__PURE__ */ jsx76("code", {
|
|
@@ -4597,13 +4653,13 @@ var runsOption = {
|
|
|
4597
4653
|
};
|
|
4598
4654
|
|
|
4599
4655
|
// src/options/sample-rate.tsx
|
|
4600
|
-
import { jsx as jsx77, jsxs as
|
|
4656
|
+
import { jsx as jsx77, jsxs as jsxs55, Fragment as Fragment77 } from "react/jsx-runtime";
|
|
4601
4657
|
var cliFlag81 = "sample-rate";
|
|
4602
4658
|
var currentSampleRate = 48000;
|
|
4603
4659
|
var sampleRateOption = {
|
|
4604
4660
|
name: "Sample Rate",
|
|
4605
4661
|
cliFlag: cliFlag81,
|
|
4606
|
-
description: () => /* @__PURE__ */
|
|
4662
|
+
description: () => /* @__PURE__ */ jsxs55(Fragment77, {
|
|
4607
4663
|
children: [
|
|
4608
4664
|
"Controls the sample rate of the output audio. The default is",
|
|
4609
4665
|
" ",
|
|
@@ -4638,7 +4694,7 @@ var sampleRateOption = {
|
|
|
4638
4694
|
};
|
|
4639
4695
|
|
|
4640
4696
|
// src/options/scale.tsx
|
|
4641
|
-
import { jsx as jsx78, jsxs as
|
|
4697
|
+
import { jsx as jsx78, jsxs as jsxs56, Fragment as Fragment78 } from "react/jsx-runtime";
|
|
4642
4698
|
var currentScale = 1;
|
|
4643
4699
|
var cliFlag82 = "scale";
|
|
4644
4700
|
var validateScale = (value3) => {
|
|
@@ -4649,7 +4705,7 @@ var validateScale = (value3) => {
|
|
|
4649
4705
|
var scaleOption = {
|
|
4650
4706
|
name: "Scale",
|
|
4651
4707
|
cliFlag: cliFlag82,
|
|
4652
|
-
description: () => /* @__PURE__ */
|
|
4708
|
+
description: () => /* @__PURE__ */ jsxs56(Fragment78, {
|
|
4653
4709
|
children: [
|
|
4654
4710
|
"Scales the output dimensions by a factor. For example, a 1280x720px frame will become a 1920x1080px frame with a scale factor of ",
|
|
4655
4711
|
/* @__PURE__ */ jsx78("code", {
|
|
@@ -4723,7 +4779,7 @@ var skipSkillsOption = {
|
|
|
4723
4779
|
|
|
4724
4780
|
// src/options/still-frame.tsx
|
|
4725
4781
|
import { NoReactInternals as NoReactInternals4 } from "remotion/no-react";
|
|
4726
|
-
import { jsx as jsx80, jsxs as
|
|
4782
|
+
import { jsx as jsx80, jsxs as jsxs57, Fragment as Fragment80 } from "react/jsx-runtime";
|
|
4727
4783
|
var cliFlag84 = "frame";
|
|
4728
4784
|
var currentFrame = null;
|
|
4729
4785
|
var validate3 = (frame) => {
|
|
@@ -4736,7 +4792,7 @@ var validate3 = (frame) => {
|
|
|
4736
4792
|
var stillFrameOption = {
|
|
4737
4793
|
name: "Frame",
|
|
4738
4794
|
cliFlag: cliFlag84,
|
|
4739
|
-
description: () => /* @__PURE__ */
|
|
4795
|
+
description: () => /* @__PURE__ */ jsxs57(Fragment80, {
|
|
4740
4796
|
children: [
|
|
4741
4797
|
"Which frame should be rendered when rendering a still. Default",
|
|
4742
4798
|
" ",
|
|
@@ -4784,13 +4840,13 @@ var stillFrameOption = {
|
|
|
4784
4840
|
};
|
|
4785
4841
|
|
|
4786
4842
|
// src/options/still-image-format.tsx
|
|
4787
|
-
import { jsx as jsx81, jsxs as
|
|
4843
|
+
import { jsx as jsx81, jsxs as jsxs58, Fragment as Fragment81 } from "react/jsx-runtime";
|
|
4788
4844
|
var currentStillImageFormat = null;
|
|
4789
4845
|
var cliFlag85 = "image-format";
|
|
4790
4846
|
var stillImageFormatOption = {
|
|
4791
4847
|
name: "Still Image Format",
|
|
4792
4848
|
cliFlag: cliFlag85,
|
|
4793
|
-
description: () => /* @__PURE__ */
|
|
4849
|
+
description: () => /* @__PURE__ */ jsxs58(Fragment81, {
|
|
4794
4850
|
children: [
|
|
4795
4851
|
"The image format to use when rendering a still. Must be one of",
|
|
4796
4852
|
" ",
|
|
@@ -4873,7 +4929,7 @@ var throwIfSiteExistsOption = {
|
|
|
4873
4929
|
};
|
|
4874
4930
|
|
|
4875
4931
|
// src/options/timeout.tsx
|
|
4876
|
-
import { jsx as jsx82, jsxs as
|
|
4932
|
+
import { jsx as jsx82, jsxs as jsxs59, Fragment as Fragment82 } from "react/jsx-runtime";
|
|
4877
4933
|
var currentTimeout = DEFAULT_TIMEOUT;
|
|
4878
4934
|
var validate4 = (value3) => {
|
|
4879
4935
|
if (typeof value3 !== "number") {
|
|
@@ -4884,7 +4940,7 @@ var cliFlag87 = "timeout";
|
|
|
4884
4940
|
var delayRenderTimeoutInMillisecondsOption = {
|
|
4885
4941
|
name: "delayRender() timeout",
|
|
4886
4942
|
cliFlag: cliFlag87,
|
|
4887
|
-
description: () => /* @__PURE__ */
|
|
4943
|
+
description: () => /* @__PURE__ */ jsxs59(Fragment82, {
|
|
4888
4944
|
children: [
|
|
4889
4945
|
"A number describing how long the render may take to resolve all",
|
|
4890
4946
|
" ",
|
|
@@ -5005,13 +5061,13 @@ var versionFlagOption = {
|
|
|
5005
5061
|
};
|
|
5006
5062
|
|
|
5007
5063
|
// src/options/video-bitrate.tsx
|
|
5008
|
-
import { jsx as jsx85, jsxs as
|
|
5064
|
+
import { jsx as jsx85, jsxs as jsxs60, Fragment as Fragment85 } from "react/jsx-runtime";
|
|
5009
5065
|
var videoBitrate = null;
|
|
5010
5066
|
var cliFlag90 = "video-bitrate";
|
|
5011
5067
|
var videoBitrateOption = {
|
|
5012
5068
|
name: "Video Bitrate",
|
|
5013
5069
|
cliFlag: cliFlag90,
|
|
5014
|
-
description: () => /* @__PURE__ */
|
|
5070
|
+
description: () => /* @__PURE__ */ jsxs60(Fragment85, {
|
|
5015
5071
|
children: [
|
|
5016
5072
|
"Specify the target bitrate for the generated video. The syntax for FFmpeg",
|
|
5017
5073
|
"'",
|
|
@@ -5058,13 +5114,13 @@ var videoBitrateOption = {
|
|
|
5058
5114
|
};
|
|
5059
5115
|
|
|
5060
5116
|
// src/options/video-cache-size.tsx
|
|
5061
|
-
import { jsx as jsx86, jsxs as
|
|
5117
|
+
import { jsx as jsx86, jsxs as jsxs61, Fragment as Fragment86 } from "react/jsx-runtime";
|
|
5062
5118
|
var mediaCacheSizeInBytes = null;
|
|
5063
5119
|
var cliFlag91 = "media-cache-size-in-bytes";
|
|
5064
5120
|
var mediaCacheSizeInBytesOption = {
|
|
5065
5121
|
name: "@remotion/media cache size",
|
|
5066
5122
|
cliFlag: cliFlag91,
|
|
5067
|
-
description: () => /* @__PURE__ */
|
|
5123
|
+
description: () => /* @__PURE__ */ jsxs61(Fragment86, {
|
|
5068
5124
|
children: [
|
|
5069
5125
|
"Specify the memory budget for decoded media cached by",
|
|
5070
5126
|
" ",
|
|
@@ -5332,13 +5388,13 @@ var videoCodecOption = {
|
|
|
5332
5388
|
};
|
|
5333
5389
|
|
|
5334
5390
|
// src/options/video-image-format.tsx
|
|
5335
|
-
import { jsx as jsx88, jsxs as
|
|
5391
|
+
import { jsx as jsx88, jsxs as jsxs62, Fragment as Fragment88 } from "react/jsx-runtime";
|
|
5336
5392
|
var currentVideoImageFormat = null;
|
|
5337
5393
|
var cliFlag93 = "image-format";
|
|
5338
5394
|
var videoImageFormatOption = {
|
|
5339
5395
|
name: "Video Image Format",
|
|
5340
5396
|
cliFlag: cliFlag93,
|
|
5341
|
-
description: () => /* @__PURE__ */
|
|
5397
|
+
description: () => /* @__PURE__ */ jsxs62(Fragment88, {
|
|
5342
5398
|
children: [
|
|
5343
5399
|
"The image format to use when rendering frames for a video. Must be one of",
|
|
5344
5400
|
" ",
|
|
@@ -5426,12 +5482,12 @@ var videoImageFormatOption = {
|
|
|
5426
5482
|
};
|
|
5427
5483
|
|
|
5428
5484
|
// src/options/webhook-custom-data.tsx
|
|
5429
|
-
import { jsxs as
|
|
5485
|
+
import { jsxs as jsxs63, Fragment as Fragment89 } from "react/jsx-runtime";
|
|
5430
5486
|
var cliFlag94 = "webhook-custom-data";
|
|
5431
5487
|
var webhookCustomDataOption = {
|
|
5432
5488
|
name: "Webhook custom data",
|
|
5433
5489
|
cliFlag: cliFlag94,
|
|
5434
|
-
description: (type) => /* @__PURE__ */
|
|
5490
|
+
description: (type) => /* @__PURE__ */ jsxs63(Fragment89, {
|
|
5435
5491
|
children: [
|
|
5436
5492
|
"Pass up to 1,024 bytes of a JSON-serializable object to the webhook. This data will be included in the webhook payload.",
|
|
5437
5493
|
" ",
|
|
@@ -5495,7 +5551,7 @@ var webpackPollOption = {
|
|
|
5495
5551
|
};
|
|
5496
5552
|
|
|
5497
5553
|
// src/options/x264-preset.tsx
|
|
5498
|
-
import { jsx as jsx90, jsxs as
|
|
5554
|
+
import { jsx as jsx90, jsxs as jsxs64, Fragment as Fragment91 } from "react/jsx-runtime";
|
|
5499
5555
|
var x264PresetOptions = [
|
|
5500
5556
|
"ultrafast",
|
|
5501
5557
|
"superfast",
|
|
@@ -5514,7 +5570,7 @@ var DEFAULT_PRESET = "medium";
|
|
|
5514
5570
|
var x264Option = {
|
|
5515
5571
|
name: "x264 Preset",
|
|
5516
5572
|
cliFlag: cliFlag96,
|
|
5517
|
-
description: () => /* @__PURE__ */
|
|
5573
|
+
description: () => /* @__PURE__ */ jsxs64(Fragment91, {
|
|
5518
5574
|
children: [
|
|
5519
5575
|
"Sets a x264 preset profile. Only applies to videos rendered with",
|
|
5520
5576
|
" ",
|
package/dist/esm/index.mjs
CHANGED
|
@@ -19493,7 +19493,7 @@ var DEFAULT = null;
|
|
|
19493
19493
|
var cliFlag = "separate-audio-to";
|
|
19494
19494
|
var separateAudioOption = {
|
|
19495
19495
|
cliFlag,
|
|
19496
|
-
description: () => `If set, the audio will not be included in the main output but rendered as a separate file at the location you pass. It is recommended to use an absolute path. If a relative path is passed, it is relative to the Remotion Root.`,
|
|
19496
|
+
description: () => `If set, the audio will not be included in the main output but rendered as a separate file at the location you pass. If the render contains no audio, a silent audio file is produced even when enforceAudioTrack is false. The muted option still takes precedence. It is recommended to use an absolute path. If a relative path is passed, it is relative to the Remotion Root.`,
|
|
19497
19497
|
docLink: "https://remotion.dev/docs/renderer/render-media",
|
|
19498
19498
|
getValue: ({ commandLine }) => {
|
|
19499
19499
|
if (commandLine[cliFlag]) {
|
|
@@ -23284,7 +23284,8 @@ var createAudio = async ({
|
|
|
23284
23284
|
trimLeftOffset,
|
|
23285
23285
|
trimRightOffset,
|
|
23286
23286
|
forSeamlessAacConcatenation,
|
|
23287
|
-
sampleRate
|
|
23287
|
+
sampleRate,
|
|
23288
|
+
enforceAudioTrack
|
|
23288
23289
|
}) => {
|
|
23289
23290
|
const fileUrlAssets = await convertAssetsToFileUrls({
|
|
23290
23291
|
assets,
|
|
@@ -23363,6 +23364,11 @@ var createAudio = async ({
|
|
|
23363
23364
|
})
|
|
23364
23365
|
] : []
|
|
23365
23366
|
];
|
|
23367
|
+
if (!enforceAudioTrack && preprocessed.length === 0) {
|
|
23368
|
+
deleteDirectory(downloadMap.audioMixing);
|
|
23369
|
+
onProgress(1);
|
|
23370
|
+
return null;
|
|
23371
|
+
}
|
|
23366
23372
|
const merged = path27.join(downloadMap.audioPreprocessing, "merged.wav");
|
|
23367
23373
|
const extension = getExtensionFromAudioCodec(audioCodec);
|
|
23368
23374
|
const outName = path27.join(downloadMap.audioPreprocessing, `audio.${extension}`);
|
|
@@ -23524,7 +23530,10 @@ var getShouldRenderAudio = ({
|
|
|
23524
23530
|
if (assetsInfo === null) {
|
|
23525
23531
|
return "maybe";
|
|
23526
23532
|
}
|
|
23527
|
-
|
|
23533
|
+
if (!codecSupportsMedia(codec).video) {
|
|
23534
|
+
return "yes";
|
|
23535
|
+
}
|
|
23536
|
+
return assetsInfo.assets.some((frame) => frame.audioAndVideoAssets.length > 0 || frame.inlineAudioAssets.length > 0) ? "yes" : "no";
|
|
23528
23537
|
};
|
|
23529
23538
|
|
|
23530
23539
|
// src/validate-videobitrate.ts
|
|
@@ -23605,10 +23614,11 @@ var innerStitchFramesToVideo = async ({
|
|
|
23605
23614
|
assetsInfo.downloadMap.preventCleanup();
|
|
23606
23615
|
const proResProfileName = getProResProfileName(codec, proResProfile);
|
|
23607
23616
|
const mediaSupport = codecSupportsMedia(codec);
|
|
23617
|
+
const enforceAudioTrackForOutput = enforceAudioTrack || Boolean(separateAudioTo);
|
|
23608
23618
|
const renderAudioEvaluation = getShouldRenderAudio({
|
|
23609
23619
|
assetsInfo,
|
|
23610
23620
|
codec,
|
|
23611
|
-
enforceAudioTrack,
|
|
23621
|
+
enforceAudioTrack: enforceAudioTrackForOutput,
|
|
23612
23622
|
muted
|
|
23613
23623
|
});
|
|
23614
23624
|
if (renderAudioEvaluation === "maybe") {
|
|
@@ -23690,7 +23700,8 @@ var innerStitchFramesToVideo = async ({
|
|
|
23690
23700
|
trimLeftOffset: assetsInfo.trimLeftOffset,
|
|
23691
23701
|
trimRightOffset: assetsInfo.trimRightOffset,
|
|
23692
23702
|
forSeamlessAacConcatenation: assetsInfo.forSeamlessAacConcatenation,
|
|
23693
|
-
sampleRate
|
|
23703
|
+
sampleRate,
|
|
23704
|
+
enforceAudioTrack: enforceAudioTrackForOutput || !shouldRenderVideo
|
|
23694
23705
|
}) : null;
|
|
23695
23706
|
if (mediaSupport.audio && !mediaSupport.video) {
|
|
23696
23707
|
if (!resolvedAudioCodec) {
|
|
@@ -23718,6 +23729,9 @@ var innerStitchFramesToVideo = async ({
|
|
|
23718
23729
|
assetsInfo.downloadMap.allowCleanup();
|
|
23719
23730
|
return Promise.resolve(file);
|
|
23720
23731
|
}
|
|
23732
|
+
if (separateAudioTo && !audio) {
|
|
23733
|
+
throw new Error(`\`separateAudioTo\` was set to ${JSON.stringify(separateAudioTo)}, but this render included no audio. Audio output is disabled by the muted option or selected codec.`);
|
|
23734
|
+
}
|
|
23721
23735
|
const resolvedHardwareAcceleration = preEncodedFileLocation ? "disable" : resolveHardwareAcceleration({
|
|
23722
23736
|
codec,
|
|
23723
23737
|
hardwareAcceleration,
|
|
@@ -23801,10 +23815,7 @@ var innerStitchFramesToVideo = async ({
|
|
|
23801
23815
|
}
|
|
23802
23816
|
}
|
|
23803
23817
|
});
|
|
23804
|
-
if (separateAudioTo) {
|
|
23805
|
-
if (!audio) {
|
|
23806
|
-
throw new Error(`\`separateAudioTo\` was set to ${JSON.stringify(separateAudioTo)}, but this render included no audio`);
|
|
23807
|
-
}
|
|
23818
|
+
if (separateAudioTo && audio) {
|
|
23808
23819
|
const finalDestination = path29.resolve(remotionRoot, separateAudioTo);
|
|
23809
23820
|
cpSync2(audio, finalDestination);
|
|
23810
23821
|
rmSync4(audio);
|
package/dist/esm/pure.mjs
CHANGED
|
@@ -315,7 +315,7 @@ var DEFAULT = null;
|
|
|
315
315
|
var cliFlag = "separate-audio-to";
|
|
316
316
|
var separateAudioOption = {
|
|
317
317
|
cliFlag,
|
|
318
|
-
description: () => `If set, the audio will not be included in the main output but rendered as a separate file at the location you pass. It is recommended to use an absolute path. If a relative path is passed, it is relative to the Remotion Root.`,
|
|
318
|
+
description: () => `If set, the audio will not be included in the main output but rendered as a separate file at the location you pass. If the render contains no audio, a silent audio file is produced even when enforceAudioTrack is false. The muted option still takes precedence. It is recommended to use an absolute path. If a relative path is passed, it is relative to the Remotion Root.`,
|
|
319
319
|
docLink: "https://remotion.dev/docs/renderer/render-media",
|
|
320
320
|
getValue: ({ commandLine }) => {
|
|
321
321
|
if (commandLine[cliFlag]) {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
export declare const enforceAudioOption: {
|
|
2
2
|
name: string;
|
|
3
3
|
cliFlag: "enforce-audio-track";
|
|
4
|
-
description: () => import("react/jsx-runtime").JSX.Element;
|
|
4
|
+
description: (mode: "cli" | "ssr") => import("react/jsx-runtime").JSX.Element;
|
|
5
5
|
ssrName: string;
|
|
6
6
|
docLink: string;
|
|
7
7
|
type: boolean;
|
|
@@ -8,7 +8,21 @@ const cliFlag = 'enforce-audio-track';
|
|
|
8
8
|
exports.enforceAudioOption = {
|
|
9
9
|
name: 'Enforce Audio Track',
|
|
10
10
|
cliFlag,
|
|
11
|
-
description: () => (jsx_runtime_1.
|
|
11
|
+
description: (mode) => (jsx_runtime_1.jsxs(jsx_runtime_1.Fragment, { children: [
|
|
12
|
+
jsx_runtime_1.jsxs("p", { children: ["Defaults to ",
|
|
13
|
+
jsx_runtime_1.jsx("code", { children: "false" }),
|
|
14
|
+
". If ",
|
|
15
|
+
jsx_runtime_1.jsx("code", { children: "true" }),
|
|
16
|
+
", include a silent audio track when the render contains no audio. If ",
|
|
17
|
+
jsx_runtime_1.jsx("code", { children: "false" }),
|
|
18
|
+
", omit the audio track when no audio is present. Audio-only exports and", ' ', jsx_runtime_1.jsx("code", { children: mode === 'cli' ? '--separate-audio-to' : 'separateAudioTo' }), ' ', "still produce an audio file, even when silent."] }), jsx_runtime_1.jsxs("p", { children: [mode === 'cli' ? (jsx_runtime_1.jsxs(jsx_runtime_1.Fragment, { children: ["Pass ",
|
|
19
|
+
jsx_runtime_1.jsx("code", { children: "--enforce-audio-track" })
|
|
20
|
+
] })) : (jsx_runtime_1.jsxs(jsx_runtime_1.Fragment, { children: ["Set this to ",
|
|
21
|
+
jsx_runtime_1.jsx("code", { children: "true" })
|
|
22
|
+
] })), ' ', "for", ' ', jsx_runtime_1.jsx("a", { href: "/docs/distributed-rendering", children: "chunks that will later be concatenated" }),
|
|
23
|
+
", because other chunks may contain audio.", ' ', jsx_runtime_1.jsx("code", { children: mode === 'cli' ? '--muted' : 'muted: true' }),
|
|
24
|
+
" takes precedence."] })
|
|
25
|
+
] })),
|
|
12
26
|
ssrName: 'enforceAudioTrack',
|
|
13
27
|
docLink: 'https://www.remotion.dev/docs/config#setenforceaudiotrack-',
|
|
14
28
|
type: false,
|
package/dist/options/index.d.ts
CHANGED
|
@@ -172,7 +172,7 @@ export declare const allOptions: {
|
|
|
172
172
|
enforceAudioOption: {
|
|
173
173
|
name: string;
|
|
174
174
|
cliFlag: "enforce-audio-track";
|
|
175
|
-
description: () => import("react/jsx-runtime").JSX.Element;
|
|
175
|
+
description: (mode: "cli" | "ssr") => import("react/jsx-runtime").JSX.Element;
|
|
176
176
|
ssrName: string;
|
|
177
177
|
docLink: string;
|
|
178
178
|
type: boolean;
|
|
@@ -2031,7 +2031,7 @@ export declare const optionsMap: {
|
|
|
2031
2031
|
readonly enforceAudioTrack: {
|
|
2032
2032
|
name: string;
|
|
2033
2033
|
cliFlag: "enforce-audio-track";
|
|
2034
|
-
description: () => import("react/jsx-runtime").JSX.Element;
|
|
2034
|
+
description: (mode: "cli" | "ssr") => import("react/jsx-runtime").JSX.Element;
|
|
2035
2035
|
ssrName: string;
|
|
2036
2036
|
docLink: string;
|
|
2037
2037
|
type: boolean;
|
|
@@ -5,7 +5,7 @@ const DEFAULT = null;
|
|
|
5
5
|
const cliFlag = 'separate-audio-to';
|
|
6
6
|
exports.separateAudioOption = {
|
|
7
7
|
cliFlag,
|
|
8
|
-
description: () => `If set, the audio will not be included in the main output but rendered as a separate file at the location you pass. It is recommended to use an absolute path. If a relative path is passed, it is relative to the Remotion Root.`,
|
|
8
|
+
description: () => `If set, the audio will not be included in the main output but rendered as a separate file at the location you pass. If the render contains no audio, a silent audio file is produced even when enforceAudioTrack is false. The muted option still takes precedence. It is recommended to use an absolute path. If a relative path is passed, it is relative to the Remotion Root.`,
|
|
9
9
|
docLink: 'https://remotion.dev/docs/renderer/render-media',
|
|
10
10
|
getValue: ({ commandLine }) => {
|
|
11
11
|
if (commandLine[cliFlag]) {
|
package/dist/render-has-audio.js
CHANGED
|
@@ -15,6 +15,12 @@ const getShouldRenderAudio = ({ codec, assetsInfo, enforceAudioTrack, muted, })
|
|
|
15
15
|
if (assetsInfo === null) {
|
|
16
16
|
return 'maybe';
|
|
17
17
|
}
|
|
18
|
-
|
|
18
|
+
if (!(0, codec_supports_media_1.codecSupportsMedia)(codec).video) {
|
|
19
|
+
return 'yes';
|
|
20
|
+
}
|
|
21
|
+
return assetsInfo.assets.some((frame) => frame.audioAndVideoAssets.length > 0 ||
|
|
22
|
+
frame.inlineAudioAssets.length > 0)
|
|
23
|
+
? 'yes'
|
|
24
|
+
: 'no';
|
|
19
25
|
};
|
|
20
26
|
exports.getShouldRenderAudio = getShouldRenderAudio;
|
|
@@ -64,10 +64,11 @@ const innerStitchFramesToVideo = async ({ assetsInfo, audioBitrate, audioCodec:
|
|
|
64
64
|
assetsInfo.downloadMap.preventCleanup();
|
|
65
65
|
const proResProfileName = (0, get_prores_profile_name_1.getProResProfileName)(codec, proResProfile);
|
|
66
66
|
const mediaSupport = (0, codec_supports_media_1.codecSupportsMedia)(codec);
|
|
67
|
+
const enforceAudioTrackForOutput = enforceAudioTrack || Boolean(separateAudioTo);
|
|
67
68
|
const renderAudioEvaluation = (0, render_has_audio_1.getShouldRenderAudio)({
|
|
68
69
|
assetsInfo,
|
|
69
70
|
codec,
|
|
70
|
-
enforceAudioTrack,
|
|
71
|
+
enforceAudioTrack: enforceAudioTrackForOutput,
|
|
71
72
|
muted,
|
|
72
73
|
});
|
|
73
74
|
if (renderAudioEvaluation === 'maybe') {
|
|
@@ -158,6 +159,7 @@ const innerStitchFramesToVideo = async ({ assetsInfo, audioBitrate, audioCodec:
|
|
|
158
159
|
trimRightOffset: assetsInfo.trimRightOffset,
|
|
159
160
|
forSeamlessAacConcatenation: assetsInfo.forSeamlessAacConcatenation,
|
|
160
161
|
sampleRate,
|
|
162
|
+
enforceAudioTrack: enforceAudioTrackForOutput || !shouldRenderVideo,
|
|
161
163
|
})
|
|
162
164
|
: null;
|
|
163
165
|
if (mediaSupport.audio && !mediaSupport.video) {
|
|
@@ -190,6 +192,9 @@ const innerStitchFramesToVideo = async ({ assetsInfo, audioBitrate, audioCodec:
|
|
|
190
192
|
assetsInfo.downloadMap.allowCleanup();
|
|
191
193
|
return Promise.resolve(file);
|
|
192
194
|
}
|
|
195
|
+
if (separateAudioTo && !audio) {
|
|
196
|
+
throw new Error(`\`separateAudioTo\` was set to ${JSON.stringify(separateAudioTo)}, but this render included no audio. Audio output is disabled by the muted option or selected codec.`);
|
|
197
|
+
}
|
|
193
198
|
// Parallel encoding already resolved the encoder in the pre-stitcher.
|
|
194
199
|
const resolvedHardwareAcceleration = preEncodedFileLocation
|
|
195
200
|
? 'disable'
|
|
@@ -290,10 +295,7 @@ const innerStitchFramesToVideo = async ({ assetsInfo, audioBitrate, audioCodec:
|
|
|
290
295
|
}
|
|
291
296
|
}
|
|
292
297
|
});
|
|
293
|
-
if (separateAudioTo) {
|
|
294
|
-
if (!audio) {
|
|
295
|
-
throw new Error(`\`separateAudioTo\` was set to ${JSON.stringify(separateAudioTo)}, but this render included no audio`);
|
|
296
|
-
}
|
|
298
|
+
if (separateAudioTo && audio) {
|
|
297
299
|
const finalDestination = node_path_1.default.resolve(remotionRoot, separateAudioTo);
|
|
298
300
|
(0, node_fs_1.cpSync)(audio, finalDestination);
|
|
299
301
|
(0, node_fs_1.rmSync)(audio);
|
package/package.json
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"url": "https://github.com/remotion-dev/remotion/tree/main/packages/renderer"
|
|
4
4
|
},
|
|
5
5
|
"name": "@remotion/renderer",
|
|
6
|
-
"version": "4.0.
|
|
6
|
+
"version": "4.0.523",
|
|
7
7
|
"description": "Render Remotion videos using Node.js or Bun",
|
|
8
8
|
"main": "dist/index.js",
|
|
9
9
|
"types": "dist/index.d.ts",
|
|
@@ -22,11 +22,11 @@
|
|
|
22
22
|
},
|
|
23
23
|
"dependencies": {
|
|
24
24
|
"execa": "5.1.1",
|
|
25
|
-
"remotion": "4.0.
|
|
26
|
-
"@remotion/streaming": "4.0.
|
|
25
|
+
"remotion": "4.0.523",
|
|
26
|
+
"@remotion/streaming": "4.0.523",
|
|
27
27
|
"source-map": "0.8.0",
|
|
28
28
|
"ws": "8.21.0",
|
|
29
|
-
"@remotion/licensing": "4.0.
|
|
29
|
+
"@remotion/licensing": "4.0.523"
|
|
30
30
|
},
|
|
31
31
|
"peerDependencies": {
|
|
32
32
|
"react": ">=16.8.0",
|
|
@@ -40,19 +40,19 @@
|
|
|
40
40
|
"react-dom": "19.2.3",
|
|
41
41
|
"@typescript/native-preview": "7.0.0-dev.20260217.1",
|
|
42
42
|
"@types/ws": "8.5.10",
|
|
43
|
-
"@remotion/example-videos": "4.0.
|
|
44
|
-
"@remotion/eslint-config-internal": "4.0.
|
|
43
|
+
"@remotion/example-videos": "4.0.523",
|
|
44
|
+
"@remotion/eslint-config-internal": "4.0.523",
|
|
45
45
|
"eslint": "9.19.0",
|
|
46
46
|
"@types/node": "20.12.14"
|
|
47
47
|
},
|
|
48
48
|
"optionalDependencies": {
|
|
49
|
-
"@remotion/compositor-darwin-arm64": "4.0.
|
|
50
|
-
"@remotion/compositor-darwin-x64": "4.0.
|
|
51
|
-
"@remotion/compositor-linux-arm64-gnu": "4.0.
|
|
52
|
-
"@remotion/compositor-linux-arm64-musl": "4.0.
|
|
53
|
-
"@remotion/compositor-linux-x64-gnu": "4.0.
|
|
54
|
-
"@remotion/compositor-linux-x64-musl": "4.0.
|
|
55
|
-
"@remotion/compositor-win32-x64-msvc": "4.0.
|
|
49
|
+
"@remotion/compositor-darwin-arm64": "4.0.523",
|
|
50
|
+
"@remotion/compositor-darwin-x64": "4.0.523",
|
|
51
|
+
"@remotion/compositor-linux-arm64-gnu": "4.0.523",
|
|
52
|
+
"@remotion/compositor-linux-arm64-musl": "4.0.523",
|
|
53
|
+
"@remotion/compositor-linux-x64-gnu": "4.0.523",
|
|
54
|
+
"@remotion/compositor-linux-x64-musl": "4.0.523",
|
|
55
|
+
"@remotion/compositor-win32-x64-msvc": "4.0.523"
|
|
56
56
|
},
|
|
57
57
|
"keywords": [
|
|
58
58
|
"remotion",
|