@remotion/cli 3.3.41 → 3.3.43

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.
Files changed (67) hide show
  1. package/dist/config/audio-codec.d.ts +3 -0
  2. package/dist/config/audio-codec.js +20 -0
  3. package/dist/config/index.d.ts +1 -0
  4. package/dist/config/index.js +4 -0
  5. package/dist/editor/components/Modals.js +1 -1
  6. package/dist/editor/components/RenderButton.js +8 -29
  7. package/dist/editor/components/RenderModal/CrfSetting.d.ts +2 -2
  8. package/dist/editor/components/RenderModal/CrfSetting.js +24 -11
  9. package/dist/editor/components/RenderModal/RenderModal.d.ts +5 -19
  10. package/dist/editor/components/RenderModal/RenderModal.js +181 -225
  11. package/dist/editor/components/RenderModal/ScaleSetting.js +18 -2
  12. package/dist/editor/components/RenderModal/layout.d.ts +0 -1
  13. package/dist/editor/components/RenderModal/layout.js +2 -8
  14. package/dist/editor/components/RenderQueue/RenderQueueRemoveItem.js +1 -2
  15. package/dist/editor/components/RenderQueue/actions.d.ts +2 -15
  16. package/dist/editor/components/RenderQueue/actions.js +1 -14
  17. package/dist/editor/components/RenderToolbarIcon.js +8 -30
  18. package/dist/editor/components/SegmentedControl.js +1 -1
  19. package/dist/editor/components/SidebarContent.js +1 -2
  20. package/dist/get-audio-codec.d.ts +2 -0
  21. package/dist/get-audio-codec.js +10 -0
  22. package/dist/get-filename.d.ts +1 -3
  23. package/dist/get-filename.js +5 -23
  24. package/dist/get-final-output-codec.js +23 -31
  25. package/dist/get-render-media-options.js +3 -0
  26. package/dist/parse-command-line.d.ts +2 -1
  27. package/dist/preview-server/render-queue/get-default-video-contexts.d.ts +1 -1
  28. package/dist/preview-server/render-queue/job.d.ts +1 -27
  29. package/dist/preview-server/render-queue/make-retry-payload.js +10 -52
  30. package/dist/preview-server/render-queue/process-video.js +9 -16
  31. package/dist/preview-server/routes/add-render.js +0 -13
  32. package/dist/render-flows/render.d.ts +4 -14
  33. package/dist/render-flows/render.js +13 -40
  34. package/dist/render.js +3 -2
  35. package/package.json +7 -7
  36. package/dist/editor/components/RenderModal/EveryNthFrameSetting.d.ts +0 -5
  37. package/dist/editor/components/RenderModal/EveryNthFrameSetting.js +0 -9
  38. package/dist/editor/components/RenderModal/NumberOfLoopsSetting.d.ts +0 -5
  39. package/dist/editor/components/RenderModal/NumberOfLoopsSetting.js +0 -26
  40. package/dist/editor/components/RenderModal/NumberSetting.d.ts +0 -9
  41. package/dist/editor/components/RenderModal/NumberSetting.js +0 -26
  42. package/dist/editor/components/RenderModal/RenderModalAdvanced.d.ts +0 -11
  43. package/dist/editor/components/RenderModal/RenderModalAdvanced.js +0 -15
  44. package/dist/editor/components/RenderModal/RenderModalAudio.d.ts +0 -13
  45. package/dist/editor/components/RenderModal/RenderModalAudio.js +0 -22
  46. package/dist/editor/components/RenderModal/RenderModalBasic.d.ts +0 -22
  47. package/dist/editor/components/RenderModal/RenderModalBasic.js +0 -70
  48. package/dist/editor/components/RenderModal/RenderModalGeneral.d.ts +0 -0
  49. package/dist/editor/components/RenderModal/RenderModalGeneral.js +0 -1
  50. package/dist/editor/components/RenderModal/RenderModalGif.d.ts +0 -9
  51. package/dist/editor/components/RenderModal/RenderModalGif.js +0 -16
  52. package/dist/editor/components/RenderModal/RenderModalHr.d.ts +0 -2
  53. package/dist/editor/components/RenderModal/RenderModalHr.js +0 -18
  54. package/dist/editor/components/RenderModal/RenderModalPicture.d.ts +0 -28
  55. package/dist/editor/components/RenderModal/RenderModalPicture.js +0 -51
  56. package/dist/editor/components/RenderModal/human-readable-codec.d.ts +0 -2
  57. package/dist/editor/components/RenderModal/human-readable-codec.js +0 -36
  58. package/dist/editor/icons/audio.d.ts +0 -2
  59. package/dist/editor/icons/audio.js +0 -6
  60. package/dist/editor/icons/file.d.ts +0 -2
  61. package/dist/editor/icons/file.js +0 -6
  62. package/dist/editor/icons/frame.d.ts +0 -2
  63. package/dist/editor/icons/frame.js +0 -6
  64. package/dist/editor/icons/gear.d.ts +0 -2
  65. package/dist/editor/icons/gear.js +0 -6
  66. package/dist/editor/icons/gif.d.ts +0 -2
  67. package/dist/editor/icons/gif.js +0 -6
@@ -14,6 +14,7 @@ const get_cli_options_1 = require("../get-cli-options");
14
14
  const get_composition_with_dimension_override_1 = require("../get-composition-with-dimension-override");
15
15
  const get_filename_1 = require("../get-filename");
16
16
  const get_final_output_codec_1 = require("../get-final-output-codec");
17
+ const get_render_media_options_1 = require("../get-render-media-options");
17
18
  const image_formats_1 = require("../image-formats");
18
19
  const log_1 = require("../log");
19
20
  const parse_command_line_1 = require("../parse-command-line");
@@ -21,7 +22,7 @@ const progress_bar_1 = require("../progress-bar");
21
22
  const setup_cache_1 = require("../setup-cache");
22
23
  const truthy_1 = require("../truthy");
23
24
  const user_passed_output_location_1 = require("../user-passed-output-location");
24
- const renderCompFlow = async ({ remotionRoot, fullEntryPoint, ffmpegExecutable, ffprobeExecutable, indent, logLevel, browserExecutable, browser, chromiumOptions, scale, shouldOutputImageSequence, publicDir, inputProps, envVariables, puppeteerTimeout, port, height, width, remainingArgs, compositionIdFromUi, entryPointReason, overwrite, quiet, concurrency, frameRange, everyNthFrame, configFileImageFormat, outputLocationFromUI, quality, onProgress, addCleanupCallback, cancelSignal, crf, uiCodec, uiImageFormat, ffmpegOverride, audioBitrate, muted, enforceAudioTrack, proResProfile, pixelFormat, videoBitrate, numberOfGifLoops, }) => {
25
+ const renderCompFlow = async ({ remotionRoot, fullEntryPoint, ffmpegExecutable, ffprobeExecutable, indent, logLevel, browserExecutable, browser, chromiumOptions, scale, shouldOutputImageSequence, publicDir, inputProps, envVariables, puppeteerTimeout, port, height, width, remainingArgs, compositionIdFromUi, entryPointReason, overwrite, quiet, concurrency, frameRange, everyNthFrame, configFileImageFormat, outputLocationFromUI, quality, onProgress, addCleanupCallback, uiCodec, uiImageFormat, cancelSignal, }) => {
25
26
  var _a;
26
27
  const downloads = [];
27
28
  const downloadMap = renderer_1.RenderInternals.makeDownloadMap();
@@ -100,7 +101,7 @@ const renderCompFlow = async ({ remotionRoot, fullEntryPoint, ffmpegExecutable,
100
101
  outName: (0, user_passed_output_location_1.getUserPassedOutputLocation)(argsAfterComposition),
101
102
  uiCodec,
102
103
  });
103
- await (0, get_cli_options_1.validateFfmpegCanUseCodec)(codec, remotionRoot);
104
+ (0, get_cli_options_1.validateFfmpegCanUseCodec)(codec, remotionRoot);
104
105
  renderer_1.RenderInternals.validateEvenDimensionsWithCodec({
105
106
  width: config.width,
106
107
  height: config.height,
@@ -111,7 +112,7 @@ const renderCompFlow = async ({ remotionRoot, fullEntryPoint, ffmpegExecutable,
111
112
  codec,
112
113
  imageSequence: shouldOutputImageSequence,
113
114
  compositionName: compositionId,
114
- defaultExtension: renderer_1.RenderInternals.getFileExtensionFromCodec(codec),
115
+ defaultExtension: renderer_1.RenderInternals.getFileExtensionFromCodec(codec, 'final'),
115
116
  args: argsAfterComposition,
116
117
  indent,
117
118
  fromUi: outputLocationFromUI,
@@ -134,7 +135,6 @@ const renderCompFlow = async ({ remotionRoot, fullEntryPoint, ffmpegExecutable,
134
135
  let encodedDoneIn = null;
135
136
  let renderedDoneIn = null;
136
137
  let stitchStage = 'encoding';
137
- const actualConcurrency = renderer_1.RenderInternals.getActualConcurrency(concurrency);
138
138
  const updateRenderProgress = () => {
139
139
  if (totalFrames.length === 0) {
140
140
  throw new Error('totalFrames should not be 0');
@@ -143,7 +143,7 @@ const renderCompFlow = async ({ remotionRoot, fullEntryPoint, ffmpegExecutable,
143
143
  rendering: {
144
144
  frames: renderedFrames,
145
145
  totalFrames: totalFrames.length,
146
- concurrency: actualConcurrency,
146
+ concurrency: renderer_1.RenderInternals.getActualConcurrency(concurrency),
147
147
  doneIn: renderedDoneIn,
148
148
  steps,
149
149
  },
@@ -202,7 +202,7 @@ const renderCompFlow = async ({ remotionRoot, fullEntryPoint, ffmpegExecutable,
202
202
  everyNthFrame,
203
203
  envVariables,
204
204
  frameRange,
205
- concurrency: actualConcurrency,
205
+ concurrency,
206
206
  puppeteerInstance,
207
207
  quality,
208
208
  timeoutInMilliseconds: puppeteerTimeout,
@@ -215,43 +215,17 @@ const renderCompFlow = async ({ remotionRoot, fullEntryPoint, ffmpegExecutable,
215
215
  downloadMap,
216
216
  });
217
217
  updateRenderProgress();
218
- process.stdout.write('\n');
219
218
  log_1.Log.infoAdvanced({ indent, logLevel }, chalk_1.chalk.cyan(`▶ ${absoluteOutputFile}`));
220
219
  }
221
- await (0, renderer_1.renderMedia)({
220
+ const options = await (0, get_render_media_options_1.getRenderMediaOptions)({
221
+ config,
222
222
  outputLocation: absoluteOutputFile,
223
- composition: {
224
- ...config,
225
- width: width !== null && width !== void 0 ? width : config.width,
226
- height: height !== null && height !== void 0 ? height : config.height,
227
- },
228
- crf,
229
- envVariables,
230
- ffmpegExecutable,
231
- ffprobeExecutable,
232
- frameRange,
233
- inputProps,
234
- overwrite,
235
- pixelFormat,
236
- proResProfile,
237
- quality,
238
- dumpBrowserLogs: renderer_1.RenderInternals.isEqualOrBelowLogLevel(logLevel, 'verbose'),
239
- chromiumOptions,
240
- timeoutInMilliseconds: config_1.ConfigInternals.getCurrentPuppeteerTimeout(),
241
- scale,
242
- port,
243
- numberOfGifLoops,
244
- everyNthFrame,
245
- verbose: renderer_1.RenderInternals.isEqualOrBelowLogLevel(logLevel, 'verbose'),
246
- muted,
247
- enforceAudioTrack,
248
- browserExecutable,
249
- ffmpegOverride,
250
- concurrency,
251
223
  serveUrl: urlOrBundle,
252
224
  codec,
253
- audioBitrate,
254
- videoBitrate,
225
+ remotionRoot,
226
+ });
227
+ await (0, renderer_1.renderMedia)({
228
+ ...options,
255
229
  onProgress: (update) => {
256
230
  encodedDoneIn = update.encodedDoneIn;
257
231
  encodedFrames = update.encodedFrames;
@@ -273,8 +247,7 @@ const renderCompFlow = async ({ remotionRoot, fullEntryPoint, ffmpegExecutable,
273
247
  },
274
248
  printLog: (...str) => log_1.Log.verboseAdvanced({ indent, logLevel }, ...str),
275
249
  });
276
- updateRenderProgress();
277
- process.stdout.write('\n');
250
+ log_1.Log.infoAdvanced({ indent, logLevel });
278
251
  log_1.Log.infoAdvanced({ indent, logLevel }, chalk_1.chalk.cyan(`▶ ${absoluteOutputFile}`));
279
252
  for (const line of renderer_1.RenderInternals.perf.getPerf()) {
280
253
  log_1.Log.verboseAdvanced({ indent, logLevel }, line);
package/dist/render.js CHANGED
@@ -13,6 +13,7 @@ const remotion_1 = require("remotion");
13
13
  const chalk_1 = require("./chalk");
14
14
  const config_1 = require("./config");
15
15
  const entry_point_1 = require("./entry-point");
16
+ const get_audio_codec_1 = require("./get-audio-codec");
16
17
  const get_cli_options_1 = require("./get-cli-options");
17
18
  const get_composition_with_dimension_override_1 = require("./get-composition-with-dimension-override");
18
19
  const get_filename_1 = require("./get-filename");
@@ -112,11 +113,11 @@ const render = async (remotionRoot, args) => {
112
113
  codec,
113
114
  scale,
114
115
  });
116
+ const audioCodec = (0, get_audio_codec_1.getResolvedAudioCodec)();
115
117
  const relativeOutputLocation = (0, get_filename_1.getOutputFilename)({
116
- codec,
117
118
  imageSequence: shouldOutputImageSequence,
118
119
  compositionName: compositionId,
119
- defaultExtension: renderer_1.RenderInternals.getFileExtensionFromCodec(codec),
120
+ defaultExtension: renderer_1.RenderInternals.getFileExtensionFromCodec(codec, audioCodec),
120
121
  args: argsAfterComposition,
121
122
  });
122
123
  log_1.Log.info(chalk_1.chalk.gray(`Entry point = ${path_1.default.relative(process.cwd(), file)} (${entryPointReason}), Composition = ${compositionId} (${reason}), Codec = ${codec} (${codecReason}), Output = ${relativeOutputLocation}`));
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@remotion/cli",
3
- "version": "3.3.41",
3
+ "version": "3.3.43",
4
4
  "description": "CLI for Remotion",
5
5
  "main": "dist/index.js",
6
6
  "sideEffects": false,
@@ -22,16 +22,16 @@
22
22
  "author": "Jonny Burger <jonny@remotion.dev>",
23
23
  "license": "SEE LICENSE IN LICENSE.md",
24
24
  "dependencies": {
25
- "@remotion/bundler": "3.3.41",
26
- "@remotion/media-utils": "3.3.41",
27
- "@remotion/player": "3.3.41",
28
- "@remotion/renderer": "3.3.41",
25
+ "@remotion/bundler": "3.3.43",
26
+ "@remotion/media-utils": "3.3.43",
27
+ "@remotion/player": "3.3.43",
28
+ "@remotion/renderer": "3.3.43",
29
29
  "better-opn": "2.1.1",
30
30
  "dotenv": "9.0.2",
31
31
  "memfs": "3.4.3",
32
32
  "minimist": "1.2.6",
33
33
  "prompts": "2.4.1",
34
- "remotion": "3.3.41",
34
+ "remotion": "3.3.43",
35
35
  "semver": "7.3.5",
36
36
  "source-map": "0.6.1"
37
37
  },
@@ -71,5 +71,5 @@
71
71
  "publishConfig": {
72
72
  "access": "public"
73
73
  },
74
- "gitHead": "8e408247d151ac824864acf357782f10c89ed5f5"
74
+ "gitHead": "3585e437a30ba001e983539728eb1914172b729c"
75
75
  }
@@ -1,5 +0,0 @@
1
- import React from 'react';
2
- export declare const EveryNthFrameSetting: React.FC<{
3
- everyNthFrame: number;
4
- setEveryNthFrameSetting: React.Dispatch<React.SetStateAction<number>>;
5
- }>;
@@ -1,9 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.EveryNthFrameSetting = void 0;
4
- const jsx_runtime_1 = require("react/jsx-runtime");
5
- const NumberSetting_1 = require("./NumberSetting");
6
- const EveryNthFrameSetting = ({ everyNthFrame, setEveryNthFrameSetting }) => {
7
- return ((0, jsx_runtime_1.jsx)(NumberSetting_1.NumberSetting, { name: "Every nth frame", min: 1, onValueChanged: setEveryNthFrameSetting, value: everyNthFrame }));
8
- };
9
- exports.EveryNthFrameSetting = EveryNthFrameSetting;
@@ -1,5 +0,0 @@
1
- import React from 'react';
2
- export declare const NumberOfLoopsSetting: React.FC<{
3
- numberOfGifLoops: number;
4
- setNumberOfGifLoops: React.Dispatch<React.SetStateAction<number>>;
5
- }>;
@@ -1,26 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.NumberOfLoopsSetting = void 0;
4
- const jsx_runtime_1 = require("react/jsx-runtime");
5
- const react_1 = require("react");
6
- const InputDragger_1 = require("../NewComposition/InputDragger");
7
- const RemInput_1 = require("../NewComposition/RemInput");
8
- const layout_1 = require("./layout");
9
- const min = 0;
10
- const NumberOfLoopsSetting = ({ numberOfGifLoops, setNumberOfGifLoops }) => {
11
- const onNumberOfGifLoopsChangedDirectly = (0, react_1.useCallback)((newConcurrency) => {
12
- setNumberOfGifLoops(newConcurrency);
13
- }, [setNumberOfGifLoops]);
14
- const onNumberOfGifLoopsChanged = (0, react_1.useCallback)((e) => {
15
- setNumberOfGifLoops((q) => {
16
- const newConcurrency = parseInt(e, 10);
17
- if (Number.isNaN(newConcurrency)) {
18
- return q;
19
- }
20
- const newConcurrencyClamped = Math.max(newConcurrency, min);
21
- return newConcurrencyClamped;
22
- });
23
- }, [setNumberOfGifLoops]);
24
- return ((0, jsx_runtime_1.jsxs)("div", { style: layout_1.optionRow, children: [(0, jsx_runtime_1.jsx)("div", { style: layout_1.label, children: "Number of loops" }), (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: numberOfGifLoops, onTextChange: onNumberOfGifLoopsChanged, placeholder: `${min}-`, onValueChange: onNumberOfGifLoopsChangedDirectly, name: "number-of-gif-loops", step: 1, min: min }) }) })] }));
25
- };
26
- exports.NumberOfLoopsSetting = NumberOfLoopsSetting;
@@ -1,9 +0,0 @@
1
- import React from 'react';
2
- export declare const NumberSetting: React.FC<{
3
- name: string;
4
- value: number;
5
- onValueChanged: React.Dispatch<React.SetStateAction<number>>;
6
- max?: number;
7
- min: number;
8
- step: number;
9
- }>;
@@ -1,26 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.NumberSetting = void 0;
4
- const jsx_runtime_1 = require("react/jsx-runtime");
5
- const react_1 = require("react");
6
- const InputDragger_1 = require("../NewComposition/InputDragger");
7
- const RemInput_1 = require("../NewComposition/RemInput");
8
- const layout_1 = require("./layout");
9
- const NumberSetting = ({ name, value, step, onValueChanged, max, min }) => {
10
- const onTextChanged = (0, react_1.useCallback)((e) => {
11
- onValueChanged((q) => {
12
- const newSetting = parseInt(e, 10);
13
- if (Number.isNaN(newSetting)) {
14
- return q;
15
- }
16
- return Math.min(max !== null && max !== void 0 ? max : Infinity, Math.max(newSetting, min));
17
- });
18
- }, [max, min, onValueChanged]);
19
- const onValueChange = (0, react_1.useCallback)((newConcurrency) => {
20
- onValueChanged(newConcurrency);
21
- }, [onValueChanged]);
22
- return ((0, jsx_runtime_1.jsxs)("div", { style: layout_1.optionRow, children: [(0, jsx_runtime_1.jsx)("div", { style: layout_1.label, children: name }), (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: value, name: name.toLowerCase(), onTextChange: onTextChanged, onValueChange: onValueChange, step: step, placeholder: [min, max]
23
- .map((f) => (f !== null && f !== undefined ? f : ''))
24
- .join('-'), min: min, max: max }) }) })] }));
25
- };
26
- exports.NumberSetting = NumberSetting;
@@ -1,11 +0,0 @@
1
- import React from 'react';
2
- export declare type RenderType = 'still' | 'video' | 'audio';
3
- export declare const RenderModalAdvanced: React.FC<{
4
- renderMode: RenderType;
5
- minConcurrency: number;
6
- maxConcurrency: number;
7
- setConcurrency: React.Dispatch<React.SetStateAction<number>>;
8
- concurrency: number;
9
- setVerboseLogging: React.Dispatch<React.SetStateAction<boolean>>;
10
- verbose: boolean;
11
- }>;
@@ -1,15 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.RenderModalAdvanced = void 0;
4
- const jsx_runtime_1 = require("react/jsx-runtime");
5
- const react_1 = require("react");
6
- const Checkbox_1 = require("../Checkbox");
7
- const layout_1 = require("./layout");
8
- const NumberSetting_1 = require("./NumberSetting");
9
- const RenderModalAdvanced = ({ renderMode, maxConcurrency, minConcurrency, setConcurrency, concurrency, setVerboseLogging, verbose, }) => {
10
- const onVerboseLoggingChanged = (0, react_1.useCallback)((e) => {
11
- setVerboseLogging(e.target.checked);
12
- }, [setVerboseLogging]);
13
- return ((0, jsx_runtime_1.jsxs)("div", { children: [renderMode === 'still' ? null : ((0, jsx_runtime_1.jsx)(NumberSetting_1.NumberSetting, { min: minConcurrency, max: maxConcurrency, step: 1, name: "Concurrency", onValueChanged: setConcurrency, value: concurrency })), (0, jsx_runtime_1.jsxs)("div", { style: layout_1.optionRow, children: [(0, jsx_runtime_1.jsx)("div", { style: layout_1.label, children: "Verbose logging" }), (0, jsx_runtime_1.jsx)("div", { style: layout_1.rightRow, children: (0, jsx_runtime_1.jsx)(Checkbox_1.Checkbox, { checked: verbose, onChange: onVerboseLoggingChanged }) })] })] }));
14
- };
15
- exports.RenderModalAdvanced = RenderModalAdvanced;
@@ -1,13 +0,0 @@
1
- /// <reference types="react" />
2
- import type { RenderType } from './RenderModalAdvanced';
3
- export declare const RenderModalAudio: React.FC<{
4
- muted: boolean;
5
- setMuted: React.Dispatch<React.SetStateAction<boolean>>;
6
- renderMode: RenderType;
7
- enforceAudioTrack: boolean;
8
- setEnforceAudioTrackState: React.Dispatch<React.SetStateAction<boolean>>;
9
- shouldHaveCustomTargetAudioBitrate: boolean;
10
- setShouldHaveCustomTargetAudioBitrate: React.Dispatch<React.SetStateAction<boolean>>;
11
- setCustomTargetAudioBitrateValue: React.Dispatch<React.SetStateAction<string>>;
12
- customTargetAudioBitrate: string;
13
- }>;
@@ -1,22 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.RenderModalAudio = void 0;
4
- const jsx_runtime_1 = require("react/jsx-runtime");
5
- const react_1 = require("react");
6
- const Checkbox_1 = require("../Checkbox");
7
- const RemInput_1 = require("../NewComposition/RemInput");
8
- const EnforceAudioTrackSetting_1 = require("./EnforceAudioTrackSetting");
9
- const layout_1 = require("./layout");
10
- const MutedSetting_1 = require("./MutedSetting");
11
- const RenderModalHr_1 = require("./RenderModalHr");
12
- const RenderModalAudio = ({ muted, setMuted, renderMode, enforceAudioTrack, setEnforceAudioTrackState, setShouldHaveCustomTargetAudioBitrate, shouldHaveCustomTargetAudioBitrate, setCustomTargetAudioBitrateValue, customTargetAudioBitrate, }) => {
13
- const onShouldHaveTargetAudioBitrateChanged = (0, react_1.useCallback)((e) => {
14
- setShouldHaveCustomTargetAudioBitrate(e.target.checked);
15
- }, [setShouldHaveCustomTargetAudioBitrate]);
16
- // TODO: When rendering, mp3 does not support the "crf" option. Ignoring.
17
- const onTargetAudioBitrateChanged = (0, react_1.useCallback)((e) => {
18
- setCustomTargetAudioBitrateValue(e.target.value);
19
- }, [setCustomTargetAudioBitrateValue]);
20
- return ((0, jsx_runtime_1.jsxs)("div", { children: [renderMode === 'video' && ((0, jsx_runtime_1.jsx)(MutedSetting_1.MutedSetting, { muted: muted, setMuted: setMuted })), renderMode === 'video' && ((0, jsx_runtime_1.jsx)(EnforceAudioTrackSetting_1.EnforceAudioTrackSetting, { 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
- };
22
- exports.RenderModalAudio = RenderModalAudio;
@@ -1,22 +0,0 @@
1
- import type { Codec, ProResProfile } from '@remotion/renderer';
2
- import React from 'react';
3
- import type { TComposition } from 'remotion';
4
- import type { SegmentedControlItem } from '../SegmentedControl';
5
- import type { RenderType } from './RenderModalAdvanced';
6
- export declare const RenderModalBasic: React.FC<{
7
- renderMode: RenderType;
8
- imageFormatOptions: SegmentedControlItem[];
9
- codec: Codec;
10
- setCodec: (newCodec: Codec) => void;
11
- outName: string;
12
- proResProfile: ProResProfile | null;
13
- setProResProfile: React.Dispatch<React.SetStateAction<ProResProfile>>;
14
- frame: number;
15
- setFrame: React.Dispatch<React.SetStateAction<number>>;
16
- currentComposition: TComposition<unknown>;
17
- setOutName: (value: React.SetStateAction<string>) => void;
18
- setEndFrame: React.Dispatch<React.SetStateAction<number | null>>;
19
- startFrame: number;
20
- endFrame: number;
21
- setStartFrame: React.Dispatch<React.SetStateAction<number | null>>;
22
- }>;
@@ -1,70 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.RenderModalBasic = void 0;
4
- const jsx_runtime_1 = require("react/jsx-runtime");
5
- const client_1 = require("@remotion/renderer/client");
6
- const react_1 = require("react");
7
- const use_file_existence_1 = require("../../helpers/use-file-existence");
8
- const Checkmark_1 = require("../../icons/Checkmark");
9
- const ComboBox_1 = require("../NewComposition/ComboBox");
10
- const InputDragger_1 = require("../NewComposition/InputDragger");
11
- const RemInput_1 = require("../NewComposition/RemInput");
12
- const ValidationMessage_1 = require("../NewComposition/ValidationMessage");
13
- const SegmentedControl_1 = require("../SegmentedControl");
14
- const FrameRangeSetting_1 = require("./FrameRangeSetting");
15
- const human_readable_codec_1 = require("./human-readable-codec");
16
- const layout_1 = require("./layout");
17
- const RenderModalBasic = ({ renderMode, imageFormatOptions, outName, codec, setCodec, proResProfile, setProResProfile, frame, setFrame, currentComposition, setOutName, setEndFrame, endFrame, setStartFrame, startFrame, }) => {
18
- const existence = (0, use_file_existence_1.useFileExistence)(outName);
19
- const videoCodecOptions = (0, react_1.useMemo)(() => {
20
- return client_1.BrowserSafeApis.validCodecs
21
- .filter((c) => {
22
- return client_1.BrowserSafeApis.isAudioCodec(c) === (renderMode === 'audio');
23
- })
24
- .map((codecOption) => {
25
- return {
26
- label: (0, human_readable_codec_1.humanReadableCodec)(codecOption),
27
- onClick: () => setCodec(codecOption),
28
- key: codecOption,
29
- leftItem: codec === codecOption ? (0, jsx_runtime_1.jsx)(Checkmark_1.Checkmark, {}) : null,
30
- id: codecOption,
31
- keyHint: null,
32
- quickSwitcherLabel: null,
33
- subMenu: null,
34
- type: 'item',
35
- value: codecOption,
36
- };
37
- });
38
- }, [renderMode, setCodec, codec]);
39
- const proResProfileOptions = (0, react_1.useMemo)(() => {
40
- return client_1.BrowserSafeApis.proResProfileOptions.map((option) => {
41
- return {
42
- label: option,
43
- onClick: () => setProResProfile(option),
44
- key: option,
45
- selected: proResProfile === option,
46
- };
47
- });
48
- }, [proResProfile, setProResProfile]);
49
- const onFrameSetDirectly = (0, react_1.useCallback)((newFrame) => {
50
- setFrame(newFrame);
51
- }, [setFrame]);
52
- const onFrameChanged = (0, react_1.useCallback)((e) => {
53
- setFrame((q) => {
54
- const newFrame = parseFloat(e);
55
- if (Number.isNaN(newFrame)) {
56
- return q;
57
- }
58
- return newFrame;
59
- });
60
- }, [setFrame]);
61
- const onValueChange = (0, react_1.useCallback)((e) => {
62
- setOutName(e.target.value);
63
- }, [setOutName]);
64
- 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)(SegmentedControl_1.SegmentedControl, { items: proResProfileOptions, needsWrapping: true }) })] })) : 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
65
- // TODO: Validate and reject folders or weird file names
66
- , {
67
- // TODO: Validate and reject folders or weird file names
68
- warning: existence, style: layout_1.input, type: "text", value: outName, onChange: onValueChange }), existence ? ((0, jsx_runtime_1.jsx)(ValidationMessage_1.ValidationMessage, { align: "flex-end", message: "Will be overwritten" })) : null] }) })] })] }));
69
- };
70
- exports.RenderModalBasic = RenderModalBasic;
@@ -1 +0,0 @@
1
- "use strict";
@@ -1,9 +0,0 @@
1
- import React from 'react';
2
- export declare const RenderModalGif: React.FC<{
3
- limitNumberOfGifLoops: boolean;
4
- setLimitNumberOfGifLoops: (value: React.SetStateAction<boolean>) => void;
5
- numberOfGifLoopsSetting: number;
6
- setNumberOfGifLoopsSetting: React.Dispatch<React.SetStateAction<number>>;
7
- everyNthFrame: number;
8
- setEveryNthFrameSetting: React.Dispatch<React.SetStateAction<number>>;
9
- }>;
@@ -1,16 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.RenderModalGif = void 0;
4
- const jsx_runtime_1 = require("react/jsx-runtime");
5
- const react_1 = require("react");
6
- const Checkbox_1 = require("../Checkbox");
7
- const layout_1 = require("./layout");
8
- const NumberOfLoopsSetting_1 = require("./NumberOfLoopsSetting");
9
- const NumberSetting_1 = require("./NumberSetting");
10
- const RenderModalGif = ({ everyNthFrame, limitNumberOfGifLoops, numberOfGifLoopsSetting, setEveryNthFrameSetting, setLimitNumberOfGifLoops, setNumberOfGifLoopsSetting, }) => {
11
- const onShouldLimitNumberOfGifLoops = (0, react_1.useCallback)((e) => {
12
- setLimitNumberOfGifLoops(e.target.checked);
13
- }, [setLimitNumberOfGifLoops]);
14
- return ((0, jsx_runtime_1.jsxs)("div", { children: [(0, jsx_runtime_1.jsx)(NumberSetting_1.NumberSetting, { name: "Every nth frame", min: 1, onValueChanged: setEveryNthFrameSetting, value: everyNthFrame, step: 1 }), (0, jsx_runtime_1.jsxs)("div", { style: layout_1.optionRow, children: [(0, jsx_runtime_1.jsx)("div", { style: layout_1.label, children: "Limit GIF loops" }), (0, jsx_runtime_1.jsx)("div", { style: layout_1.rightRow, children: (0, jsx_runtime_1.jsx)(Checkbox_1.Checkbox, { checked: limitNumberOfGifLoops, onChange: onShouldLimitNumberOfGifLoops }) })] }), limitNumberOfGifLoops ? ((0, jsx_runtime_1.jsx)(NumberOfLoopsSetting_1.NumberOfLoopsSetting, { numberOfGifLoops: numberOfGifLoopsSetting, setNumberOfGifLoops: setNumberOfGifLoopsSetting })) : null] }));
15
- };
16
- exports.RenderModalGif = RenderModalGif;
@@ -1,2 +0,0 @@
1
- import React from 'react';
2
- export declare const RenderModalHr: React.FC;
@@ -1,18 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.RenderModalHr = void 0;
4
- const jsx_runtime_1 = require("react/jsx-runtime");
5
- const hrStyle = {
6
- margin: '0 0 0 0',
7
- padding: '0 0 0 0',
8
- border: 'none',
9
- borderTop: '1px solid #000',
10
- marginRight: 16,
11
- marginLeft: 16,
12
- marginTop: 8,
13
- marginBottom: 8,
14
- };
15
- const RenderModalHr = () => {
16
- return (0, jsx_runtime_1.jsx)("div", { style: hrStyle });
17
- };
18
- exports.RenderModalHr = RenderModalHr;
@@ -1,28 +0,0 @@
1
- /// <reference types="react" />
2
- import type { PixelFormat, StillImageFormat } from '@remotion/renderer';
3
- import type { SegmentedControlItem } from '../SegmentedControl';
4
- import type { RenderType } from './RenderModalAdvanced';
5
- declare const qualityControlModes: readonly ["crf", "bitrate"];
6
- export declare type QualityControl = typeof qualityControlModes[number];
7
- export declare const RenderModalPicture: React.FC<{
8
- renderMode: RenderType;
9
- scale: number;
10
- setScale: React.Dispatch<React.SetStateAction<number>>;
11
- pixelFormat: PixelFormat;
12
- setPixelFormat: React.Dispatch<React.SetStateAction<PixelFormat>>;
13
- imageFormatOptions: SegmentedControlItem[];
14
- setQualityControl: React.Dispatch<React.SetStateAction<QualityControl>>;
15
- qualityControlType: QualityControl;
16
- videoImageFormat: StillImageFormat;
17
- stillImageFormat: StillImageFormat;
18
- setQuality: React.Dispatch<React.SetStateAction<number>>;
19
- quality: number;
20
- maxCrf: number;
21
- minCrf: number;
22
- setCrf: React.Dispatch<React.SetStateAction<number>>;
23
- shouldDisplayCrfOption: boolean;
24
- setCustomTargetVideoBitrateValue: React.Dispatch<React.SetStateAction<string>>;
25
- crf: number;
26
- customTargetVideoBitrate: string;
27
- }>;
28
- export {};
@@ -1,51 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.RenderModalPicture = void 0;
4
- const jsx_runtime_1 = require("react/jsx-runtime");
5
- const client_1 = require("@remotion/renderer/client");
6
- const react_1 = require("react");
7
- const Checkmark_1 = require("../../icons/Checkmark");
8
- const ComboBox_1 = require("../NewComposition/ComboBox");
9
- const RemInput_1 = require("../NewComposition/RemInput");
10
- const SegmentedControl_1 = require("../SegmentedControl");
11
- const layout_1 = require("./layout");
12
- const NumberSetting_1 = require("./NumberSetting");
13
- const QualitySetting_1 = require("./QualitySetting");
14
- const RenderModalHr_1 = require("./RenderModalHr");
15
- const ScaleSetting_1 = require("./ScaleSetting");
16
- const qualityControlModes = ['crf', 'bitrate'];
17
- const RenderModalPicture = ({ renderMode, scale, setScale, pixelFormat, setPixelFormat, imageFormatOptions, setQualityControl, qualityControlType, videoImageFormat, setQuality, quality, maxCrf, minCrf, setCrf, shouldDisplayCrfOption, setCustomTargetVideoBitrateValue, crf, customTargetVideoBitrate, stillImageFormat, }) => {
18
- const pixelFormatOptions = (0, react_1.useMemo)(() => {
19
- return client_1.BrowserSafeApis.validPixelFormats.map((option) => {
20
- return {
21
- label: option,
22
- onClick: () => setPixelFormat(option),
23
- key: option,
24
- id: option,
25
- keyHint: null,
26
- leftItem: pixelFormat === option ? (0, jsx_runtime_1.jsx)(Checkmark_1.Checkmark, {}) : null,
27
- quickSwitcherLabel: null,
28
- subMenu: null,
29
- type: 'item',
30
- value: option,
31
- };
32
- });
33
- }, [pixelFormat, setPixelFormat]);
34
- const qualityControlOptions = (0, react_1.useMemo)(() => {
35
- return qualityControlModes.map((option) => {
36
- return {
37
- label: option === 'crf' ? 'CRF' : 'Bitrate',
38
- onClick: () => setQualityControl(option),
39
- key: option,
40
- selected: qualityControlType === option,
41
- };
42
- });
43
- }, [qualityControlType, setQualityControl]);
44
- const onTargetVideoBitrateChanged = (0, react_1.useCallback)((e) => {
45
- setCustomTargetVideoBitrateValue(e.target.value);
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 &&
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, {}), renderMode === 'video' ? ((0, jsx_runtime_1.jsx)(ScaleSetting_1.ScaleSetting, { scale: scale, setScale: setScale })) : null, (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: "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
- };
51
- exports.RenderModalPicture = RenderModalPicture;
@@ -1,2 +0,0 @@
1
- import type { Codec } from '@remotion/renderer';
2
- export declare const humanReadableCodec: (codec: Codec) => "GIF" | "AAC" | "MP3" | "H.264" | "H.264 MKV" | "H.265" | "ProRes" | "WebM VP8" | "WebM VP9" | "Waveform" | undefined;
@@ -1,36 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.humanReadableCodec = void 0;
4
- const humanReadableCodec = (codec) => {
5
- if (codec === 'aac') {
6
- return 'AAC';
7
- }
8
- if (codec === 'mp3') {
9
- return 'MP3';
10
- }
11
- if (codec === 'gif') {
12
- return 'GIF';
13
- }
14
- if (codec === 'h264') {
15
- return 'H.264';
16
- }
17
- if (codec === 'h264-mkv') {
18
- return 'H.264 MKV';
19
- }
20
- if (codec === 'h265') {
21
- return 'H.265';
22
- }
23
- if (codec === 'prores') {
24
- return 'ProRes';
25
- }
26
- if (codec === 'vp8') {
27
- return 'WebM VP8';
28
- }
29
- if (codec === 'vp9') {
30
- return 'WebM VP9';
31
- }
32
- if (codec === 'wav') {
33
- return 'Waveform';
34
- }
35
- };
36
- exports.humanReadableCodec = humanReadableCodec;
@@ -1,2 +0,0 @@
1
- import type { SVGProps } from 'react';
2
- export declare const AudioIcon: (props: SVGProps<SVGSVGElement>) => JSX.Element;
@@ -1,6 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.AudioIcon = void 0;
4
- const jsx_runtime_1 = require("react/jsx-runtime");
5
- const AudioIcon = (props) => ((0, jsx_runtime_1.jsx)("svg", { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 512 512", ...props, children: (0, jsx_runtime_1.jsx)("path", { fill: "currentcolor", d: "M243 32.32C105.5 39.15 0 157.8 0 295.5v120.4C0 451.3 28.63 480 64 480h32c17.62 0 32-14.38 32-32V288c0-17.62-14.38-32-32-32H64c-10.79 0-20.8 2.9-29.72 7.7 14.2-106.8 100.5-193.9 210.4-199.4 120.5-5.965 221.7 83.92 234 199.9-9.08-5.1-19.48-8.2-30.68-8.2h-32c-17.62 0-32 14.38-32 32v160c0 17.62 14.38 32 32 32h32c35.38 0 64-28.75 64-64.13V287.9c0-145.4-122-262.88-269-255.58zM64 288h32v160H64c-17.62 0-32-14.5-32-32.13v-95.75C32 302.5 46.38 288 64 288zm416 127.9c0 17.6-14.4 32.1-32 32.1h-32V288h32c17.62 0 32 14.5 32 32.13v95.77z" }) }));
6
- exports.AudioIcon = AudioIcon;