@remotion/cli 3.3.77 → 3.3.78
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/editor/components/Checkbox.d.ts +1 -0
- package/dist/editor/components/Checkbox.js +16 -13
- package/dist/editor/components/Modals.js +1 -1
- package/dist/editor/components/RenderButton.js +3 -2
- package/dist/editor/components/RenderModal/EnforceAudioTrackSetting.d.ts +1 -0
- package/dist/editor/components/RenderModal/EnforceAudioTrackSetting.js +2 -2
- package/dist/editor/components/RenderModal/InfoBubble.d.ts +5 -0
- package/dist/editor/components/RenderModal/InfoBubble.js +111 -0
- package/dist/editor/components/RenderModal/InfoTooltip.d.ts +4 -0
- package/dist/editor/components/RenderModal/InfoTooltip.js +30 -0
- package/dist/editor/components/RenderModal/MutedSetting.d.ts +1 -0
- package/dist/editor/components/RenderModal/MutedSetting.js +2 -2
- package/dist/editor/components/RenderModal/NumberSetting.d.ts +3 -0
- package/dist/editor/components/RenderModal/NumberSetting.js +7 -4
- package/dist/editor/components/RenderModal/OptionExplainer.d.ts +5 -0
- package/dist/editor/components/RenderModal/OptionExplainer.js +21 -0
- package/dist/editor/components/RenderModal/RenderModal.d.ts +4 -3
- package/dist/editor/components/RenderModal/RenderModal.js +39 -35
- package/dist/editor/components/RenderModal/RenderModalAdvanced.d.ts +4 -0
- package/dist/editor/components/RenderModal/RenderModalAdvanced.js +9 -2
- package/dist/editor/components/RenderModal/RenderModalAudio.d.ts +5 -1
- package/dist/editor/components/RenderModal/RenderModalAudio.js +22 -3
- package/dist/editor/components/RenderModal/RenderModalBasic.d.ts +2 -4
- package/dist/editor/components/RenderModal/RenderModalBasic.js +11 -20
- package/dist/editor/components/RenderModal/RenderModalPicture.js +2 -2
- package/dist/editor/components/RenderModal/ScaleSetting.js +4 -1
- package/dist/editor/components/RenderModal/human-readable-codec.d.ts +1 -1
- package/dist/editor/components/RenderModal/human-readable-codec.js +1 -1
- package/dist/editor/components/RenderQueue/RenderQueueItem.js +2 -1
- package/dist/editor/components/RenderQueue/RenderQueueOpenInFolder.d.ts +5 -0
- package/dist/editor/components/RenderQueue/RenderQueueOpenInFolder.js +22 -0
- package/dist/editor/components/RenderQueue/actions.d.ts +2 -1
- package/dist/editor/components/RenderQueue/actions.js +2 -1
- package/dist/editor/components/RenderToolbarIcon.js +3 -2
- package/dist/editor/helpers/prores-labels.d.ts +2 -0
- package/dist/editor/helpers/prores-labels.js +25 -0
- package/dist/editor/helpers/render-modal-sections.d.ts +10 -0
- package/dist/editor/helpers/render-modal-sections.js +32 -0
- package/dist/preview-server/render-queue/job.d.ts +2 -0
- package/dist/preview-server/render-queue/make-retry-payload.js +8 -8
- package/dist/preview-server/render-queue/process-still.js +7 -2
- package/dist/preview-server/render-queue/process-video.js +9 -4
- package/dist/preview-server/routes/add-render.js +1 -0
- package/dist/render-flows/render.d.ts +3 -2
- package/dist/render-flows/render.js +6 -5
- package/package.json +6 -6
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
|
|
1
|
+
import type { AudioCodec, Codec } from '@remotion/renderer';
|
|
2
|
+
import React from 'react';
|
|
2
3
|
import type { RenderType } from './RenderModalAdvanced';
|
|
3
4
|
export declare const RenderModalAudio: React.FC<{
|
|
4
5
|
muted: boolean;
|
|
@@ -10,4 +11,7 @@ export declare const RenderModalAudio: React.FC<{
|
|
|
10
11
|
setShouldHaveCustomTargetAudioBitrate: React.Dispatch<React.SetStateAction<boolean>>;
|
|
11
12
|
setCustomTargetAudioBitrateValue: React.Dispatch<React.SetStateAction<string>>;
|
|
12
13
|
customTargetAudioBitrate: string;
|
|
14
|
+
audioCodec: AudioCodec;
|
|
15
|
+
setAudioCodec: (newAudioCodec: AudioCodec) => void;
|
|
16
|
+
codec: Codec;
|
|
13
17
|
}>;
|
|
@@ -2,21 +2,40 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.RenderModalAudio = void 0;
|
|
4
4
|
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
5
|
+
const client_1 = require("@remotion/renderer/client");
|
|
5
6
|
const react_1 = require("react");
|
|
7
|
+
const Checkmark_1 = require("../../icons/Checkmark");
|
|
6
8
|
const Checkbox_1 = require("../Checkbox");
|
|
9
|
+
const ComboBox_1 = require("../NewComposition/ComboBox");
|
|
7
10
|
const RemInput_1 = require("../NewComposition/RemInput");
|
|
8
11
|
const EnforceAudioTrackSetting_1 = require("./EnforceAudioTrackSetting");
|
|
12
|
+
const human_readable_audio_codecs_1 = require("./human-readable-audio-codecs");
|
|
9
13
|
const layout_1 = require("./layout");
|
|
10
14
|
const MutedSetting_1 = require("./MutedSetting");
|
|
11
15
|
const RenderModalHr_1 = require("./RenderModalHr");
|
|
12
|
-
const RenderModalAudio = ({ muted, setMuted, renderMode, enforceAudioTrack, setEnforceAudioTrackState, setShouldHaveCustomTargetAudioBitrate, shouldHaveCustomTargetAudioBitrate, setCustomTargetAudioBitrateValue, customTargetAudioBitrate, }) => {
|
|
16
|
+
const RenderModalAudio = ({ muted, setMuted, renderMode, enforceAudioTrack, setEnforceAudioTrackState, setShouldHaveCustomTargetAudioBitrate, shouldHaveCustomTargetAudioBitrate, setCustomTargetAudioBitrateValue, customTargetAudioBitrate, audioCodec, codec, setAudioCodec, }) => {
|
|
13
17
|
const onShouldHaveTargetAudioBitrateChanged = (0, react_1.useCallback)((e) => {
|
|
14
18
|
setShouldHaveCustomTargetAudioBitrate(e.target.checked);
|
|
15
19
|
}, [setShouldHaveCustomTargetAudioBitrate]);
|
|
16
|
-
// TODO: When rendering, mp3 does not support the "crf" option. Ignoring.
|
|
17
20
|
const onTargetAudioBitrateChanged = (0, react_1.useCallback)((e) => {
|
|
18
21
|
setCustomTargetAudioBitrateValue(e.target.value);
|
|
19
22
|
}, [setCustomTargetAudioBitrateValue]);
|
|
20
|
-
|
|
23
|
+
const audioCodecOptions = (0, react_1.useCallback)((currentCodec) => {
|
|
24
|
+
return client_1.BrowserSafeApis.supportedAudioCodecs[currentCodec].map((audioCodecOption) => {
|
|
25
|
+
return {
|
|
26
|
+
label: (0, human_readable_audio_codecs_1.humanReadableAudioCodec)(audioCodecOption),
|
|
27
|
+
onClick: () => setAudioCodec(audioCodecOption),
|
|
28
|
+
key: audioCodecOption,
|
|
29
|
+
leftItem: codec === audioCodecOption ? (0, jsx_runtime_1.jsx)(Checkmark_1.Checkmark, {}) : null,
|
|
30
|
+
id: audioCodecOption,
|
|
31
|
+
keyHint: null,
|
|
32
|
+
quickSwitcherLabel: null,
|
|
33
|
+
subMenu: null,
|
|
34
|
+
type: 'item',
|
|
35
|
+
value: audioCodecOption,
|
|
36
|
+
};
|
|
37
|
+
});
|
|
38
|
+
}, [codec, setAudioCodec]);
|
|
39
|
+
return ((0, jsx_runtime_1.jsxs)("div", { children: [renderMode === 'video' && audioCodecOptions(codec).length >= 2 ? ((0, jsx_runtime_1.jsxs)("div", { style: layout_1.optionRow, children: [(0, jsx_runtime_1.jsx)("div", { style: layout_1.label, children: "Audio Codec" }), (0, jsx_runtime_1.jsx)("div", { style: layout_1.rightRow, children: (0, jsx_runtime_1.jsx)(ComboBox_1.Combobox, { values: audioCodecOptions(codec), selectedId: audioCodec, title: "AudioCodec" }) })] })) : null, renderMode === 'video' && ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(MutedSetting_1.MutedSetting, { enforceAudioTrack: enforceAudioTrack, muted: muted, setMuted: setMuted }), (0, jsx_runtime_1.jsx)(EnforceAudioTrackSetting_1.EnforceAudioTrackSetting, { muted: muted, enforceAudioTrack: enforceAudioTrack, setEnforceAudioTrack: setEnforceAudioTrackState }), (0, jsx_runtime_1.jsx)(RenderModalHr_1.RenderModalHr, {})] })), renderMode === 'still' ? null : ((0, jsx_runtime_1.jsxs)("div", { style: layout_1.optionRow, children: [(0, jsx_runtime_1.jsx)("div", { style: layout_1.label, children: "Custom audio bitrate" }), (0, jsx_runtime_1.jsx)("div", { style: layout_1.rightRow, children: (0, jsx_runtime_1.jsx)(Checkbox_1.Checkbox, { checked: shouldHaveCustomTargetAudioBitrate, onChange: onShouldHaveTargetAudioBitrateChanged }) })] })), shouldHaveCustomTargetAudioBitrate && renderMode !== 'still' ? ((0, jsx_runtime_1.jsxs)("div", { style: layout_1.optionRow, children: [(0, jsx_runtime_1.jsx)("div", { style: layout_1.label, children: "Target audio bitrate" }), (0, jsx_runtime_1.jsx)("div", { style: layout_1.rightRow, children: (0, jsx_runtime_1.jsx)("div", { children: (0, jsx_runtime_1.jsx)(RemInput_1.RemotionInput, { style: layout_1.input, value: customTargetAudioBitrate, onChange: onTargetAudioBitrateChanged }) }) })] })) : null] }));
|
|
21
40
|
};
|
|
22
41
|
exports.RenderModalAudio = RenderModalAudio;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { Codec, ProResProfile } from '@remotion/renderer';
|
|
2
2
|
import React from 'react';
|
|
3
3
|
import type { TComposition } from 'remotion';
|
|
4
4
|
import type { SegmentedControlItem } from '../SegmentedControl';
|
|
@@ -7,9 +7,7 @@ export declare const RenderModalBasic: React.FC<{
|
|
|
7
7
|
renderMode: RenderType;
|
|
8
8
|
imageFormatOptions: SegmentedControlItem[];
|
|
9
9
|
codec: Codec;
|
|
10
|
-
|
|
11
|
-
setCodec: (newCodec: Codec) => void;
|
|
12
|
-
setAudioCodec: (newAudioCodec: AudioCodec) => void;
|
|
10
|
+
setVideoCodec: (newCodec: Codec) => void;
|
|
13
11
|
outName: string;
|
|
14
12
|
proResProfile: ProResProfile | null;
|
|
15
13
|
setProResProfile: React.Dispatch<React.SetStateAction<ProResProfile>>;
|
|
@@ -4,6 +4,7 @@ exports.RenderModalBasic = void 0;
|
|
|
4
4
|
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
5
5
|
const client_1 = require("@remotion/renderer/client");
|
|
6
6
|
const react_1 = require("react");
|
|
7
|
+
const prores_labels_1 = require("../../helpers/prores-labels");
|
|
7
8
|
const use_file_existence_1 = require("../../helpers/use-file-existence");
|
|
8
9
|
const Checkmark_1 = require("../../icons/Checkmark");
|
|
9
10
|
const ComboBox_1 = require("../NewComposition/ComboBox");
|
|
@@ -12,10 +13,9 @@ const RemInput_1 = require("../NewComposition/RemInput");
|
|
|
12
13
|
const ValidationMessage_1 = require("../NewComposition/ValidationMessage");
|
|
13
14
|
const SegmentedControl_1 = require("../SegmentedControl");
|
|
14
15
|
const FrameRangeSetting_1 = require("./FrameRangeSetting");
|
|
15
|
-
const human_readable_audio_codecs_1 = require("./human-readable-audio-codecs");
|
|
16
16
|
const human_readable_codec_1 = require("./human-readable-codec");
|
|
17
17
|
const layout_1 = require("./layout");
|
|
18
|
-
const RenderModalBasic = ({ renderMode, imageFormatOptions, outName, codec,
|
|
18
|
+
const RenderModalBasic = ({ renderMode, imageFormatOptions, outName, codec, setVideoCodec: setCodec, proResProfile, setProResProfile, frame, setFrame, currentComposition, setOutName, setEndFrame, endFrame, setStartFrame, startFrame, }) => {
|
|
19
19
|
const existence = (0, use_file_existence_1.useFileExistence)(outName);
|
|
20
20
|
const videoCodecOptions = (0, react_1.useMemo)(() => {
|
|
21
21
|
return client_1.BrowserSafeApis.validCodecs
|
|
@@ -37,29 +37,20 @@ const RenderModalBasic = ({ renderMode, imageFormatOptions, outName, codec, cust
|
|
|
37
37
|
};
|
|
38
38
|
});
|
|
39
39
|
}, [renderMode, setCodec, codec]);
|
|
40
|
-
const audioCodecOptions = (0, react_1.useCallback)((currentCodec) => {
|
|
41
|
-
return client_1.BrowserSafeApis.supportedAudioCodecs[currentCodec].map((audioCodecOption) => {
|
|
42
|
-
return {
|
|
43
|
-
label: (0, human_readable_audio_codecs_1.humanReadableAudioCodec)(audioCodecOption),
|
|
44
|
-
onClick: () => setAudioCodec(audioCodecOption),
|
|
45
|
-
key: audioCodecOption,
|
|
46
|
-
leftItem: codec === audioCodecOption ? (0, jsx_runtime_1.jsx)(Checkmark_1.Checkmark, {}) : null,
|
|
47
|
-
id: audioCodecOption,
|
|
48
|
-
keyHint: null,
|
|
49
|
-
quickSwitcherLabel: null,
|
|
50
|
-
subMenu: null,
|
|
51
|
-
type: 'item',
|
|
52
|
-
value: audioCodecOption,
|
|
53
|
-
};
|
|
54
|
-
});
|
|
55
|
-
}, [codec, setAudioCodec]);
|
|
56
40
|
const proResProfileOptions = (0, react_1.useMemo)(() => {
|
|
57
41
|
return client_1.BrowserSafeApis.proResProfileOptions.map((option) => {
|
|
58
42
|
return {
|
|
59
|
-
label: option,
|
|
43
|
+
label: (0, prores_labels_1.labelProResProfile)(option),
|
|
60
44
|
onClick: () => setProResProfile(option),
|
|
61
45
|
key: option,
|
|
62
46
|
selected: proResProfile === option,
|
|
47
|
+
type: 'item',
|
|
48
|
+
id: option,
|
|
49
|
+
keyHint: null,
|
|
50
|
+
leftItem: null,
|
|
51
|
+
quickSwitcherLabel: null,
|
|
52
|
+
subMenu: null,
|
|
53
|
+
value: option,
|
|
63
54
|
};
|
|
64
55
|
});
|
|
65
56
|
}, [proResProfile, setProResProfile]);
|
|
@@ -78,7 +69,7 @@ const RenderModalBasic = ({ renderMode, imageFormatOptions, outName, codec, cust
|
|
|
78
69
|
const onValueChange = (0, react_1.useCallback)((e) => {
|
|
79
70
|
setOutName(e.target.value);
|
|
80
71
|
}, [setOutName]);
|
|
81
|
-
return ((0, jsx_runtime_1.jsxs)("div", { children: [renderMode === 'still' ? ((0, jsx_runtime_1.jsxs)("div", { style: layout_1.optionRow, children: [(0, jsx_runtime_1.jsx)("div", { style: layout_1.label, children: "Format" }), (0, jsx_runtime_1.jsx)("div", { style: layout_1.rightRow, children: (0, jsx_runtime_1.jsx)(SegmentedControl_1.SegmentedControl, { items: imageFormatOptions, needsWrapping: true }) })] })) : ((0, jsx_runtime_1.jsxs)(
|
|
72
|
+
return ((0, jsx_runtime_1.jsxs)("div", { children: [renderMode === 'still' ? ((0, jsx_runtime_1.jsxs)("div", { style: layout_1.optionRow, children: [(0, jsx_runtime_1.jsx)("div", { style: layout_1.label, children: "Format" }), (0, jsx_runtime_1.jsx)("div", { style: layout_1.rightRow, children: (0, jsx_runtime_1.jsx)(SegmentedControl_1.SegmentedControl, { items: imageFormatOptions, needsWrapping: true }) })] })) : ((0, jsx_runtime_1.jsxs)("div", { style: layout_1.optionRow, children: [(0, jsx_runtime_1.jsx)("div", { style: layout_1.label, children: "Codec" }), (0, jsx_runtime_1.jsx)("div", { style: layout_1.rightRow, children: (0, jsx_runtime_1.jsx)(ComboBox_1.Combobox, { values: videoCodecOptions, selectedId: codec, title: "Codec" }) })] })), renderMode === 'still' && currentComposition.durationInFrames > 1 ? ((0, jsx_runtime_1.jsxs)("div", { style: layout_1.optionRow, children: [(0, jsx_runtime_1.jsx)("div", { style: layout_1.label, children: "Frame" }), (0, jsx_runtime_1.jsx)("div", { style: layout_1.rightRow, children: (0, jsx_runtime_1.jsx)(RemInput_1.RightAlignInput, { children: (0, jsx_runtime_1.jsx)(InputDragger_1.InputDragger, { value: frame, onTextChange: onFrameChanged, placeholder: `0-${currentComposition.durationInFrames - 1}`, onValueChange: onFrameSetDirectly, name: "frame", step: 1, min: 0, max: currentComposition.durationInFrames - 1 }) }) })] })) : null, renderMode === 'video' && codec === 'prores' ? ((0, jsx_runtime_1.jsxs)("div", { style: layout_1.optionRow, children: [(0, jsx_runtime_1.jsx)("div", { style: layout_1.label, children: "ProRes profile" }), (0, jsx_runtime_1.jsx)("div", { style: layout_1.rightRow, children: (0, jsx_runtime_1.jsx)(ComboBox_1.Combobox, { title: proResProfile, selectedId: proResProfile, values: proResProfileOptions }) })] })) : null, renderMode === 'still' ? null : ((0, jsx_runtime_1.jsx)(FrameRangeSetting_1.FrameRangeSetting, { durationInFrames: currentComposition.durationInFrames, endFrame: endFrame, setEndFrame: setEndFrame, setStartFrame: setStartFrame, startFrame: startFrame })), (0, jsx_runtime_1.jsxs)("div", { style: layout_1.optionRow, children: [(0, jsx_runtime_1.jsx)("div", { style: layout_1.label, children: "Output name" }), (0, jsx_runtime_1.jsx)("div", { style: layout_1.rightRow, children: (0, jsx_runtime_1.jsxs)("div", { children: [(0, jsx_runtime_1.jsx)(RemInput_1.RemotionInput
|
|
82
73
|
// TODO: Validate and reject folders or weird file names
|
|
83
74
|
, {
|
|
84
75
|
// TODO: Validate and reject folders or weird file names
|
|
@@ -44,8 +44,8 @@ const RenderModalPicture = ({ renderMode, scale, setScale, pixelFormat, setPixel
|
|
|
44
44
|
const onTargetVideoBitrateChanged = (0, react_1.useCallback)((e) => {
|
|
45
45
|
setCustomTargetVideoBitrateValue(e.target.value);
|
|
46
46
|
}, [setCustomTargetVideoBitrateValue]);
|
|
47
|
-
return ((0, jsx_runtime_1.jsxs)("div", { children: [renderMode === 'video' ? ((0, jsx_runtime_1.jsxs)("div", { style: layout_1.optionRow, children: [(0, jsx_runtime_1.jsx)("div", { style: layout_1.label, children: "Image Format" }), (0, jsx_runtime_1.jsx)("div", { style: layout_1.rightRow, children: (0, jsx_runtime_1.jsx)(SegmentedControl_1.SegmentedControl, { items: imageFormatOptions, needsWrapping: false }) })] })) : null, renderMode === 'video' && videoImageFormat === 'jpeg' && ((0, jsx_runtime_1.jsx)(QualitySetting_1.QualitySetting, { setQuality: setQuality, quality: quality })), renderMode === 'still' && stillImageFormat === 'jpeg' && ((0, jsx_runtime_1.jsx)(QualitySetting_1.QualitySetting, { setQuality: setQuality, quality: quality })), (0, jsx_runtime_1.jsx)(RenderModalHr_1.RenderModalHr, {}), renderMode === 'video' ? ((0, jsx_runtime_1.jsxs)("div", { style: layout_1.optionRow, children: [(0, jsx_runtime_1.jsx)("div", { style: layout_1.label, children: "Quality control" }), (0, jsx_runtime_1.jsx)("div", { style: layout_1.rightRow, children: (0, jsx_runtime_1.jsx)(SegmentedControl_1.SegmentedControl, { items: qualityControlOptions, needsWrapping: true }) })] })) : null, shouldDisplayCrfOption &&
|
|
47
|
+
return ((0, jsx_runtime_1.jsxs)("div", { children: [renderMode === 'video' ? ((0, jsx_runtime_1.jsxs)("div", { style: layout_1.optionRow, children: [(0, jsx_runtime_1.jsx)("div", { style: layout_1.label, children: "Image Format" }), (0, jsx_runtime_1.jsx)("div", { style: layout_1.rightRow, children: (0, jsx_runtime_1.jsx)(SegmentedControl_1.SegmentedControl, { items: imageFormatOptions, needsWrapping: false }) })] })) : null, renderMode === 'video' && videoImageFormat === 'jpeg' && ((0, jsx_runtime_1.jsx)(QualitySetting_1.QualitySetting, { setQuality: setQuality, quality: quality })), renderMode === 'still' && stillImageFormat === 'jpeg' && ((0, jsx_runtime_1.jsx)(QualitySetting_1.QualitySetting, { setQuality: setQuality, quality: quality })), renderMode === 'video' ? (0, jsx_runtime_1.jsx)(RenderModalHr_1.RenderModalHr, {}) : null, renderMode === 'video' ? ((0, jsx_runtime_1.jsxs)("div", { style: layout_1.optionRow, children: [(0, jsx_runtime_1.jsx)("div", { style: layout_1.label, children: "Quality control" }), (0, jsx_runtime_1.jsx)("div", { style: layout_1.rightRow, children: (0, jsx_runtime_1.jsx)(SegmentedControl_1.SegmentedControl, { items: qualityControlOptions, needsWrapping: true }) })] })) : null, shouldDisplayCrfOption &&
|
|
48
48
|
qualityControlType === 'crf' &&
|
|
49
|
-
renderMode !== 'still' ? ((0, jsx_runtime_1.jsx)(NumberSetting_1.NumberSetting, { min: minCrf, max: maxCrf, name: "CRF", onValueChanged: setCrf, value: crf, step: 1 })) : null, qualityControlType === 'bitrate' && renderMode !== 'still' ? ((0, jsx_runtime_1.jsxs)("div", { style: layout_1.optionRow, children: [(0, jsx_runtime_1.jsx)("div", { style: layout_1.label, children: "Target video bitrate" }), (0, jsx_runtime_1.jsx)("div", { style: layout_1.rightRow, children: (0, jsx_runtime_1.jsx)("div", { children: (0, jsx_runtime_1.jsx)(RemInput_1.RemotionInput, { style: layout_1.input, value: customTargetVideoBitrate, onChange: onTargetVideoBitrateChanged }) }) })] })) : null, (0, jsx_runtime_1.jsx)(RenderModalHr_1.RenderModalHr, {})
|
|
49
|
+
renderMode !== 'still' ? ((0, jsx_runtime_1.jsx)(NumberSetting_1.NumberSetting, { min: minCrf, max: maxCrf, name: "CRF", onValueChanged: setCrf, value: crf, step: 1 })) : null, qualityControlType === 'bitrate' && renderMode !== 'still' ? ((0, jsx_runtime_1.jsxs)("div", { style: layout_1.optionRow, children: [(0, jsx_runtime_1.jsx)("div", { style: layout_1.label, children: "Target video bitrate" }), (0, jsx_runtime_1.jsx)("div", { style: layout_1.rightRow, children: (0, jsx_runtime_1.jsx)("div", { children: (0, jsx_runtime_1.jsx)(RemInput_1.RemotionInput, { style: layout_1.input, value: customTargetVideoBitrate, onChange: onTargetVideoBitrateChanged }) }) })] })) : null, renderMode === 'video' ? (0, jsx_runtime_1.jsx)(RenderModalHr_1.RenderModalHr, {}) : null, (0, jsx_runtime_1.jsx)(ScaleSetting_1.ScaleSetting, { scale: scale, setScale: setScale }), renderMode === 'video' ? (0, jsx_runtime_1.jsx)(RenderModalHr_1.RenderModalHr, {}) : null, renderMode === 'video' ? ((0, jsx_runtime_1.jsxs)("div", { style: layout_1.optionRow, children: [(0, jsx_runtime_1.jsx)("div", { style: layout_1.label, children: "Pixel format" }), (0, jsx_runtime_1.jsx)("div", { style: layout_1.rightRow, children: (0, jsx_runtime_1.jsx)(ComboBox_1.Combobox, { values: pixelFormatOptions, selectedId: pixelFormat, title: "Pixel Format" }) })] })) : null] }));
|
|
50
50
|
};
|
|
51
51
|
exports.RenderModalPicture = RenderModalPicture;
|
|
@@ -2,10 +2,13 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.ScaleSetting = void 0;
|
|
4
4
|
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
5
|
+
const client_1 = require("@remotion/renderer/client");
|
|
5
6
|
const NumberSetting_1 = require("./NumberSetting");
|
|
6
7
|
const MIN_SCALE = 0.1;
|
|
7
8
|
const MAX_SCALE = 10;
|
|
8
9
|
const ScaleSetting = ({ scale, setScale }) => {
|
|
9
|
-
return (
|
|
10
|
+
return (
|
|
11
|
+
// TODO: Always show 1 decimal
|
|
12
|
+
(0, jsx_runtime_1.jsx)(NumberSetting_1.NumberSetting, { min: MIN_SCALE, max: MAX_SCALE, step: 0.1, name: "Scale", formatter: (w) => `${w}x`, onValueChanged: setScale, value: scale, hint: client_1.BrowserSafeApis.options.scaleOption }));
|
|
10
13
|
};
|
|
11
14
|
exports.ScaleSetting = ScaleSetting;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import type { Codec } from '@remotion/renderer';
|
|
2
|
-
export declare const humanReadableCodec: (codec: Codec) => "GIF" | "AAC" | "MP3" | "H.264" | "H.264
|
|
2
|
+
export declare const humanReadableCodec: (codec: Codec) => "GIF" | "AAC" | "MP3" | "H.264" | "H.264 Matroska" | "H.265" | "ProRes" | "WebM VP8" | "WebM VP9" | "Waveform" | undefined;
|
|
@@ -6,6 +6,7 @@ const layout_1 = require("../layout");
|
|
|
6
6
|
const RenderQueueError_1 = require("./RenderQueueError");
|
|
7
7
|
const RenderQueueItemCancelButton_1 = require("./RenderQueueItemCancelButton");
|
|
8
8
|
const RenderQueueItemStatus_1 = require("./RenderQueueItemStatus");
|
|
9
|
+
const RenderQueueOpenInFolder_1 = require("./RenderQueueOpenInFolder");
|
|
9
10
|
const RenderQueueOutputName_1 = require("./RenderQueueOutputName");
|
|
10
11
|
const RenderQueueProgressMessage_1 = require("./RenderQueueProgressMessage");
|
|
11
12
|
const RenderQueueRemoveItem_1 = require("./RenderQueueRemoveItem");
|
|
@@ -34,6 +35,6 @@ const subtitle = {
|
|
|
34
35
|
overflow: 'hidden',
|
|
35
36
|
};
|
|
36
37
|
const RenderQueueItem = ({ job }) => {
|
|
37
|
-
return ((0, jsx_runtime_1.jsxs)(layout_1.Row, { style: container, align: "center", children: [(0, jsx_runtime_1.jsx)(RenderQueueItemStatus_1.RenderQueueItemStatus, { job: job }), (0, jsx_runtime_1.jsx)(layout_1.Spacing, { x: 1 }), (0, jsx_runtime_1.jsxs)("div", { style: right, children: [(0, jsx_runtime_1.jsx)("div", { style: title, children: job.compositionId }), (0, jsx_runtime_1.jsx)("div", { style: subtitle, children: job.status === 'done' ? ((0, jsx_runtime_1.jsx)(RenderQueueOutputName_1.RenderQueueOutputName, { job: job })) : job.status === 'failed' ? ((0, jsx_runtime_1.jsx)(RenderQueueError_1.RenderQueueError, { job: job })) : job.status === 'running' ? ((0, jsx_runtime_1.jsx)(RenderQueueProgressMessage_1.RenderQueueProgressMessage, { job: job })) : null })] }), (0, jsx_runtime_1.jsx)(layout_1.Spacing, { x: 1 }), job.status === 'done' || job.status === 'failed' ? ((0, jsx_runtime_1.jsx)(RenderQueueRepeat_1.RenderQueueRepeatItem, { job: job })) : null, job.status === 'running' ? ((0, jsx_runtime_1.jsx)(RenderQueueItemCancelButton_1.RenderQueueCancelButton, { job: job })) : ((0, jsx_runtime_1.jsx)(RenderQueueRemoveItem_1.RenderQueueRemoveItem, { job: job }))] }));
|
|
38
|
+
return ((0, jsx_runtime_1.jsxs)(layout_1.Row, { style: container, align: "center", children: [(0, jsx_runtime_1.jsx)(RenderQueueItemStatus_1.RenderQueueItemStatus, { job: job }), (0, jsx_runtime_1.jsx)(layout_1.Spacing, { x: 1 }), (0, jsx_runtime_1.jsxs)("div", { style: right, children: [(0, jsx_runtime_1.jsx)("div", { style: title, children: job.compositionId }), (0, jsx_runtime_1.jsx)("div", { style: subtitle, children: job.status === 'done' ? ((0, jsx_runtime_1.jsx)(RenderQueueOutputName_1.RenderQueueOutputName, { job: job })) : job.status === 'failed' ? ((0, jsx_runtime_1.jsx)(RenderQueueError_1.RenderQueueError, { job: job })) : job.status === 'running' ? ((0, jsx_runtime_1.jsx)(RenderQueueProgressMessage_1.RenderQueueProgressMessage, { job: job })) : null })] }), (0, jsx_runtime_1.jsx)(layout_1.Spacing, { x: 1 }), job.status === 'done' || job.status === 'failed' ? ((0, jsx_runtime_1.jsx)(RenderQueueRepeat_1.RenderQueueRepeatItem, { job: job })) : null, job.status === 'running' ? ((0, jsx_runtime_1.jsx)(RenderQueueItemCancelButton_1.RenderQueueCancelButton, { job: job })) : ((0, jsx_runtime_1.jsx)(RenderQueueRemoveItem_1.RenderQueueRemoveItem, { job: job })), job.status === 'done' ? (0, jsx_runtime_1.jsx)(RenderQueueOpenInFolder_1.RenderQueueOpenInFinderItem, { job: job }) : null] }));
|
|
38
39
|
};
|
|
39
40
|
exports.RenderQueueItem = RenderQueueItem;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.RenderQueueOpenInFinderItem = void 0;
|
|
4
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
5
|
+
const react_1 = require("react");
|
|
6
|
+
const InlineAction_1 = require("../InlineAction");
|
|
7
|
+
const NotificationCenter_1 = require("../Notifications/NotificationCenter");
|
|
8
|
+
const actions_1 = require("./actions");
|
|
9
|
+
const RenderQueueOpenInFinderItem = ({ job, }) => {
|
|
10
|
+
const onClick = (0, react_1.useCallback)(() => {
|
|
11
|
+
(0, actions_1.openInFileExplorer)({ directory: job.outName }).catch((err) => {
|
|
12
|
+
(0, NotificationCenter_1.sendErrorNotification)(`Could not open file: ${err.message}`);
|
|
13
|
+
});
|
|
14
|
+
}, [job.outName]);
|
|
15
|
+
const icon = (0, react_1.useMemo)(() => {
|
|
16
|
+
return {
|
|
17
|
+
height: 12,
|
|
18
|
+
};
|
|
19
|
+
}, []);
|
|
20
|
+
return ((0, jsx_runtime_1.jsx)(InlineAction_1.InlineAction, { onClick: onClick, children: (0, jsx_runtime_1.jsx)("svg", { style: icon, viewBox: "0 0 576 512", children: (0, jsx_runtime_1.jsx)("path", { fill: "currentcolor", d: "M384 480h48c11.4 0 21.9-6 27.6-15.9l112-192c5.8-9.9 5.8-22.1 .1-32.1S555.5 224 544 224H144c-11.4 0-21.9 6-27.6 15.9L48 357.1V96c0-8.8 7.2-16 16-16H181.5c4.2 0 8.3 1.7 11.3 4.7l26.5 26.5c21 21 49.5 32.8 79.2 32.8H416c8.8 0 16 7.2 16 16v32h48V160c0-35.3-28.7-64-64-64H298.5c-17 0-33.3-6.7-45.3-18.7L226.7 50.7c-12-12-28.3-18.7-45.3-18.7H64C28.7 32 0 60.7 0 96V416c0 35.3 28.7 64 64 64H87.7 384z" }) }) }));
|
|
21
|
+
};
|
|
22
|
+
exports.RenderQueueOpenInFinderItem = RenderQueueOpenInFinderItem;
|
|
@@ -11,7 +11,7 @@ export declare const addStillRenderJob: ({ compositionId, outName, imageFormat,
|
|
|
11
11
|
scale: number;
|
|
12
12
|
verbose: boolean;
|
|
13
13
|
}) => Promise<undefined>;
|
|
14
|
-
export declare const addVideoRenderJob: ({ compositionId, outName, imageFormat, quality, scale, verbose, codec, concurrency, crf, startFrame, endFrame, muted, enforceAudioTrack, proResProfile, pixelFormat, audioBitrate, videoBitrate, everyNthFrame, numberOfGifLoops, delayRenderTimeout, audioCodec, }: {
|
|
14
|
+
export declare const addVideoRenderJob: ({ compositionId, outName, imageFormat, quality, scale, verbose, codec, concurrency, crf, startFrame, endFrame, muted, enforceAudioTrack, proResProfile, pixelFormat, audioBitrate, videoBitrate, everyNthFrame, numberOfGifLoops, delayRenderTimeout, audioCodec, disallowParallelEncoding, }: {
|
|
15
15
|
compositionId: string;
|
|
16
16
|
outName: string;
|
|
17
17
|
imageFormat: VideoImageFormat;
|
|
@@ -33,6 +33,7 @@ export declare const addVideoRenderJob: ({ compositionId, outName, imageFormat,
|
|
|
33
33
|
numberOfGifLoops: number | null;
|
|
34
34
|
delayRenderTimeout: number;
|
|
35
35
|
audioCodec: AudioCodec;
|
|
36
|
+
disallowParallelEncoding: boolean;
|
|
36
37
|
}) => Promise<undefined>;
|
|
37
38
|
export declare const unsubscribeFromFileExistenceWatcher: ({ file, clientId, }: {
|
|
38
39
|
file: string;
|
|
@@ -38,7 +38,7 @@ const addStillRenderJob = ({ compositionId, outName, imageFormat, quality, frame
|
|
|
38
38
|
});
|
|
39
39
|
};
|
|
40
40
|
exports.addStillRenderJob = addStillRenderJob;
|
|
41
|
-
const addVideoRenderJob = ({ compositionId, outName, imageFormat, quality, scale, verbose, codec, concurrency, crf, startFrame, endFrame, muted, enforceAudioTrack, proResProfile, pixelFormat, audioBitrate, videoBitrate, everyNthFrame, numberOfGifLoops, delayRenderTimeout, audioCodec, }) => {
|
|
41
|
+
const addVideoRenderJob = ({ compositionId, outName, imageFormat, quality, scale, verbose, codec, concurrency, crf, startFrame, endFrame, muted, enforceAudioTrack, proResProfile, pixelFormat, audioBitrate, videoBitrate, everyNthFrame, numberOfGifLoops, delayRenderTimeout, audioCodec, disallowParallelEncoding, }) => {
|
|
42
42
|
return (0, exports.callApi)('/api/render', {
|
|
43
43
|
compositionId,
|
|
44
44
|
type: 'video',
|
|
@@ -62,6 +62,7 @@ const addVideoRenderJob = ({ compositionId, outName, imageFormat, quality, scale
|
|
|
62
62
|
numberOfGifLoops,
|
|
63
63
|
delayRenderTimeout,
|
|
64
64
|
audioCodec,
|
|
65
|
+
disallowParallelEncoding,
|
|
65
66
|
});
|
|
66
67
|
};
|
|
67
68
|
exports.addVideoRenderJob = addVideoRenderJob;
|
|
@@ -53,9 +53,9 @@ const RenderStillButton = () => {
|
|
|
53
53
|
initialQuality: defaults.quality,
|
|
54
54
|
initialScale: (_b = (_a = window.remotion_renderDefaults) === null || _a === void 0 ? void 0 : _a.scale) !== null && _b !== void 0 ? _b : 1,
|
|
55
55
|
initialVerbose: defaults.logLevel === 'verbose',
|
|
56
|
-
initialAudioCodec,
|
|
56
|
+
initialVideoCodecForAudioTab: initialAudioCodec,
|
|
57
57
|
initialRenderType,
|
|
58
|
-
initialVideoCodec,
|
|
58
|
+
initialVideoCodecForVideoTab: initialVideoCodec,
|
|
59
59
|
initialConcurrency: defaults.concurrency,
|
|
60
60
|
maxConcurrency: defaults.maxConcurrency,
|
|
61
61
|
minConcurrency: defaults.minConcurrency,
|
|
@@ -68,6 +68,7 @@ const RenderStillButton = () => {
|
|
|
68
68
|
initialEveryNthFrame: defaults.everyNthFrame,
|
|
69
69
|
initialNumberOfGifLoops: defaults.numberOfGifLoops,
|
|
70
70
|
initialDelayRenderTimeout: defaults.delayRenderTimeout,
|
|
71
|
+
initialAudioCodec: defaults.audioCodec,
|
|
71
72
|
});
|
|
72
73
|
}, [video, frame, setSelectedModal]);
|
|
73
74
|
if (!video) {
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.labelProResProfile = void 0;
|
|
4
|
+
const labelProResProfile = (profile) => {
|
|
5
|
+
if (profile === '4444') {
|
|
6
|
+
return '4444';
|
|
7
|
+
}
|
|
8
|
+
if (profile === '4444-xq') {
|
|
9
|
+
return '4444 XQ (Best)';
|
|
10
|
+
}
|
|
11
|
+
if (profile === 'hq') {
|
|
12
|
+
return 'HQ';
|
|
13
|
+
}
|
|
14
|
+
if (profile === 'proxy') {
|
|
15
|
+
return 'Proxy (Worst)';
|
|
16
|
+
}
|
|
17
|
+
if (profile === 'light') {
|
|
18
|
+
return 'Light';
|
|
19
|
+
}
|
|
20
|
+
if (profile === 'standard') {
|
|
21
|
+
return 'Standard';
|
|
22
|
+
}
|
|
23
|
+
throw new TypeError(`Unknown ProRes profile: ${profile}`);
|
|
24
|
+
};
|
|
25
|
+
exports.labelProResProfile = labelProResProfile;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
import type { Codec } from '@remotion/renderer';
|
|
3
|
+
import type { RenderType } from '../components/RenderModal/RenderModalAdvanced';
|
|
4
|
+
declare type Section = 'general' | 'picture' | 'advanced' | 'gif' | 'audio';
|
|
5
|
+
export declare const useRenderModalSections: (renderMode: RenderType, codec: Codec) => {
|
|
6
|
+
tab: Section;
|
|
7
|
+
setTab: import("react").Dispatch<import("react").SetStateAction<Section>>;
|
|
8
|
+
shownTabs: Section[];
|
|
9
|
+
};
|
|
10
|
+
export {};
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.useRenderModalSections = void 0;
|
|
4
|
+
const react_1 = require("react");
|
|
5
|
+
const useRenderModalSections = (renderMode, codec) => {
|
|
6
|
+
const [selectedTab, setTab] = (0, react_1.useState)('general');
|
|
7
|
+
const shownTabs = (0, react_1.useMemo)(() => {
|
|
8
|
+
if (renderMode === 'audio') {
|
|
9
|
+
return ['general', 'audio', 'advanced'];
|
|
10
|
+
}
|
|
11
|
+
if (renderMode === 'still') {
|
|
12
|
+
return ['general', 'picture', 'advanced'];
|
|
13
|
+
}
|
|
14
|
+
if (renderMode === 'video') {
|
|
15
|
+
if (codec === 'gif') {
|
|
16
|
+
return ['general', 'picture', 'gif', 'advanced'];
|
|
17
|
+
}
|
|
18
|
+
return ['general', 'picture', 'audio', 'advanced'];
|
|
19
|
+
}
|
|
20
|
+
throw new TypeError('Unknown render mode');
|
|
21
|
+
}, [codec, renderMode]);
|
|
22
|
+
const tab = (0, react_1.useMemo)(() => {
|
|
23
|
+
if (!shownTabs.includes(selectedTab)) {
|
|
24
|
+
return shownTabs[0];
|
|
25
|
+
}
|
|
26
|
+
return selectedTab;
|
|
27
|
+
}, [selectedTab, shownTabs]);
|
|
28
|
+
return (0, react_1.useMemo)(() => {
|
|
29
|
+
return { tab, setTab, shownTabs };
|
|
30
|
+
}, [tab, shownTabs]);
|
|
31
|
+
};
|
|
32
|
+
exports.useRenderModalSections = useRenderModalSections;
|
|
@@ -44,6 +44,7 @@ declare type RenderJobDynamicFields = {
|
|
|
44
44
|
everyNthFrame: number;
|
|
45
45
|
numberOfGifLoops: number | null;
|
|
46
46
|
delayRenderTimeout: number;
|
|
47
|
+
disallowParallelEncoding: boolean;
|
|
47
48
|
};
|
|
48
49
|
export declare type RenderJob = {
|
|
49
50
|
startedAt: number;
|
|
@@ -85,6 +86,7 @@ declare type AddRenderRequestDynamicFields = {
|
|
|
85
86
|
everyNthFrame: number;
|
|
86
87
|
numberOfGifLoops: number | null;
|
|
87
88
|
delayRenderTimeout: number;
|
|
89
|
+
disallowParallelEncoding: boolean;
|
|
88
90
|
};
|
|
89
91
|
export declare type CancelRenderRequest = {
|
|
90
92
|
jobId: string;
|
|
@@ -18,15 +18,14 @@ const makeRetryPayload = (job) => {
|
|
|
18
18
|
compositionId: job.compositionId,
|
|
19
19
|
initialFrame: job.frame,
|
|
20
20
|
initialStillImageFormat: job.imageFormat,
|
|
21
|
-
|
|
22
|
-
initialVideoImageFormat: 'jpeg',
|
|
21
|
+
initialVideoImageFormat: defaults.videoImageFormat,
|
|
23
22
|
initialQuality: (_a = job.quality) !== null && _a !== void 0 ? _a : defaults.quality,
|
|
24
23
|
initialOutName: job.outName,
|
|
25
24
|
initialScale: job.scale,
|
|
26
25
|
initialVerbose: job.verbose,
|
|
27
|
-
initialAudioCodec,
|
|
26
|
+
initialVideoCodecForAudioTab: initialAudioCodec,
|
|
28
27
|
initialRenderType,
|
|
29
|
-
initialVideoCodec,
|
|
28
|
+
initialVideoCodecForVideoTab: initialVideoCodec,
|
|
30
29
|
initialConcurrency: defaults.concurrency,
|
|
31
30
|
maxConcurrency: defaults.maxConcurrency,
|
|
32
31
|
minConcurrency: defaults.minConcurrency,
|
|
@@ -39,6 +38,7 @@ const makeRetryPayload = (job) => {
|
|
|
39
38
|
initialEveryNthFrame: defaults.everyNthFrame,
|
|
40
39
|
initialNumberOfGifLoops: defaults.numberOfGifLoops,
|
|
41
40
|
initialDelayRenderTimeout: defaults.delayRenderTimeout,
|
|
41
|
+
initialAudioCodec: defaults.audioCodec,
|
|
42
42
|
};
|
|
43
43
|
}
|
|
44
44
|
if (job.type === 'video') {
|
|
@@ -49,8 +49,7 @@ const makeRetryPayload = (job) => {
|
|
|
49
49
|
return {
|
|
50
50
|
type: 'render',
|
|
51
51
|
compositionId: job.compositionId,
|
|
52
|
-
|
|
53
|
-
initialStillImageFormat: 'png',
|
|
52
|
+
initialStillImageFormat: defaults.stillImageFormat,
|
|
54
53
|
initialVideoImageFormat: job.imageFormat,
|
|
55
54
|
initialQuality: (_b = job.quality) !== null && _b !== void 0 ? _b : defaults.quality,
|
|
56
55
|
initialOutName: job.outName,
|
|
@@ -61,10 +60,10 @@ const makeRetryPayload = (job) => {
|
|
|
61
60
|
maxConcurrency: defaults.maxConcurrency,
|
|
62
61
|
minConcurrency: defaults.minConcurrency,
|
|
63
62
|
initialMuted: job.muted,
|
|
64
|
-
initialAudioCodec,
|
|
63
|
+
initialVideoCodecForAudioTab: initialAudioCodec,
|
|
65
64
|
initialEnforceAudioTrack: job.enforceAudioTrack,
|
|
66
65
|
initialRenderType,
|
|
67
|
-
initialVideoCodec,
|
|
66
|
+
initialVideoCodecForVideoTab: initialVideoCodec,
|
|
68
67
|
initialProResProfile: (_c = job.proResProfile) !== null && _c !== void 0 ? _c : defaults.proResProfile,
|
|
69
68
|
initialPixelFormat: job.pixelFormat,
|
|
70
69
|
initialAudioBitrate: job.audioBitrate,
|
|
@@ -72,6 +71,7 @@ const makeRetryPayload = (job) => {
|
|
|
72
71
|
initialEveryNthFrame: job.everyNthFrame,
|
|
73
72
|
initialNumberOfGifLoops: job.numberOfGifLoops,
|
|
74
73
|
initialDelayRenderTimeout: job.delayRenderTimeout,
|
|
74
|
+
initialAudioCodec: job.audioCodec,
|
|
75
75
|
};
|
|
76
76
|
}
|
|
77
77
|
throw new Error(`Job ${JSON.stringify(job)} Not implemented`);
|
|
@@ -9,7 +9,13 @@ const processStill = async ({ job, remotionRoot, entryPoint, onProgress, addClea
|
|
|
9
9
|
if (job.type !== 'still') {
|
|
10
10
|
throw new Error('Expected still job');
|
|
11
11
|
}
|
|
12
|
-
const { publicDir, browserExecutable,
|
|
12
|
+
const { publicDir, browserExecutable,
|
|
13
|
+
// TODO: Accept chromium options from UI
|
|
14
|
+
chromiumOptions,
|
|
15
|
+
// TODO: Accept env variables from UI
|
|
16
|
+
envVariables,
|
|
17
|
+
// TODO: Accept input props from UI
|
|
18
|
+
inputProps, port, browser, puppeteerTimeout, } = await (0, get_cli_options_1.getCliOptions)({
|
|
13
19
|
isLambda: false,
|
|
14
20
|
type: 'still',
|
|
15
21
|
remotionRoot,
|
|
@@ -42,6 +48,5 @@ const processStill = async ({ job, remotionRoot, entryPoint, onProgress, addClea
|
|
|
42
48
|
addCleanupCallback,
|
|
43
49
|
cancelSignal: job.cancelToken.cancelSignal,
|
|
44
50
|
});
|
|
45
|
-
// TODO: Accept CLI options
|
|
46
51
|
};
|
|
47
52
|
exports.processStill = processStill;
|
|
@@ -9,14 +9,19 @@ const processVideoJob = async ({ job, remotionRoot, entryPoint, onProgress, addC
|
|
|
9
9
|
if (job.type !== 'video') {
|
|
10
10
|
throw new Error('Expected video job');
|
|
11
11
|
}
|
|
12
|
-
|
|
13
|
-
|
|
12
|
+
const { publicDir, browserExecutable,
|
|
13
|
+
// TODO: Accept chromium options from UI
|
|
14
|
+
chromiumOptions,
|
|
15
|
+
// TODO: Accept env variables from UI
|
|
16
|
+
envVariables,
|
|
17
|
+
// TODO: Accept input props from UI
|
|
18
|
+
inputProps, port, browser, ffmpegOverride, } = await (0, get_cli_options_1.getCliOptions)({
|
|
14
19
|
isLambda: false,
|
|
15
20
|
type: 'still',
|
|
16
21
|
remotionRoot,
|
|
17
22
|
});
|
|
18
23
|
const fullEntryPoint = (0, convert_entry_point_to_serve_url_1.convertEntryPointToServeUrl)(entryPoint);
|
|
19
|
-
await (0, render_1.
|
|
24
|
+
await (0, render_1.renderVideoFlow)({
|
|
20
25
|
remotionRoot,
|
|
21
26
|
browser,
|
|
22
27
|
browserExecutable,
|
|
@@ -58,7 +63,7 @@ const processVideoJob = async ({ job, remotionRoot, entryPoint, onProgress, addC
|
|
|
58
63
|
videoBitrate: job.videoBitrate,
|
|
59
64
|
numberOfGifLoops: job.numberOfGifLoops,
|
|
60
65
|
audioCodec: job.audioCodec,
|
|
66
|
+
disallowParallelEncoding: job.disallowParallelEncoding,
|
|
61
67
|
});
|
|
62
|
-
// TODO: Accept CLI options
|
|
63
68
|
};
|
|
64
69
|
exports.processVideoJob = processVideoJob;
|
|
@@ -38,6 +38,7 @@ const handleAddRender = ({ input, entryPoint, remotionRoot, }) => {
|
|
|
38
38
|
everyNthFrame: input.everyNthFrame,
|
|
39
39
|
numberOfGifLoops: input.numberOfGifLoops,
|
|
40
40
|
delayRenderTimeout: input.delayRenderTimeout,
|
|
41
|
+
disallowParallelEncoding: input.disallowParallelEncoding,
|
|
41
42
|
},
|
|
42
43
|
});
|
|
43
44
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { AudioCodec, Browser, BrowserExecutable, CancelSignal, ChromiumOptions, Codec, Crf, FfmpegOverrideFn, FrameRange, LogLevel, PixelFormat, ProResProfile, VideoImageFormat } from '@remotion/renderer';
|
|
2
2
|
import type { Loop } from '../config/number-of-gif-loops';
|
|
3
3
|
import type { JobProgressCallback } from '../preview-server/render-queue/job';
|
|
4
|
-
export declare const
|
|
4
|
+
export declare const renderVideoFlow: ({ remotionRoot, fullEntryPoint, indent, logLevel, browserExecutable, browser, chromiumOptions, scale, shouldOutputImageSequence, publicDir, inputProps, envVariables, puppeteerTimeout, port, height, width, remainingArgs, compositionIdFromUi, entryPointReason, overwrite, quiet, concurrency, frameRange, everyNthFrame, outputLocationFromUI, quality, onProgress, addCleanupCallback, cancelSignal, crf, uiCodec, uiImageFormat, ffmpegOverride, audioBitrate, muted, enforceAudioTrack, proResProfile, pixelFormat, videoBitrate, numberOfGifLoops, audioCodec, disallowParallelEncoding, }: {
|
|
5
5
|
remotionRoot: string;
|
|
6
6
|
fullEntryPoint: string;
|
|
7
7
|
entryPointReason: string;
|
|
@@ -33,7 +33,7 @@ export declare const renderCompFlow: ({ remotionRoot, fullEntryPoint, indent, lo
|
|
|
33
33
|
crf: Crf | null;
|
|
34
34
|
cancelSignal: CancelSignal | null;
|
|
35
35
|
uiCodec: Codec | null;
|
|
36
|
-
uiImageFormat: VideoImageFormat;
|
|
36
|
+
uiImageFormat: VideoImageFormat | null;
|
|
37
37
|
ffmpegOverride: FfmpegOverrideFn;
|
|
38
38
|
audioBitrate: string | null;
|
|
39
39
|
videoBitrate: string | null;
|
|
@@ -43,4 +43,5 @@ export declare const renderCompFlow: ({ remotionRoot, fullEntryPoint, indent, lo
|
|
|
43
43
|
pixelFormat: PixelFormat;
|
|
44
44
|
numberOfGifLoops: Loop;
|
|
45
45
|
audioCodec: AudioCodec | null;
|
|
46
|
+
disallowParallelEncoding: boolean;
|
|
46
47
|
}) => Promise<void>;
|
|
@@ -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.
|
|
6
|
+
exports.renderVideoFlow = void 0;
|
|
7
7
|
const renderer_1 = require("@remotion/renderer");
|
|
8
8
|
const fs_1 = __importDefault(require("fs"));
|
|
9
9
|
const os_1 = __importDefault(require("os"));
|
|
@@ -22,8 +22,7 @@ const progress_bar_1 = require("../progress-bar");
|
|
|
22
22
|
const setup_cache_1 = require("../setup-cache");
|
|
23
23
|
const truthy_1 = require("../truthy");
|
|
24
24
|
const user_passed_output_location_1 = require("../user-passed-output-location");
|
|
25
|
-
|
|
26
|
-
const renderCompFlow = async ({ remotionRoot, fullEntryPoint, indent, logLevel, browserExecutable, browser, chromiumOptions, scale, shouldOutputImageSequence, publicDir, inputProps, envVariables, puppeteerTimeout, port, height, width, remainingArgs, compositionIdFromUi, entryPointReason, overwrite, quiet, concurrency, frameRange, everyNthFrame, outputLocationFromUI, quality, onProgress, addCleanupCallback, cancelSignal, crf, uiCodec, uiImageFormat, ffmpegOverride, audioBitrate, muted, enforceAudioTrack, proResProfile, pixelFormat, videoBitrate, numberOfGifLoops, audioCodec, }) => {
|
|
25
|
+
const renderVideoFlow = async ({ remotionRoot, fullEntryPoint, indent, logLevel, browserExecutable, browser, chromiumOptions, scale, shouldOutputImageSequence, publicDir, inputProps, envVariables, puppeteerTimeout, port, height, width, remainingArgs, compositionIdFromUi, entryPointReason, overwrite, quiet, concurrency, frameRange, everyNthFrame, outputLocationFromUI, quality, onProgress, addCleanupCallback, cancelSignal, crf, uiCodec, uiImageFormat, ffmpegOverride, audioBitrate, muted, enforceAudioTrack, proResProfile, pixelFormat, videoBitrate, numberOfGifLoops, audioCodec, disallowParallelEncoding, }) => {
|
|
27
26
|
var _a;
|
|
28
27
|
const downloads = [];
|
|
29
28
|
const downloadMap = renderer_1.RenderInternals.makeDownloadMap();
|
|
@@ -262,7 +261,9 @@ const renderCompFlow = async ({ remotionRoot, fullEntryPoint, indent, logLevel,
|
|
|
262
261
|
cancelSignal: cancelSignal !== null && cancelSignal !== void 0 ? cancelSignal : undefined,
|
|
263
262
|
printLog: (...str) => log_1.Log.verboseAdvanced({ indent, logLevel }, ...str),
|
|
264
263
|
audioCodec,
|
|
265
|
-
|
|
264
|
+
preferLossless: false,
|
|
265
|
+
imageFormat,
|
|
266
|
+
disallowParallelEncoding,
|
|
266
267
|
});
|
|
267
268
|
log_1.Log.verboseAdvanced({ indent, logLevel });
|
|
268
269
|
log_1.Log.verboseAdvanced({ indent, logLevel }, `Slowest frames:`);
|
|
@@ -276,4 +277,4 @@ const renderCompFlow = async ({ remotionRoot, fullEntryPoint, indent, logLevel,
|
|
|
276
277
|
log_1.Log.verboseAdvanced({ indent, logLevel }, line);
|
|
277
278
|
}
|
|
278
279
|
};
|
|
279
|
-
exports.
|
|
280
|
+
exports.renderVideoFlow = renderVideoFlow;
|