@remotion/cli 3.2.31 → 3.2.32
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/bundle.d.ts +1 -0
- package/dist/bundle.js +32 -0
- package/dist/config/bitrate.d.ts +4 -0
- package/dist/config/bitrate.js +21 -0
- package/dist/config/bundle-out-dir.d.ts +2 -0
- package/dist/config/bundle-out-dir.js +12 -0
- package/dist/config/crf.d.ts +1 -2
- package/dist/config/crf.js +1 -9
- package/dist/config/get-public-path.d.ts +2 -0
- package/dist/config/get-public-path.js +12 -0
- package/dist/config/index.d.ts +3 -1
- package/dist/config/index.js +8 -4
- 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/get-cli-options.d.ts +3 -1
- package/dist/get-cli-options.js +11 -6
- package/dist/get-render-media-options.js +3 -1
- package/dist/index.d.ts +3 -1
- package/dist/initialize-render-cli.d.ts +1 -0
- package/dist/initialize-render-cli.js +22 -0
- package/dist/list-of-remotion-packages.js +1 -0
- package/dist/parse-command-line.js +6 -0
- package/dist/prepare-entry-point.d.ts +12 -0
- package/dist/prepare-entry-point.js +37 -0
- package/dist/print-help.js +2 -0
- package/dist/validate-image-format.d.ts +2 -0
- package/dist/validate-image-format.js +15 -0
- package/dist/webpack-cache.d.ts +12 -0
- package/dist/webpack-cache.js +66 -0
- package/package.json +8 -8
package/dist/bundle.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const bundleCommand: (remotionRoot: string) => Promise<void>;
|
package/dist/bundle.js
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.bundleCommand = void 0;
|
|
4
|
+
const get_cli_options_1 = require("./get-cli-options");
|
|
5
|
+
const initialize_render_cli_1 = require("./initialize-render-cli");
|
|
6
|
+
const log_1 = require("./log");
|
|
7
|
+
const parse_command_line_1 = require("./parse-command-line");
|
|
8
|
+
const prepare_entry_point_1 = require("./prepare-entry-point");
|
|
9
|
+
const bundleCommand = async (remotionRoot) => {
|
|
10
|
+
const file = parse_command_line_1.parsedCli._[1];
|
|
11
|
+
if (!file) {
|
|
12
|
+
log_1.Log.error('No entry point specified. Pass more arguments:');
|
|
13
|
+
log_1.Log.error(' npx remotion bundle [entry-point]');
|
|
14
|
+
log_1.Log.error('Documentation: https://www.remotion.dev/docs/cli/bundle');
|
|
15
|
+
process.exit(1);
|
|
16
|
+
}
|
|
17
|
+
await (0, initialize_render_cli_1.initializeRenderCli)(remotionRoot, 'bundle');
|
|
18
|
+
const { publicPath, bundleOutDir } = await (0, get_cli_options_1.getCliOptions)({
|
|
19
|
+
isLambda: false,
|
|
20
|
+
type: 'get-compositions-or-bundle',
|
|
21
|
+
});
|
|
22
|
+
const { urlOrBundle } = await (0, prepare_entry_point_1.prepareEntryPoint)({
|
|
23
|
+
file,
|
|
24
|
+
otherSteps: [],
|
|
25
|
+
outDir: bundleOutDir,
|
|
26
|
+
publicPath,
|
|
27
|
+
remotionRoot,
|
|
28
|
+
});
|
|
29
|
+
log_1.Log.info();
|
|
30
|
+
log_1.Log.info(urlOrBundle);
|
|
31
|
+
};
|
|
32
|
+
exports.bundleCommand = bundleCommand;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getVideoBitrate = exports.setVideoBitrate = exports.getAudioBitrate = exports.setAudioBitrate = void 0;
|
|
4
|
+
let audioBitrate;
|
|
5
|
+
const setAudioBitrate = (bitrate) => {
|
|
6
|
+
audioBitrate = bitrate;
|
|
7
|
+
};
|
|
8
|
+
exports.setAudioBitrate = setAudioBitrate;
|
|
9
|
+
const getAudioBitrate = () => {
|
|
10
|
+
return audioBitrate;
|
|
11
|
+
};
|
|
12
|
+
exports.getAudioBitrate = getAudioBitrate;
|
|
13
|
+
let videoBitrate;
|
|
14
|
+
const setVideoBitrate = (bitrate) => {
|
|
15
|
+
videoBitrate = bitrate;
|
|
16
|
+
};
|
|
17
|
+
exports.setVideoBitrate = setVideoBitrate;
|
|
18
|
+
const getVideoBitrate = () => {
|
|
19
|
+
return videoBitrate;
|
|
20
|
+
};
|
|
21
|
+
exports.getVideoBitrate = getVideoBitrate;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.setBundleDir = exports.getBundleOutDir = void 0;
|
|
4
|
+
let bundleOutDir = null;
|
|
5
|
+
const getBundleOutDir = () => {
|
|
6
|
+
return bundleOutDir;
|
|
7
|
+
};
|
|
8
|
+
exports.getBundleOutDir = getBundleOutDir;
|
|
9
|
+
const setBundleDir = (path) => {
|
|
10
|
+
bundleOutDir = path;
|
|
11
|
+
};
|
|
12
|
+
exports.setBundleDir = setBundleDir;
|
package/dist/config/crf.d.ts
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { Crf } from '@remotion/renderer';
|
|
2
2
|
export declare const setCrf: (newCrf: Crf) => void;
|
|
3
3
|
export declare const getCrfOrUndefined: () => Crf;
|
|
4
|
-
export declare const getActualCrf: (codec: Codec) => number;
|
package/dist/config/crf.js
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
4
|
-
const renderer_1 = require("@remotion/renderer");
|
|
3
|
+
exports.getCrfOrUndefined = exports.setCrf = void 0;
|
|
5
4
|
let currentCrf;
|
|
6
5
|
const setCrf = (newCrf) => {
|
|
7
6
|
if (typeof newCrf !== 'number' && newCrf !== undefined) {
|
|
@@ -14,10 +13,3 @@ const getCrfOrUndefined = () => {
|
|
|
14
13
|
return currentCrf;
|
|
15
14
|
};
|
|
16
15
|
exports.getCrfOrUndefined = getCrfOrUndefined;
|
|
17
|
-
const getActualCrf = (codec) => {
|
|
18
|
-
var _a;
|
|
19
|
-
const crf = (_a = (0, exports.getCrfOrUndefined)()) !== null && _a !== void 0 ? _a : renderer_1.RenderInternals.getDefaultCrfForCodec(codec);
|
|
20
|
-
renderer_1.RenderInternals.validateSelectedCrfAndCodecCombination(crf, codec);
|
|
21
|
-
return crf;
|
|
22
|
-
};
|
|
23
|
-
exports.getActualCrf = getActualCrf;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.setPublicPath = exports.getPublicPath = void 0;
|
|
4
|
+
let publicPath = null;
|
|
5
|
+
const getPublicPath = () => {
|
|
6
|
+
return publicPath;
|
|
7
|
+
};
|
|
8
|
+
exports.getPublicPath = getPublicPath;
|
|
9
|
+
const setPublicPath = (path) => {
|
|
10
|
+
publicPath = path;
|
|
11
|
+
};
|
|
12
|
+
exports.setPublicPath = setPublicPath;
|
package/dist/config/index.d.ts
CHANGED
|
@@ -10,7 +10,6 @@ export declare const ConfigInternals: {
|
|
|
10
10
|
getOutputCodecOrUndefined: () => import("@remotion/renderer").CodecOrUndefined;
|
|
11
11
|
getCustomFfmpegExecutable: () => import("@remotion/renderer").FfmpegExecutable;
|
|
12
12
|
getBrowser: () => import("@remotion/renderer").Browser | null;
|
|
13
|
-
getActualCrf: (codec: "h264" | "h265" | "vp8" | "vp9" | "mp3" | "aac" | "wav" | "prores" | "h264-mkv" | "gif") => number;
|
|
14
13
|
getPixelFormat: () => "yuv420p" | "yuva420p" | "yuv422p" | "yuv444p" | "yuv420p10le" | "yuv422p10le" | "yuv444p10le" | "yuva444p10le";
|
|
15
14
|
getProResProfile: () => "4444-xq" | "4444" | "hq" | "standard" | "light" | "proxy" | undefined;
|
|
16
15
|
getShouldOverwrite: ({ defaultValue, }: {
|
|
@@ -48,5 +47,8 @@ export declare const ConfigInternals: {
|
|
|
48
47
|
getKeyboardShortcutsEnabled: () => boolean;
|
|
49
48
|
getPublicDir: () => string | null;
|
|
50
49
|
getFfmpegOverrideFunction: () => import("@remotion/renderer").FfmpegOverrideFn;
|
|
50
|
+
getAudioBitrate: () => string | null;
|
|
51
|
+
getVideoBitrate: () => string | null;
|
|
52
|
+
getCrfOrUndefined: () => import("@remotion/renderer").Crf;
|
|
51
53
|
};
|
|
52
54
|
export declare const overrideRemotion: () => void;
|
package/dist/config/index.js
CHANGED
|
@@ -31,7 +31,6 @@ const browser_executable_1 = require("./browser-executable");
|
|
|
31
31
|
const chromium_flags_1 = require("./chromium-flags");
|
|
32
32
|
const codec_1 = require("./codec");
|
|
33
33
|
const concurrency_1 = require("./concurrency");
|
|
34
|
-
const crf_1 = require("./crf");
|
|
35
34
|
const env_file_1 = require("./env-file");
|
|
36
35
|
const every_nth_frame_1 = require("./every-nth-frame");
|
|
37
36
|
const ffmpeg_executable_1 = require("./ffmpeg-executable");
|
|
@@ -52,11 +51,12 @@ const scale_1 = require("./scale");
|
|
|
52
51
|
const still_frame_1 = require("./still-frame");
|
|
53
52
|
const timeout_1 = require("./timeout");
|
|
54
53
|
const webpack_caching_1 = require("./webpack-caching");
|
|
54
|
+
const bitrate_1 = require("./bitrate");
|
|
55
55
|
const browser_executable_2 = require("./browser-executable");
|
|
56
56
|
const chromium_flags_2 = require("./chromium-flags");
|
|
57
57
|
const codec_2 = require("./codec");
|
|
58
58
|
const concurrency_2 = require("./concurrency");
|
|
59
|
-
const
|
|
59
|
+
const crf_1 = require("./crf");
|
|
60
60
|
const enforce_audio_track_1 = require("./enforce-audio-track");
|
|
61
61
|
const env_file_2 = require("./env-file");
|
|
62
62
|
const every_nth_frame_2 = require("./every-nth-frame");
|
|
@@ -123,9 +123,11 @@ exports.Config = {
|
|
|
123
123
|
setPixelFormat: pixel_format_2.setPixelFormat,
|
|
124
124
|
setOutputFormat: codec_2.setOutputFormat,
|
|
125
125
|
setCodec: codec_2.setCodec,
|
|
126
|
-
setCrf:
|
|
126
|
+
setCrf: crf_1.setCrf,
|
|
127
127
|
setImageSequence: image_sequence_2.setImageSequence,
|
|
128
128
|
setProResProfile: prores_profile_2.setProResProfile,
|
|
129
|
+
setAudioBitrate: bitrate_1.setAudioBitrate,
|
|
130
|
+
setVideoBitrate: bitrate_1.setVideoBitrate,
|
|
129
131
|
overrideFfmpegCommand: ffmpeg_override_1.setFfmpegOverrideFunction,
|
|
130
132
|
},
|
|
131
133
|
};
|
|
@@ -135,7 +137,6 @@ exports.ConfigInternals = {
|
|
|
135
137
|
getOutputCodecOrUndefined: codec_1.getOutputCodecOrUndefined,
|
|
136
138
|
getCustomFfmpegExecutable: ffmpeg_executable_1.getCustomFfmpegExecutable,
|
|
137
139
|
getBrowser: browser_1.getBrowser,
|
|
138
|
-
getActualCrf: crf_1.getActualCrf,
|
|
139
140
|
getPixelFormat: pixel_format_1.getPixelFormat,
|
|
140
141
|
getProResProfile: prores_profile_1.getProResProfile,
|
|
141
142
|
getShouldOverwrite: overwrite_1.getShouldOverwrite,
|
|
@@ -171,6 +172,9 @@ exports.ConfigInternals = {
|
|
|
171
172
|
getKeyboardShortcutsEnabled: keyboard_shortcuts_1.getKeyboardShortcutsEnabled,
|
|
172
173
|
getPublicDir: public_dir_1.getPublicDir,
|
|
173
174
|
getFfmpegOverrideFunction: ffmpeg_override_1.getFfmpegOverrideFunction,
|
|
175
|
+
getAudioBitrate: bitrate_1.getAudioBitrate,
|
|
176
|
+
getVideoBitrate: bitrate_1.getVideoBitrate,
|
|
177
|
+
getCrfOrUndefined: crf_1.getCrfOrUndefined,
|
|
174
178
|
};
|
|
175
179
|
const overrideRemotion = () => {
|
|
176
180
|
Object.assign(remotion_1.Config, exports.Config);
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Button = void 0;
|
|
4
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
5
|
+
const colors_1 = require("../helpers/colors");
|
|
6
|
+
const layout_1 = require("./layout");
|
|
7
|
+
const container = {
|
|
8
|
+
padding: 10,
|
|
9
|
+
cursor: 'pointer',
|
|
10
|
+
fontSize: 14,
|
|
11
|
+
};
|
|
12
|
+
const button = {
|
|
13
|
+
border: `1px solid ${colors_1.INPUT_BORDER_COLOR_UNHOVERED}`,
|
|
14
|
+
borderRadius: 4,
|
|
15
|
+
backgroundColor: colors_1.INPUT_BACKGROUND,
|
|
16
|
+
appearance: 'none',
|
|
17
|
+
fontFamily: 'inherit',
|
|
18
|
+
fontSize: 14,
|
|
19
|
+
color: 'white',
|
|
20
|
+
};
|
|
21
|
+
const Button = ({ children, ...props }) => {
|
|
22
|
+
return ((0, jsx_runtime_1.jsx)("button", { ...props, style: button, type: "button", children: (0, jsx_runtime_1.jsx)(layout_1.Row, { style: container, children: children }) }));
|
|
23
|
+
};
|
|
24
|
+
exports.Button = Button;
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.PreviewZoomControls = void 0;
|
|
4
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
5
|
+
const react_1 = require("react");
|
|
6
|
+
const minus_1 = require("../icons/minus");
|
|
7
|
+
const plus_1 = require("../icons/plus");
|
|
8
|
+
const preview_size_1 = require("../state/preview-size");
|
|
9
|
+
const ControlButton_1 = require("./ControlButton");
|
|
10
|
+
const layout_1 = require("./layout");
|
|
11
|
+
const container = {
|
|
12
|
+
color: 'black',
|
|
13
|
+
flexDirection: 'row',
|
|
14
|
+
display: 'flex',
|
|
15
|
+
};
|
|
16
|
+
const buttonStyle = {
|
|
17
|
+
fontSize: 24,
|
|
18
|
+
};
|
|
19
|
+
const iconStyle = {
|
|
20
|
+
color: 'white',
|
|
21
|
+
width: 14,
|
|
22
|
+
};
|
|
23
|
+
const PreviewZoomControls = () => {
|
|
24
|
+
const { size, setSize } = (0, react_1.useContext)(preview_size_1.PreviewSizeContext);
|
|
25
|
+
const onZoomOutClicked = (0, react_1.useCallback)(() => {
|
|
26
|
+
setSize((z) => {
|
|
27
|
+
// TODO: Don't assume 1
|
|
28
|
+
const newSize = Number((z.size === 'auto' ? 1 : z.size - preview_size_1.ZOOM_BUTTON_STEP).toFixed(2));
|
|
29
|
+
return { ...z, size: Math.max(preview_size_1.PREVIEW_MIN_ZOOM, newSize) };
|
|
30
|
+
});
|
|
31
|
+
}, [setSize]);
|
|
32
|
+
const onZoomInClicked = (0, react_1.useCallback)(() => {
|
|
33
|
+
setSize((z) => {
|
|
34
|
+
// TODO: Don't assume 1
|
|
35
|
+
if (z.size === 'auto')
|
|
36
|
+
return {
|
|
37
|
+
size: 1 + preview_size_1.ZOOM_BUTTON_STEP,
|
|
38
|
+
translation: {
|
|
39
|
+
x: 0,
|
|
40
|
+
y: 0,
|
|
41
|
+
},
|
|
42
|
+
};
|
|
43
|
+
const newSize = Number((Number(z) + preview_size_1.ZOOM_BUTTON_STEP).toFixed(2));
|
|
44
|
+
return { ...z, size: Math.min(preview_size_1.PREVIEW_MAX_ZOOM, newSize) };
|
|
45
|
+
});
|
|
46
|
+
}, [setSize]);
|
|
47
|
+
return ((0, jsx_runtime_1.jsxs)("div", { style: container, children: [(0, jsx_runtime_1.jsx)(ControlButton_1.ControlButton, { onClick: onZoomOutClicked, style: buttonStyle, title: "Zoom out preview", role: 'ControlButton', type: "button", disabled: size.size !== 'auto' && preview_size_1.PREVIEW_MIN_ZOOM === size.size, children: (0, jsx_runtime_1.jsx)(minus_1.Minus, { style: iconStyle }) }), (0, jsx_runtime_1.jsx)(layout_1.Spacing, { x: 0.5 }), (0, jsx_runtime_1.jsx)(layout_1.Spacing, { x: 0.5 }), (0, jsx_runtime_1.jsx)(ControlButton_1.ControlButton, { onClick: onZoomInClicked, style: buttonStyle, title: "Zoom in preview", role: 'button', type: "button", disabled: size.size !== 'auto' && preview_size_1.PREVIEW_MAX_ZOOM === size.size, children: (0, jsx_runtime_1.jsx)(plus_1.Plus, { style: iconStyle }) })] }));
|
|
48
|
+
};
|
|
49
|
+
exports.PreviewZoomControls = PreviewZoomControls;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.normalizeWheel = void 0;
|
|
4
|
+
// Taken from https://github.com/tldraw/tldraw/blob/254dfdfd77c4abde53240f7d8ca3558e08688493/packages/core/src/hooks/useZoomEvents.ts which is adapted from https://stackoverflow.com/a/13650579
|
|
5
|
+
const MAX_ZOOM_STEP = 10;
|
|
6
|
+
function normalizeWheel(event) {
|
|
7
|
+
const { deltaY, deltaX } = event;
|
|
8
|
+
let deltaZ = 0;
|
|
9
|
+
if (event.ctrlKey || event.metaKey) {
|
|
10
|
+
const signY = Math.sign(event.deltaY);
|
|
11
|
+
const absDeltaY = Math.abs(event.deltaY);
|
|
12
|
+
let dy = deltaY;
|
|
13
|
+
if (absDeltaY > MAX_ZOOM_STEP) {
|
|
14
|
+
dy = MAX_ZOOM_STEP * signY;
|
|
15
|
+
}
|
|
16
|
+
deltaZ = dy;
|
|
17
|
+
}
|
|
18
|
+
return { deltaX, deltaY, deltaZ };
|
|
19
|
+
}
|
|
20
|
+
exports.normalizeWheel = normalizeWheel;
|
|
@@ -21,7 +21,7 @@ export declare const getCliOptions: (options: {
|
|
|
21
21
|
envVariables: Record<string, string>;
|
|
22
22
|
quality: number | undefined;
|
|
23
23
|
browser: import("@remotion/renderer").Browser;
|
|
24
|
-
crf:
|
|
24
|
+
crf: import("@remotion/renderer").Crf | null;
|
|
25
25
|
pixelFormat: "yuv420p" | "yuva420p" | "yuv422p" | "yuv444p" | "yuv420p10le" | "yuv422p10le" | "yuv444p10le" | "yuva444p10le";
|
|
26
26
|
imageFormat: "png" | "jpeg" | "none";
|
|
27
27
|
proResProfile: "4444-xq" | "4444" | "hq" | "standard" | "light" | "proxy" | undefined;
|
|
@@ -40,4 +40,6 @@ export declare const getCliOptions: (options: {
|
|
|
40
40
|
enforceAudioTrack: boolean;
|
|
41
41
|
publicDir: string | null;
|
|
42
42
|
ffmpegOverride: import("@remotion/renderer").FfmpegOverrideFn;
|
|
43
|
+
audioBitrate: string | null;
|
|
44
|
+
videoBitrate: string | null;
|
|
43
45
|
}>;
|
package/dist/get-cli-options.js
CHANGED
|
@@ -80,13 +80,10 @@ const getAndValidateShouldOutputImageSequence = async ({ frameRange, isLambda, }
|
|
|
80
80
|
}
|
|
81
81
|
return shouldOutputImageSequence;
|
|
82
82
|
};
|
|
83
|
-
const
|
|
83
|
+
const getCrf = (shouldOutputImageSequence) => {
|
|
84
84
|
const crf = shouldOutputImageSequence
|
|
85
85
|
? null
|
|
86
|
-
: config_1.ConfigInternals.
|
|
87
|
-
if (crf !== null) {
|
|
88
|
-
renderer_1.RenderInternals.validateSelectedCrfAndCodecCombination(crf, codec);
|
|
89
|
-
}
|
|
86
|
+
: config_1.ConfigInternals.getCrfOrUndefined();
|
|
90
87
|
return crf;
|
|
91
88
|
};
|
|
92
89
|
const getAndValidatePixelFormat = (codec) => {
|
|
@@ -127,7 +124,13 @@ const getCliOptions = async (options) => {
|
|
|
127
124
|
const overwrite = config_1.ConfigInternals.getShouldOverwrite({
|
|
128
125
|
defaultValue: !options.isLambda,
|
|
129
126
|
});
|
|
130
|
-
const crf =
|
|
127
|
+
const crf = getCrf(shouldOutputImageSequence);
|
|
128
|
+
const videoBitrate = config_1.ConfigInternals.getVideoBitrate();
|
|
129
|
+
renderer_1.RenderInternals.validateQualitySettings({
|
|
130
|
+
crf,
|
|
131
|
+
codec: options.codec,
|
|
132
|
+
videoBitrate,
|
|
133
|
+
});
|
|
131
134
|
const pixelFormat = getAndValidatePixelFormat(options.codec);
|
|
132
135
|
const imageFormat = getAndValidateImageFormat({
|
|
133
136
|
shouldOutputImageSequence,
|
|
@@ -178,6 +181,8 @@ const getCliOptions = async (options) => {
|
|
|
178
181
|
enforceAudioTrack: config_1.ConfigInternals.getEnforceAudioTrack(),
|
|
179
182
|
publicDir: config_1.ConfigInternals.getPublicDir(),
|
|
180
183
|
ffmpegOverride: config_1.ConfigInternals.getFfmpegOverrideFunction(),
|
|
184
|
+
audioBitrate: config_1.ConfigInternals.getAudioBitrate(),
|
|
185
|
+
videoBitrate,
|
|
181
186
|
};
|
|
182
187
|
};
|
|
183
188
|
exports.getCliOptions = getCliOptions;
|
|
@@ -5,7 +5,7 @@ const renderer_1 = require("@remotion/renderer");
|
|
|
5
5
|
const config_1 = require("./config");
|
|
6
6
|
const get_cli_options_1 = require("./get-cli-options");
|
|
7
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)({
|
|
8
|
+
const { proResProfile, concurrency, frameRange, overwrite, inputProps, envVariables, quality, crf, pixelFormat, imageFormat, browserExecutable, ffmpegExecutable, ffprobeExecutable, scale, chromiumOptions, port, numberOfGifLoops, everyNthFrame, muted, enforceAudioTrack, ffmpegOverride, audioBitrate, videoBitrate, } = await (0, get_cli_options_1.getCliOptions)({
|
|
9
9
|
isLambda: false,
|
|
10
10
|
type: 'series',
|
|
11
11
|
codec,
|
|
@@ -39,6 +39,8 @@ const getRenderMediaOptions = async ({ outputLocation, config, serveUrl, codec,
|
|
|
39
39
|
concurrency,
|
|
40
40
|
serveUrl,
|
|
41
41
|
codec,
|
|
42
|
+
audioBitrate,
|
|
43
|
+
videoBitrate,
|
|
42
44
|
};
|
|
43
45
|
};
|
|
44
46
|
exports.getRenderMediaOptions = getRenderMediaOptions;
|
package/dist/index.d.ts
CHANGED
|
@@ -80,7 +80,7 @@ export declare const CliInternals: {
|
|
|
80
80
|
envVariables: Record<string, string>;
|
|
81
81
|
quality: number | undefined;
|
|
82
82
|
browser: import("@remotion/renderer").Browser;
|
|
83
|
-
crf:
|
|
83
|
+
crf: import("@remotion/renderer").Crf | null;
|
|
84
84
|
pixelFormat: "yuv420p" | "yuva420p" | "yuv422p" | "yuv444p" | "yuv420p10le" | "yuv422p10le" | "yuv444p10le" | "yuva444p10le";
|
|
85
85
|
imageFormat: "png" | "jpeg" | "none";
|
|
86
86
|
proResProfile: "4444-xq" | "4444" | "hq" | "standard" | "light" | "proxy" | undefined;
|
|
@@ -99,6 +99,8 @@ export declare const CliInternals: {
|
|
|
99
99
|
enforceAudioTrack: boolean;
|
|
100
100
|
publicDir: string | null;
|
|
101
101
|
ffmpegOverride: import("@remotion/renderer").FfmpegOverrideFn;
|
|
102
|
+
audioBitrate: string | null;
|
|
103
|
+
videoBitrate: string | null;
|
|
102
104
|
}>;
|
|
103
105
|
parseCommandLine: () => void;
|
|
104
106
|
loadConfig: (remotionRoot: string) => Promise<string | null>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const initializeRenderCli: (remotionRoot: string, type: 'still' | 'sequence' | 'lambda' | 'preview') => Promise<void>;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.initializeRenderCli = 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 initializeRenderCli = async (remotionRoot, type) => {
|
|
8
|
+
const appliedName = await (0, get_config_file_name_1.loadConfig)(remotionRoot);
|
|
9
|
+
(0, parse_command_line_1.parseCommandLine)(type);
|
|
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.initializeRenderCli = initializeRenderCli;
|
|
@@ -130,6 +130,12 @@ const parseCommandLine = () => {
|
|
|
130
130
|
if (typeof exports.parsedCli['public-dir'] !== 'undefined') {
|
|
131
131
|
config_1.Config.Bundling.setPublicDir(exports.parsedCli['public-dir']);
|
|
132
132
|
}
|
|
133
|
+
if (typeof exports.parsedCli['audio-bitrate'] !== 'undefined') {
|
|
134
|
+
config_1.Config.Output.setAudioBitrate(exports.parsedCli['audio-bitrate']);
|
|
135
|
+
}
|
|
136
|
+
if (typeof exports.parsedCli['video-bitrate'] !== 'undefined') {
|
|
137
|
+
config_1.Config.Output.setVideoBitrate(exports.parsedCli['video-bitrate']);
|
|
138
|
+
}
|
|
133
139
|
};
|
|
134
140
|
exports.parseCommandLine = parseCommandLine;
|
|
135
141
|
const quietFlagProvided = () => exports.parsedCli.quiet || exports.parsedCli.q;
|
|
@@ -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
|
+
}>;
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.prepareEntryPoint = void 0;
|
|
7
|
+
const renderer_1 = require("@remotion/renderer");
|
|
8
|
+
const promises_1 = require("fs/promises");
|
|
9
|
+
const path_1 = __importDefault(require("path"));
|
|
10
|
+
const process_1 = require("process");
|
|
11
|
+
const log_1 = require("./log");
|
|
12
|
+
const setup_cache_1 = require("./setup-cache");
|
|
13
|
+
const prepareEntryPoint = async ({ file, otherSteps, publicPath, outDir, remotionRoot, }) => {
|
|
14
|
+
if (renderer_1.RenderInternals.isServeUrl(file)) {
|
|
15
|
+
return { urlOrBundle: file, steps: otherSteps, shouldDelete: false };
|
|
16
|
+
}
|
|
17
|
+
const joined = path_1.default.resolve(process.cwd(), file);
|
|
18
|
+
try {
|
|
19
|
+
const stats = await (0, promises_1.stat)(joined);
|
|
20
|
+
if (stats.isDirectory()) {
|
|
21
|
+
return { urlOrBundle: joined, steps: otherSteps, shouldDelete: false };
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
catch (err) {
|
|
25
|
+
log_1.Log.error(`No file or directory exists at ${joined}.`);
|
|
26
|
+
(0, process_1.exit)(1);
|
|
27
|
+
}
|
|
28
|
+
const urlOrBundle = await (0, setup_cache_1.bundleOnCliOrTakeServeUrl)({
|
|
29
|
+
fullPath: joined,
|
|
30
|
+
steps: ['bundling', ...otherSteps],
|
|
31
|
+
outDir,
|
|
32
|
+
publicPath,
|
|
33
|
+
remotionRoot,
|
|
34
|
+
});
|
|
35
|
+
return { urlOrBundle, steps: ['bundling', ...otherSteps], shouldDelete: true };
|
|
36
|
+
};
|
|
37
|
+
exports.prepareEntryPoint = prepareEntryPoint;
|
package/dist/print-help.js
CHANGED
|
@@ -31,6 +31,8 @@ const printHelp = () => {
|
|
|
31
31
|
['--overwrite', 'Overwrite if file exists, default true'],
|
|
32
32
|
['--sequence', 'Output as an image sequence'],
|
|
33
33
|
['--codec', 'Video of audio codec'],
|
|
34
|
+
['--audio-bitrate', 'Customize the output audio bitrate'],
|
|
35
|
+
['--video-bitrate', 'Customize the output video bitrate'],
|
|
34
36
|
['--crf', 'FFMPEG CRF value, controls quality, see docs for info'],
|
|
35
37
|
['--browser-executable', 'Custom path for browser executable'],
|
|
36
38
|
['--frames', 'Render a portion or a still of a video'],
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.validateImageFormat = void 0;
|
|
4
|
+
const log_1 = require("./log");
|
|
5
|
+
const validateImageFormat = (imageFormat, outName) => {
|
|
6
|
+
if (imageFormat === 'png' && (outName === null || outName === void 0 ? void 0 : outName.endsWith('.png'))) {
|
|
7
|
+
log_1.Log.warn(`Rendering a PNG, expected a .png extension but got ${outName}`);
|
|
8
|
+
}
|
|
9
|
+
if (imageFormat === 'jpeg' &&
|
|
10
|
+
!(outName === null || outName === void 0 ? void 0 : outName.endsWith('.jpg')) &&
|
|
11
|
+
!(outName === null || outName === void 0 ? void 0 : outName.endsWith('.jpeg'))) {
|
|
12
|
+
log_1.Log.warn(`Rendering a JPEG, expected a .jpg or .jpeg extension but got ${outName}`);
|
|
13
|
+
}
|
|
14
|
+
};
|
|
15
|
+
exports.validateImageFormat = validateImageFormat;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
declare type Environment = 'development' | 'production';
|
|
2
|
+
declare global {
|
|
3
|
+
namespace NodeJS {
|
|
4
|
+
interface ProcessVersions {
|
|
5
|
+
pnp?: string;
|
|
6
|
+
}
|
|
7
|
+
}
|
|
8
|
+
}
|
|
9
|
+
export declare const clearCache: (environment: Environment, inputProps: object | null) => Promise<void>;
|
|
10
|
+
export declare const getWebpackCacheName: (environment: Environment, inputProps: object | null) => string;
|
|
11
|
+
export declare const cacheExists: (environment: Environment, inputProps: object | null) => boolean;
|
|
12
|
+
export {};
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.cacheExists = exports.getWebpackCacheName = exports.clearCache = void 0;
|
|
7
|
+
const fs_1 = __importDefault(require("fs"));
|
|
8
|
+
const path_1 = __importDefault(require("path"));
|
|
9
|
+
const remotion_1 = require("remotion");
|
|
10
|
+
// Inlined from https://github.com/webpack/webpack/blob/4c2ee7a4ddb8db2362ca83b6c4190523387ba7ee/lib/config/defaults.js#L265
|
|
11
|
+
// An algorithm to determine where Webpack will cache the depencies
|
|
12
|
+
const getWebpackCacheDir = () => {
|
|
13
|
+
const cwd = process.cwd();
|
|
14
|
+
let dir = cwd;
|
|
15
|
+
for (;;) {
|
|
16
|
+
try {
|
|
17
|
+
if (fs_1.default.statSync(path_1.default.join(dir, 'package.json')).isFile()) {
|
|
18
|
+
break;
|
|
19
|
+
}
|
|
20
|
+
// eslint-disable-next-line no-empty
|
|
21
|
+
}
|
|
22
|
+
catch (e) { }
|
|
23
|
+
const parent = path_1.default.dirname(dir);
|
|
24
|
+
if (dir === parent) {
|
|
25
|
+
dir = undefined;
|
|
26
|
+
break;
|
|
27
|
+
}
|
|
28
|
+
dir = parent;
|
|
29
|
+
}
|
|
30
|
+
if (!dir) {
|
|
31
|
+
return path_1.default.resolve(cwd, '.cache/webpack');
|
|
32
|
+
}
|
|
33
|
+
if (process.versions.pnp === '1') {
|
|
34
|
+
return path_1.default.resolve(dir, '.pnp/.cache/webpack');
|
|
35
|
+
}
|
|
36
|
+
if (process.versions.pnp === '3') {
|
|
37
|
+
return path_1.default.resolve(dir, '.yarn/.cache/webpack');
|
|
38
|
+
}
|
|
39
|
+
return path_1.default.resolve(dir, 'node_modules/.cache/webpack');
|
|
40
|
+
};
|
|
41
|
+
const remotionCacheLocation = (environment, inputProps) => {
|
|
42
|
+
return path_1.default.join(getWebpackCacheDir(), (0, exports.getWebpackCacheName)(environment, inputProps));
|
|
43
|
+
};
|
|
44
|
+
const clearCache = (environment, inputProps) => {
|
|
45
|
+
var _a;
|
|
46
|
+
return ((_a = fs_1.default.promises.rm) !== null && _a !== void 0 ? _a : fs_1.default.promises.rmdir)(remotionCacheLocation(environment, inputProps), {
|
|
47
|
+
recursive: true,
|
|
48
|
+
});
|
|
49
|
+
};
|
|
50
|
+
exports.clearCache = clearCache;
|
|
51
|
+
const getWebpackCacheName = (environment, inputProps) => {
|
|
52
|
+
// In development, let's reset the cache when input props
|
|
53
|
+
// are changing, because they are injected using Webpack and if changed,
|
|
54
|
+
// it will get the cached version
|
|
55
|
+
if (environment === 'development') {
|
|
56
|
+
return `remotion-v3-${environment}-${(0, remotion_1.random)(JSON.stringify(inputProps))}`;
|
|
57
|
+
}
|
|
58
|
+
// In production, the cache is independent from input props because
|
|
59
|
+
// they are passed over URL params. Speed is mostly important in production.
|
|
60
|
+
return `remotion-v3-${environment}`;
|
|
61
|
+
};
|
|
62
|
+
exports.getWebpackCacheName = getWebpackCacheName;
|
|
63
|
+
const cacheExists = (environment, inputProps) => {
|
|
64
|
+
return fs_1.default.existsSync(remotionCacheLocation(environment, inputProps));
|
|
65
|
+
};
|
|
66
|
+
exports.cacheExists = cacheExists;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@remotion/cli",
|
|
3
|
-
"version": "3.2.
|
|
3
|
+
"version": "3.2.32",
|
|
4
4
|
"description": "CLI for Remotion",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"sideEffects": false,
|
|
@@ -23,15 +23,15 @@
|
|
|
23
23
|
"author": "Jonny Burger <jonny@remotion.dev>",
|
|
24
24
|
"license": "SEE LICENSE IN LICENSE.md",
|
|
25
25
|
"dependencies": {
|
|
26
|
-
"@remotion/bundler": "3.2.
|
|
27
|
-
"@remotion/media-utils": "3.2.
|
|
28
|
-
"@remotion/player": "3.2.
|
|
29
|
-
"@remotion/renderer": "3.2.
|
|
26
|
+
"@remotion/bundler": "3.2.32",
|
|
27
|
+
"@remotion/media-utils": "3.2.32",
|
|
28
|
+
"@remotion/player": "3.2.32",
|
|
29
|
+
"@remotion/renderer": "3.2.32",
|
|
30
30
|
"better-opn": "2.1.1",
|
|
31
31
|
"dotenv": "9.0.2",
|
|
32
32
|
"memfs": "3.4.3",
|
|
33
33
|
"minimist": "1.2.6",
|
|
34
|
-
"remotion": "3.2.
|
|
34
|
+
"remotion": "3.2.32",
|
|
35
35
|
"semver": "7.3.5",
|
|
36
36
|
"source-map": "0.6.1"
|
|
37
37
|
},
|
|
@@ -58,7 +58,7 @@
|
|
|
58
58
|
"react": "^18.0.0",
|
|
59
59
|
"react-dom": "^18.0.0",
|
|
60
60
|
"typescript": "^4.7.0",
|
|
61
|
-
"vitest": "
|
|
61
|
+
"vitest": "0.18.0"
|
|
62
62
|
},
|
|
63
63
|
"keywords": [
|
|
64
64
|
"remotion",
|
|
@@ -71,5 +71,5 @@
|
|
|
71
71
|
"publishConfig": {
|
|
72
72
|
"access": "public"
|
|
73
73
|
},
|
|
74
|
-
"gitHead": "
|
|
74
|
+
"gitHead": "4f7ab3637405d140041f898f95f78c99943d1b40"
|
|
75
75
|
}
|