@remotion/renderer 4.0.0-alpha.217 → 4.0.0-alpha10

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 (126) hide show
  1. package/README.md +5 -37
  2. package/dist/assets/download-and-map-assets-to-file.js +6 -6
  3. package/dist/assets/download-file.d.ts +3 -2
  4. package/dist/assets/download-file.js +18 -3
  5. package/dist/assets/download-map.d.ts +0 -26
  6. package/dist/assets/download-map.js +7 -12
  7. package/dist/assets/get-video-stream-duration.d.ts +5 -2
  8. package/dist/assets/get-video-stream-duration.js +12 -6
  9. package/dist/assets/read-file.d.ts +1 -1
  10. package/dist/assets/read-file.js +2 -2
  11. package/dist/assets/sanitize-filepath.js +2 -2
  12. package/dist/browser/Browser.d.ts +4 -4
  13. package/dist/browser/Browser.js +38 -38
  14. package/dist/browser/BrowserFetcher.d.ts +15 -63
  15. package/dist/browser/BrowserFetcher.js +138 -226
  16. package/dist/browser/BrowserPage.d.ts +4 -4
  17. package/dist/browser/BrowserRunner.d.ts +1 -1
  18. package/dist/browser/BrowserRunner.js +9 -22
  19. package/dist/browser/DOMWorld.d.ts +3 -3
  20. package/dist/browser/LaunchOptions.d.ts +1 -2
  21. package/dist/browser/Launcher.d.ts +3 -3
  22. package/dist/browser/Launcher.js +10 -23
  23. package/dist/browser/NodeWebSocketTransport.js +4 -4
  24. package/dist/browser/PuppeteerNode.d.ts +2 -5
  25. package/dist/browser/PuppeteerNode.js +0 -5
  26. package/dist/browser/Target.d.ts +2 -2
  27. package/dist/browser/create-browser-fetcher.js +34 -48
  28. package/dist/browser/get-download-destination.js +8 -8
  29. package/dist/browser/util.d.ts +2 -2
  30. package/dist/call-ffmpeg.d.ts +4 -7
  31. package/dist/call-ffmpeg.js +24 -16
  32. package/dist/chalk/index.d.ts +54 -0
  33. package/dist/chalk/index.js +135 -0
  34. package/dist/chalk/is-color-supported.d.ts +1 -0
  35. package/dist/chalk/is-color-supported.js +37 -0
  36. package/dist/client.d.ts +1 -0
  37. package/dist/client.js +1 -0
  38. package/dist/codec-supports-media.d.ts +1 -0
  39. package/dist/codec-supports-media.js +20 -5
  40. package/dist/combine-videos.js +6 -6
  41. package/dist/compositor/compose.d.ts +6 -2
  42. package/dist/compositor/compose.js +43 -20
  43. package/dist/compositor/compositor.d.ts +4 -8
  44. package/dist/compositor/compositor.js +67 -53
  45. package/dist/compositor/get-executable-path.js +3 -0
  46. package/dist/compositor/payloads.d.ts +34 -7
  47. package/dist/crf.js +8 -2
  48. package/dist/delete-directory.js +3 -3
  49. package/dist/does-have-m2-bug.js +2 -2
  50. package/dist/ensure-output-directory.js +5 -5
  51. package/dist/ensure-presentation-timestamp.d.ts +9 -2
  52. package/dist/ensure-presentation-timestamp.js +13 -5
  53. package/dist/extract-frame-from-video.d.ts +3 -1
  54. package/dist/extract-frame-from-video.js +29 -7
  55. package/dist/ffmpeg-filter-file.js +7 -7
  56. package/dist/find-closest-package-json.js +6 -6
  57. package/dist/get-browser-instance.d.ts +2 -2
  58. package/dist/get-can-extract-frames-fast.d.ts +4 -1
  59. package/dist/get-can-extract-frames-fast.js +12 -1
  60. package/dist/get-compositions.d.ts +8 -3
  61. package/dist/get-compositions.js +6 -2
  62. package/dist/get-concurrency.js +3 -3
  63. package/dist/get-extension-of-filename.js +2 -2
  64. package/dist/get-frame-of-video-slow.d.ts +8 -3
  65. package/dist/get-frame-of-video-slow.js +11 -3
  66. package/dist/get-local-browser-executable.js +6 -15
  67. package/dist/get-video-info.d.ts +5 -2
  68. package/dist/get-video-info.js +12 -6
  69. package/dist/get-video-threads-flag.js +3 -3
  70. package/dist/index.d.ts +92 -16
  71. package/dist/index.js +15 -6
  72. package/dist/last-frame-from-video-cache.d.ts +4 -1
  73. package/dist/last-frame-from-video-cache.js +1 -0
  74. package/dist/logger.d.ts +22 -0
  75. package/dist/logger.js +61 -0
  76. package/dist/merge-audio-track.js +2 -2
  77. package/dist/mime-types.js +2 -2
  78. package/dist/offthread-video-server.d.ts +12 -6
  79. package/dist/offthread-video-server.js +66 -56
  80. package/dist/open-browser.d.ts +3 -3
  81. package/dist/open-browser.js +1 -1
  82. package/dist/options/jpeg-quality.js +1 -1
  83. package/dist/options/video-codec.js +1 -1
  84. package/dist/prepare-server.d.ts +6 -1
  85. package/dist/prepare-server.js +15 -7
  86. package/dist/prespawn-ffmpeg.d.ts +1 -0
  87. package/dist/prespawn-ffmpeg.js +37 -14
  88. package/dist/prestitcher-memory-usage.js +2 -2
  89. package/dist/puppeteer-evaluate.js +2 -2
  90. package/dist/puppeteer-screenshot.js +1 -1
  91. package/dist/render-frames.d.ts +9 -4
  92. package/dist/render-frames.js +28 -12
  93. package/dist/render-media.d.ts +7 -4
  94. package/dist/render-media.js +49 -26
  95. package/dist/render-still.d.ts +10 -3
  96. package/dist/render-still.js +26 -9
  97. package/dist/replace-browser.d.ts +4 -4
  98. package/dist/resolve-asset-src.js +2 -2
  99. package/dist/screenshot-task.js +2 -2
  100. package/dist/select-composition.d.ts +33 -0
  101. package/dist/select-composition.js +119 -0
  102. package/dist/serve-handler/index.d.ts +1 -1
  103. package/dist/serve-handler/index.js +15 -15
  104. package/dist/serve-handler/is-path-inside.js +3 -3
  105. package/dist/serve-static.d.ts +5 -0
  106. package/dist/serve-static.js +25 -20
  107. package/dist/set-props-and-env.d.ts +5 -3
  108. package/dist/set-props-and-env.js +13 -3
  109. package/dist/stitch-frames-to-video.d.ts +1 -0
  110. package/dist/stitch-frames-to-video.js +76 -53
  111. package/dist/take-frame-and-compose.d.ts +3 -1
  112. package/dist/take-frame-and-compose.js +8 -7
  113. package/dist/tmp-dir.js +7 -7
  114. package/dist/try-to-extract-frame-of-video-fast.d.ts +4 -2
  115. package/dist/try-to-extract-frame-of-video-fast.js +7 -3
  116. package/install-toolchain.mjs +3 -9
  117. package/package.json +70 -71
  118. package/types/ws/index.d.ts +5 -5
  119. package/ffmpeg/SOURCE.md +0 -1
  120. package/ffmpeg/linux-arm-musl.gz +0 -0
  121. package/ffmpeg/linux-arm.gz +0 -0
  122. package/ffmpeg/linux-x64-musl.gz +0 -0
  123. package/ffmpeg/linux-x64.gz +0 -0
  124. package/ffmpeg/macos-arm.gz +0 -0
  125. package/ffmpeg/macos-x64.gz +0 -0
  126. package/ffmpeg/windows.gz +0 -0
@@ -27,8 +27,8 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
27
27
  };
28
28
  Object.defineProperty(exports, "__esModule", { value: true });
29
29
  exports.stitchFramesToVideo = void 0;
30
- const fs_1 = __importStar(require("fs"));
31
- const path_1 = __importDefault(require("path"));
30
+ const node_fs_1 = __importStar(require("node:fs"));
31
+ const node_path_1 = __importDefault(require("node:path"));
32
32
  const remotion_1 = require("remotion");
33
33
  const calculate_asset_positions_1 = require("./assets/calculate-asset-positions");
34
34
  const convert_assets_to_file_urls_1 = require("./assets/convert-assets-to-file-urls");
@@ -37,7 +37,6 @@ const audio_codec_1 = require("./audio-codec");
37
37
  const call_ffmpeg_1 = require("./call-ffmpeg");
38
38
  const codec_1 = require("./codec");
39
39
  const codec_supports_media_1 = require("./codec-supports-media");
40
- const get_executable_path_1 = require("./compositor/get-executable-path");
41
40
  const convert_number_of_gif_loops_to_ffmpeg_1 = require("./convert-number-of-gif-loops-to-ffmpeg");
42
41
  const crf_1 = require("./crf");
43
42
  const delete_directory_1 = require("./delete-directory");
@@ -46,6 +45,7 @@ const find_closest_package_json_1 = require("./find-closest-package-json");
46
45
  const get_codec_name_1 = require("./get-codec-name");
47
46
  const get_extension_from_codec_1 = require("./get-extension-from-codec");
48
47
  const get_prores_profile_name_1 = require("./get-prores-profile-name");
48
+ const logger_1 = require("./logger");
49
49
  const make_cancel_signal_1 = require("./make-cancel-signal");
50
50
  const merge_audio_track_1 = require("./merge-audio-track");
51
51
  const parse_ffmpeg_progress_1 = require("./parse-ffmpeg-progress");
@@ -55,11 +55,11 @@ const prores_profile_1 = require("./prores-profile");
55
55
  const truthy_1 = require("./truthy");
56
56
  const validate_even_dimensions_with_codec_1 = require("./validate-even-dimensions-with-codec");
57
57
  const validate_videobitrate_1 = require("./validate-videobitrate");
58
- const packageJsonPath = path_1.default.join(__dirname, '..', 'package.json');
59
- const packageJson = fs_1.default.existsSync(packageJsonPath)
60
- ? JSON.parse(fs_1.default.readFileSync(packageJsonPath, 'utf-8'))
58
+ const packageJsonPath = node_path_1.default.join(__dirname, '..', 'package.json');
59
+ const packageJson = node_fs_1.default.existsSync(packageJsonPath)
60
+ ? JSON.parse(node_fs_1.default.readFileSync(packageJsonPath, 'utf-8'))
61
61
  : null;
62
- const getAssetsData = async ({ assets, onDownload, fps, expectedFrames, verbose, onProgress, downloadMap, remotionRoot, }) => {
62
+ const getAssetsData = async ({ assets, onDownload, fps, expectedFrames, verbose, onProgress, downloadMap, remotionRoot, indent, }) => {
63
63
  const fileUrlAssets = await (0, convert_assets_to_file_urls_1.convertAssetsToFileUrls)({
64
64
  assets,
65
65
  onDownload: onDownload !== null && onDownload !== void 0 ? onDownload : (() => () => undefined),
@@ -67,15 +67,13 @@ const getAssetsData = async ({ assets, onDownload, fps, expectedFrames, verbose,
67
67
  });
68
68
  (0, download_and_map_assets_to_file_1.markAllAssetsAsDownloaded)(downloadMap);
69
69
  const assetPositions = (0, calculate_asset_positions_1.calculateAssetPositions)(fileUrlAssets);
70
- if (verbose) {
71
- console.log('asset positions', assetPositions);
72
- }
70
+ logger_1.Log.verboseAdvanced({ indent, logLevel: verbose ? 'verbose' : 'info', tag: 'audio' }, 'asset positions', JSON.stringify(assetPositions));
73
71
  const preprocessProgress = new Array(assetPositions.length).fill(0);
74
72
  const updateProgress = () => {
75
73
  onProgress(preprocessProgress.reduce((a, b) => a + b, 0) / assetPositions.length);
76
74
  };
77
75
  const preprocessed = (await Promise.all(assetPositions.map(async (asset, index) => {
78
- const filterFile = path_1.default.join(downloadMap.audioMixing, `${index}.wav`);
76
+ const filterFile = node_path_1.default.join(downloadMap.audioMixing, `${index}.wav`);
79
77
  const result = await (0, preprocess_audio_track_1.preprocessAudioTrack)({
80
78
  outName: filterFile,
81
79
  asset,
@@ -87,7 +85,7 @@ const getAssetsData = async ({ assets, onDownload, fps, expectedFrames, verbose,
87
85
  updateProgress();
88
86
  return result;
89
87
  }))).filter(truthy_1.truthy);
90
- const outName = path_1.default.join(downloadMap.audioPreprocessing, `audio.wav`);
88
+ const outName = node_path_1.default.join(downloadMap.audioPreprocessing, `audio.wav`);
91
89
  await (0, merge_audio_track_1.mergeAudioTrack)({
92
90
  files: preprocessed,
93
91
  outName,
@@ -103,7 +101,7 @@ const getAssetsData = async ({ assets, onDownload, fps, expectedFrames, verbose,
103
101
  return outName;
104
102
  };
105
103
  const spawnFfmpeg = async (options, remotionRoot) => {
106
- var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s;
104
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12;
107
105
  remotion_1.Internals.validateDimension(options.height, 'height', 'passed to `stitchFramesToVideo()`');
108
106
  remotion_1.Internals.validateDimension(options.width, 'width', 'passed to `stitchFramesToVideo()`');
109
107
  const codec = (_a = options.codec) !== null && _a !== void 0 ? _a : codec_1.DEFAULT_CODEC;
@@ -138,20 +136,42 @@ const spawnFfmpeg = async (options, remotionRoot) => {
138
136
  : (_d = options.audioCodec) !== null && _d !== void 0 ? _d : (0, audio_codec_1.getDefaultAudioCodec)({ codec, preferLossless: false });
139
137
  const tempFile = options.outputLocation
140
138
  ? null
141
- : path_1.default.join(options.assetsInfo.downloadMap.stitchFrames, `out.${(0, get_extension_from_codec_1.getFileExtensionFromCodec)(codec, resolvedAudioCodec)}`);
142
- if (options.verbose) {
143
- console.log('[verbose] ffmpeg', (0, get_executable_path_1.getExecutablePath)('ffmpeg'));
144
- console.log('[verbose] encoder', encoderName);
145
- console.log('[verbose] audioCodec', resolvedAudioCodec);
146
- console.log('[verbose] pixelFormat', pixelFormat);
147
- if (options.ffmpegOverride) {
148
- console.log('[verbose] ffmpegOverride', options.ffmpegOverride);
149
- }
150
- console.log('[verbose] codec', codec);
151
- console.log('[verbose] shouldRenderAudio', shouldRenderAudio);
152
- console.log('[verbose] shouldRenderVideo', shouldRenderVideo);
153
- console.log('[verbose] proResProfileName', proResProfileName);
154
- }
139
+ : node_path_1.default.join(options.assetsInfo.downloadMap.stitchFrames, `out.${(0, get_extension_from_codec_1.getFileExtensionFromCodec)(codec, resolvedAudioCodec)}`);
140
+ logger_1.Log.verboseAdvanced({
141
+ indent: (_f = (_e = options.internalOptions) === null || _e === void 0 ? void 0 : _e.indent) !== null && _f !== void 0 ? _f : false,
142
+ logLevel: options.verbose ? 'verbose' : 'info',
143
+ tag: 'encoder',
144
+ }, 'encoder', encoderName);
145
+ logger_1.Log.verboseAdvanced({
146
+ indent: (_h = (_g = options.internalOptions) === null || _g === void 0 ? void 0 : _g.indent) !== null && _h !== void 0 ? _h : false,
147
+ logLevel: options.verbose ? 'verbose' : 'info',
148
+ tag: 'encoder',
149
+ }, 'audioCodec', resolvedAudioCodec);
150
+ logger_1.Log.verboseAdvanced({
151
+ indent: (_k = (_j = options.internalOptions) === null || _j === void 0 ? void 0 : _j.indent) !== null && _k !== void 0 ? _k : false,
152
+ logLevel: options.verbose ? 'verbose' : 'info',
153
+ tag: 'encoder',
154
+ }, 'pixelFormat', pixelFormat);
155
+ logger_1.Log.verboseAdvanced({
156
+ indent: (_m = (_l = options.internalOptions) === null || _l === void 0 ? void 0 : _l.indent) !== null && _m !== void 0 ? _m : false,
157
+ logLevel: options.verbose ? 'verbose' : 'info',
158
+ tag: 'encoder',
159
+ }, 'codec', codec);
160
+ logger_1.Log.verboseAdvanced({
161
+ indent: (_p = (_o = options.internalOptions) === null || _o === void 0 ? void 0 : _o.indent) !== null && _p !== void 0 ? _p : false,
162
+ logLevel: options.verbose ? 'verbose' : 'info',
163
+ tag: 'encoder',
164
+ }, 'shouldRenderAudio', shouldRenderAudio);
165
+ logger_1.Log.verboseAdvanced({
166
+ indent: (_r = (_q = options.internalOptions) === null || _q === void 0 ? void 0 : _q.indent) !== null && _r !== void 0 ? _r : false,
167
+ logLevel: options.verbose ? 'verbose' : 'info',
168
+ tag: 'encoder',
169
+ }, 'shouldRenderVideo', shouldRenderVideo);
170
+ logger_1.Log.verboseAdvanced({
171
+ indent: (_t = (_s = options.internalOptions) === null || _s === void 0 ? void 0 : _s.indent) !== null && _t !== void 0 ? _t : false,
172
+ logLevel: options.verbose ? 'verbose' : 'info',
173
+ tag: 'encoder',
174
+ }, 'proResProfileName', proResProfileName);
155
175
  (0, crf_1.validateQualitySettings)({
156
176
  crf: options.crf,
157
177
  codec,
@@ -170,10 +190,11 @@ const spawnFfmpeg = async (options, remotionRoot) => {
170
190
  onDownload: options.onDownload,
171
191
  fps: options.fps,
172
192
  expectedFrames,
173
- verbose: (_e = options.verbose) !== null && _e !== void 0 ? _e : false,
193
+ verbose: (_u = options.verbose) !== null && _u !== void 0 ? _u : false,
174
194
  onProgress: (prog) => updateProgress(prog, 0),
175
195
  downloadMap: options.assetsInfo.downloadMap,
176
196
  remotionRoot,
197
+ indent: (_w = (_v = options.internalOptions) === null || _v === void 0 ? void 0 : _v.indent) !== null && _w !== void 0 ? _w : false,
177
198
  })
178
199
  : null;
179
200
  if (mediaSupport.audio && !mediaSupport.video) {
@@ -187,21 +208,21 @@ const spawnFfmpeg = async (options, remotionRoot) => {
187
208
  (0, audio_codec_1.mapAudioCodecToFfmpegAudioCodecName)(resolvedAudioCodec),
188
209
  // Set bitrate up to 320k, for aac it might effectively be lower
189
210
  '-b:a',
190
- (_f = options.audioBitrate) !== null && _f !== void 0 ? _f : '320k',
211
+ (_x = options.audioBitrate) !== null && _x !== void 0 ? _x : '320k',
191
212
  options.force ? '-y' : null,
192
- (_g = options.outputLocation) !== null && _g !== void 0 ? _g : tempFile,
213
+ (_y = options.outputLocation) !== null && _y !== void 0 ? _y : tempFile,
193
214
  ].filter(remotion_1.Internals.truthy));
194
- (_h = options.cancelSignal) === null || _h === void 0 ? void 0 : _h.call(options, () => {
215
+ (_z = options.cancelSignal) === null || _z === void 0 ? void 0 : _z.call(options, () => {
195
216
  ffmpegTask.kill();
196
217
  });
197
218
  await ffmpegTask;
198
- (_j = options.onProgress) === null || _j === void 0 ? void 0 : _j.call(options, expectedFrames);
219
+ (_0 = options.onProgress) === null || _0 === void 0 ? void 0 : _0.call(options, expectedFrames);
199
220
  if (audio) {
200
- (0, delete_directory_1.deleteDirectory)(path_1.default.dirname(audio));
221
+ (0, delete_directory_1.deleteDirectory)(node_path_1.default.dirname(audio));
201
222
  }
202
223
  const file = await new Promise((resolve, reject) => {
203
224
  if (tempFile) {
204
- fs_1.promises
225
+ node_fs_1.promises
205
226
  .readFile(tempFile)
206
227
  .then((f) => {
207
228
  return resolve(f);
@@ -219,26 +240,26 @@ const spawnFfmpeg = async (options, remotionRoot) => {
219
240
  };
220
241
  }
221
242
  const ffmpegArgs = [
222
- ['-r', String(options.fps)],
223
- ...(((_k = options.internalOptions) === null || _k === void 0 ? void 0 : _k.preEncodedFileLocation)
224
- ? [['-i', (_l = options.internalOptions) === null || _l === void 0 ? void 0 : _l.preEncodedFileLocation]]
243
+ ...(((_1 = options.internalOptions) === null || _1 === void 0 ? void 0 : _1.preEncodedFileLocation)
244
+ ? [['-i', (_2 = options.internalOptions) === null || _2 === void 0 ? void 0 : _2.preEncodedFileLocation]]
225
245
  : [
246
+ ['-r', String(options.fps)],
226
247
  ['-f', 'image2'],
227
248
  ['-s', `${options.width}x${options.height}`],
228
249
  ['-start_number', String(options.assetsInfo.firstFrameIndex)],
229
250
  ['-i', options.assetsInfo.imageSequenceName],
230
251
  ]),
231
252
  audio ? ['-i', audio] : null,
232
- ((_m = options.numberOfGifLoops) !== null && _m !== void 0 ? _m : null) === null
253
+ ((_3 = options.numberOfGifLoops) !== null && _3 !== void 0 ? _3 : null) === null
233
254
  ? null
234
255
  : [
235
256
  '-loop',
236
- (0, convert_number_of_gif_loops_to_ffmpeg_1.convertNumberOfGifLoopsToFfmpegSyntax)((_o = options.numberOfGifLoops) !== null && _o !== void 0 ? _o : null),
257
+ (0, convert_number_of_gif_loops_to_ffmpeg_1.convertNumberOfGifLoopsToFfmpegSyntax)((_4 = options.numberOfGifLoops) !== null && _4 !== void 0 ? _4 : null),
237
258
  ],
238
259
  // -c:v is the same as -vcodec as -codec:video
239
260
  // and specified the video codec.
240
261
  ['-c:v', encoderName],
241
- ...(((_p = options.internalOptions) === null || _p === void 0 ? void 0 : _p.preEncodedFileLocation)
262
+ ...(((_5 = options.internalOptions) === null || _5 === void 0 ? void 0 : _5.preEncodedFileLocation)
242
263
  ? []
243
264
  : [
244
265
  proResProfileName ? ['-profile:v', proResProfileName] : null,
@@ -266,29 +287,31 @@ const spawnFfmpeg = async (options, remotionRoot) => {
266
287
  [`Made with Remotion`, packageJson ? packageJson.version : null].join(' '),
267
288
  ],
268
289
  options.force ? '-y' : null,
269
- (_q = options.outputLocation) !== null && _q !== void 0 ? _q : tempFile,
290
+ (_6 = options.outputLocation) !== null && _6 !== void 0 ? _6 : tempFile,
270
291
  ];
271
- if (options.verbose) {
272
- console.log('Generated FFMPEG command:');
273
- console.log(ffmpegArgs);
274
- }
275
292
  const ffmpegString = ffmpegArgs.flat(2).filter(Boolean);
276
293
  const finalFfmpegString = options.ffmpegOverride
277
294
  ? options.ffmpegOverride({ type: 'stitcher', args: ffmpegString })
278
295
  : ffmpegString;
279
- if (options.verbose && options.ffmpegOverride) {
280
- console.log('Generated final FFMPEG command:');
281
- console.log(finalFfmpegString);
282
- }
296
+ logger_1.Log.verboseAdvanced({
297
+ indent: (_8 = (_7 = options.internalOptions) === null || _7 === void 0 ? void 0 : _7.indent) !== null && _8 !== void 0 ? _8 : false,
298
+ logLevel: options.verbose ? 'verbose' : 'info',
299
+ tag: 'encoder',
300
+ }, 'Generated final FFMPEG command:');
301
+ logger_1.Log.verboseAdvanced({
302
+ indent: (_10 = (_9 = options.internalOptions) === null || _9 === void 0 ? void 0 : _9.indent) !== null && _10 !== void 0 ? _10 : false,
303
+ logLevel: options.verbose ? 'verbose' : 'info',
304
+ tag: 'encoder',
305
+ }, finalFfmpegString.join(' '));
283
306
  const task = (0, call_ffmpeg_1.callFf)('ffmpeg', finalFfmpegString, {
284
307
  cwd: options.dir,
285
308
  });
286
- (_r = options.cancelSignal) === null || _r === void 0 ? void 0 : _r.call(options, () => {
309
+ (_11 = options.cancelSignal) === null || _11 === void 0 ? void 0 : _11.call(options, () => {
287
310
  task.kill();
288
311
  });
289
312
  let ffmpegOutput = '';
290
313
  let isFinished = false;
291
- (_s = task.stderr) === null || _s === void 0 ? void 0 : _s.on('data', (data) => {
314
+ (_12 = task.stderr) === null || _12 === void 0 ? void 0 : _12.on('data', (data) => {
292
315
  var _a;
293
316
  const str = data.toString();
294
317
  ffmpegOutput += str;
@@ -317,12 +340,12 @@ const spawnFfmpeg = async (options, remotionRoot) => {
317
340
  (0, delete_directory_1.deleteDirectory)(options.assetsInfo.downloadMap.stitchFrames);
318
341
  return null;
319
342
  }
320
- return fs_1.promises
343
+ return node_fs_1.promises
321
344
  .readFile(tempFile)
322
345
  .then((file) => {
323
346
  return Promise.all([
324
347
  file,
325
- (0, delete_directory_1.deleteDirectory)(path_1.default.dirname(tempFile)),
348
+ (0, delete_directory_1.deleteDirectory)(node_path_1.default.dirname(tempFile)),
326
349
  (0, delete_directory_1.deleteDirectory)(options.assetsInfo.downloadMap.stitchFrames),
327
350
  ]);
328
351
  })
@@ -2,8 +2,9 @@
2
2
  import type { TAsset } from 'remotion';
3
3
  import type { DownloadMap } from './assets/download-map';
4
4
  import type { Page } from './browser/BrowserPage';
5
+ import type { Compositor } from './compositor/compositor';
5
6
  import type { StillImageFormat, VideoImageFormat } from './image-format';
6
- export declare const takeFrameAndCompose: ({ freePage, imageFormat, jpegQuality, frame, width, height, output, scale, downloadMap, wantsBuffer, }: {
7
+ export declare const takeFrameAndCompose: ({ freePage, imageFormat, jpegQuality, frame, width, height, output, scale, downloadMap, wantsBuffer, compositor, }: {
7
8
  freePage: Page;
8
9
  imageFormat: VideoImageFormat | StillImageFormat;
9
10
  jpegQuality: number | undefined;
@@ -14,6 +15,7 @@ export declare const takeFrameAndCompose: ({ freePage, imageFormat, jpegQuality,
14
15
  scale: number;
15
16
  downloadMap: DownloadMap;
16
17
  wantsBuffer: boolean;
18
+ compositor: Compositor;
17
19
  }) => Promise<{
18
20
  buffer: Buffer | null;
19
21
  collectedAssets: TAsset[];
@@ -4,13 +4,13 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.takeFrameAndCompose = void 0;
7
- const fs_1 = __importDefault(require("fs"));
8
- const path_1 = __importDefault(require("path"));
7
+ const node_fs_1 = __importDefault(require("node:fs"));
8
+ const node_path_1 = __importDefault(require("node:path"));
9
9
  const compose_1 = require("./compositor/compose");
10
10
  const provide_screenshot_1 = require("./provide-screenshot");
11
11
  const puppeteer_evaluate_1 = require("./puppeteer-evaluate");
12
12
  const truthy_1 = require("./truthy");
13
- const takeFrameAndCompose = async ({ freePage, imageFormat, jpegQuality, frame, width, height, output, scale, downloadMap, wantsBuffer, }) => {
13
+ const takeFrameAndCompose = async ({ freePage, imageFormat, jpegQuality, frame, width, height, output, scale, downloadMap, wantsBuffer, compositor, }) => {
14
14
  var _a;
15
15
  const [clipRegion, collectedAssets] = await Promise.all([
16
16
  (0, puppeteer_evaluate_1.puppeteerEvaluateWithCatch)({
@@ -39,8 +39,8 @@ const takeFrameAndCompose = async ({ freePage, imageFormat, jpegQuality, frame,
39
39
  const needsComposing = clipRegion === null
40
40
  ? null
41
41
  : {
42
- tmpFile: path_1.default.join(downloadMap.compositingDir, `${frame}.${imageFormat}`),
43
- finalOutFile: output !== null && output !== void 0 ? output : path_1.default.join(downloadMap.compositingDir, `${frame}-final.${imageFormat}`),
42
+ tmpFile: node_path_1.default.join(downloadMap.compositingDir, `${frame}.${imageFormat}`),
43
+ finalOutFile: output !== null && output !== void 0 ? output : node_path_1.default.join(downloadMap.compositingDir, `${frame}-final.${imageFormat}`),
44
44
  clipRegion: clipRegion,
45
45
  };
46
46
  if (clipRegion !== 'hide') {
@@ -90,10 +90,11 @@ const takeFrameAndCompose = async ({ freePage, imageFormat, jpegQuality, frame,
90
90
  output: needsComposing.finalOutFile,
91
91
  downloadMap,
92
92
  imageFormat: imageFormat === 'jpeg' ? 'Jpeg' : 'Png',
93
+ compositor,
93
94
  });
94
95
  if (wantsBuffer) {
95
- const buffer = await fs_1.default.promises.readFile(needsComposing.finalOutFile);
96
- await fs_1.default.promises.unlink(needsComposing.finalOutFile);
96
+ const buffer = await node_fs_1.default.promises.readFile(needsComposing.finalOutFile);
97
+ await node_fs_1.default.promises.unlink(needsComposing.finalOutFile);
97
98
  return { buffer, collectedAssets };
98
99
  }
99
100
  }
package/dist/tmp-dir.js CHANGED
@@ -27,9 +27,9 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
27
27
  };
28
28
  Object.defineProperty(exports, "__esModule", { value: true });
29
29
  exports.tmpDir = void 0;
30
- const fs_1 = __importStar(require("fs"));
31
- const os_1 = __importDefault(require("os"));
32
- const path_1 = __importDefault(require("path"));
30
+ const node_fs_1 = __importStar(require("node:fs"));
31
+ const node_os_1 = __importDefault(require("node:os"));
32
+ const node_path_1 = __importDefault(require("node:path"));
33
33
  const alphabet = 'abcdefghijklmnopqrstuvwxyz0123456789';
34
34
  const randomHash = () => {
35
35
  return new Array(10)
@@ -40,14 +40,14 @@ const randomHash = () => {
40
40
  .join('');
41
41
  };
42
42
  const tmpDir = (str) => {
43
- const newDir = path_1.default.join(os_1.default.tmpdir(), str + randomHash());
44
- if (fs_1.default.existsSync(newDir)) {
45
- fs_1.default.rmSync(newDir, {
43
+ const newDir = node_path_1.default.join(node_os_1.default.tmpdir(), str + randomHash());
44
+ if (node_fs_1.default.existsSync(newDir)) {
45
+ node_fs_1.default.rmSync(newDir, {
46
46
  recursive: true,
47
47
  force: true,
48
48
  });
49
49
  }
50
- (0, fs_1.mkdirSync)(newDir);
50
+ (0, node_fs_1.mkdirSync)(newDir);
51
51
  return newDir;
52
52
  };
53
53
  exports.tmpDir = tmpDir;
@@ -1,7 +1,9 @@
1
- /// <reference types="node" />
2
1
  import type { OffthreadVideoImageFormat } from 'remotion';
3
2
  import type { NeedsResize, SpecialVCodecForTransparency } from './assets/download-map';
4
- export declare const tryToExtractFrameOfVideoFast: ({ specialVCodecForTransparency, imageFormat, needsResize, src, actualOffset, }: {
3
+ import type { FfmpegExecutable } from './ffmpeg-executable';
4
+ export declare const tryToExtractFrameOfVideoFast: ({ ffmpegExecutable, remotionRoot, specialVCodecForTransparency, imageFormat, needsResize, src, actualOffset, }: {
5
+ ffmpegExecutable: FfmpegExecutable;
6
+ remotionRoot: string;
5
7
  imageFormat: OffthreadVideoImageFormat;
6
8
  needsResize: NeedsResize;
7
9
  src: string;
@@ -1,12 +1,16 @@
1
1
  "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
2
5
  Object.defineProperty(exports, "__esModule", { value: true });
3
6
  exports.tryToExtractFrameOfVideoFast = void 0;
4
- const call_ffmpeg_1 = require("./call-ffmpeg");
7
+ const execa_1 = __importDefault(require("execa"));
5
8
  const determine_resize_params_1 = require("./determine-resize-params");
6
9
  const determine_vcodec_ffmpeg_flags_1 = require("./determine-vcodec-ffmpeg-flags");
10
+ const ffmpeg_flags_1 = require("./ffmpeg-flags");
7
11
  const truthy_1 = require("./truthy");
8
- const tryToExtractFrameOfVideoFast = async ({ specialVCodecForTransparency, imageFormat, needsResize, src, actualOffset, }) => {
9
- const { stdout, stderr } = (0, call_ffmpeg_1.callFf)('ffmpeg', [
12
+ const tryToExtractFrameOfVideoFast = async ({ ffmpegExecutable, remotionRoot, specialVCodecForTransparency, imageFormat, needsResize, src, actualOffset, }) => {
13
+ const { stdout, stderr } = (0, execa_1.default)(await (0, ffmpeg_flags_1.getExecutableBinary)(ffmpegExecutable, remotionRoot, 'ffmpeg'), [
10
14
  '-ss',
11
15
  actualOffset,
12
16
  ...(0, determine_vcodec_ffmpeg_flags_1.determineVcodecFfmpegFlags)(specialVCodecForTransparency),
@@ -1,12 +1,6 @@
1
- import {execSync} from 'child_process';
2
- import {existsSync, mkdirSync, unlinkSync} from 'fs';
3
-
4
- const toolchains = [
5
- 'x86_64_gnu_toolchain',
6
- 'aarch_gnu_toolchain',
7
- 'x86_64_musl_toolchain',
8
- 'aarch64-musl-toolchain',
9
- ];
1
+ import {execSync} from 'node:child_process';
2
+ import {existsSync, mkdirSync, unlinkSync} from 'node:fs';
3
+ import {toolchains} from './toolchains.mjs';
10
4
 
11
5
  const unpatched = [
12
6
  'x86_64-apple-darwin',
package/package.json CHANGED
@@ -1,72 +1,71 @@
1
1
  {
2
- "name": "@remotion/renderer",
3
- "version": "4.0.0-alpha.217+27eff7599",
4
- "description": "Renderer for Remotion",
5
- "main": "dist/index.js",
6
- "types": "dist/index.d.ts",
7
- "sideEffects": false,
8
- "scripts": {
9
- "lint": "eslint src --ext ts,tsx",
10
- "test": "vitest --run",
11
- "watch": "tsc -w",
12
- "build": "node build.mjs && tsc -d",
13
- "build-all": "node build.mjs --all",
14
- "prepublishOnly": "node build.mjs --all"
15
- },
16
- "author": "Jonny Burger <jonny@remotion.dev>",
17
- "license": "SEE LICENSE IN LICENSE.md",
18
- "repository": {
19
- "url": "https://github.com/remotion-dev/remotion"
20
- },
21
- "bugs": {
22
- "url": "https://github.com/remotion-dev/remotion/issues"
23
- },
24
- "dependencies": {
25
- "execa": "5.1.1",
26
- "extract-zip": "2.0.1",
27
- "remotion": "4.0.0-alpha.217+27eff7599",
28
- "source-map": "^0.8.0-beta.0",
29
- "ws": "8.7.0"
30
- },
31
- "peerDependencies": {
32
- "react": ">=16.8.0",
33
- "react-dom": ">=16.8.0"
34
- },
35
- "devDependencies": {
36
- "@jonny/eslint-config": "3.0.266",
37
- "@testing-library/dom": "^8.16.0",
38
- "@testing-library/react": "13.3.0",
39
- "@types/node": "^16.7.5",
40
- "@types/progress": "2.0.5",
41
- "@types/react": "18.0.26",
42
- "@types/react-dom": "18.0.10",
43
- "eslint": "8.25.0",
44
- "prettier": "^2.7.1",
45
- "prettier-plugin-organize-imports": "^2.3.4",
46
- "react": "18.0.0",
47
- "react-dom": "18.0.0",
48
- "typescript": "^4.7.0",
49
- "vitest": "0.24.3",
50
- "zod": "^3.21.4"
51
- },
52
- "optionalDependencies": {
53
- "@remotion/compositor-darwin-arm64": "4.0.0-alpha.217+27eff7599",
54
- "@remotion/compositor-darwin-x64": "4.0.0-alpha.217+27eff7599",
55
- "@remotion/compositor-linux-arm64-gnu": "4.0.0-alpha.217+27eff7599",
56
- "@remotion/compositor-linux-arm64-musl": "4.0.0-alpha.217+27eff7599",
57
- "@remotion/compositor-linux-x64-gnu": "4.0.0-alpha.217+27eff7599",
58
- "@remotion/compositor-linux-x64-musl": "4.0.0-alpha.217+27eff7599",
59
- "@remotion/compositor-win32-x64-msvc": "4.0.0-alpha.217+27eff7599"
60
- },
61
- "keywords": [
62
- "remotion",
63
- "ffmpeg",
64
- "video",
65
- "react",
66
- "player"
67
- ],
68
- "publishConfig": {
69
- "access": "public"
70
- },
71
- "gitHead": "27eff759935b19b666e29f4f46dd5bdd6214e188"
72
- }
2
+ "name": "@remotion/renderer",
3
+ "version": "4.0.0-alpha10",
4
+ "description": "Renderer for Remotion",
5
+ "main": "dist/index.js",
6
+ "types": "dist/index.d.ts",
7
+ "sideEffects": false,
8
+ "author": "Jonny Burger <jonny@remotion.dev>",
9
+ "license": "SEE LICENSE IN LICENSE.md",
10
+ "repository": {
11
+ "url": "https://github.com/remotion-dev/remotion"
12
+ },
13
+ "bugs": {
14
+ "url": "https://github.com/remotion-dev/remotion/issues"
15
+ },
16
+ "dependencies": {
17
+ "execa": "5.1.1",
18
+ "extract-zip": "2.0.1",
19
+ "source-map": "^0.8.0-beta.0",
20
+ "ws": "8.7.0",
21
+ "remotion": "4.0.0-alpha10"
22
+ },
23
+ "peerDependencies": {
24
+ "react": ">=16.8.0",
25
+ "react-dom": ">=16.8.0"
26
+ },
27
+ "devDependencies": {
28
+ "@jonny/eslint-config": "3.0.266",
29
+ "@testing-library/dom": "^8.16.0",
30
+ "@testing-library/react": "13.3.0",
31
+ "@types/node": "18.14.6",
32
+ "@types/progress": "2.0.5",
33
+ "@types/react": "18.0.26",
34
+ "@types/react-dom": "18.0.10",
35
+ "eslint": "8.25.0",
36
+ "prettier": "^2.7.1",
37
+ "prettier-plugin-organize-imports": "^2.3.4",
38
+ "react": "18.0.0",
39
+ "react-dom": "18.0.0",
40
+ "typescript": "^4.7.0",
41
+ "vitest": "0.31.1",
42
+ "zod": "^3.21.4"
43
+ },
44
+ "optionalDependencies": {
45
+ "@remotion/compositor-darwin-arm64": "4.0.0-alpha10",
46
+ "@remotion/compositor-linux-arm64-gnu": "4.0.0-alpha10",
47
+ "@remotion/compositor-linux-x64-gnu": "4.0.0-alpha10",
48
+ "@remotion/compositor-darwin-x64": "4.0.0-alpha10",
49
+ "@remotion/compositor-linux-x64-musl": "4.0.0-alpha10",
50
+ "@remotion/compositor-linux-arm64-musl": "4.0.0-alpha10",
51
+ "@remotion/compositor-win32-x64-msvc": "4.0.0-alpha10"
52
+ },
53
+ "keywords": [
54
+ "remotion",
55
+ "ffmpeg",
56
+ "video",
57
+ "react",
58
+ "player"
59
+ ],
60
+ "publishConfig": {
61
+ "access": "public"
62
+ },
63
+ "scripts": {
64
+ "formatting": "prettier src --check",
65
+ "lint": "eslint src --ext ts,tsx",
66
+ "test": "vitest --run",
67
+ "watch": "tsc -w",
68
+ "build": "node build.mjs && tsc -d",
69
+ "build-all": "node build.mjs --all"
70
+ }
71
+ }
@@ -6,7 +6,8 @@
6
6
  /* eslint-disable no-dupe-class-members */
7
7
  /// <reference types="node" />
8
8
 
9
- import {EventEmitter} from 'events';
9
+ import type {Server as HTTPSServer} from 'https';
10
+ import {EventEmitter} from 'node:events';
10
11
  import type {
11
12
  Agent,
12
13
  ClientRequest,
@@ -14,12 +15,11 @@ import type {
14
15
  IncomingMessage,
15
16
  OutgoingHttpHeaders,
16
17
  Server as HTTPServer,
17
- } from 'http';
18
- import type {Server as HTTPSServer} from 'https';
18
+ } from 'node:http';
19
+ import type {URL} from 'node:url';
20
+ import type {ZlibOptions} from 'node:zlib';
19
21
  import type {Duplex, DuplexOptions} from 'stream';
20
22
  import type {SecureContextOptions} from 'tls';
21
- import type {URL} from 'url';
22
- import type {ZlibOptions} from 'zlib';
23
23
  declare class WebSocket extends EventEmitter {
24
24
  /** The connection is not yet open. */
25
25
  static readonly CONNECTING: 0;
package/ffmpeg/SOURCE.md DELETED
@@ -1 +0,0 @@
1
- These binaries have been generated on CircleCI using https://github.com/remotion-dev/rust-ffmpeg-splitter
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
package/ffmpeg/windows.gz DELETED
Binary file