@revideo/renderer 0.3.7-blue.987 → 0.4.0

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 (40) hide show
  1. package/lib/server/tsconfig.tsbuildinfo +1 -1
  2. package/package.json +4 -4
  3. package/lib/client/FFmpegExporterClient.d.ts +0 -46
  4. package/lib/client/FFmpegExporterClient.d.ts.map +0 -1
  5. package/lib/client/FFmpegExporterClient.js +0 -118
  6. package/lib/client/ffpmeg.d.ts +0 -3
  7. package/lib/client/ffpmeg.d.ts.map +0 -1
  8. package/lib/client/ffpmeg.js +0 -9
  9. package/lib/client/index.d.ts +0 -3
  10. package/lib/client/index.d.ts.map +0 -1
  11. package/lib/client/index.js +0 -9
  12. package/lib/index.js +0 -5
  13. package/lib/index.js.map +0 -1
  14. package/lib/server/RendererPlugin.d.ts +0 -3
  15. package/lib/server/RendererPlugin.d.ts.map +0 -1
  16. package/lib/server/RendererPlugin.js +0 -50
  17. package/lib/server/ffmpeg/FFmpegBridge.d.ts +0 -22
  18. package/lib/server/ffmpeg/FFmpegBridge.d.ts.map +0 -1
  19. package/lib/server/ffmpeg/FFmpegBridge.js +0 -92
  20. package/lib/server/ffmpeg/FFmpegExporterServer.d.ts +0 -39
  21. package/lib/server/ffmpeg/FFmpegExporterServer.d.ts.map +0 -1
  22. package/lib/server/ffmpeg/FFmpegExporterServer.js +0 -264
  23. package/lib/server/ffmpeg/FFmpegPlugin.d.ts +0 -3
  24. package/lib/server/ffmpeg/FFmpegPlugin.d.ts.map +0 -1
  25. package/lib/server/ffmpeg/FFmpegPlugin.js +0 -23
  26. package/lib/server/ffmpeg/ImageStream.d.ts +0 -10
  27. package/lib/server/ffmpeg/ImageStream.d.ts.map +0 -1
  28. package/lib/server/ffmpeg/ImageStream.js +0 -25
  29. package/lib/server/ffmpeg/VideoFrameExtractor.d.ts +0 -41
  30. package/lib/server/ffmpeg/VideoFrameExtractor.d.ts.map +0 -1
  31. package/lib/server/ffmpeg/VideoFrameExtractor.js +0 -148
  32. package/lib/server/ffmpeg/utils.d.ts +0 -8
  33. package/lib/server/ffmpeg/utils.d.ts.map +0 -1
  34. package/lib/server/ffmpeg/utils.js +0 -141
  35. package/lib/server/renderVideo.d.ts +0 -10
  36. package/lib/server/renderVideo.d.ts.map +0 -1
  37. package/lib/server/renderVideo.js +0 -124
  38. package/lib/server/utils.d.ts +0 -3
  39. package/lib/server/utils.d.ts.map +0 -1
  40. package/lib/server/utils.js +0 -20
@@ -1 +0,0 @@
1
- {"version":3,"file":"ffpmeg.d.ts","sourceRoot":"","sources":["../../client/ffpmeg.ts"],"names":[],"mappings":";AAIA,wBAKG"}
@@ -1,9 +0,0 @@
1
- import { makePlugin } from '@revideo/core';
2
- import { FFmpegExporterClient } from './FFmpegExporterClient';
3
- export default makePlugin({
4
- name: 'ffmpeg-plugin',
5
- exporters() {
6
- return [FFmpegExporterClient];
7
- },
8
- });
9
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmZwbWVnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vY2xpZW50L2ZmcG1lZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBQyxvQkFBb0IsRUFBQyxNQUFNLHdCQUF3QixDQUFDO0FBRTVELGVBQWUsVUFBVSxDQUFDO0lBQ3hCLElBQUksRUFBRSxlQUFlO0lBQ3JCLFNBQVM7UUFDUCxPQUFPLENBQUMsb0JBQW9CLENBQUMsQ0FBQztJQUNoQyxDQUFDO0NBQ0YsQ0FBQyxDQUFDIn0=
@@ -1,3 +0,0 @@
1
- declare const _default: () => import("@revideo/core").Plugin;
2
- export default _default;
3
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../client/index.ts"],"names":[],"mappings":";AAIA,wBAKG"}
@@ -1,9 +0,0 @@
1
- import { makePlugin } from '@revideo/core';
2
- import { FFmpegExporterClient } from './FFmpegExporterClient';
3
- export default makePlugin({
4
- name: 'ffmpeg-plugin',
5
- exporters() {
6
- return [FFmpegExporterClient];
7
- },
8
- });
9
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9jbGllbnQvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUMsb0JBQW9CLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQztBQUU1RCxlQUFlLFVBQVUsQ0FBQztJQUN4QixJQUFJLEVBQUUsZUFBZTtJQUNyQixTQUFTO1FBQ1AsT0FBTyxDQUFDLG9CQUFvQixDQUFDLENBQUM7SUFDaEMsQ0FBQztDQUNGLENBQUMsQ0FBQyJ9
package/lib/index.js DELETED
@@ -1,5 +0,0 @@
1
- Object.defineProperty(exports, '__esModule', {value: !0});
2
- const e = require('tslib');
3
- e.__exportStar(require('./main'), exports),
4
- e.__exportStar(require('./plugin'), exports);
5
- //# sourceMappingURL=index.js.map
package/lib/index.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sources":["../server/index.ts"],"sourcesContent":[null],"names":["tslib_1","__exportStar","require","exports"],"mappings":"gFAMAA,EAAuBC,aAAAC,QAAA,UAAAC,SACvBH,EAAyBC,aAAAC,QAAA,YAAAC"}
@@ -1,3 +0,0 @@
1
- import { Plugin } from 'vite';
2
- export declare function rendererPlugin(params?: Record<string, unknown>): Plugin;
3
- //# sourceMappingURL=RendererPlugin.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"RendererPlugin.d.ts","sourceRoot":"","sources":["../../server/RendererPlugin.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,MAAM,EAAC,MAAM,MAAM,CAAC;AAU5B,wBAAgB,cAAc,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAsCvE"}
@@ -1,50 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.rendererPlugin = void 0;
4
- const fs = require("fs");
5
- const path = require("path");
6
- const RendererPath = path.resolve(__dirname, '../renderer.html');
7
- const Content = fs.readFileSync(RendererPath, 'utf-8');
8
- const HtmlParts = Content.toString().split('{{source}}');
9
- function createHtml(src) {
10
- return HtmlParts[0] + src + HtmlParts[1];
11
- }
12
- function rendererPlugin(params) {
13
- return {
14
- name: 'revideo-renderer-plugin',
15
- async load(id) {
16
- if (id.startsWith('\x00virtual:renderer')) {
17
- return `\
18
- import {render} from '@revideo/renderer/lib/client/render';
19
- import project from './src/project.ts?project';
20
-
21
- // Read video variables
22
- project.variables = ${params ? `JSON.parse(\`${JSON.stringify(params)}\`)` : 'project.variables'};
23
-
24
- // Check range of frames to render
25
- const url = new URL(window.location.href);
26
-
27
- const fileName = url.searchParams.get('fileName');
28
- const workerId = url.searchParams.get('workerId');
29
- const totalNumOfWorkers = url.searchParams.get('totalNumOfWorkers');
30
- const startInSeconds = parseFloat(url.searchParams.get('startInSeconds'));
31
- const endInSeconds = parseFloat(url.searchParams.get('endInSeconds'));
32
- const hiddenFolderId = url.searchParams.get('hiddenFolderId');
33
-
34
- // Overwrite project name so that the rendered videos don't overwrite each other
35
- project.name = fileName;
36
-
37
- render(project, workerId, totalNumOfWorkers, startInSeconds, endInSeconds, hiddenFolderId);
38
- `;
39
- }
40
- },
41
- configureServer(server) {
42
- server.middlewares.use('/render', (_req, res) => {
43
- res.setHeader('Content-Type', 'text/html');
44
- res.end(createHtml(`/@id/__x00__virtual:renderer`));
45
- });
46
- },
47
- };
48
- }
49
- exports.rendererPlugin = rendererPlugin;
50
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmVuZGVyZXJQbHVnaW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zZXJ2ZXIvUmVuZGVyZXJQbHVnaW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEseUJBQXlCO0FBQ3pCLDZCQUE2QjtBQUc3QixNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO0FBQ2pFLE1BQU0sT0FBTyxHQUFHLEVBQUUsQ0FBQyxZQUFZLENBQUMsWUFBWSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ3ZELE1BQU0sU0FBUyxHQUFHLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUM7QUFFekQsU0FBUyxVQUFVLENBQUMsR0FBVztJQUM3QixPQUFPLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNDLENBQUM7QUFFRCxTQUFnQixjQUFjLENBQUMsTUFBZ0M7SUFDN0QsT0FBTztRQUNMLElBQUksRUFBRSx5QkFBeUI7UUFFL0IsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ1gsSUFBSSxFQUFFLENBQUMsVUFBVSxDQUFDLHNCQUFzQixDQUFDLEVBQUUsQ0FBQztnQkFDMUMsT0FBTzs7Ozs7a0NBS21CLE1BQU0sQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsbUJBQW1COzs7Ozs7Ozs7Ozs7Ozs7O2FBZ0IvRixDQUFDO1lBQ1IsQ0FBQztRQUNILENBQUM7UUFFRCxlQUFlLENBQUMsTUFBTTtZQUNwQixNQUFNLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLEVBQUU7Z0JBQzlDLEdBQUcsQ0FBQyxTQUFTLENBQUMsY0FBYyxFQUFFLFdBQVcsQ0FBQyxDQUFDO2dCQUMzQyxHQUFHLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyw4QkFBOEIsQ0FBQyxDQUFDLENBQUM7WUFDdEQsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDO0tBQ0YsQ0FBQztBQUNKLENBQUM7QUF0Q0Qsd0NBc0NDIn0=
@@ -1,22 +0,0 @@
1
- import { PluginConfig } from '@revideo/vite-plugin/lib/plugins';
2
- import type { WebSocketServer } from 'vite';
3
- /**
4
- * A simple bridge between the FFmpegExporterServer and FFmpegExporterClient.
5
- *
6
- * @remarks
7
- * This class lets the client exporter invoke methods on the server and receive
8
- * responses using a simple Promise-based API.
9
- */
10
- export declare class FFmpegBridge {
11
- private readonly ws;
12
- private readonly config;
13
- private process;
14
- constructor(ws: WebSocketServer, config: PluginConfig);
15
- private handleMessage;
16
- private respondSuccess;
17
- private respondError;
18
- private videoFrameExtractors;
19
- private handleVideoFrameMessage;
20
- private handleRenderFinished;
21
- }
22
- //# sourceMappingURL=FFmpegBridge.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"FFmpegBridge.d.ts","sourceRoot":"","sources":["../../../server/ffmpeg/FFmpegBridge.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,YAAY,EAAC,MAAM,kCAAkC,CAAC;AAC9D,OAAO,KAAK,EAAC,eAAe,EAAC,MAAM,MAAM,CAAC;AAY1C;;;;;;GAMG;AACH,qBAAa,YAAY;IAIrB,OAAO,CAAC,QAAQ,CAAC,EAAE;IACnB,OAAO,CAAC,QAAQ,CAAC,MAAM;IAJzB,OAAO,CAAC,OAAO,CAAqC;gBAGjC,EAAE,EAAE,eAAe,EACnB,MAAM,EAAE,YAAY;IAOvC,OAAO,CAAC,aAAa,CAkCnB;IAEF,OAAO,CAAC,cAAc;IAQtB,OAAO,CAAC,YAAY;IASpB,OAAO,CAAC,oBAAoB,CAA0C;IAEtE,OAAO,CAAC,uBAAuB,CAgC7B;IAEF,OAAO,CAAC,oBAAoB,CAG1B;CACH"}
@@ -1,92 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.FFmpegBridge = void 0;
4
- const FFmpegExporterServer_1 = require("./FFmpegExporterServer");
5
- const VideoFrameExtractor_1 = require("./VideoFrameExtractor");
6
- /**
7
- * A simple bridge between the FFmpegExporterServer and FFmpegExporterClient.
8
- *
9
- * @remarks
10
- * This class lets the client exporter invoke methods on the server and receive
11
- * responses using a simple Promise-based API.
12
- */
13
- class FFmpegBridge {
14
- constructor(ws, config) {
15
- this.ws = ws;
16
- this.config = config;
17
- this.process = null;
18
- this.handleMessage = async ({ method, data }) => {
19
- if (method === 'start') {
20
- try {
21
- this.process = new FFmpegExporterServer_1.FFmpegExporterServer(data, this.config);
22
- this.respondSuccess(method, await this.process.start());
23
- }
24
- catch (e) {
25
- this.respondError(method, e?.message);
26
- }
27
- return;
28
- }
29
- if (!this.process) {
30
- this.respondError(method, 'The exporting process has not been started.');
31
- return;
32
- }
33
- if (!(method in this.process)) {
34
- this.respondError(method, `Unknown method: "${method}".`);
35
- return;
36
- }
37
- try {
38
- this.respondSuccess(method, await this.process[method](data));
39
- }
40
- catch (e) {
41
- this.respondError(method, e?.message);
42
- }
43
- if (method === 'kill') {
44
- this.process = null;
45
- return;
46
- }
47
- };
48
- // List of VideoFrameExtractors
49
- this.videoFrameExtractors = new Map();
50
- this.handleVideoFrameMessage = async ({ data }) => {
51
- const typedData = data;
52
- // Check if we already have a VideoFrameExtractor for this video
53
- const id = typedData.filePath + '-' + typedData.id;
54
- let extractor = this.videoFrameExtractors.get(id);
55
- if (!extractor) {
56
- extractor = new VideoFrameExtractor_1.VideoFrameExtractor(typedData.filePath, typedData.startTime, typedData.fps, typedData.duration);
57
- this.videoFrameExtractors.set(id, extractor);
58
- }
59
- // Go to the frame that is closest to the requested time
60
- const frame = await extractor.popImage();
61
- this.ws.send('revideo:ffmpeg-video-frame-res', {
62
- status: 'success',
63
- data: {
64
- frame,
65
- },
66
- });
67
- };
68
- this.handleRenderFinished = async () => {
69
- this.videoFrameExtractors.forEach(extractor => extractor.destroy());
70
- this.videoFrameExtractors.clear();
71
- };
72
- ws.on('revideo:ffmpeg-exporter', this.handleMessage);
73
- ws.on('revideo:ffmpeg-video-frame', this.handleVideoFrameMessage);
74
- ws.on('revideo:render-finished', this.handleRenderFinished);
75
- }
76
- respondSuccess(method, data = {}) {
77
- this.ws.send('revideo:ffmpeg-exporter-ack', {
78
- status: 'success',
79
- method,
80
- data,
81
- });
82
- }
83
- respondError(method, message = 'Unknown error.') {
84
- this.ws.send('revideo:ffmpeg-exporter-ack', {
85
- status: 'error',
86
- method,
87
- message,
88
- });
89
- }
90
- }
91
- exports.FFmpegBridge = FFmpegBridge;
92
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRkZtcGVnQnJpZGdlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc2VydmVyL2ZmbXBlZy9GRm1wZWdCcmlkZ2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBRUEsaUVBR2dDO0FBQ2hDLCtEQUEwRDtBQU8xRDs7Ozs7O0dBTUc7QUFDSCxNQUFhLFlBQVk7SUFHdkIsWUFDbUIsRUFBbUIsRUFDbkIsTUFBb0I7UUFEcEIsT0FBRSxHQUFGLEVBQUUsQ0FBaUI7UUFDbkIsV0FBTSxHQUFOLE1BQU0sQ0FBYztRQUovQixZQUFPLEdBQWdDLElBQUksQ0FBQztRQVc1QyxrQkFBYSxHQUFHLEtBQUssRUFBRSxFQUFDLE1BQU0sRUFBRSxJQUFJLEVBQWlCLEVBQUUsRUFBRTtZQUMvRCxJQUFJLE1BQU0sS0FBSyxPQUFPLEVBQUUsQ0FBQztnQkFDdkIsSUFBSSxDQUFDO29CQUNILElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSwyQ0FBb0IsQ0FDckMsSUFBOEIsRUFDOUIsSUFBSSxDQUFDLE1BQU0sQ0FDWixDQUFDO29CQUNGLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO2dCQUMxRCxDQUFDO2dCQUFDLE9BQU8sQ0FBTSxFQUFFLENBQUM7b0JBQ2hCLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQztnQkFDeEMsQ0FBQztnQkFDRCxPQUFPO1lBQ1QsQ0FBQztZQUVELElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQ2xCLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLDZDQUE2QyxDQUFDLENBQUM7Z0JBQ3pFLE9BQU87WUFDVCxDQUFDO1lBRUQsSUFBSSxDQUFDLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO2dCQUM5QixJQUFJLENB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
@@ -1,39 +0,0 @@
1
- import type { AssetInfo, RendererResult, RendererSettings } from '@revideo/core/lib/app';
2
- import type { PluginConfig } from '@revideo/vite-plugin/lib/plugins';
3
- export declare function getCurrentVersion(): Promise<any>;
4
- export interface FFmpegExporterSettings extends RendererSettings {
5
- audio?: string;
6
- audioOffset?: number;
7
- fastStart: boolean;
8
- includeAudio: boolean;
9
- }
10
- /**
11
- * The server-side implementation of the FFmpeg video exporter.
12
- */
13
- export declare class FFmpegExporterServer {
14
- private readonly config;
15
- private readonly stream;
16
- private readonly command;
17
- private readonly promise;
18
- private readonly settings;
19
- private readonly jobFolder;
20
- private readonly audioFilenames;
21
- constructor(settings: FFmpegExporterSettings, config: PluginConfig);
22
- start(): Promise<void>;
23
- handleFrame({ data }: {
24
- data: string;
25
- }): Promise<void>;
26
- generateAudio({ assets, startFrame, endFrame, }: {
27
- assets: AssetInfo[][];
28
- startFrame: number;
29
- endFrame: number;
30
- }): Promise<void>;
31
- mergeMedia(): Promise<void>;
32
- private resolvePath;
33
- end(result: RendererResult): Promise<void>;
34
- kill(): Promise<void>;
35
- private prepareAudio;
36
- private mergeAudioTracks;
37
- private calculateAtempoFilters;
38
- }
39
- //# sourceMappingURL=FFmpegExporterServer.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"FFmpegExporterServer.d.ts","sourceRoot":"","sources":["../../../server/ffmpeg/FFmpegExporterServer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,SAAS,EACT,cAAc,EACd,gBAAgB,EACjB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,EAAC,YAAY,EAAC,MAAM,kCAAkC,CAAC;AAYnE,wBAAsB,iBAAiB,iBAatC;AAED,MAAM,WAAW,sBAAuB,SAAQ,gBAAgB;IAC9D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,OAAO,CAAC;IACnB,YAAY,EAAE,OAAO,CAAC;CACvB;AAcD;;GAEG;AACH,qBAAa,oBAAoB;IAU7B,OAAO,CAAC,QAAQ,CAAC,MAAM;IATzB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAc;IACrC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAuB;IAC/C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAgB;IACxC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAyB;IAClD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAW;gBAGxC,QAAQ,EAAE,sBAAsB,EACf,MAAM,EAAE,YAAY;IA0C1B,KAAK;IAYL,WAAW,CAAC,EAAC,IAAI,EAAC,EAAE;QAAC,IAAI,EAAE,MAAM,CAAA;KAAC;IAKlC,aAAa,CAAC,EACzB,MAAM,EACN,UAAU,EACV,QAAQ,GACT,EAAE;QACD,MAAM,EAAE,SAAS,EAAE,EAAE,CAAC;QACtB,UAAU,EAAE,MAAM,CAAC;QACnB,QAAQ,EAAE,MAAM,CAAC;KAClB;IAoBY,UAAU;IAoBvB,OAAO,CAAC,WAAW;IAcN,GAAG,CAAC,MAAM,EAAE,cAAc;IAc1B,IAAI;YAUH,YAAY;YAyDZ,gBAAgB;YAwBhB,sBAAsB;CA2BrC"}
@@ -1,264 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.FFmpegExporterServer = exports.getCurrentVersion = void 0;
4
- const utils_1 = require("./utils");
5
- const ffmpeg = require("fluent-ffmpeg");
6
- const fs = require("fs");
7
- const os = require("os");
8
- const path = require("path");
9
- const ImageStream_1 = require("./ImageStream");
10
- const telemetry_1 = require("@revideo/telemetry");
11
- const fsPromises = require("fs/promises");
12
- const SAMPLE_RATE = 48000;
13
- async function getCurrentVersion() {
14
- try {
15
- const packageData = JSON.parse(await fsPromises.readFile(path.join(__dirname, '..', '..', 'package.json'), 'utf-8'));
16
- return packageData.version;
17
- }
18
- catch (e) {
19
- return 'ERROR';
20
- }
21
- }
22
- exports.getCurrentVersion = getCurrentVersion;
23
- /**
24
- * The server-side implementation of the FFmpeg video exporter.
25
- */
26
- class FFmpegExporterServer {
27
- constructor(settings, config) {
28
- this.config = config;
29
- this.settings = settings;
30
- this.jobFolder = path.join(os.tmpdir(), `revideo-${this.settings.name}`);
31
- console.log("this.jobFolder", this.jobFolder);
32
- this.audioFilenames = [];
33
- this.stream = new ImageStream_1.ImageStream();
34
- this.command = ffmpeg();
35
- // Input image sequence
36
- this.command
37
- .input(this.stream)
38
- .inputFormat('image2pipe')
39
- .inputFps(settings.fps);
40
- // Input audio file
41
- if (settings.includeAudio && settings.audio) {
42
- this.command
43
- .input(settings.audio.slice(1))
44
- // FIXME Offset only works for negative values.
45
- .inputOptions([`-itsoffset ${settings.audioOffset ?? 0}`]);
46
- }
47
- // Output settings
48
- const size = {
49
- x: Math.round(settings.size.x * settings.resolutionScale),
50
- y: Math.round(settings.size.y * settings.resolutionScale),
51
- };
52
- this.command
53
- .output(path.join(this.jobFolder, `visuals.mp4`))
54
- .outputOptions(['-pix_fmt yuv420p', '-shortest'])
55
- .outputFps(settings.fps)
56
- .size(`${size.x}x${size.y}`);
57
- if (settings.fastStart) {
58
- this.command.outputOptions(['-movflags +faststart']);
59
- }
60
- this.promise = new Promise((resolve, reject) => {
61
- this.command.on('end', resolve).on('error', reject);
62
- });
63
- }
64
- async start() {
65
- const version = await getCurrentVersion();
66
- (0, telemetry_1.sendEvent)(telemetry_1.EventName.RenderStarted, { version });
67
- if (!fs.existsSync(this.config.output)) {
68
- await fs.promises.mkdir(this.config.output, { recursive: true });
69
- }
70
- if (!fs.existsSync(this.jobFolder)) {
71
- await fs.promises.mkdir(this.jobFolder, { recursive: true });
72
- }
73
- this.command.run();
74
- }
75
- async handleFrame({ data }) {
76
- const base64Data = data.slice(data.indexOf(',') + 1);
77
- this.stream.pushImage(Buffer.from(base64Data, 'base64'));
78
- }
79
- async generateAudio({ assets, startFrame, endFrame, }) {
80
- const assetPositions = getAssetPlacement(assets);
81
- for (const asset of assetPositions) {
82
- let hasAudioStream = true;
83
- if (asset.type !== 'audio') {
84
- hasAudioStream = await (0, utils_1.checkForAudioStream)(this.resolvePath(asset.src));
85
- }
86
- if (asset.playbackRate !== 0 && asset.volume !== 0 && hasAudioStream) {
87
- const filename = await this.prepareAudio(asset, startFrame, endFrame);
88
- this.audioFilenames.push(filename);
89
- }
90
- }
91
- if (this.audioFilenames.length > 0) {
92
- await this.mergeAudioTracks();
93
- }
94
- }
95
- async mergeMedia() {
96
- if (this.audioFilenames.length > 0) {
97
- await (0, utils_1.mergeAudioWithVideo)(path.join(this.jobFolder, `audio.wav`), path.join(this.jobFolder, `visuals.mp4`), path.join(this.config.output, `${this.settings.name}.mp4`));
98
- }
99
- else {
100
- const destination = path.join(this.config.output, `${this.settings.name}.mp4`);
101
- await fs.promises.copyFile(path.join(this.jobFolder, `visuals.mp4`), destination);
102
- console.log(`\nRendered successfully! Video saved to: ${destination}`);
103
- }
104
- }
105
- resolvePath(assetPath) {
106
- let resolvedPath;
107
- if (assetPath.startsWith('/@fs')) {
108
- resolvedPath = assetPath.replace('/@fs', '');
109
- }
110
- else if (assetPath.startsWith('http')) {
111
- resolvedPath = assetPath;
112
- }
113
- else if (assetPath.startsWith('/')) {
114
- resolvedPath = path.join(this.config.output, '../public', assetPath);
115
- }
116
- else {
117
- resolvedPath = path.join(this.config.output, '..', assetPath);
118
- }
119
- return resolvedPath;
120
- }
121
- async end(result) {
122
- this.stream.pushImage(null);
123
- if (result === 1) {
124
- try {
125
- this.command.kill('SIGKILL');
126
- await this.promise;
127
- }
128
- catch (_) {
129
- // do nothing
130
- }
131
- }
132
- else {
133
- await this.promise;
134
- }
135
- }
136
- async kill() {
137
- try {
138
- //await fs.promises.rm(this.jobFolder, {recursive: true, force: true}); // cleanup
139
- this.command.kill('SIGKILL');
140
- await this.promise;
141
- }
142
- catch (_) {
143
- return;
144
- }
145
- }
146
- async prepareAudio(asset, startFrame, endFrame) {
147
- // Construct the output path
148
- const sanitizedKey = asset.key.replace(/[/[\]]/g, '-');
149
- const outputPath = path.join(this.jobFolder, `${sanitizedKey}.wav`);
150
- const originalTrimLeft = asset.trimLeftInSeconds / asset.playbackRate;
151
- const trimLeft = originalTrimLeft < 1 ? 0 : originalTrimLeft;
152
- const trimRight = Math.min(trimLeft + asset.duration / this.settings.fps, trimLeft + (endFrame - startFrame + 1) / this.settings.fps);
153
- const padStart = (asset.startInVideo / this.settings.fps) * 1000;
154
- const assetSampleRate = await (0, utils_1.getSampleRate)(this.resolvePath(asset.src));
155
- const padEnd = Math.max(0, (assetSampleRate * (endFrame - startFrame + 1)) / this.settings.fps -
156
- (assetSampleRate * asset.duration) / this.settings.fps -
157
- (assetSampleRate * padStart) / 1000);
158
- const atempoFilters = await this.calculateAtempoFilters(asset.playbackRate); // atempo filter value must be >=0.5 and <=100. If the value is higher or lower, this function sets multiple atempo filters
159
- const resolvedPath = this.resolvePath(asset.src);
160
- await new Promise((resolve, reject) => {
161
- const audioFilters = [
162
- ...atempoFilters,
163
- `atrim=start=${trimLeft}:end=${trimRight}`,
164
- `apad=pad_len=${padEnd}`,
165
- `adelay=${padStart}|${padStart}|${padStart}`,
166
- `volume=${asset.volume}`,
167
- ].join(',');
168
- ffmpeg(resolvedPath)
169
- .audioChannels(2)
170
- .audioCodec('pcm_s16le')
171
- .audioFrequency(SAMPLE_RATE)
172
- .outputOptions([`-af`, audioFilters])
173
- .on('end', () => {
174
- resolve();
175
- })
176
- .on('error', err => {
177
- console.error(`Error processing audio for asset key: ${asset.key}`, err);
178
- reject(err);
179
- })
180
- .save(outputPath);
181
- });
182
- return outputPath;
183
- }
184
- async mergeAudioTracks() {
185
- return new Promise((resolve, reject) => {
186
- const command = ffmpeg();
187
- this.audioFilenames.forEach(filename => {
188
- command.input(filename);
189
- });
190
- command
191
- .complexFilter([
192
- `amix=inputs=${this.audioFilenames.length}:duration=longest`,
193
- ])
194
- .outputOptions(['-c:a', 'pcm_s16le'])
195
- .on('end', () => {
196
- resolve();
197
- })
198
- .on('error', err => {
199
- console.error(`Error merging audio tracks: ${err.message}`);
200
- reject(err);
201
- })
202
- .save(path.join(this.jobFolder, `audio.wav`));
203
- });
204
- }
205
- async calculateAtempoFilters(playbackRate) {
206
- const atempoFilters = [];
207
- // Calculate how many times we need to 100x the speed
208
- let rate = playbackRate;
209
- while (rate > 100.0) {
210
- atempoFilters.push('atempo=100.0');
211
- rate /= 100.0;
212
- }
213
- // Add the last atempo filter with the remaining rate
214
- if (rate > 1.0) {
215
- atempoFilters.push(`atempo=${rate}`);
216
- }
217
- // Calculate how many times we need to halve the speed
218
- rate = playbackRate;
219
- while (rate < 0.5) {
220
- atempoFilters.push('atempo=0.5');
221
- rate *= 2.0;
222
- }
223
- // Add the last atempo filter with the remaining rate
224
- if (rate < 1.0) {
225
- atempoFilters.push(`atempo=${rate}`);
226
- }
227
- return atempoFilters;
228
- }
229
- }
230
- exports.FFmpegExporterServer = FFmpegExporterServer;
231
- function getAssetPlacement(frames) {
232
- const assets = [];
233
- // A map to keep track of when each asset starts.
234
- const assetStartMap = new Map();
235
- for (let frame = 0; frame < frames.length; frame++) {
236
- for (const asset of frames[frame]) {
237
- if (!assetStartMap.has(asset.key)) {
238
- assetStartMap.set(asset.key, frame);
239
- assets.push({
240
- key: asset.key,
241
- src: asset.src,
242
- type: asset.type,
243
- startInVideo: frame,
244
- endInVideo: frame,
245
- duration: asset.duration,
246
- playbackRate: asset.playbackRate,
247
- volume: asset.volume,
248
- trimLeftInSeconds: asset.currentTime,
249
- });
250
- }
251
- else {
252
- const existingAsset = assets.find(a => a.key === asset.key);
253
- if (existingAsset) {
254
- existingAsset.endInVideo = frame;
255
- }
256
- }
257
- }
258
- }
259
- assets.forEach(asset => {
260
- asset.duration = asset.endInVideo - asset.startInVideo + 1;
261
- });
262
- return assets;
263
- }
264
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRkZtcGVnRXhwb3J0ZXJTZXJ2ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zZXJ2ZXIvZmZtcGVnL0ZGbXBlZ0V4cG9ydGVyU2VydmVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQU1BLG1DQUFrRjtBQUNsRix3Q0FBd0M7QUFDeEMseUJBQXlCO0FBQ3pCLHlCQUF5QjtBQUN6Qiw2QkFBNkI7QUFDN0IsK0NBQTBDO0FBRTFDLGtEQUF3RDtBQUN4RCwwQ0FBMEM7QUFDMUMsTUFBTSxXQUFXLEdBQUcsS0FBSyxDQUFDO0FBRW5CLEtBQUssVUFBVSxpQkFBaUI7SUFDckMsSUFBSSxDQUFDO1FBQ0gsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FDNUIsTUFBTSxVQUFVLENBQUMsUUFBUSxDQUN2QixJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLGNBQWMsQ0FBQyxFQUNoRCxPQUFPLENBQ1IsQ0FDRixDQUFDO1FBRUYsT0FBTyxXQUFXLENBQUMsT0FBTyxDQUFDO0lBQzdCLENBQUM7SUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1FBQ1gsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztBQUNILENBQUM7QUFiRCw4Q0FhQztBQXFCRDs7R0FFRztBQUNILE1BQWEsb0JBQW9CO0lBUS9CLFlBQ0UsUUFBZ0MsRUFDZixNQUFvQjtRQUFwQixXQUFNLEdBQU4sTUFBTSxDQUFjO1FBRXJDLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsTUFBTSxFQUFFLEVBQUUsV0FBVyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7UUFDekUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDOUMsSUFB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
@@ -1,3 +0,0 @@
1
- import { Plugin } from '@revideo/vite-plugin/lib/plugins';
2
- export declare function ffmpegPlugin(): Plugin;
3
- //# sourceMappingURL=FFmpegPlugin.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"FFmpegPlugin.d.ts","sourceRoot":"","sources":["../../../server/ffmpeg/FFmpegPlugin.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,MAAM,EAGP,MAAM,kCAAkC,CAAC;AAG5C,wBAAgB,YAAY,IAAI,MAAM,CAcrC"}
@@ -1,23 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ffmpegPlugin = void 0;
4
- const plugins_1 = require("@revideo/vite-plugin/lib/plugins");
5
- const FFmpegBridge_1 = require("./FFmpegBridge");
6
- function ffmpegPlugin() {
7
- let config;
8
- return {
9
- name: 'revideo/ffmpeg',
10
- [plugins_1.PLUGIN_OPTIONS]: {
11
- entryPoint: '@revideo/renderer/lib/client',
12
- async config(value) {
13
- config = value;
14
- },
15
- },
16
- configureServer(server) {
17
- new FFmpegBridge_1.FFmpegBridge(server.ws, config);
18
- },
19
- };
20
- }
21
- exports.ffmpegPlugin = ffmpegPlugin;
22
- ;
23
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRkZtcGVnUGx1Z2luLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc2VydmVyL2ZmbXBlZy9GRm1wZWdQbHVnaW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsOERBSTRDO0FBQzVDLGlEQUE0QztBQUU1QyxTQUFnQixZQUFZO0lBQ3hCLElBQUksTUFBb0IsQ0FBQztJQUN6QixPQUFPO1FBQ0gsSUFBSSxFQUFFLGdCQUFnQjtRQUN0QixDQUFDLHdCQUFjLENBQUMsRUFBRTtZQUNsQixVQUFVLEVBQUUsOEJBQThCO1lBQzFDLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSztnQkFDZCxNQUFNLEdBQUcsS0FBSyxDQUFDO1lBQ25CLENBQUM7U0FDQTtRQUNELGVBQWUsQ0FBQyxNQUFNO1lBQ3RCLElBQUksMkJBQVksQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ3BDLENBQUM7S0FDSixDQUFDO0FBQ04sQ0FBQztBQWRELG9DQWNDO0FBQUEsQ0FBQyJ9
@@ -1,10 +0,0 @@
1
- /// <reference types="node" />
2
- /// <reference types="node" />
3
- import { Readable } from 'stream';
4
- export declare class ImageStream extends Readable {
5
- private image;
6
- private hasData;
7
- pushImage(image: Buffer | null): void;
8
- _read(): void;
9
- }
10
- //# sourceMappingURL=ImageStream.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ImageStream.d.ts","sourceRoot":"","sources":["../../../server/ffmpeg/ImageStream.ts"],"names":[],"mappings":";;AAAA,OAAO,EAAC,QAAQ,EAAC,MAAM,QAAQ,CAAC;AAEhC,qBAAa,WAAY,SAAQ,QAAQ;IACvC,OAAO,CAAC,KAAK,CAAuB;IACpC,OAAO,CAAC,OAAO,CAAS;IAEjB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAOrB,KAAK;CAMtB"}
@@ -1,25 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ImageStream = void 0;
4
- const stream_1 = require("stream");
5
- class ImageStream extends stream_1.Readable {
6
- constructor() {
7
- super(...arguments);
8
- this.image = null;
9
- this.hasData = false;
10
- }
11
- pushImage(image) {
12
- this.image = image;
13
- this.hasData = true;
14
- this._read();
15
- }
16
- // eslint-disable-next-line @typescript-eslint/naming-convention
17
- _read() {
18
- if (this.hasData) {
19
- this.hasData = false;
20
- this.push(this.image);
21
- }
22
- }
23
- }
24
- exports.ImageStream = ImageStream;
25
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSW1hZ2VTdHJlYW0uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zZXJ2ZXIvZmZtcGVnL0ltYWdlU3RyZWFtLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLG1DQUFnQztBQUVoQyxNQUFhLFdBQVksU0FBUSxpQkFBUTtJQUF6Qzs7UUFDVSxVQUFLLEdBQWtCLElBQUksQ0FBQztRQUM1QixZQUFPLEdBQUcsS0FBSyxDQUFDO0lBZTFCLENBQUM7SUFiUSxTQUFTLENBQUMsS0FBb0I7UUFDbkMsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFDbkIsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7UUFDcEIsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ2YsQ0FBQztJQUVELGdFQUFnRTtJQUNoRCxLQUFLO1FBQ25CLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2pCLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO1lBQ3JCLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3hCLENBQUM7SUFDSCxDQUFDO0NBQ0Y7QUFqQkQsa0NBaUJDIn0=