@remotion/cli 3.2.24 → 3.2.26-crf.18
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/benchmark.d.ts +1 -0
- package/dist/benchmark.js +180 -0
- package/dist/bundle.d.ts +1 -0
- package/dist/bundle.js +32 -0
- package/dist/compositions.js +2 -1
- package/dist/config/bundle-out-dir.d.ts +2 -0
- package/dist/config/bundle-out-dir.js +12 -0
- package/dist/config/get-public-path.d.ts +2 -0
- package/dist/config/get-public-path.js +12 -0
- package/dist/config/image-format.js +8 -1
- package/dist/config/index.d.ts +3 -1
- package/dist/config/log.d.ts +1 -1
- package/dist/config/overwrite.d.ts +3 -1
- package/dist/config/overwrite.js +2 -3
- package/dist/determine-image-format.d.ts +11 -0
- package/dist/determine-image-format.js +48 -0
- package/dist/editor/components/Button.d.ts +4 -0
- package/dist/editor/components/Button.js +24 -0
- package/dist/editor/components/PreviewZoomControls.d.ts +2 -0
- package/dist/editor/components/PreviewZoomControls.js +49 -0
- package/dist/editor/helpers/normalize-wheel.d.ts +5 -0
- package/dist/editor/helpers/normalize-wheel.js +20 -0
- package/dist/event-source-events.d.ts +3 -0
- package/dist/event-source.js +1 -1
- package/dist/get-cli-options.d.ts +11 -3
- package/dist/get-cli-options.js +25 -29
- package/dist/get-env.d.ts +1 -1
- package/dist/get-env.js +58 -6
- package/dist/get-final-output-codec.d.ts +9 -5
- package/dist/get-final-output-codec.js +56 -56
- package/dist/get-render-media-options.d.ts +7 -0
- package/dist/get-render-media-options.js +44 -0
- package/dist/index.d.ts +21 -4
- package/dist/index.js +13 -3
- package/dist/initialize-cli.d.ts +1 -0
- package/dist/initialize-cli.js +22 -0
- package/dist/lambda-command.js +0 -2
- package/dist/parse-command-line.d.ts +1 -1
- package/dist/parse-command-line.js +1 -12
- package/dist/prepare-entry-point.d.ts +12 -0
- package/dist/prepare-entry-point.js +37 -0
- package/dist/preview-server/routes.d.ts +2 -1
- package/dist/preview-server/routes.js +4 -2
- package/dist/preview-server/start-server.d.ts +1 -1
- package/dist/preview-server/start-server.js +2 -1
- package/dist/preview.js +10 -4
- package/dist/print-help.js +6 -3
- package/dist/progress-bar.js +3 -1
- package/dist/render.js +22 -32
- package/dist/still.js +15 -25
- package/dist/validate-image-format.d.ts +2 -0
- package/dist/validate-image-format.js +15 -0
- package/dist/versions.js +1 -1
- package/dist/webpack-cache.d.ts +12 -0
- package/dist/webpack-cache.js +66 -0
- package/package.json +7 -7
package/dist/get-cli-options.js
CHANGED
|
@@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.getCliOptions = exports.getAndValidateAbsoluteOutputFile = void 0;
|
|
6
|
+
exports.getCliOptions = exports.getAndValidateAbsoluteOutputFile = exports.getFinalCodec = exports.validateFfmpegCanUseCodec = void 0;
|
|
7
7
|
const renderer_1 = require("@remotion/renderer");
|
|
8
8
|
const fs_1 = __importDefault(require("fs"));
|
|
9
9
|
const path_1 = __importDefault(require("path"));
|
|
@@ -13,7 +13,7 @@ const get_final_output_codec_1 = require("./get-final-output-codec");
|
|
|
13
13
|
const get_input_props_1 = require("./get-input-props");
|
|
14
14
|
const image_formats_1 = require("./image-formats");
|
|
15
15
|
const log_1 = require("./log");
|
|
16
|
-
const
|
|
16
|
+
const parse_command_line_1 = require("./parse-command-line");
|
|
17
17
|
const getAndValidateFrameRange = () => {
|
|
18
18
|
const frameRange = config_1.ConfigInternals.getRange();
|
|
19
19
|
if (typeof frameRange === 'number') {
|
|
@@ -23,20 +23,11 @@ const getAndValidateFrameRange = () => {
|
|
|
23
23
|
}
|
|
24
24
|
return frameRange;
|
|
25
25
|
};
|
|
26
|
-
const
|
|
27
|
-
const userCodec = config_1.ConfigInternals.getOutputCodecOrUndefined();
|
|
28
|
-
const codec = (0, get_final_output_codec_1.getFinalOutputCodec)({
|
|
29
|
-
codec: userCodec,
|
|
30
|
-
fileExtension: options.isLambda
|
|
31
|
-
? null
|
|
32
|
-
: renderer_1.RenderInternals.getExtensionOfFilename((0, user_passed_output_location_1.getUserPassedOutputLocation)()),
|
|
33
|
-
emitWarning: true,
|
|
34
|
-
});
|
|
26
|
+
const validateFfmpegCanUseCodec = async (codec) => {
|
|
35
27
|
const ffmpegExecutable = config_1.ConfigInternals.getCustomFfmpegExecutable();
|
|
36
28
|
if (codec === 'vp8' &&
|
|
37
29
|
!(await renderer_1.RenderInternals.ffmpegHasFeature({
|
|
38
30
|
feature: 'enable-libvpx',
|
|
39
|
-
isLambda: options.isLambda,
|
|
40
31
|
ffmpegExecutable,
|
|
41
32
|
}))) {
|
|
42
33
|
log_1.Log.error("The Vp8 codec has been selected, but your FFMPEG binary wasn't compiled with the --enable-lipvpx flag.");
|
|
@@ -45,7 +36,6 @@ const getFinalCodec = async (options) => {
|
|
|
45
36
|
if (codec === 'h265' &&
|
|
46
37
|
!(await renderer_1.RenderInternals.ffmpegHasFeature({
|
|
47
38
|
feature: 'enable-gpl',
|
|
48
|
-
isLambda: options.isLambda,
|
|
49
39
|
ffmpegExecutable,
|
|
50
40
|
}))) {
|
|
51
41
|
log_1.Log.error("The H265 codec has been selected, but your FFMPEG binary wasn't compiled with the --enable-gpl flag.");
|
|
@@ -54,14 +44,24 @@ const getFinalCodec = async (options) => {
|
|
|
54
44
|
if (codec === 'h265' &&
|
|
55
45
|
!(await renderer_1.RenderInternals.ffmpegHasFeature({
|
|
56
46
|
feature: 'enable-libx265',
|
|
57
|
-
isLambda: options.isLambda,
|
|
58
47
|
ffmpegExecutable,
|
|
59
48
|
}))) {
|
|
60
49
|
log_1.Log.error("The H265 codec has been selected, but your FFMPEG binary wasn't compiled with the --enable-libx265 flag.");
|
|
61
50
|
log_1.Log.error('This does not work, please recompile your FFMPEG binary with --enable-gpl --enable-libx265 or choose a different codec.');
|
|
62
51
|
}
|
|
63
|
-
return codec;
|
|
64
52
|
};
|
|
53
|
+
exports.validateFfmpegCanUseCodec = validateFfmpegCanUseCodec;
|
|
54
|
+
const getFinalCodec = (options) => {
|
|
55
|
+
var _a;
|
|
56
|
+
const { codec, reason } = (0, get_final_output_codec_1.getFinalOutputCodec)({
|
|
57
|
+
cliFlag: parse_command_line_1.parsedCli.codec,
|
|
58
|
+
configFile: (_a = config_1.ConfigInternals.getOutputCodecOrUndefined()) !== null && _a !== void 0 ? _a : null,
|
|
59
|
+
downloadName: options.downloadName,
|
|
60
|
+
outName: options.outName,
|
|
61
|
+
});
|
|
62
|
+
return { codec, reason };
|
|
63
|
+
};
|
|
64
|
+
exports.getFinalCodec = getFinalCodec;
|
|
65
65
|
const getBrowser = () => { var _a; return (_a = config_1.ConfigInternals.getBrowser()) !== null && _a !== void 0 ? _a : renderer_1.RenderInternals.DEFAULT_BROWSER; };
|
|
66
66
|
const getAndValidateAbsoluteOutputFile = (relativeOutputLocation, overwrite) => {
|
|
67
67
|
const absoluteOutputFile = path_1.default.resolve(process.cwd(), relativeOutputLocation);
|
|
@@ -119,26 +119,23 @@ const getAndValidateBrowser = async (browserExecutable) => {
|
|
|
119
119
|
const getCliOptions = async (options) => {
|
|
120
120
|
var _a;
|
|
121
121
|
const frameRange = getAndValidateFrameRange();
|
|
122
|
-
const codec = options.type === 'get-compositions'
|
|
123
|
-
? 'h264'
|
|
124
|
-
: await getFinalCodec({
|
|
125
|
-
isLambda: options.isLambda,
|
|
126
|
-
});
|
|
127
122
|
const shouldOutputImageSequence = options.type === 'still'
|
|
128
123
|
? true
|
|
129
124
|
: await getAndValidateShouldOutputImageSequence({
|
|
130
125
|
frameRange,
|
|
131
126
|
isLambda: options.isLambda,
|
|
132
127
|
});
|
|
133
|
-
const overwrite = config_1.ConfigInternals.getShouldOverwrite(
|
|
134
|
-
|
|
135
|
-
|
|
128
|
+
const overwrite = config_1.ConfigInternals.getShouldOverwrite({
|
|
129
|
+
defaultValue: !options.isLambda,
|
|
130
|
+
});
|
|
131
|
+
const crf = getAndValidateCrf(shouldOutputImageSequence, options.codec);
|
|
132
|
+
const pixelFormat = getAndValidatePixelFormat(options.codec);
|
|
136
133
|
const imageFormat = getAndValidateImageFormat({
|
|
137
134
|
shouldOutputImageSequence,
|
|
138
|
-
codec,
|
|
135
|
+
codec: options.codec,
|
|
139
136
|
pixelFormat,
|
|
140
137
|
});
|
|
141
|
-
const proResProfile = getAndValidateProResProfile(codec);
|
|
138
|
+
const proResProfile = getAndValidateProResProfile(options.codec);
|
|
142
139
|
const browserExecutable = config_1.ConfigInternals.getBrowserExecutable();
|
|
143
140
|
const ffmpegExecutable = config_1.ConfigInternals.getCustomFfmpegExecutable();
|
|
144
141
|
const ffprobeExecutable = config_1.ConfigInternals.getCustomFfprobeExecutable();
|
|
@@ -150,8 +147,8 @@ const getCliOptions = async (options) => {
|
|
|
150
147
|
headless: config_1.ConfigInternals.getChromiumHeadlessMode(),
|
|
151
148
|
gl: (_a = config_1.ConfigInternals.getChromiumOpenGlRenderer()) !== null && _a !== void 0 ? _a : renderer_1.RenderInternals.DEFAULT_OPENGL_RENDERER,
|
|
152
149
|
};
|
|
153
|
-
const everyNthFrame = config_1.ConfigInternals.getAndValidateEveryNthFrame(codec);
|
|
154
|
-
const numberOfGifLoops = config_1.ConfigInternals.getAndValidateNumberOfGifLoops(codec);
|
|
150
|
+
const everyNthFrame = config_1.ConfigInternals.getAndValidateEveryNthFrame(options.codec);
|
|
151
|
+
const numberOfGifLoops = config_1.ConfigInternals.getAndValidateNumberOfGifLoops(options.codec);
|
|
155
152
|
const concurrency = config_1.ConfigInternals.getConcurrency();
|
|
156
153
|
renderer_1.RenderInternals.validateConcurrency(concurrency, 'concurrency');
|
|
157
154
|
return {
|
|
@@ -159,9 +156,8 @@ const getCliOptions = async (options) => {
|
|
|
159
156
|
concurrency,
|
|
160
157
|
frameRange,
|
|
161
158
|
shouldOutputImageSequence,
|
|
162
|
-
codec,
|
|
163
159
|
inputProps: (0, get_input_props_1.getInputProps)(() => undefined),
|
|
164
|
-
envVariables: await (0, get_env_1.getEnvironmentVariables)(),
|
|
160
|
+
envVariables: await (0, get_env_1.getEnvironmentVariables)(() => undefined),
|
|
165
161
|
quality: config_1.ConfigInternals.getQuality(),
|
|
166
162
|
browser: await getAndValidateBrowser(browserExecutable),
|
|
167
163
|
crf,
|
package/dist/get-env.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const getEnvironmentVariables: () => Promise<Record<string, string>>;
|
|
1
|
+
export declare const getEnvironmentVariables: (onUpdate: (newProps: Record<string, string>) => void) => Promise<Record<string, string>>;
|
package/dist/get-env.js
CHANGED
|
@@ -7,6 +7,7 @@ exports.getEnvironmentVariables = void 0;
|
|
|
7
7
|
const dotenv_1 = __importDefault(require("dotenv"));
|
|
8
8
|
const fs_1 = __importDefault(require("fs"));
|
|
9
9
|
const path_1 = __importDefault(require("path"));
|
|
10
|
+
const chalk_1 = require("./chalk");
|
|
10
11
|
const config_1 = require("./config");
|
|
11
12
|
const find_closest_package_json_1 = require("./find-closest-package-json");
|
|
12
13
|
const log_1 = require("./log");
|
|
@@ -19,9 +20,54 @@ function getProcessEnv() {
|
|
|
19
20
|
}
|
|
20
21
|
return env;
|
|
21
22
|
}
|
|
22
|
-
const
|
|
23
|
+
const watchEnvFile = ({ processEnv, envFile, onUpdate, existedBefore, }) => {
|
|
24
|
+
const listener = async () => {
|
|
25
|
+
try {
|
|
26
|
+
const file = await fs_1.default.promises.readFile(envFile, 'utf-8');
|
|
27
|
+
onUpdate({
|
|
28
|
+
...processEnv,
|
|
29
|
+
...dotenv_1.default.parse(file),
|
|
30
|
+
});
|
|
31
|
+
if (existedBefore) {
|
|
32
|
+
log_1.Log.info(chalk_1.chalk.blueBright(`Updated env file ${envFile}`));
|
|
33
|
+
}
|
|
34
|
+
else {
|
|
35
|
+
log_1.Log.info(chalk_1.chalk.blueBright(`Added env file ${envFile}`));
|
|
36
|
+
}
|
|
37
|
+
fs_1.default.unwatchFile(envFile, listener);
|
|
38
|
+
watchEnvFile({
|
|
39
|
+
envFile,
|
|
40
|
+
existedBefore: true,
|
|
41
|
+
onUpdate,
|
|
42
|
+
processEnv,
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
catch (err) {
|
|
46
|
+
// No error message if user did not have a .env file from the beginning
|
|
47
|
+
if (!existedBefore && !fs_1.default.existsSync(envFile)) {
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
if (fs_1.default.existsSync(envFile) && existedBefore) {
|
|
51
|
+
log_1.Log.error(`${envFile} update failed with error ${err}`);
|
|
52
|
+
}
|
|
53
|
+
else {
|
|
54
|
+
log_1.Log.warn(`${envFile} was deleted.`);
|
|
55
|
+
fs_1.default.unwatchFile(envFile, listener);
|
|
56
|
+
watchEnvFile({
|
|
57
|
+
envFile,
|
|
58
|
+
existedBefore: false,
|
|
59
|
+
onUpdate,
|
|
60
|
+
processEnv,
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
};
|
|
65
|
+
fs_1.default.watchFile(envFile, { interval: 100 }, listener);
|
|
66
|
+
};
|
|
67
|
+
const getEnvForEnvFile = async (processEnv, envFile, onUpdate) => {
|
|
23
68
|
try {
|
|
24
69
|
const envFileData = await fs_1.default.promises.readFile(envFile);
|
|
70
|
+
watchEnvFile({ processEnv, envFile, onUpdate, existedBefore: true });
|
|
25
71
|
return {
|
|
26
72
|
...processEnv,
|
|
27
73
|
...dotenv_1.default.parse(envFileData),
|
|
@@ -33,7 +79,7 @@ const getEnvForEnvFile = async (processEnv, envFile) => {
|
|
|
33
79
|
process.exit(1);
|
|
34
80
|
}
|
|
35
81
|
};
|
|
36
|
-
const getEnvironmentVariables = () => {
|
|
82
|
+
const getEnvironmentVariables = (onUpdate) => {
|
|
37
83
|
const processEnv = getProcessEnv();
|
|
38
84
|
if (parse_command_line_1.parsedCli['env-file']) {
|
|
39
85
|
const envFile = path_1.default.resolve(process.cwd(), parse_command_line_1.parsedCli['env-file']);
|
|
@@ -43,24 +89,30 @@ const getEnvironmentVariables = () => {
|
|
|
43
89
|
log_1.Log.error('Check that your path is correct and try again.');
|
|
44
90
|
process.exit(1);
|
|
45
91
|
}
|
|
46
|
-
return getEnvForEnvFile(processEnv, envFile);
|
|
92
|
+
return getEnvForEnvFile(processEnv, envFile, onUpdate);
|
|
47
93
|
}
|
|
48
94
|
const remotionRoot = (0, find_closest_package_json_1.findRemotionRoot)();
|
|
49
95
|
const configFileSetting = config_1.ConfigInternals.getDotEnvLocation();
|
|
50
96
|
if (configFileSetting) {
|
|
51
97
|
const envFile = path_1.default.resolve(remotionRoot, configFileSetting);
|
|
52
98
|
if (!fs_1.default.existsSync(envFile)) {
|
|
53
|
-
log_1.Log.error('You
|
|
99
|
+
log_1.Log.error('You specified a custom .env file using `Config.Rendering.setDotEnvLocation()` in the config file but it could not be found');
|
|
54
100
|
log_1.Log.error('We looked for the file at:', envFile);
|
|
55
101
|
log_1.Log.error('Check that your path is correct and try again.');
|
|
56
102
|
process.exit(1);
|
|
57
103
|
}
|
|
58
|
-
return getEnvForEnvFile(processEnv, envFile);
|
|
104
|
+
return getEnvForEnvFile(processEnv, envFile, onUpdate);
|
|
59
105
|
}
|
|
60
106
|
const defaultEnvFile = path_1.default.resolve(remotionRoot, '.env');
|
|
61
107
|
if (!fs_1.default.existsSync(defaultEnvFile)) {
|
|
108
|
+
watchEnvFile({
|
|
109
|
+
processEnv,
|
|
110
|
+
envFile: defaultEnvFile,
|
|
111
|
+
onUpdate,
|
|
112
|
+
existedBefore: false,
|
|
113
|
+
});
|
|
62
114
|
return Promise.resolve(processEnv);
|
|
63
115
|
}
|
|
64
|
-
return getEnvForEnvFile(processEnv, defaultEnvFile);
|
|
116
|
+
return getEnvForEnvFile(processEnv, defaultEnvFile, onUpdate);
|
|
65
117
|
};
|
|
66
118
|
exports.getEnvironmentVariables = getEnvironmentVariables;
|
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
import type { Codec, CodecOrUndefined } from '@remotion/renderer';
|
|
2
|
-
export declare const getFinalOutputCodec: ({
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
2
|
+
export declare const getFinalOutputCodec: ({ cliFlag, configFile, downloadName, outName, }: {
|
|
3
|
+
cliFlag: CodecOrUndefined;
|
|
4
|
+
outName: string | null;
|
|
5
|
+
downloadName: string | null;
|
|
6
|
+
configFile: Codec | null;
|
|
7
|
+
}) => {
|
|
8
|
+
codec: Codec;
|
|
9
|
+
reason: string;
|
|
10
|
+
};
|
|
@@ -2,62 +2,62 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.getFinalOutputCodec = void 0;
|
|
4
4
|
const renderer_1 = require("@remotion/renderer");
|
|
5
|
-
const
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
if (
|
|
20
|
-
|
|
21
|
-
log_1.Log.info('You have specified a .mp3 extension, using the MP3 encoder.');
|
|
22
|
-
}
|
|
23
|
-
return 'mp3';
|
|
24
|
-
}
|
|
25
|
-
if (inputCodec === undefined && fileExtension === 'mov') {
|
|
26
|
-
if (emitWarning) {
|
|
27
|
-
log_1.Log.info('You have specified a .mov extension, using the Apple ProRes encoder.');
|
|
28
|
-
}
|
|
29
|
-
return 'prores';
|
|
30
|
-
}
|
|
31
|
-
if (inputCodec === undefined && fileExtension === 'wav') {
|
|
32
|
-
if (emitWarning) {
|
|
33
|
-
log_1.Log.info('You have specified a .wav extension, using the WAV encoder.');
|
|
34
|
-
}
|
|
35
|
-
return 'wav';
|
|
36
|
-
}
|
|
37
|
-
if (inputCodec === undefined && fileExtension === 'aac') {
|
|
38
|
-
if (emitWarning) {
|
|
39
|
-
log_1.Log.info('You have specified a .aac extension, using the AAC encoder.');
|
|
40
|
-
}
|
|
41
|
-
return 'aac';
|
|
42
|
-
}
|
|
43
|
-
if (inputCodec === undefined && fileExtension === 'm4a') {
|
|
44
|
-
if (emitWarning) {
|
|
45
|
-
log_1.Log.info('You have specified a .m4a extension, using the AAC encoder.');
|
|
46
|
-
}
|
|
47
|
-
return 'aac';
|
|
48
|
-
}
|
|
49
|
-
if (inputCodec === undefined && fileExtension === 'mkv') {
|
|
50
|
-
if (emitWarning) {
|
|
51
|
-
log_1.Log.info('You have specified a .mkv extension, using the H264 encoder and WAV audio format.');
|
|
52
|
-
}
|
|
53
|
-
return 'h264-mkv';
|
|
54
|
-
}
|
|
55
|
-
if (inputCodec === undefined && fileExtension === 'gif') {
|
|
56
|
-
if (emitWarning) {
|
|
57
|
-
log_1.Log.info('You have specified a .gif extension, rendering a GIF');
|
|
58
|
-
}
|
|
59
|
-
return 'gif';
|
|
5
|
+
const fileExtensions = {
|
|
6
|
+
webm: 'vp8',
|
|
7
|
+
hevc: 'h265',
|
|
8
|
+
mp3: 'mp3',
|
|
9
|
+
mov: 'prores',
|
|
10
|
+
wav: 'wav',
|
|
11
|
+
aac: 'aac',
|
|
12
|
+
mkv: 'h264-mkv',
|
|
13
|
+
gif: 'gif',
|
|
14
|
+
mp4: 'h264',
|
|
15
|
+
m4a: 'aac',
|
|
16
|
+
};
|
|
17
|
+
const deriveExtensionFromFilename = (extension) => {
|
|
18
|
+
var _a;
|
|
19
|
+
if (extension === null) {
|
|
20
|
+
return null;
|
|
60
21
|
}
|
|
61
|
-
return
|
|
22
|
+
return (_a = fileExtensions[extension]) !== null && _a !== void 0 ? _a : null;
|
|
23
|
+
};
|
|
24
|
+
const getFinalOutputCodec = ({ cliFlag, configFile, downloadName, outName, }) => {
|
|
25
|
+
const downloadNameExtension = renderer_1.RenderInternals.getExtensionOfFilename(downloadName);
|
|
26
|
+
const outNameExtension = renderer_1.RenderInternals.getExtensionOfFilename(outName);
|
|
27
|
+
const derivedDownloadCodec = deriveExtensionFromFilename(downloadNameExtension);
|
|
28
|
+
const derivedOutNameCodec = deriveExtensionFromFilename(outNameExtension);
|
|
29
|
+
if (derivedDownloadCodec &&
|
|
30
|
+
derivedOutNameCodec &&
|
|
31
|
+
derivedDownloadCodec !== derivedOutNameCodec) {
|
|
32
|
+
throw new TypeError(`The download name is ${downloadName} but the output name is ${outName}. The file extensions must match`);
|
|
33
|
+
}
|
|
34
|
+
if (derivedDownloadCodec) {
|
|
35
|
+
if (cliFlag && derivedDownloadCodec !== cliFlag) {
|
|
36
|
+
throw new TypeError(`The download name is ${downloadName} but --codec=${cliFlag} was passed. The download name implies a codec of ${derivedDownloadCodec} which does not align with the --codec flag.`);
|
|
37
|
+
}
|
|
38
|
+
return {
|
|
39
|
+
codec: derivedDownloadCodec,
|
|
40
|
+
reason: 'derived from download name',
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
if (derivedOutNameCodec) {
|
|
44
|
+
if (cliFlag && derivedOutNameCodec !== cliFlag) {
|
|
45
|
+
throw new TypeError(`The out name is ${outName} but --codec=${cliFlag} was passed. The out name implies a codec of ${derivedOutNameCodec} which does not align with the --codec flag.`);
|
|
46
|
+
}
|
|
47
|
+
return {
|
|
48
|
+
codec: derivedOutNameCodec,
|
|
49
|
+
reason: 'derived from out name',
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
if (cliFlag) {
|
|
53
|
+
return { codec: cliFlag, reason: 'from --codec flag' };
|
|
54
|
+
}
|
|
55
|
+
if (configFile) {
|
|
56
|
+
return {
|
|
57
|
+
codec: configFile,
|
|
58
|
+
reason: 'Config file',
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
return { codec: renderer_1.RenderInternals.DEFAULT_CODEC, reason: 'default' };
|
|
62
62
|
};
|
|
63
63
|
exports.getFinalOutputCodec = getFinalOutputCodec;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { Codec, RenderMediaOptions } from '@remotion/renderer';
|
|
2
|
+
export declare const getRenderMediaOptions: ({ outputLocation, config, serveUrl, codec, }: {
|
|
3
|
+
outputLocation: RenderMediaOptions['outputLocation'];
|
|
4
|
+
config: RenderMediaOptions['composition'];
|
|
5
|
+
serveUrl: string;
|
|
6
|
+
codec: Codec;
|
|
7
|
+
}) => Promise<RenderMediaOptions>;
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getRenderMediaOptions = void 0;
|
|
4
|
+
const renderer_1 = require("@remotion/renderer");
|
|
5
|
+
const config_1 = require("./config");
|
|
6
|
+
const get_cli_options_1 = require("./get-cli-options");
|
|
7
|
+
const getRenderMediaOptions = async ({ outputLocation, config, serveUrl, codec, }) => {
|
|
8
|
+
const { proResProfile, concurrency, frameRange, overwrite, inputProps, envVariables, quality, crf, pixelFormat, imageFormat, browserExecutable, ffmpegExecutable, ffprobeExecutable, scale, chromiumOptions, port, numberOfGifLoops, everyNthFrame, muted, enforceAudioTrack, ffmpegOverride, } = await (0, get_cli_options_1.getCliOptions)({
|
|
9
|
+
isLambda: false,
|
|
10
|
+
type: 'series',
|
|
11
|
+
codec,
|
|
12
|
+
});
|
|
13
|
+
return {
|
|
14
|
+
outputLocation,
|
|
15
|
+
composition: config,
|
|
16
|
+
crf,
|
|
17
|
+
envVariables,
|
|
18
|
+
ffmpegExecutable,
|
|
19
|
+
ffprobeExecutable,
|
|
20
|
+
frameRange,
|
|
21
|
+
imageFormat,
|
|
22
|
+
inputProps,
|
|
23
|
+
overwrite,
|
|
24
|
+
pixelFormat,
|
|
25
|
+
proResProfile,
|
|
26
|
+
quality,
|
|
27
|
+
dumpBrowserLogs: renderer_1.RenderInternals.isEqualOrBelowLogLevel(config_1.ConfigInternals.Logging.getLogLevel(), 'verbose'),
|
|
28
|
+
chromiumOptions,
|
|
29
|
+
timeoutInMilliseconds: config_1.ConfigInternals.getCurrentPuppeteerTimeout(),
|
|
30
|
+
scale,
|
|
31
|
+
port,
|
|
32
|
+
numberOfGifLoops,
|
|
33
|
+
everyNthFrame,
|
|
34
|
+
verbose: renderer_1.RenderInternals.isEqualOrBelowLogLevel(config_1.ConfigInternals.Logging.getLogLevel(), 'verbose'),
|
|
35
|
+
muted,
|
|
36
|
+
enforceAudioTrack,
|
|
37
|
+
browserExecutable,
|
|
38
|
+
ffmpegOverride,
|
|
39
|
+
concurrency,
|
|
40
|
+
serveUrl,
|
|
41
|
+
codec,
|
|
42
|
+
};
|
|
43
|
+
};
|
|
44
|
+
exports.getRenderMediaOptions = getRenderMediaOptions;
|
package/dist/index.d.ts
CHANGED
|
@@ -70,12 +70,12 @@ export declare const CliInternals: {
|
|
|
70
70
|
getCliOptions: (options: {
|
|
71
71
|
isLambda: boolean;
|
|
72
72
|
type: "still" | "series" | "get-compositions";
|
|
73
|
+
codec: "h264" | "h265" | "vp8" | "vp9" | "mp3" | "aac" | "wav" | "prores" | "h264-mkv" | "gif";
|
|
73
74
|
}) => Promise<{
|
|
74
75
|
puppeteerTimeout: number;
|
|
75
76
|
concurrency: number | null;
|
|
76
77
|
frameRange: import("@remotion/renderer").FrameRange | null;
|
|
77
78
|
shouldOutputImageSequence: boolean;
|
|
78
|
-
codec: "h264" | "h265" | "vp8" | "vp9" | "mp3" | "aac" | "wav" | "prores" | "h264-mkv" | "gif";
|
|
79
79
|
inputProps: object;
|
|
80
80
|
envVariables: Record<string, string>;
|
|
81
81
|
quality: number | undefined;
|
|
@@ -90,7 +90,7 @@ export declare const CliInternals: {
|
|
|
90
90
|
browserExecutable: import("@remotion/renderer").BrowserExecutable;
|
|
91
91
|
ffmpegExecutable: import("@remotion/renderer").FfmpegExecutable;
|
|
92
92
|
ffprobeExecutable: import("@remotion/renderer").FfmpegExecutable;
|
|
93
|
-
logLevel: "
|
|
93
|
+
logLevel: "error" | "verbose" | "info" | "warn";
|
|
94
94
|
scale: number;
|
|
95
95
|
chromiumOptions: import("@remotion/renderer").ChromiumOptions;
|
|
96
96
|
overwrite: boolean;
|
|
@@ -100,9 +100,9 @@ export declare const CliInternals: {
|
|
|
100
100
|
publicDir: string | null;
|
|
101
101
|
ffmpegOverride: import("@remotion/renderer").FfmpegOverrideFn;
|
|
102
102
|
}>;
|
|
103
|
-
parseCommandLine: (
|
|
103
|
+
parseCommandLine: () => void;
|
|
104
104
|
loadConfig: (remotionRoot: string) => Promise<string | null>;
|
|
105
|
-
|
|
105
|
+
initializeCli: (remotionRoot: string) => Promise<void>;
|
|
106
106
|
BooleanFlags: string[];
|
|
107
107
|
quietFlagProvided: () => boolean;
|
|
108
108
|
parsedCli: import("./parse-command-line").CommandLineOptions & import("minimist").ParsedArgs;
|
|
@@ -115,4 +115,21 @@ export declare const CliInternals: {
|
|
|
115
115
|
}) => string;
|
|
116
116
|
getFileSizeDownloadBar: (downloaded: number) => string;
|
|
117
117
|
findRemotionRoot: () => string;
|
|
118
|
+
getFinalCodec: (options: {
|
|
119
|
+
downloadName: string | null;
|
|
120
|
+
outName: string | null;
|
|
121
|
+
}) => {
|
|
122
|
+
codec: "h264" | "h265" | "vp8" | "vp9" | "mp3" | "aac" | "wav" | "prores" | "h264-mkv" | "gif";
|
|
123
|
+
reason: string;
|
|
124
|
+
};
|
|
125
|
+
determineFinalImageFormat: ({ downloadName, outName, configImageFormat, cliFlag, isLambda, }: {
|
|
126
|
+
downloadName: string | null;
|
|
127
|
+
outName: string | null;
|
|
128
|
+
configImageFormat: "png" | "jpeg" | "none" | null;
|
|
129
|
+
cliFlag: "png" | "jpeg" | "none" | null;
|
|
130
|
+
isLambda: boolean;
|
|
131
|
+
}) => {
|
|
132
|
+
format: import("@remotion/renderer").StillImageFormat;
|
|
133
|
+
source: string;
|
|
134
|
+
};
|
|
118
135
|
};
|
package/dist/index.js
CHANGED
|
@@ -16,17 +16,19 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
17
|
exports.CliInternals = exports.overrideRemotion = exports.ConfigInternals = exports.cli = void 0;
|
|
18
18
|
const renderer_1 = require("@remotion/renderer");
|
|
19
|
+
const benchmark_1 = require("./benchmark");
|
|
19
20
|
const chalk_1 = require("./chalk");
|
|
20
21
|
const check_version_1 = require("./check-version");
|
|
21
22
|
const compositions_1 = require("./compositions");
|
|
22
23
|
const index_1 = require("./config/index");
|
|
24
|
+
const determine_image_format_1 = require("./determine-image-format");
|
|
23
25
|
const download_progress_1 = require("./download-progress");
|
|
24
26
|
const find_closest_package_json_1 = require("./find-closest-package-json");
|
|
25
27
|
const format_bytes_1 = require("./format-bytes");
|
|
26
28
|
const get_cli_options_1 = require("./get-cli-options");
|
|
27
29
|
const get_config_file_name_1 = require("./get-config-file-name");
|
|
28
30
|
const handle_common_errors_1 = require("./handle-common-errors");
|
|
29
|
-
const
|
|
31
|
+
const initialize_cli_1 = require("./initialize-cli");
|
|
30
32
|
const lambda_command_1 = require("./lambda-command");
|
|
31
33
|
const load_config_1 = require("./load-config");
|
|
32
34
|
const log_1 = require("./log");
|
|
@@ -54,6 +56,7 @@ const cli = async () => {
|
|
|
54
56
|
await (0, versions_1.validateVersionsBeforeCommand)(remotionRoot);
|
|
55
57
|
}
|
|
56
58
|
const errorSymbolicationLock = renderer_1.RenderInternals.registerErrorSymbolicationLock();
|
|
59
|
+
await (0, initialize_cli_1.initializeCli)(remotionRoot);
|
|
57
60
|
try {
|
|
58
61
|
if (command === 'compositions') {
|
|
59
62
|
await (0, compositions_1.listCompositionsCommand)(remotionRoot);
|
|
@@ -76,12 +79,17 @@ const cli = async () => {
|
|
|
76
79
|
else if (command === versions_1.VERSIONS_COMMAND) {
|
|
77
80
|
await (0, versions_1.versionsCommand)(remotionRoot);
|
|
78
81
|
}
|
|
82
|
+
else if (command === 'benchmark') {
|
|
83
|
+
await (0, benchmark_1.benchmarkCommand)(remotionRoot, parse_command_line_1.parsedCli._.slice(1));
|
|
84
|
+
}
|
|
79
85
|
else if (command === 'help') {
|
|
80
86
|
(0, print_help_1.printHelp)();
|
|
81
87
|
process.exit(0);
|
|
82
88
|
}
|
|
83
89
|
else {
|
|
84
|
-
|
|
90
|
+
if (command) {
|
|
91
|
+
log_1.Log.error(`Command ${command} not found.`);
|
|
92
|
+
}
|
|
85
93
|
(0, print_help_1.printHelp)();
|
|
86
94
|
process.exit(1);
|
|
87
95
|
}
|
|
@@ -109,7 +117,7 @@ exports.CliInternals = {
|
|
|
109
117
|
getCliOptions: get_cli_options_1.getCliOptions,
|
|
110
118
|
parseCommandLine: parse_command_line_1.parseCommandLine,
|
|
111
119
|
loadConfig: get_config_file_name_1.loadConfig,
|
|
112
|
-
|
|
120
|
+
initializeCli: initialize_cli_1.initializeCli,
|
|
113
121
|
BooleanFlags: parse_command_line_1.BooleanFlags,
|
|
114
122
|
quietFlagProvided: parse_command_line_1.quietFlagProvided,
|
|
115
123
|
parsedCli: parse_command_line_1.parsedCli,
|
|
@@ -117,4 +125,6 @@ exports.CliInternals = {
|
|
|
117
125
|
formatBytes: format_bytes_1.formatBytes,
|
|
118
126
|
getFileSizeDownloadBar: download_progress_1.getFileSizeDownloadBar,
|
|
119
127
|
findRemotionRoot: find_closest_package_json_1.findRemotionRoot,
|
|
128
|
+
getFinalCodec: get_cli_options_1.getFinalCodec,
|
|
129
|
+
determineFinalImageFormat: determine_image_format_1.determineFinalImageFormat,
|
|
120
130
|
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const initializeCli: (remotionRoot: string) => Promise<void>;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.initializeCli = void 0;
|
|
4
|
+
const get_config_file_name_1 = require("./get-config-file-name");
|
|
5
|
+
const log_1 = require("./log");
|
|
6
|
+
const parse_command_line_1 = require("./parse-command-line");
|
|
7
|
+
const initializeCli = async (remotionRoot) => {
|
|
8
|
+
const appliedName = await (0, get_config_file_name_1.loadConfig)(remotionRoot);
|
|
9
|
+
(0, parse_command_line_1.parseCommandLine)();
|
|
10
|
+
// Only now Log.verbose is available
|
|
11
|
+
log_1.Log.verbose('Remotion root directory:', remotionRoot);
|
|
12
|
+
if (remotionRoot !== process.cwd()) {
|
|
13
|
+
log_1.Log.warn(`Warning: The root directory of your project is ${remotionRoot}, but you are executing this command from ${process.cwd()}. The recommendation is to execute commands from the root directory.`);
|
|
14
|
+
}
|
|
15
|
+
if (appliedName) {
|
|
16
|
+
log_1.Log.verbose(`Applied configuration from ${appliedName}.`);
|
|
17
|
+
}
|
|
18
|
+
else {
|
|
19
|
+
log_1.Log.verbose('No config file loaded.');
|
|
20
|
+
}
|
|
21
|
+
};
|
|
22
|
+
exports.initializeCli = initializeCli;
|
package/dist/lambda-command.js
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.lambdaCommand = void 0;
|
|
4
|
-
const initialize_render_cli_1 = require("./initialize-render-cli");
|
|
5
4
|
const log_1 = require("./log");
|
|
6
5
|
const parse_command_line_1 = require("./parse-command-line");
|
|
7
6
|
const get_package_manager_1 = require("./preview-server/get-package-manager");
|
|
@@ -12,7 +11,6 @@ const lambdaCommand = async (remotionRoot) => {
|
|
|
12
11
|
paths: [remotionRoot],
|
|
13
12
|
});
|
|
14
13
|
const { LambdaInternals } = require(path);
|
|
15
|
-
await (0, initialize_render_cli_1.initializeRenderCli)(remotionRoot, 'lambda');
|
|
16
14
|
await LambdaInternals.executeCommand(parse_command_line_1.parsedCli._.slice(1));
|
|
17
15
|
process.exit(0);
|
|
18
16
|
}
|
|
@@ -41,5 +41,5 @@ export declare type CommandLineOptions = {
|
|
|
41
41
|
};
|
|
42
42
|
export declare const BooleanFlags: string[];
|
|
43
43
|
export declare const parsedCli: CommandLineOptions & minimist.ParsedArgs;
|
|
44
|
-
export declare const parseCommandLine: (
|
|
44
|
+
export declare const parseCommandLine: () => void;
|
|
45
45
|
export declare const quietFlagProvided: () => boolean;
|
|
@@ -33,7 +33,7 @@ exports.BooleanFlags = [
|
|
|
33
33
|
exports.parsedCli = (0, minimist_1.default)(process.argv.slice(2), {
|
|
34
34
|
boolean: exports.BooleanFlags,
|
|
35
35
|
});
|
|
36
|
-
const parseCommandLine = (
|
|
36
|
+
const parseCommandLine = () => {
|
|
37
37
|
if (exports.parsedCli['pixel-format']) {
|
|
38
38
|
config_1.Config.Output.setPixelFormat(exports.parsedCli['pixel-format']);
|
|
39
39
|
}
|
|
@@ -81,17 +81,9 @@ const parseCommandLine = (type) => {
|
|
|
81
81
|
config_1.Config.Puppeteer.setTimeoutInMilliseconds(exports.parsedCli.timeout);
|
|
82
82
|
}
|
|
83
83
|
if (exports.parsedCli.frames) {
|
|
84
|
-
if (type === 'still') {
|
|
85
|
-
log_1.Log.error('--frames flag was passed to the `still` command. This flag only works with the `render` command. Did you mean `--frame`? See reference: https://www.remotion.dev/docs/cli/');
|
|
86
|
-
process.exit(1);
|
|
87
|
-
}
|
|
88
84
|
config_1.ConfigInternals.setFrameRangeFromCli(exports.parsedCli.frames);
|
|
89
85
|
}
|
|
90
86
|
if (exports.parsedCli.frame) {
|
|
91
|
-
if (type === 'sequence') {
|
|
92
|
-
log_1.Log.error('--frame flag was passed to the `render` command. This flag only works with the `still` command. Did you mean `--frames`? See reference: https://www.remotion.dev/docs/cli/');
|
|
93
|
-
process.exit(1);
|
|
94
|
-
}
|
|
95
87
|
config_1.ConfigInternals.setStillFrame(Number(exports.parsedCli.frame));
|
|
96
88
|
}
|
|
97
89
|
if (exports.parsedCli.png) {
|
|
@@ -105,9 +97,6 @@ const parseCommandLine = (type) => {
|
|
|
105
97
|
if (typeof exports.parsedCli.crf !== 'undefined') {
|
|
106
98
|
config_1.Config.Output.setCrf(exports.parsedCli.crf);
|
|
107
99
|
}
|
|
108
|
-
if (exports.parsedCli.codec) {
|
|
109
|
-
config_1.Config.Output.setCodec(exports.parsedCli.codec);
|
|
110
|
-
}
|
|
111
100
|
if (exports.parsedCli['every-nth-frame']) {
|
|
112
101
|
config_1.Config.Rendering.setEveryNthFrame(exports.parsedCli['every-nth-frame']);
|
|
113
102
|
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { RenderStep } from './step';
|
|
2
|
+
export declare const prepareEntryPoint: ({ file, otherSteps, publicPath, outDir, remotionRoot, }: {
|
|
3
|
+
file: string;
|
|
4
|
+
otherSteps: RenderStep[];
|
|
5
|
+
outDir: string | null;
|
|
6
|
+
publicPath: string | null;
|
|
7
|
+
remotionRoot: string;
|
|
8
|
+
}) => Promise<{
|
|
9
|
+
urlOrBundle: string;
|
|
10
|
+
steps: RenderStep[];
|
|
11
|
+
shouldDelete: boolean;
|
|
12
|
+
}>;
|