@remotion/renderer 4.1.0-alpha2 → 4.1.0-alpha4
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/assets/get-video-stream-duration.d.ts +9 -0
- package/dist/assets/get-video-stream-duration.js +71 -0
- package/dist/browser/Browser.d.ts +7 -6
- package/dist/browser/Browser.js +12 -12
- package/dist/browser/BrowserPage.d.ts +13 -2
- package/dist/browser/BrowserPage.js +15 -8
- package/dist/browser/BrowserRunner.js +2 -2
- package/dist/browser/LaunchOptions.d.ts +2 -0
- package/dist/browser/Launcher.js +2 -1
- package/dist/browser/Target.d.ts +2 -1
- package/dist/browser/Target.js +3 -1
- package/dist/browser/should-log-message.js +8 -0
- package/dist/calculate-sar-dar-pixels.d.ts +9 -0
- package/dist/calculate-sar-dar-pixels.js +19 -0
- package/dist/compositor/compositor.d.ts +3 -2
- package/dist/compositor/compositor.js +6 -5
- package/dist/cycle-browser-tabs.d.ts +2 -1
- package/dist/cycle-browser-tabs.js +2 -2
- package/dist/determine-resize-params.d.ts +4 -0
- package/dist/determine-resize-params.js +10 -0
- package/dist/determine-vcodec-ffmpeg-flags.d.ts +2 -0
- package/dist/determine-vcodec-ffmpeg-flags.js +13 -0
- package/dist/ensure-ffmpeg.d.ts +18 -0
- package/dist/ensure-ffmpeg.js +58 -0
- package/dist/ensure-presentation-timestamp.d.ts +15 -0
- package/dist/ensure-presentation-timestamp.js +88 -0
- package/dist/extract-frame-from-video.d.ts +16 -0
- package/dist/extract-frame-from-video.js +191 -0
- package/dist/ffmpeg-executable.d.ts +1 -0
- package/dist/ffmpeg-executable.js +2 -0
- package/dist/ffmpeg-flags.d.ts +31 -0
- package/dist/ffmpeg-flags.js +245 -0
- package/dist/format-logs.d.ts +3 -0
- package/dist/format-logs.js +201 -0
- package/dist/frame-to-ffmpeg-timestamp.d.ts +1 -0
- package/dist/frame-to-ffmpeg-timestamp.js +8 -0
- package/dist/get-browser-instance.d.ts +3 -2
- package/dist/get-browser-instance.js +5 -5
- package/dist/get-can-extract-frames-fast.d.ts +14 -0
- package/dist/get-can-extract-frames-fast.js +71 -0
- package/dist/get-compositions.d.ts +4 -3
- package/dist/get-compositions.js +6 -5
- package/dist/get-frame-of-video-slow.d.ts +17 -0
- package/dist/get-frame-of-video-slow.js +72 -0
- package/dist/get-video-info.d.ts +8 -0
- package/dist/get-video-info.js +59 -0
- package/dist/index.d.ts +23 -25
- package/dist/is-beyond-last-frame.d.ts +3 -0
- package/dist/is-beyond-last-frame.js +12 -0
- package/dist/last-frame-from-video-cache.d.ts +17 -0
- package/dist/last-frame-from-video-cache.js +55 -0
- package/dist/legacy-webpack-config.d.ts +9 -0
- package/dist/legacy-webpack-config.js +13 -0
- package/dist/logger.d.ts +1 -2
- package/dist/logger.js +5 -10
- package/dist/offthread-video-server.d.ts +3 -2
- package/dist/offthread-video-server.js +4 -3
- package/dist/open-browser.d.ts +3 -2
- package/dist/open-browser.js +7 -5
- package/dist/perf.js +4 -2
- package/dist/prepare-server.d.ts +3 -2
- package/dist/prepare-server.js +4 -4
- package/dist/prespawn-ffmpeg.d.ts +2 -1
- package/dist/prespawn-ffmpeg.js +2 -30
- package/dist/quality.d.ts +1 -0
- package/dist/quality.js +21 -0
- package/dist/render-frames.d.ts +11 -4
- package/dist/render-frames.js +15 -11
- package/dist/render-media.d.ts +11 -4
- package/dist/render-media.js +12 -14
- package/dist/render-still.d.ts +8 -2
- package/dist/render-still.js +8 -8
- package/dist/replace-browser.d.ts +2 -1
- package/dist/replace-browser.js +2 -2
- package/dist/select-composition.d.ts +2 -1
- package/dist/select-composition.js +8 -8
- package/dist/serve-static.d.ts +2 -1
- package/dist/serve-static.js +1 -1
- package/dist/stitch-frames-to-video.d.ts +2 -1
- package/dist/stitch-frames-to-video.js +12 -22
- package/dist/try-to-extract-frame-of-video-fast.d.ts +12 -0
- package/dist/try-to-extract-frame-of-video-fast.js +55 -0
- package/dist/validate-ffmpeg.d.ts +7 -0
- package/dist/validate-ffmpeg.js +77 -0
- package/dist/warn-about-ffmpeg-version.d.ts +5 -0
- package/dist/warn-about-ffmpeg-version.js +37 -0
- package/package.json +9 -9
package/dist/index.d.ts
CHANGED
|
@@ -43,7 +43,7 @@ export declare const RenderInternals: {
|
|
|
43
43
|
downloadMap: import("./assets/download-map").DownloadMap;
|
|
44
44
|
remotionRoot: string;
|
|
45
45
|
concurrency: number;
|
|
46
|
-
|
|
46
|
+
logLevel: "verbose" | "info" | "warn" | "error";
|
|
47
47
|
indent: boolean;
|
|
48
48
|
}) => Promise<{
|
|
49
49
|
port: number;
|
|
@@ -114,8 +114,8 @@ export declare const RenderInternals: {
|
|
|
114
114
|
validPixelFormats: readonly ["yuv420p", "yuva420p", "yuv422p", "yuv444p", "yuv420p10le", "yuv422p10le", "yuv444p10le", "yuva444p10le"];
|
|
115
115
|
DEFAULT_BROWSER: import("./browser").Browser;
|
|
116
116
|
validateFrameRange: (frameRange: import("./frame-range").FrameRange | null) => void;
|
|
117
|
-
DEFAULT_OPENGL_RENDERER: "
|
|
118
|
-
validateOpenGlRenderer: (option: "
|
|
117
|
+
DEFAULT_OPENGL_RENDERER: "swangle" | "angle" | "egl" | "swiftshader" | null;
|
|
118
|
+
validateOpenGlRenderer: (option: "swangle" | "angle" | "egl" | "swiftshader" | null) => "swangle" | "angle" | "egl" | "swiftshader" | null;
|
|
119
119
|
validCodecs: readonly ["h264", "h265", "vp8", "vp9", "mp3", "aac", "wav", "prores", "h264-mkv", "gif"];
|
|
120
120
|
DEFAULT_PIXEL_FORMAT: "yuv420p" | "yuva420p" | "yuv422p" | "yuv444p" | "yuv420p10le" | "yuv422p10le" | "yuv444p10le" | "yuva444p10le";
|
|
121
121
|
validateJpegQuality: (q: number | undefined) => void;
|
|
@@ -123,7 +123,7 @@ export declare const RenderInternals: {
|
|
|
123
123
|
DEFAULT_CODEC: "h264" | "h265" | "vp8" | "vp9" | "mp3" | "aac" | "wav" | "prores" | "h264-mkv" | "gif";
|
|
124
124
|
isAudioCodec: (codec: "h264" | "h265" | "vp8" | "vp9" | "mp3" | "aac" | "wav" | "prores" | "h264-mkv" | "gif" | undefined) => boolean;
|
|
125
125
|
logLevels: readonly ["verbose", "info", "warn", "error"];
|
|
126
|
-
isEqualOrBelowLogLevel: (currentLevel: "
|
|
126
|
+
isEqualOrBelowLogLevel: (currentLevel: "verbose" | "info" | "warn" | "error", level: "verbose" | "info" | "warn" | "error") => boolean;
|
|
127
127
|
isValidLogLevel: (level: string) => boolean;
|
|
128
128
|
perf: typeof perf;
|
|
129
129
|
convertToPositiveFrameIndex: ({ frame, durationInFrames, }: {
|
|
@@ -300,8 +300,8 @@ export declare const RenderInternals: {
|
|
|
300
300
|
};
|
|
301
301
|
validStillImageFormats: readonly ["png", "jpeg", "pdf", "webp"];
|
|
302
302
|
validVideoImageFormats: readonly ["png", "jpeg", "none"];
|
|
303
|
-
DEFAULT_STILL_IMAGE_FORMAT: "
|
|
304
|
-
DEFAULT_VIDEO_IMAGE_FORMAT: "
|
|
303
|
+
DEFAULT_STILL_IMAGE_FORMAT: "png" | "jpeg" | "pdf" | "webp";
|
|
304
|
+
DEFAULT_VIDEO_IMAGE_FORMAT: "none" | "png" | "jpeg";
|
|
305
305
|
DEFAULT_JPEG_QUALITY: number;
|
|
306
306
|
chalk: {
|
|
307
307
|
enabled: boolean;
|
|
@@ -356,34 +356,33 @@ export declare const RenderInternals: {
|
|
|
356
356
|
verbose: (message?: any, ...optionalParams: any[]) => void;
|
|
357
357
|
verboseAdvanced: (options: {
|
|
358
358
|
indent: boolean;
|
|
359
|
-
logLevel: "
|
|
359
|
+
logLevel: "verbose" | "info" | "warn" | "error";
|
|
360
360
|
} & {
|
|
361
361
|
tag?: string | undefined;
|
|
362
|
-
secondTag?: string | undefined;
|
|
363
362
|
}, message?: any, ...optionalParams: any[]) => void;
|
|
364
363
|
info: (message?: any, ...optionalParams: any[]) => void;
|
|
365
364
|
infoAdvanced: (options: {
|
|
366
365
|
indent: boolean;
|
|
367
|
-
logLevel: "
|
|
366
|
+
logLevel: "verbose" | "info" | "warn" | "error";
|
|
368
367
|
}, message?: any, ...optionalParams: any[]) => void;
|
|
369
368
|
warn: (message?: any, ...optionalParams: any[]) => void;
|
|
370
369
|
warnAdvanced: (options: {
|
|
371
370
|
indent: boolean;
|
|
372
|
-
logLevel: "
|
|
371
|
+
logLevel: "verbose" | "info" | "warn" | "error";
|
|
373
372
|
}, message?: any, ...optionalParams: any[]) => void;
|
|
374
373
|
error: (message?: any, ...optionalParams: any[]) => void;
|
|
375
374
|
};
|
|
376
|
-
getLogLevel: () => "
|
|
377
|
-
setLogLevel: (newLogLevel: "
|
|
375
|
+
getLogLevel: () => "verbose" | "info" | "warn" | "error";
|
|
376
|
+
setLogLevel: (newLogLevel: "verbose" | "info" | "warn" | "error") => void;
|
|
378
377
|
INDENT_TOKEN: string;
|
|
379
378
|
isColorSupported: boolean;
|
|
380
379
|
HeadlessBrowser: typeof HeadlessBrowser;
|
|
381
|
-
prepareServer: ({ webpackConfigOrServeUrl, port, remotionRoot, concurrency,
|
|
380
|
+
prepareServer: ({ webpackConfigOrServeUrl, port, remotionRoot, concurrency, logLevel, indent, }: {
|
|
382
381
|
webpackConfigOrServeUrl: string;
|
|
383
382
|
port: number | null;
|
|
384
383
|
remotionRoot: string;
|
|
385
384
|
concurrency: number;
|
|
386
|
-
|
|
385
|
+
logLevel: "verbose" | "info" | "warn" | "error";
|
|
387
386
|
indent: boolean;
|
|
388
387
|
}) => Promise<import("./prepare-server").RemotionServer>;
|
|
389
388
|
makeOrReuseServer: (server: import("./prepare-server").RemotionServer | undefined, config: {
|
|
@@ -391,7 +390,7 @@ export declare const RenderInternals: {
|
|
|
391
390
|
port: number | null;
|
|
392
391
|
remotionRoot: string;
|
|
393
392
|
concurrency: number;
|
|
394
|
-
|
|
393
|
+
logLevel: "verbose" | "info" | "warn" | "error";
|
|
395
394
|
indent: boolean;
|
|
396
395
|
}, { onDownload, onError, }: {
|
|
397
396
|
onError: (err: Error) => void;
|
|
@@ -405,10 +404,9 @@ export declare const RenderInternals: {
|
|
|
405
404
|
output: string | null;
|
|
406
405
|
frame: number;
|
|
407
406
|
inputProps: Record<string, unknown>;
|
|
408
|
-
imageFormat: "
|
|
407
|
+
imageFormat: "png" | "jpeg" | "pdf" | "webp";
|
|
409
408
|
jpegQuality: number;
|
|
410
409
|
puppeteerInstance: HeadlessBrowser | null;
|
|
411
|
-
dumpBrowserLogs: boolean;
|
|
412
410
|
envVariables: Record<string, string>;
|
|
413
411
|
overwrite: boolean;
|
|
414
412
|
browserExecutable: import("./browser-executable").BrowserExecutable;
|
|
@@ -420,20 +418,20 @@ export declare const RenderInternals: {
|
|
|
420
418
|
cancelSignal: import("./make-cancel-signal").CancelSignal | null;
|
|
421
419
|
indent: boolean;
|
|
422
420
|
server: import("./prepare-server").RemotionServer | undefined;
|
|
423
|
-
|
|
421
|
+
logLevel: "verbose" | "info" | "warn" | "error";
|
|
424
422
|
serveUrl: string;
|
|
425
423
|
port: number | null;
|
|
426
424
|
}) => Promise<{
|
|
427
425
|
buffer: Buffer | null;
|
|
428
426
|
}>;
|
|
429
|
-
internalOpenBrowser: ({ browser, browserExecutable, chromiumOptions, forceDeviceScaleFactor, indent,
|
|
430
|
-
shouldDumpIo: boolean;
|
|
427
|
+
internalOpenBrowser: ({ browser, browserExecutable, chromiumOptions, forceDeviceScaleFactor, indent, viewport, logLevel, }: {
|
|
431
428
|
browserExecutable: string | null;
|
|
432
429
|
chromiumOptions: import("./open-browser").ChromiumOptions;
|
|
433
430
|
forceDeviceScaleFactor: number | undefined;
|
|
434
431
|
viewport: import("./browser/PuppeteerViewport").Viewport | null;
|
|
435
432
|
indent: boolean;
|
|
436
433
|
browser: import("./browser").Browser;
|
|
434
|
+
logLevel: "verbose" | "info" | "warn" | "error";
|
|
437
435
|
}) => Promise<HeadlessBrowser>;
|
|
438
436
|
internalSelectComposition: (options: {
|
|
439
437
|
inputProps: Record<string, unknown>;
|
|
@@ -446,11 +444,11 @@ export declare const RenderInternals: {
|
|
|
446
444
|
port: number | null;
|
|
447
445
|
indent: boolean;
|
|
448
446
|
server: import("./prepare-server").RemotionServer | undefined;
|
|
449
|
-
|
|
447
|
+
logLevel: "verbose" | "info" | "warn" | "error";
|
|
450
448
|
serveUrl: string;
|
|
451
449
|
id: string;
|
|
452
450
|
}) => Promise<import("remotion").AnyCompMetadata>;
|
|
453
|
-
internalGetCompositions: ({ browserExecutable, chromiumOptions, envVariables, indent, inputProps, onBrowserLog, port, puppeteerInstance, serveUrlOrWebpackUrl, server, timeoutInMilliseconds,
|
|
451
|
+
internalGetCompositions: ({ browserExecutable, chromiumOptions, envVariables, indent, inputProps, onBrowserLog, port, puppeteerInstance, serveUrlOrWebpackUrl, server, timeoutInMilliseconds, logLevel, }: {
|
|
454
452
|
inputProps: Record<string, unknown>;
|
|
455
453
|
envVariables: Record<string, string>;
|
|
456
454
|
puppeteerInstance: HeadlessBrowser | undefined;
|
|
@@ -461,11 +459,11 @@ export declare const RenderInternals: {
|
|
|
461
459
|
port: number | null;
|
|
462
460
|
server: import("./prepare-server").RemotionServer | undefined;
|
|
463
461
|
indent: boolean;
|
|
464
|
-
|
|
462
|
+
logLevel: "verbose" | "info" | "warn" | "error";
|
|
465
463
|
serveUrlOrWebpackUrl: string;
|
|
466
464
|
}) => Promise<import("remotion").AnyCompMetadata[]>;
|
|
467
|
-
internalRenderFrames: ({ browserExecutable, cancelSignal, chromiumOptions, composition, concurrency,
|
|
468
|
-
internalRenderMedia: ({ proResProfile, crf, composition, inputProps, pixelFormat, codec, envVariables, frameRange, puppeteerInstance, outputLocation, onProgress, overwrite, onDownload,
|
|
465
|
+
internalRenderFrames: ({ browserExecutable, cancelSignal, chromiumOptions, composition, concurrency, envVariables, everyNthFrame, frameRange, imageFormat, indent, inputProps, jpegQuality, muted, onBrowserLog, onDownload, onFrameBuffer, onFrameUpdate, onStart, outputDir, port, puppeteerInstance, scale, server, timeoutInMilliseconds, logLevel, webpackBundleOrServeUrl, }: import("./render-frames").InternalRenderFramesOptions) => Promise<import("./types").RenderFramesOutput>;
|
|
466
|
+
internalRenderMedia: ({ proResProfile, crf, composition, inputProps, pixelFormat, codec, envVariables, frameRange, puppeteerInstance, outputLocation, onProgress, overwrite, onDownload, onBrowserLog, onStart, timeoutInMilliseconds, chromiumOptions, scale, browserExecutable, port, cancelSignal, muted, enforceAudioTrack, ffmpegOverride, audioBitrate, videoBitrate, audioCodec, concurrency, disallowParallelEncoding, everyNthFrame, imageFormat: provisionalImageFormat, indent, jpegQuality, numberOfGifLoops, onCtrlCExit, preferLossless, serveUrl, server: reusedServer, logLevel, }: import("./render-media").InternalRenderMediaOptions) => Promise<{
|
|
469
467
|
buffer: Buffer | null;
|
|
470
468
|
slowestFrames: import("./render-media").SlowFrame[];
|
|
471
469
|
}>;
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import type { DownloadMap } from './assets/download-map';
|
|
2
|
+
export declare const isBeyondLastFrame: (downloadMap: DownloadMap, src: string, time: number) => boolean | 0;
|
|
3
|
+
export declare const markAsBeyondLastFrame: (downloadMap: DownloadMap, src: string, time: number) => void;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.markAsBeyondLastFrame = exports.isBeyondLastFrame = void 0;
|
|
4
|
+
const isBeyondLastFrame = (downloadMap, src, time) => {
|
|
5
|
+
return (downloadMap.isBeyondLastFrameMap[src] &&
|
|
6
|
+
time >= downloadMap.isBeyondLastFrameMap[src]);
|
|
7
|
+
};
|
|
8
|
+
exports.isBeyondLastFrame = isBeyondLastFrame;
|
|
9
|
+
const markAsBeyondLastFrame = (downloadMap, src, time) => {
|
|
10
|
+
downloadMap.isBeyondLastFrameMap[src] = time;
|
|
11
|
+
};
|
|
12
|
+
exports.markAsBeyondLastFrame = markAsBeyondLastFrame;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { OffthreadVideoImageFormat } from 'remotion';
|
|
2
|
+
import type { DownloadMap, SpecialVCodecForTransparency } from './assets/download-map';
|
|
3
|
+
import type { FfmpegExecutable } from './ffmpeg-executable';
|
|
4
|
+
export type LastFrameOptions = {
|
|
5
|
+
ffmpegExecutable: FfmpegExecutable;
|
|
6
|
+
ffprobeExecutable: FfmpegExecutable;
|
|
7
|
+
offset: number;
|
|
8
|
+
src: string;
|
|
9
|
+
specialVCodecForTransparency: SpecialVCodecForTransparency;
|
|
10
|
+
imageFormat: OffthreadVideoImageFormat;
|
|
11
|
+
needsResize: [number, number] | null;
|
|
12
|
+
downloadMap: DownloadMap;
|
|
13
|
+
remotionRoot: string;
|
|
14
|
+
};
|
|
15
|
+
export declare const setLastFrameInCache: (options: LastFrameOptions, data: Buffer) => void;
|
|
16
|
+
export declare const getLastFrameFromCache: (options: LastFrameOptions) => Buffer | null;
|
|
17
|
+
export declare const clearLastFileCache: (downloadMap: DownloadMap) => void;
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// OffthreadVideo requires sometimes that the last frame of a video gets extracted, however, this can be slow. We allocate a cache for it but that can be garbage collected
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.clearLastFileCache = exports.getLastFrameFromCache = exports.setLastFrameInCache = void 0;
|
|
5
|
+
const MAX_CACHE_SIZE = 50 * 1024 * 1024; // 50MB
|
|
6
|
+
let bufferSize = 0;
|
|
7
|
+
const makeLastFrameCacheKey = (options) => {
|
|
8
|
+
return [
|
|
9
|
+
options.ffmpegExecutable,
|
|
10
|
+
options.offset,
|
|
11
|
+
options.src,
|
|
12
|
+
options.imageFormat,
|
|
13
|
+
options.downloadMap.id,
|
|
14
|
+
].join('-');
|
|
15
|
+
};
|
|
16
|
+
const setLastFrameInCache = (options, data) => {
|
|
17
|
+
const key = makeLastFrameCacheKey(options);
|
|
18
|
+
if (options.downloadMap.lastFrameMap[key]) {
|
|
19
|
+
bufferSize -= options.downloadMap.lastFrameMap[key].data.byteLength;
|
|
20
|
+
}
|
|
21
|
+
options.downloadMap.lastFrameMap[key] = { data, lastAccessed: Date.now() };
|
|
22
|
+
bufferSize += data.byteLength;
|
|
23
|
+
ensureMaxSize(options.downloadMap);
|
|
24
|
+
};
|
|
25
|
+
exports.setLastFrameInCache = setLastFrameInCache;
|
|
26
|
+
const getLastFrameFromCache = (options) => {
|
|
27
|
+
var _a;
|
|
28
|
+
const key = makeLastFrameCacheKey(options);
|
|
29
|
+
if (!options.downloadMap.lastFrameMap[key]) {
|
|
30
|
+
return null;
|
|
31
|
+
}
|
|
32
|
+
options.downloadMap.lastFrameMap[key].lastAccessed = Date.now();
|
|
33
|
+
return (_a = options.downloadMap.lastFrameMap[key].data) !== null && _a !== void 0 ? _a : null;
|
|
34
|
+
};
|
|
35
|
+
exports.getLastFrameFromCache = getLastFrameFromCache;
|
|
36
|
+
const removedLastFrameFromCache = (key, downloadMap) => {
|
|
37
|
+
if (!downloadMap.lastFrameMap[key]) {
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
bufferSize -= downloadMap.lastFrameMap[key].data.byteLength;
|
|
41
|
+
delete downloadMap.lastFrameMap[key];
|
|
42
|
+
};
|
|
43
|
+
const ensureMaxSize = (downloadMap) => {
|
|
44
|
+
// eslint-disable-next-line no-unmodified-loop-condition
|
|
45
|
+
while (bufferSize > MAX_CACHE_SIZE) {
|
|
46
|
+
const earliest = Object.entries(downloadMap.lastFrameMap).sort((a, b) => {
|
|
47
|
+
return a[1].lastAccessed - b[1].lastAccessed;
|
|
48
|
+
})[0];
|
|
49
|
+
removedLastFrameFromCache(earliest[0], downloadMap);
|
|
50
|
+
}
|
|
51
|
+
};
|
|
52
|
+
const clearLastFileCache = (downloadMap) => {
|
|
53
|
+
downloadMap.lastFrameMap = {};
|
|
54
|
+
};
|
|
55
|
+
exports.clearLastFileCache = clearLastFileCache;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getServeUrlWithFallback = void 0;
|
|
4
|
+
const getServeUrlWithFallback = (serve) => {
|
|
5
|
+
if ('webpackBundle' in serve) {
|
|
6
|
+
return serve.webpackBundle;
|
|
7
|
+
}
|
|
8
|
+
if ('serveUrl' in serve) {
|
|
9
|
+
return serve.serveUrl;
|
|
10
|
+
}
|
|
11
|
+
throw new Error('You must pass the `serveUrl` parameter');
|
|
12
|
+
};
|
|
13
|
+
exports.getServeUrlWithFallback = getServeUrlWithFallback;
|
package/dist/logger.d.ts
CHANGED
|
@@ -6,7 +6,6 @@ type LogOptions = {
|
|
|
6
6
|
};
|
|
7
7
|
type VerboseLogOptions = LogOptions & {
|
|
8
8
|
tag?: string;
|
|
9
|
-
secondTag?: string;
|
|
10
9
|
};
|
|
11
10
|
export declare const verboseTag: (str: string) => string;
|
|
12
11
|
export declare const secondverboseTag: (str: string) => string;
|
|
@@ -19,6 +18,6 @@ export declare const Log: {
|
|
|
19
18
|
warnAdvanced: (options: LogOptions, message?: any, ...optionalParams: any[]) => void;
|
|
20
19
|
error: (message?: any, ...optionalParams: any[]) => void;
|
|
21
20
|
};
|
|
22
|
-
export declare const getLogLevel: () => "
|
|
21
|
+
export declare const getLogLevel: () => "verbose" | "info" | "warn" | "error";
|
|
23
22
|
export declare const setLogLevel: (newLogLevel: LogLevel) => void;
|
|
24
23
|
export {};
|
package/dist/logger.js
CHANGED
|
@@ -22,12 +22,7 @@ exports.Log = {
|
|
|
22
22
|
if ((0, log_level_1.isEqualOrBelowLogLevel)(options.logLevel, 'verbose')) {
|
|
23
23
|
return console.log(...[
|
|
24
24
|
options.indent ? exports.INDENT_TOKEN : null,
|
|
25
|
-
|
|
26
|
-
options.tag ? (0, exports.verboseTag)(options.tag) : null,
|
|
27
|
-
options.secondTag ? (0, exports.secondverboseTag)(options.secondTag) : null,
|
|
28
|
-
]
|
|
29
|
-
.filter(truthy_1.truthy)
|
|
30
|
-
.join(''),
|
|
25
|
+
options.tag ? (0, exports.verboseTag)(options.tag) : null,
|
|
31
26
|
...args.map((a) => chalk_1.chalk.gray(a)),
|
|
32
27
|
].filter(truthy_1.truthy));
|
|
33
28
|
}
|
|
@@ -36,12 +31,12 @@ exports.Log = {
|
|
|
36
31
|
exports.Log.infoAdvanced({ indent: false, logLevel: (0, exports.getLogLevel)() }, ...args);
|
|
37
32
|
},
|
|
38
33
|
infoAdvanced: (options, ...args) => {
|
|
39
|
-
|
|
40
|
-
return console.log(...[options.indent ? exports.INDENT_TOKEN : null, ...args].filter(truthy_1.truthy));
|
|
41
|
-
}
|
|
34
|
+
return console.log(...[options.indent ? exports.INDENT_TOKEN : null, ...args].filter(truthy_1.truthy));
|
|
42
35
|
},
|
|
43
36
|
warn: (...args) => {
|
|
44
|
-
|
|
37
|
+
if ((0, log_level_1.isEqualOrBelowLogLevel)((0, exports.getLogLevel)(), 'warn')) {
|
|
38
|
+
exports.Log.warnAdvanced({ indent: false, logLevel: (0, exports.getLogLevel)() }, ...args);
|
|
39
|
+
}
|
|
45
40
|
},
|
|
46
41
|
warnAdvanced: (options, ...args) => {
|
|
47
42
|
if ((0, log_level_1.isEqualOrBelowLogLevel)(options.logLevel, 'warn')) {
|
|
@@ -1,15 +1,16 @@
|
|
|
1
1
|
import type { RequestListener } from 'node:http';
|
|
2
2
|
import type { DownloadMap } from './assets/download-map';
|
|
3
3
|
import type { Compositor } from './compositor/compositor';
|
|
4
|
+
import type { LogLevel } from './log-level';
|
|
4
5
|
export declare const extractUrlAndSourceFromUrl: (url: string) => {
|
|
5
6
|
src: string;
|
|
6
7
|
time: number;
|
|
7
8
|
transparent: boolean;
|
|
8
9
|
};
|
|
9
|
-
export declare const startOffthreadVideoServer: ({ downloadMap, concurrency,
|
|
10
|
+
export declare const startOffthreadVideoServer: ({ downloadMap, concurrency, logLevel, indent, }: {
|
|
10
11
|
downloadMap: DownloadMap;
|
|
11
12
|
concurrency: number;
|
|
12
|
-
|
|
13
|
+
logLevel: LogLevel;
|
|
13
14
|
indent: boolean;
|
|
14
15
|
}) => {
|
|
15
16
|
listener: RequestListener;
|
|
@@ -4,6 +4,7 @@ exports.OffthreadVideoServerEmitter = exports.startOffthreadVideoServer = export
|
|
|
4
4
|
const node_url_1 = require("node:url");
|
|
5
5
|
const download_and_map_assets_to_file_1 = require("./assets/download-and-map-assets-to-file");
|
|
6
6
|
const compositor_1 = require("./compositor/compositor");
|
|
7
|
+
const log_level_1 = require("./log-level");
|
|
7
8
|
const extractUrlAndSourceFromUrl = (url) => {
|
|
8
9
|
const parsed = new URL(url, 'http://localhost');
|
|
9
10
|
const query = parsed.search;
|
|
@@ -27,13 +28,13 @@ const extractUrlAndSourceFromUrl = (url) => {
|
|
|
27
28
|
};
|
|
28
29
|
};
|
|
29
30
|
exports.extractUrlAndSourceFromUrl = extractUrlAndSourceFromUrl;
|
|
30
|
-
const startOffthreadVideoServer = ({ downloadMap, concurrency,
|
|
31
|
+
const startOffthreadVideoServer = ({ downloadMap, concurrency, logLevel, indent, }) => {
|
|
31
32
|
const events = new OffthreadVideoServerEmitter();
|
|
32
33
|
const compositor = (0, compositor_1.startCompositor)('StartLongRunningProcess', {
|
|
33
34
|
concurrency,
|
|
34
35
|
maximum_frame_cache_items: (0, compositor_1.getIdealMaximumFrameCacheItems)(),
|
|
35
|
-
verbose,
|
|
36
|
-
}, indent);
|
|
36
|
+
verbose: (0, log_level_1.isEqualOrBelowLogLevel)(logLevel, 'verbose'),
|
|
37
|
+
}, logLevel, indent);
|
|
37
38
|
return {
|
|
38
39
|
close: () => {
|
|
39
40
|
compositor.finishCommands();
|
package/dist/open-browser.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { Browser } from './browser';
|
|
2
2
|
import type { HeadlessBrowser } from './browser/Browser';
|
|
3
3
|
import type { Viewport } from './browser/PuppeteerViewport';
|
|
4
|
+
import { type LogLevel } from './log-level';
|
|
4
5
|
declare const validRenderers: readonly ["swangle", "angle", "egl", "swiftshader"];
|
|
5
6
|
type OpenGlRenderer = typeof validRenderers[number];
|
|
6
7
|
export type ChromiumOptions = {
|
|
@@ -12,13 +13,13 @@ export type ChromiumOptions = {
|
|
|
12
13
|
};
|
|
13
14
|
export declare const killAllBrowsers: () => Promise<void>;
|
|
14
15
|
type InternalOpenBrowserOptions = {
|
|
15
|
-
shouldDumpIo: boolean;
|
|
16
16
|
browserExecutable: string | null;
|
|
17
17
|
chromiumOptions: ChromiumOptions;
|
|
18
18
|
forceDeviceScaleFactor: number | undefined;
|
|
19
19
|
viewport: Viewport | null;
|
|
20
20
|
indent: boolean;
|
|
21
21
|
browser: Browser;
|
|
22
|
+
logLevel: LogLevel;
|
|
22
23
|
};
|
|
23
24
|
export type OpenBrowserOptions = {
|
|
24
25
|
shouldDumpIo?: boolean;
|
|
@@ -26,7 +27,7 @@ export type OpenBrowserOptions = {
|
|
|
26
27
|
chromiumOptions?: ChromiumOptions;
|
|
27
28
|
forceDeviceScaleFactor?: number;
|
|
28
29
|
};
|
|
29
|
-
export declare const internalOpenBrowser: ({ browser, browserExecutable, chromiumOptions, forceDeviceScaleFactor, indent,
|
|
30
|
+
export declare const internalOpenBrowser: ({ browser, browserExecutable, chromiumOptions, forceDeviceScaleFactor, indent, viewport, logLevel, }: InternalOpenBrowserOptions) => Promise<HeadlessBrowser>;
|
|
30
31
|
/**
|
|
31
32
|
* @description Opens a Chrome or Chromium browser instance.
|
|
32
33
|
* @see [Documentation](https://www.remotion.dev/docs/renderer/open-browser)
|
package/dist/open-browser.js
CHANGED
|
@@ -4,6 +4,7 @@ exports.openBrowser = exports.internalOpenBrowser = exports.killAllBrowsers = vo
|
|
|
4
4
|
const node_1 = require("./browser/node");
|
|
5
5
|
const get_local_browser_executable_1 = require("./get-local-browser-executable");
|
|
6
6
|
const get_video_threads_flag_1 = require("./get-video-threads-flag");
|
|
7
|
+
const log_level_1 = require("./log-level");
|
|
7
8
|
const validate_opengl_renderer_1 = require("./validate-opengl-renderer");
|
|
8
9
|
const validRenderers = ['swangle', 'angle', 'egl', 'swiftshader'];
|
|
9
10
|
const getOpenGlRenderer = (option) => {
|
|
@@ -21,13 +22,13 @@ const browserInstances = [];
|
|
|
21
22
|
const killAllBrowsers = async () => {
|
|
22
23
|
for (const browser of browserInstances) {
|
|
23
24
|
try {
|
|
24
|
-
await browser.close(true);
|
|
25
|
+
await browser.close(true, 'info', false);
|
|
25
26
|
}
|
|
26
27
|
catch (err) { }
|
|
27
28
|
}
|
|
28
29
|
};
|
|
29
30
|
exports.killAllBrowsers = killAllBrowsers;
|
|
30
|
-
const internalOpenBrowser = async ({ browser, browserExecutable, chromiumOptions, forceDeviceScaleFactor, indent,
|
|
31
|
+
const internalOpenBrowser = async ({ browser, browserExecutable, chromiumOptions, forceDeviceScaleFactor, indent, viewport, logLevel, }) => {
|
|
31
32
|
var _a, _b;
|
|
32
33
|
if (browser === 'firefox') {
|
|
33
34
|
throw new TypeError('Firefox supported is not yet turned on. Stay tuned for the future.');
|
|
@@ -38,7 +39,8 @@ const internalOpenBrowser = async ({ browser, browserExecutable, chromiumOptions
|
|
|
38
39
|
const browserInstance = await node_1.puppeteer.launch({
|
|
39
40
|
executablePath,
|
|
40
41
|
product: browser,
|
|
41
|
-
dumpio:
|
|
42
|
+
dumpio: (0, log_level_1.isEqualOrBelowLogLevel)(logLevel, 'verbose'),
|
|
43
|
+
logLevel,
|
|
42
44
|
indent,
|
|
43
45
|
args: [
|
|
44
46
|
'about:blank',
|
|
@@ -109,7 +111,7 @@ const internalOpenBrowser = async ({ browser, browserExecutable, chromiumOptions
|
|
|
109
111
|
deviceScaleFactor: 1,
|
|
110
112
|
},
|
|
111
113
|
});
|
|
112
|
-
const pages = await browserInstance.pages();
|
|
114
|
+
const pages = await browserInstance.pages(logLevel, indent);
|
|
113
115
|
await pages[0].close();
|
|
114
116
|
browserInstances.push(browserInstance);
|
|
115
117
|
return browserInstance;
|
|
@@ -127,8 +129,8 @@ const openBrowser = (browser, options) => {
|
|
|
127
129
|
chromiumOptions: chromiumOptions !== null && chromiumOptions !== void 0 ? chromiumOptions : {},
|
|
128
130
|
forceDeviceScaleFactor,
|
|
129
131
|
indent: false,
|
|
130
|
-
shouldDumpIo: shouldDumpIo !== null && shouldDumpIo !== void 0 ? shouldDumpIo : false,
|
|
131
132
|
viewport: null,
|
|
133
|
+
logLevel: shouldDumpIo ? 'verbose' : 'info',
|
|
132
134
|
});
|
|
133
135
|
};
|
|
134
136
|
exports.openBrowser = openBrowser;
|
package/dist/perf.js
CHANGED
|
@@ -29,8 +29,10 @@ exports.stopPerfMeasure = stopPerfMeasure;
|
|
|
29
29
|
const getPerf = () => {
|
|
30
30
|
return [
|
|
31
31
|
'Render performance:',
|
|
32
|
-
...Object.keys(perf)
|
|
33
|
-
|
|
32
|
+
...Object.keys(perf)
|
|
33
|
+
.filter((p) => perf[p].length)
|
|
34
|
+
.map((p) => {
|
|
35
|
+
return ` ${p} => ${perf[p].reduce((a, b) => a + b, 0) / perf[p].length}ms (n = ${perf[p].length})`;
|
|
34
36
|
}),
|
|
35
37
|
];
|
|
36
38
|
};
|
package/dist/prepare-server.d.ts
CHANGED
|
@@ -3,6 +3,7 @@ import type { DownloadMap } from './assets/download-map';
|
|
|
3
3
|
import type { Compositor } from './compositor/compositor';
|
|
4
4
|
import type { OffthreadVideoServerEmitter } from './offthread-video-server';
|
|
5
5
|
import type { AnySourceMapConsumer } from './symbolicate-stacktrace';
|
|
6
|
+
import type { LogLevel } from './log-level';
|
|
6
7
|
export type RemotionServer = {
|
|
7
8
|
serveUrl: string;
|
|
8
9
|
closeServer: (force: boolean) => Promise<unknown>;
|
|
@@ -17,10 +18,10 @@ type PrepareServerOptions = {
|
|
|
17
18
|
port: number | null;
|
|
18
19
|
remotionRoot: string;
|
|
19
20
|
concurrency: number;
|
|
20
|
-
|
|
21
|
+
logLevel: LogLevel;
|
|
21
22
|
indent: boolean;
|
|
22
23
|
};
|
|
23
|
-
export declare const prepareServer: ({ webpackConfigOrServeUrl, port, remotionRoot, concurrency,
|
|
24
|
+
export declare const prepareServer: ({ webpackConfigOrServeUrl, port, remotionRoot, concurrency, logLevel, indent, }: PrepareServerOptions) => Promise<RemotionServer>;
|
|
24
25
|
export declare const makeOrReuseServer: (server: RemotionServer | undefined, config: PrepareServerOptions, { onDownload, onError, }: {
|
|
25
26
|
onError: (err: Error) => void;
|
|
26
27
|
onDownload: RenderMediaOnDownload | null;
|
package/dist/prepare-server.js
CHANGED
|
@@ -14,16 +14,16 @@ const logger_1 = require("./logger");
|
|
|
14
14
|
const serve_static_1 = require("./serve-static");
|
|
15
15
|
const symbolicate_stacktrace_1 = require("./symbolicate-stacktrace");
|
|
16
16
|
const wait_for_symbolication_error_to_be_done_1 = require("./wait-for-symbolication-error-to-be-done");
|
|
17
|
-
const prepareServer = async ({ webpackConfigOrServeUrl, port, remotionRoot, concurrency,
|
|
17
|
+
const prepareServer = async ({ webpackConfigOrServeUrl, port, remotionRoot, concurrency, logLevel, indent, }) => {
|
|
18
18
|
const downloadMap = (0, download_map_1.makeDownloadMap)();
|
|
19
|
-
logger_1.Log.verboseAdvanced({ indent, logLevel
|
|
19
|
+
logger_1.Log.verboseAdvanced({ indent, logLevel }, 'Created directory for temporary files', downloadMap.assetDir);
|
|
20
20
|
if ((0, is_serve_url_1.isServeUrl)(webpackConfigOrServeUrl)) {
|
|
21
21
|
const { port: offthreadPort, close: closeProxy, compositor: comp, events, } = await (0, serve_static_1.serveStatic)(null, {
|
|
22
22
|
port,
|
|
23
23
|
downloadMap,
|
|
24
24
|
remotionRoot,
|
|
25
25
|
concurrency,
|
|
26
|
-
|
|
26
|
+
logLevel,
|
|
27
27
|
indent,
|
|
28
28
|
});
|
|
29
29
|
return Promise.resolve({
|
|
@@ -51,7 +51,7 @@ const prepareServer = async ({ webpackConfigOrServeUrl, port, remotionRoot, conc
|
|
|
51
51
|
downloadMap,
|
|
52
52
|
remotionRoot,
|
|
53
53
|
concurrency,
|
|
54
|
-
|
|
54
|
+
logLevel,
|
|
55
55
|
indent,
|
|
56
56
|
});
|
|
57
57
|
return Promise.resolve({
|
|
@@ -4,6 +4,7 @@ import type { VideoImageFormat } from './image-format';
|
|
|
4
4
|
import type { CancelSignal } from './make-cancel-signal';
|
|
5
5
|
import type { PixelFormat } from './pixel-format';
|
|
6
6
|
import type { ProResProfile } from './prores-profile';
|
|
7
|
+
import type { LogLevel } from './log-level';
|
|
7
8
|
type RunningStatus = {
|
|
8
9
|
type: 'running';
|
|
9
10
|
} | {
|
|
@@ -24,7 +25,7 @@ type PreStitcherOptions = {
|
|
|
24
25
|
crf: number | null | undefined;
|
|
25
26
|
onProgress: (progress: number) => void;
|
|
26
27
|
proResProfile: ProResProfile | undefined;
|
|
27
|
-
|
|
28
|
+
logLevel: LogLevel;
|
|
28
29
|
imageFormat: VideoImageFormat;
|
|
29
30
|
ffmpegOverride: FfmpegOverrideFn;
|
|
30
31
|
signal: CancelSignal;
|
package/dist/prespawn-ffmpeg.js
CHANGED
|
@@ -29,34 +29,6 @@ const prespawnFfmpeg = (options) => {
|
|
|
29
29
|
if (encoderName === null) {
|
|
30
30
|
throw new TypeError('encoderName is null: ' + JSON.stringify(options));
|
|
31
31
|
}
|
|
32
|
-
const supportsCrf = codec !== 'prores';
|
|
33
|
-
logger_1.Log.verboseAdvanced({
|
|
34
|
-
indent: options.indent,
|
|
35
|
-
logLevel: options.verbose ? 'verbose' : 'info',
|
|
36
|
-
tag: 'prespawnFfmpeg()',
|
|
37
|
-
}, 'encoder', encoderName);
|
|
38
|
-
logger_1.Log.verboseAdvanced({
|
|
39
|
-
indent: options.indent,
|
|
40
|
-
logLevel: options.verbose ? 'verbose' : 'info',
|
|
41
|
-
tag: 'prespawnFfmpeg()',
|
|
42
|
-
}, 'pixelFormat', pixelFormat);
|
|
43
|
-
if (supportsCrf) {
|
|
44
|
-
logger_1.Log.verboseAdvanced({
|
|
45
|
-
indent: options.indent,
|
|
46
|
-
logLevel: options.verbose ? 'verbose' : 'info',
|
|
47
|
-
tag: 'prespawnFfmpeg()',
|
|
48
|
-
}, 'pixelFormat', options.crf);
|
|
49
|
-
}
|
|
50
|
-
logger_1.Log.verboseAdvanced({
|
|
51
|
-
indent: options.indent,
|
|
52
|
-
logLevel: options.verbose ? 'verbose' : 'info',
|
|
53
|
-
tag: 'prespawnFfmpeg()',
|
|
54
|
-
}, 'codec', codec);
|
|
55
|
-
logger_1.Log.verboseAdvanced({
|
|
56
|
-
indent: options.indent,
|
|
57
|
-
logLevel: options.verbose ? 'verbose' : 'info',
|
|
58
|
-
tag: 'prespawnFfmpeg()',
|
|
59
|
-
}, 'proResProfileName', proResProfileName);
|
|
60
32
|
(0, pixel_format_1.validateSelectedPixelFormatAndCodecCombination)(pixelFormat, codec);
|
|
61
33
|
const ffmpegArgs = [
|
|
62
34
|
['-r', options.fps.toFixed(2)],
|
|
@@ -86,12 +58,12 @@ const prespawnFfmpeg = (options) => {
|
|
|
86
58
|
];
|
|
87
59
|
logger_1.Log.verboseAdvanced({
|
|
88
60
|
indent: options.indent,
|
|
89
|
-
logLevel: options.
|
|
61
|
+
logLevel: options.logLevel,
|
|
90
62
|
tag: 'prespawnFfmpeg()',
|
|
91
63
|
}, 'Generated FFMPEG command:');
|
|
92
64
|
logger_1.Log.verboseAdvanced({
|
|
93
65
|
indent: options.indent,
|
|
94
|
-
logLevel: options.
|
|
66
|
+
logLevel: options.logLevel,
|
|
95
67
|
tag: 'prespawnFfmpeg()',
|
|
96
68
|
}, ffmpegArgs.join(' '));
|
|
97
69
|
const ffmpegString = ffmpegArgs.flat(2).filter(Boolean);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const validateQuality: (q: number | undefined) => void;
|
package/dist/quality.js
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.validateQuality = void 0;
|
|
4
|
+
const validateQuality = (q) => {
|
|
5
|
+
if (typeof q !== 'undefined' && typeof q !== 'number') {
|
|
6
|
+
throw new Error(`Quality option must be a number or undefined. Got ${typeof q} (${JSON.stringify(q)})`);
|
|
7
|
+
}
|
|
8
|
+
if (typeof q === 'undefined') {
|
|
9
|
+
return;
|
|
10
|
+
}
|
|
11
|
+
if (!Number.isFinite(q)) {
|
|
12
|
+
throw new RangeError(`Quality must be a finite number, but is ${q}`);
|
|
13
|
+
}
|
|
14
|
+
if (Number.isNaN(q)) {
|
|
15
|
+
throw new RangeError(`Quality is NaN, but must be a real number`);
|
|
16
|
+
}
|
|
17
|
+
if (q > 100 || q < 0) {
|
|
18
|
+
throw new RangeError('Quality option must be between 0 and 100.');
|
|
19
|
+
}
|
|
20
|
+
};
|
|
21
|
+
exports.validateQuality = validateQuality;
|