@remotion/renderer
Version:
Render Remotion videos using Node.js or Bun
84 lines (83 loc) • 3.28 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.framesOption = void 0;
const jsx_runtime_1 = require("react/jsx-runtime");
const frame_range_1 = require("../frame-range");
const cliFlag = 'frames';
let frameRange = null;
const parseFrameRangeFromCli = (newFrameRange) => {
if (typeof newFrameRange === 'number') {
if (newFrameRange < 0) {
return [0, Math.abs(newFrameRange)];
}
return newFrameRange;
}
if (typeof newFrameRange === 'string') {
if (newFrameRange.trim() === '') {
throw new Error('--frames flag must be a single number, or 2 numbers separated by `-`');
}
const parts = newFrameRange.split('-');
if (parts.length > 2 || parts.length <= 0) {
throw new Error(`--frames flag must be a number or 2 numbers separated by '-', instead got ${parts.length} numbers`);
}
if (parts.length === 1) {
const value = Number(parts[0]);
if (isNaN(value)) {
throw new Error('--frames flag must be a single number, or 2 numbers separated by `-`');
}
return value;
}
const [firstPart, secondPart] = parts;
if (secondPart === '' && firstPart !== '') {
const start = Number(firstPart);
if (isNaN(start)) {
throw new Error('--frames flag must be a single number, or 2 numbers separated by `-`');
}
return [start, null];
}
const parsed = parts.map((f) => Number(f));
const [first, second] = parsed;
for (const value of parsed) {
if (isNaN(value)) {
throw new Error('--frames flag must be a single number, or 2 numbers separated by `-`');
}
}
if (second < first) {
throw new Error('The second number of the --frames flag number should be greater or equal than first number');
}
return [first, second];
}
throw new Error('--frames flag must be a single number, or 2 numbers separated by `-`');
};
exports.framesOption = {
name: 'Frame Range',
cliFlag,
description: () => (jsx_runtime_1.jsxs(jsx_runtime_1.Fragment, { children: ["Render a subset of a video. Pass a single number to render a still, or a range (e.g. ",
jsx_runtime_1.jsx("code", { children: "0-9" }),
") to render a subset of frames. Pass", ' ', jsx_runtime_1.jsx("code", { children: "100-" }),
" to render from frame 100 to the end."] })),
ssrName: 'frameRange',
docLink: 'https://www.remotion.dev/docs/config#setframerange',
type: null,
getValue: ({ commandLine }) => {
if (commandLine[cliFlag] !== undefined) {
const value = parseFrameRangeFromCli(commandLine[cliFlag]);
(0, frame_range_1.validateFrameRange)(value);
return {
source: 'cli',
value,
};
}
return {
source: 'config',
value: frameRange,
};
},
setConfig: (value) => {
if (value !== null) {
(0, frame_range_1.validateFrameRange)(value);
}
frameRange = value;
},
id: cliFlag,
};