@revideo/ffmpeg 0.2.4-alpha.894 → 0.2.4-alpha.897

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.
@@ -1,11 +1,5 @@
1
- import type {
2
- AssetInfo,
3
- MetaField,
4
- Project,
5
- RendererResult,
6
- RendererSettings,
7
- } from '@revideo/core';
8
- import {Exporter} from '@revideo/core';
1
+ import type { AssetInfo, MetaField, Project, RendererResult, RendererSettings } from '@revideo/core';
2
+ import { Exporter } from '@revideo/core';
9
3
  /**
10
4
  * FFmpeg video exporter.
11
5
  *
@@ -25,29 +19,26 @@ import {Exporter} from '@revideo/core';
25
19
  * initialized by invoking `start`.
26
20
  */
27
21
  export declare class FFmpegExporterClient implements Exporter {
28
- private readonly project;
29
- private readonly settings;
30
- static readonly id = '@revideo/ffmpeg';
31
- static readonly displayName = 'Video (FFmpeg)';
32
- static meta(project: Project): MetaField<any>;
33
- static create(
34
- project: Project,
35
- settings: RendererSettings,
36
- ): Promise<FFmpegExporterClient>;
37
- private static readonly response;
38
- constructor(project: Project, settings: RendererSettings);
39
- start(): Promise<void>;
40
- handleFrame(canvas: HTMLCanvasElement): Promise<void>;
41
- stop(result: RendererResult): Promise<void>;
42
- kill(): Promise<void>;
43
- generateAudio(assets: AssetInfo[][], endFrame: number): Promise<void>;
44
- /**
45
- * Remotely invoke a method on the server and wait for a response.
46
- *
47
- * @param method - The method name to execute on the server.
48
- * @param data - The data that will be passed as an argument to the method.
49
- * Should be serializable.
50
- */
51
- private invoke;
22
+ private readonly project;
23
+ private readonly settings;
24
+ static readonly id = "@revideo/ffmpeg";
25
+ static readonly displayName = "Video (FFmpeg)";
26
+ static meta(project: Project): MetaField<any>;
27
+ static create(project: Project, settings: RendererSettings): Promise<FFmpegExporterClient>;
28
+ private static readonly response;
29
+ constructor(project: Project, settings: RendererSettings);
30
+ start(): Promise<void>;
31
+ handleFrame(canvas: HTMLCanvasElement): Promise<void>;
32
+ stop(result: RendererResult): Promise<void>;
33
+ kill(): Promise<void>;
34
+ generateAudio(assets: AssetInfo[][], endFrame: number): Promise<void>;
35
+ /**
36
+ * Remotely invoke a method on the server and wait for a response.
37
+ *
38
+ * @param method - The method name to execute on the server.
39
+ * @param data - The data that will be passed as an argument to the method.
40
+ * Should be serializable.
41
+ */
42
+ private invoke;
52
43
  }
53
- //# sourceMappingURL=FFmpegExporterClient.d.ts.map
44
+ //# sourceMappingURL=FFmpegExporterClient.d.ts.map
@@ -1,5 +1,5 @@
1
1
  var _a;
2
- import {BoolMetaField, EventDispatcher, ObjectMetaField} from '@revideo/core';
2
+ import { BoolMetaField, EventDispatcher, ObjectMetaField, } from '@revideo/core';
3
3
  /**
4
4
  * FFmpeg video exporter.
5
5
  *
@@ -19,87 +19,84 @@ import {BoolMetaField, EventDispatcher, ObjectMetaField} from '@revideo/core';
19
19
  * initialized by invoking `start`.
20
20
  */
21
21
  export class FFmpegExporterClient {
22
- static meta(project) {
23
- return new ObjectMetaField(this.displayName, {
24
- fastStart: new BoolMetaField('fast start', true),
25
- includeAudio: new BoolMetaField('include audio', true).disable(
26
- !project.audio,
27
- ),
28
- });
29
- }
30
- static async create(project, settings) {
31
- return new _a(project, settings);
32
- }
33
- constructor(project, settings) {
34
- this.project = project;
35
- this.settings = settings;
36
- }
37
- async start() {
38
- const options = this.settings.exporter.options;
39
- await this.invoke('start', {
40
- ...this.settings,
41
- ...options,
42
- audio: this.project.audio,
43
- audioOffset:
44
- this.project.meta.shared.audioOffset.get() - this.settings.range[0],
45
- });
46
- }
47
- async handleFrame(canvas) {
48
- await this.invoke('handleFrame', {
49
- data: canvas.toDataURL('image/png'),
50
- });
51
- }
52
- async stop(result) {
53
- await this.invoke('end', result);
54
- }
55
- async kill() {
56
- await this.invoke('kill', {});
57
- }
58
- async generateAudio(assets, endFrame) {
59
- await this.invoke('generateAudio', {assets, endFrame});
60
- }
61
- /**
62
- * Remotely invoke a method on the server and wait for a response.
63
- *
64
- * @param method - The method name to execute on the server.
65
- * @param data - The data that will be passed as an argument to the method.
66
- * Should be serializable.
67
- */
68
- invoke(method, data) {
69
- if (import.meta.hot) {
70
- return new Promise((resolve, reject) => {
71
- const handle = response => {
72
- if (response.method !== method) {
73
- return;
74
- }
75
- _a.response.unsubscribe(handle);
76
- if (response.status === 'success') {
77
- resolve(response.data);
78
- } else {
79
- reject({
80
- message: `An error occurred while exporting the video: ${response.message}`,
81
- remarks: `Method: ${method}<br>Server error: ${response.message}`,
82
- object: data,
22
+ static meta(project) {
23
+ return new ObjectMetaField(this.displayName, {
24
+ fastStart: new BoolMetaField('fast start', true),
25
+ includeAudio: new BoolMetaField('include audio', true).disable(!project.audio),
26
+ });
27
+ }
28
+ static async create(project, settings) {
29
+ return new _a(project, settings);
30
+ }
31
+ constructor(project, settings) {
32
+ this.project = project;
33
+ this.settings = settings;
34
+ }
35
+ async start() {
36
+ const options = this.settings.exporter.options;
37
+ await this.invoke('start', {
38
+ ...this.settings,
39
+ ...options,
40
+ audio: this.project.audio,
41
+ audioOffset: this.project.meta.shared.audioOffset.get() - this.settings.range[0],
42
+ });
43
+ }
44
+ async handleFrame(canvas) {
45
+ await this.invoke('handleFrame', {
46
+ data: canvas.toDataURL('image/png'),
47
+ });
48
+ }
49
+ async stop(result) {
50
+ await this.invoke('end', result);
51
+ }
52
+ async kill() {
53
+ await this.invoke('kill', {});
54
+ }
55
+ async generateAudio(assets, endFrame) {
56
+ await this.invoke('generateAudio', { assets, endFrame });
57
+ }
58
+ /**
59
+ * Remotely invoke a method on the server and wait for a response.
60
+ *
61
+ * @param method - The method name to execute on the server.
62
+ * @param data - The data that will be passed as an argument to the method.
63
+ * Should be serializable.
64
+ */
65
+ invoke(method, data) {
66
+ if (import.meta.hot) {
67
+ return new Promise((resolve, reject) => {
68
+ const handle = (response) => {
69
+ if (response.method !== method) {
70
+ return;
71
+ }
72
+ _a.response.unsubscribe(handle);
73
+ if (response.status === 'success') {
74
+ resolve(response.data);
75
+ }
76
+ else {
77
+ reject({
78
+ message: `An error occurred while exporting the video: ${response.message}`,
79
+ remarks: `Method: ${method}<br>Server error: ${response.message}`,
80
+ object: data,
81
+ });
82
+ }
83
+ };
84
+ _a.response.subscribe(handle);
85
+ import.meta.hot.send('revideo/ffmpeg', { method, data });
83
86
  });
84
- }
85
- };
86
- _a.response.subscribe(handle);
87
- import.meta.hot.send('revideo/ffmpeg', {method, data});
88
- });
89
- } else {
90
- throw new Error('FFmpegExporter can only be used locally.');
87
+ }
88
+ else {
89
+ throw new Error('FFmpegExporter can only be used locally.');
90
+ }
91
91
  }
92
- }
93
92
  }
94
93
  _a = FFmpegExporterClient;
95
94
  FFmpegExporterClient.id = '@revideo/ffmpeg';
96
95
  FFmpegExporterClient.displayName = 'Video (FFmpeg)';
97
96
  FFmpegExporterClient.response = new EventDispatcher();
98
97
  (() => {
99
- if (import.meta.hot) {
100
- import.meta.hot.on(`revideo/ffmpeg-ack`, response =>
101
- _a.response.dispatch(response),
102
- );
103
- }
98
+ if (import.meta.hot) {
99
+ import.meta.hot.on(`revideo/ffmpeg-ack`, (response) => _a.response.dispatch(response));
100
+ }
104
101
  })();
105
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRkZtcGVnRXhwb3J0ZXJDbGllbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9jbGllbnQvRkZtcGVnRXhwb3J0ZXJDbGllbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQU9BLE9BQU8sRUFDTCxhQUFhLEVBQ2IsZUFBZSxFQUVmLGVBQWUsR0FFaEIsTUFBTSxlQUFlLENBQUM7QUFrQnZCOzs7Ozs7Ozs7Ozs7Ozs7OztHQWlCRztBQUNILE1BQU0sT0FBTyxvQkFBb0I7SUFJeEIsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFnQjtRQUNqQyxPQUFPLElBQUksZUFBZSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDM0MsU0FBUyxFQUFFLElBQUksYUFBYSxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUM7WUFDaEQsWUFBWSxFQUFFLElBQUksYUFBYSxDQUFDLGVBQWUsRUFBRSxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQzVELENBQUMsT0FBTyxDQUFDLEtBQUssQ0FDZjtTQUNGLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTSxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxPQUFnQixFQUFFLFFBQTBCO1FBQ3JFLE9BQU8sSUFBSSxFQUFvQixDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUMsQ0FBQztJQUNyRCxDQUFDO0lBWUQsWUFDbUIsT0FBZ0IsRUFDaEIsUUFBMEI7UUFEMUIsWUFBTyxHQUFQLE9BQU8sQ0FBUztRQUNoQixhQUFRLEdBQVIsUUFBUSxDQUFrQjtJQUMxQyxDQUFDO0lBRUcsS0FBSyxDQUFDLEtBQUs7UUFDaEIsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsT0FBZ0MsQ0FBQztRQUN4RSxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFO1lBQ3pCLEdBQUcsSUFBSSxDQUFDLFFBQVE7WUFDaEIsR0FBRyxPQUFPO1lBQ1YsS0FBSyxFQUFFLElBQUksQ0FBQyxPQUFPLENB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
102
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRkZtcGVnRXhwb3J0ZXJDbGllbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9jbGllbnQvRkZtcGVnRXhwb3J0ZXJDbGllbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQU9BLE9BQU8sRUFDTCxhQUFhLEVBQ2IsZUFBZSxFQUVmLGVBQWUsR0FFaEIsTUFBTSxlQUFlLENBQUM7QUFrQnZCOzs7Ozs7Ozs7Ozs7Ozs7OztHQWlCRztBQUNILE1BQU0sT0FBTyxvQkFBb0I7SUFJeEIsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFnQjtRQUNqQyxPQUFPLElBQUksZUFBZSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDM0MsU0FBUyxFQUFFLElBQUksYUFBYSxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUM7WUFDaEQsWUFBWSxFQUFFLElBQUksYUFBYSxDQUFDLGVBQWUsRUFBRSxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQzVELENBQUMsT0FBTyxDQUFDLEtBQUssQ0FDZjtTQUNGLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTSxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxPQUFnQixFQUFFLFFBQTBCO1FBQ3JFLE9BQU8sSUFBSSxFQUFvQixDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUMsQ0FBQztJQUNyRCxDQUFDO0lBWUQsWUFDbUIsT0FBZ0IsRUFDaEIsUUFBMEI7UUFEMUIsWUFBTyxHQUFQLE9BQU8sQ0FBUztRQUNoQixhQUFRLEdBQVIsUUFBUSxDQUFrQjtJQUMxQyxDQUFDO0lBRUcsS0FBSyxDQUFDLEtBQUs7UUFDaEIsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsT0FBZ0MsQ0FBQztRQUN4RSxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFO1lBQ3pCLEdBQUcsSUFBSSxDQUFDLFFBQVE7WUFDaEIsR0FBRyxPQUFPO1lBQ1YsS0FBSyxFQUFFLElBQUksQ0FBQyxPQUFPLENB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
@@ -1,3 +1,3 @@
1
- declare const _default: () => import('@revideo/core').Plugin;
1
+ declare const _default: () => import("@revideo/core").Plugin;
2
2
  export default _default;
3
- //# sourceMappingURL=index.d.ts.map
3
+ //# sourceMappingURL=index.d.ts.map
@@ -1,9 +1,9 @@
1
- import {makePlugin} from '@revideo/core';
2
- import {FFmpegExporterClient} from './FFmpegExporterClient';
1
+ import { makePlugin } from '@revideo/core';
2
+ import { FFmpegExporterClient } from './FFmpegExporterClient';
3
3
  export default makePlugin({
4
- name: 'ffmpeg-plugin',
5
- exporters() {
6
- return [FFmpegExporterClient];
7
- },
4
+ name: 'ffmpeg-plugin',
5
+ exporters() {
6
+ return [FFmpegExporterClient];
7
+ },
8
8
  });
9
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9jbGllbnQvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUMsb0JBQW9CLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQztBQUU1RCxlQUFlLFVBQVUsQ0FBQztJQUN4QixJQUFJLEVBQUUsZUFBZTtJQUNyQixTQUFTO1FBQ1AsT0FBTyxDQUFDLG9CQUFvQixDQUFDLENBQUM7SUFDaEMsQ0FBQztDQUNGLENBQUMsQ0FBQyJ9
9
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9jbGllbnQvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUMsb0JBQW9CLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQztBQUU1RCxlQUFlLFVBQVUsQ0FBQztJQUN4QixJQUFJLEVBQUUsZUFBZTtJQUNyQixTQUFTO1FBQ1AsT0FBTyxDQUFDLG9CQUFvQixDQUFDLENBQUM7SUFDaEMsQ0FBQztDQUNGLENBQUMsQ0FBQyJ9
@@ -1,5 +1,5 @@
1
- import {PluginConfig} from '@revideo/vite-plugin/lib/plugins';
2
- import type {WebSocketServer} from 'vite';
1
+ import { PluginConfig } from '@revideo/vite-plugin/lib/plugins';
2
+ import type { WebSocketServer } from 'vite';
3
3
  /**
4
4
  * A simple bridge between the FFmpegExporterServer and FFmpegExporterClient.
5
5
  *
@@ -8,12 +8,12 @@ import type {WebSocketServer} from 'vite';
8
8
  * responses using a simple Promise-based API.
9
9
  */
10
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;
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
18
  }
19
- //# sourceMappingURL=FFmpegBridge.d.ts.map
19
+ //# sourceMappingURL=FFmpegBridge.d.ts.map
@@ -1,7 +1,7 @@
1
- 'use strict';
2
- Object.defineProperty(exports, '__esModule', {value: true});
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.FFmpegBridge = void 0;
4
- const FFmpegExporterServer_1 = require('./FFmpegExporterServer');
4
+ const FFmpegExporterServer_1 = require("./FFmpegExporterServer");
5
5
  /**
6
6
  * A simple bridge between the FFmpegExporterServer and FFmpegExporterClient.
7
7
  *
@@ -10,60 +10,56 @@ const FFmpegExporterServer_1 = require('./FFmpegExporterServer');
10
10
  * responses using a simple Promise-based API.
11
11
  */
12
12
  class FFmpegBridge {
13
- constructor(ws, config) {
14
- this.ws = ws;
15
- this.config = config;
16
- this.process = null;
17
- this.handleMessage = async ({method, data}) => {
18
- if (method === 'start') {
19
- try {
20
- this.process = new FFmpegExporterServer_1.FFmpegExporterServer(
21
- data,
22
- this.config,
23
- );
24
- this.respondSuccess(method, await this.process.start());
25
- } catch (e) {
26
- this.respondError(method, e?.message);
27
- }
28
- return;
29
- }
30
- if (!this.process) {
31
- this.respondError(
32
- method,
33
- 'The exporting process has not been started.',
34
- );
35
- return;
36
- }
37
- if (!(method in this.process)) {
38
- this.respondError(method, `Unknown method: "${method}".`);
39
- return;
40
- }
41
- try {
42
- this.respondSuccess(method, await this.process[method](data));
43
- } catch (e) {
44
- this.respondError(method, e?.message);
45
- }
46
- if (method === 'kill') {
13
+ constructor(ws, config) {
14
+ this.ws = ws;
15
+ this.config = config;
47
16
  this.process = null;
48
- return;
49
- }
50
- };
51
- ws.on('revideo/ffmpeg', this.handleMessage);
52
- }
53
- respondSuccess(method, data = {}) {
54
- this.ws.send('revideo/ffmpeg-ack', {
55
- status: 'success',
56
- method,
57
- data,
58
- });
59
- }
60
- respondError(method, message = 'Unknown error.') {
61
- this.ws.send('revideo/ffmpeg-ack', {
62
- status: 'error',
63
- method,
64
- message,
65
- });
66
- }
17
+ this.handleMessage = async ({ method, data }) => {
18
+ if (method === 'start') {
19
+ try {
20
+ this.process = new FFmpegExporterServer_1.FFmpegExporterServer(data, this.config);
21
+ this.respondSuccess(method, await this.process.start());
22
+ }
23
+ catch (e) {
24
+ this.respondError(method, e?.message);
25
+ }
26
+ return;
27
+ }
28
+ if (!this.process) {
29
+ this.respondError(method, 'The exporting process has not been started.');
30
+ return;
31
+ }
32
+ if (!(method in this.process)) {
33
+ this.respondError(method, `Unknown method: "${method}".`);
34
+ return;
35
+ }
36
+ try {
37
+ this.respondSuccess(method, await this.process[method](data));
38
+ }
39
+ catch (e) {
40
+ this.respondError(method, e?.message);
41
+ }
42
+ if (method === 'kill') {
43
+ this.process = null;
44
+ return;
45
+ }
46
+ };
47
+ ws.on('revideo/ffmpeg', this.handleMessage);
48
+ }
49
+ respondSuccess(method, data = {}) {
50
+ this.ws.send('revideo/ffmpeg-ack', {
51
+ status: 'success',
52
+ method,
53
+ data,
54
+ });
55
+ }
56
+ respondError(method, message = 'Unknown error.') {
57
+ this.ws.send('revideo/ffmpeg-ack', {
58
+ status: 'error',
59
+ method,
60
+ message,
61
+ });
62
+ }
67
63
  }
68
64
  exports.FFmpegBridge = FFmpegBridge;
69
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRkZtcGVnQnJpZGdlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc2VydmVyL0ZGbXBlZ0JyaWRnZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFFQSxpRUFHZ0M7QUFPaEM7Ozs7OztHQU1HO0FBQ0gsTUFBYSxZQUFZO0lBR3ZCLFlBQ21CLEVBQW1CLEVBQ25CLE1BQW9CO1FBRHBCLE9BQUUsR0FBRixFQUFFLENBQWlCO1FBQ25CLFdBQU0sR0FBTixNQUFNLENBQWM7UUFKL0IsWUFBTyxHQUFnQyxJQUFJLENBQUM7UUFTNUMsa0JBQWEsR0FBRyxLQUFLLEVBQUUsRUFBQyxNQUFNLEVBQUUsSUFBSSxFQUFpQixFQUFFLEVBQUU7WUFDL0QsSUFBSSxNQUFNLEtBQUssT0FBTyxFQUFFLENBQUM7Z0JBQ3ZCLElBQUksQ0FBQztvQkFDSCxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksMkNBQW9CLENBQ3JDLElBQThCLEVBQzlCLElBQUksQ0FBQyxNQUFNLENBQ1osQ0FBQztvQkFDRixJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sRUFBRSxNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztnQkFDMUQsQ0FBQztnQkFBQyxPQUFPLENBQU0sRUFBRSxDQUFDO29CQUNoQixJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUM7Z0JBQ3hDLENBQUM7Z0JBQ0QsT0FBTztZQUNULENBQUM7WUFFRCxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUNsQixJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSw2Q0FBNkMsQ0FBQyxDQUFDO2dCQUN6RSxPQUFPO1lBQ1QsQ0FBQztZQUVELElBQUksQ0FBQyxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztnQkFDOUIsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUUsb0JBQW9CLE1BQU0sSUFBSSxDQUFDLENBQUM7Z0JBQzFELE9BQU87WUFDVCxDQUFDO1lBRUQsSUFBSSxDQUFDO2dCQUNILElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLE1BQU8sSUFBSSxDQUFDLE9BQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBQ3pFLENBQUM7WUFBQyxPQUFPLENBQU0sRUFBRSxDQUFDO2dCQUNoQixJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUM7WUFDeEMsQ0FBQztZQUVELElBQUksTUFBTSxLQUFLLE1BQU0sRUFBRSxDQUFDO2dCQUN0QixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztnQkFDcEIsT0FBTztZQUNULENBQUM7UUFDSCxDQUFDLENBQUM7UUFyQ0EsRUFBRSxDQUFDLEVBQUUsQ0FBQyxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDOUMsQ0FBQztJQXNDTyxjQUFjLENBQUMsTUFBYyxFQUFFLE9BQVksRUFBRTtRQUNuRCxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsRUFBRTtZQUNqQyxNQUFNLEVBQUUsU0FBUztZQUNqQixNQUFNO1lBQ04sSUFBSTtTQUNMLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyxZQUFZLENBQUMsTUFBYyxFQUFFLE9BQU8sR0FBRyxnQkFBZ0I7UUFDN0QsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLEVBQUU7WUFDakMsTUFBTSxFQUFFLE9BQU87WUFDZixNQUFNO1lBQ04sT0FBTztTQUNSLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRjtBQTdERCxvQ0E2REMifQ==
65
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRkZtcGVnQnJpZGdlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc2VydmVyL0ZGbXBlZ0JyaWRnZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFFQSxpRUFHZ0M7QUFPaEM7Ozs7OztHQU1HO0FBQ0gsTUFBYSxZQUFZO0lBR3ZCLFlBQ21CLEVBQW1CLEVBQ25CLE1BQW9CO1FBRHBCLE9BQUUsR0FBRixFQUFFLENBQWlCO1FBQ25CLFdBQU0sR0FBTixNQUFNLENBQWM7UUFKL0IsWUFBTyxHQUFnQyxJQUFJLENBQUM7UUFTNUMsa0JBQWEsR0FBRyxLQUFLLEVBQUUsRUFBQyxNQUFNLEVBQUUsSUFBSSxFQUFpQixFQUFFLEVBQUU7WUFDL0QsSUFBSSxNQUFNLEtBQUssT0FBTyxFQUFFLENBQUM7Z0JBQ3ZCLElBQUksQ0FBQztvQkFDSCxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksMkNBQW9CLENBQ3JDLElBQThCLEVBQzlCLElBQUksQ0FBQyxNQUFNLENBQ1osQ0FBQztvQkFDRixJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sRUFBRSxNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztnQkFDMUQsQ0FBQztnQkFBQyxPQUFPLENBQU0sRUFBRSxDQUFDO29CQUNoQixJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUM7Z0JBQ3hDLENBQUM7Z0JBQ0QsT0FBTztZQUNULENBQUM7WUFFRCxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUNsQixJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSw2Q0FBNkMsQ0FBQyxDQUFDO2dCQUN6RSxPQUFPO1lBQ1QsQ0FBQztZQUVELElBQUksQ0FBQyxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztnQkFDOUIsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUUsb0JBQW9CLE1BQU0sSUFBSSxDQUFDLENBQUM7Z0JBQzFELE9BQU87WUFDVCxDQUFDO1lBRUQsSUFBSSxDQUFDO2dCQUNILElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLE1BQU8sSUFBSSxDQUFDLE9BQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBQ3pFLENBQUM7WUFBQyxPQUFPLENBQU0sRUFBRSxDQUFDO2dCQUNoQixJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUM7WUFDeEMsQ0FBQztZQUVELElBQUksTUFBTSxLQUFLLE1BQU0sRUFBRSxDQUFDO2dCQUN0QixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztnQkFDcEIsT0FBTztZQUNULENBQUM7UUFDSCxDQUFDLENBQUM7UUFyQ0EsRUFBRSxDQUFDLEVBQUUsQ0FBQyxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDOUMsQ0FBQztJQXNDTyxjQUFjLENBQUMsTUFBYyxFQUFFLE9BQVksRUFBRTtRQUNuRCxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsRUFBRTtZQUNqQyxNQUFNLEVBQUUsU0FBUztZQUNqQixNQUFNO1lBQ04sSUFBSTtTQUNMLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyxZQUFZLENBQUMsTUFBYyxFQUFFLE9BQU8sR0FBRyxnQkFBZ0I7UUFDN0QsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLEVBQUU7WUFDakMsTUFBTSxFQUFFLE9BQU87WUFDZixNQUFNO1lBQ04sT0FBTztTQUNSLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRjtBQTdERCxvQ0E2REMifQ==
@@ -1,54 +1,49 @@
1
- import type {
2
- AssetInfo,
3
- RendererResult,
4
- RendererSettings,
5
- } from '@revideo/core/lib/app';
6
- import type {PluginConfig} from '@revideo/vite-plugin/lib/plugins';
1
+ import type { AssetInfo, RendererResult, RendererSettings } from '@revideo/core/lib/app';
2
+ import type { PluginConfig } from '@revideo/vite-plugin/lib/plugins';
7
3
  export declare function getCurrentVersion(): Promise<any>;
8
4
  export interface FFmpegExporterSettings extends RendererSettings {
9
- audio?: string;
10
- audioOffset?: number;
11
- fastStart: boolean;
12
- includeAudio: boolean;
5
+ audio?: string;
6
+ audioOffset?: number;
7
+ fastStart: boolean;
8
+ includeAudio: boolean;
13
9
  }
14
10
  interface MediaAsset {
15
- key: string;
16
- src: string;
17
- type: 'video' | 'audio';
18
- startInVideo: number;
19
- endInVideo: number;
20
- duration: number;
21
- playbackRate: number;
22
- volume: number;
23
- trimLeftInSeconds: number;
11
+ key: string;
12
+ src: string;
13
+ type: 'video' | 'audio';
14
+ startInVideo: number;
15
+ endInVideo: number;
16
+ duration: number;
17
+ playbackRate: number;
18
+ volume: number;
19
+ trimLeftInSeconds: number;
24
20
  }
25
21
  /**
26
22
  * The server-side implementation of the FFmpeg video exporter.
27
23
  */
28
24
  export declare class FFmpegExporterServer {
29
- private readonly config;
30
- private readonly stream;
31
- private readonly command;
32
- private readonly promise;
33
- private readonly settings;
34
- private readonly jobFolder;
35
- constructor(settings: FFmpegExporterSettings, config: PluginConfig);
36
- start(): Promise<void>;
37
- handleFrame({data}: {data: string}): Promise<void>;
38
- generateAudio({
39
- assets,
40
- endFrame,
41
- }: {
42
- assets: AssetInfo[][];
43
- endFrame: number;
44
- }): Promise<void>;
45
- checkForAudioStream(asset: MediaAsset): Promise<boolean>;
46
- end(result: RendererResult): Promise<void>;
47
- kill(): Promise<void>;
48
- private prepareAudio;
49
- private mergeAudioTracks;
50
- private calculateAtempoFilters;
51
- private mergeAudioWithVideo;
25
+ private readonly config;
26
+ private readonly stream;
27
+ private readonly command;
28
+ private readonly promise;
29
+ private readonly settings;
30
+ private readonly jobFolder;
31
+ constructor(settings: FFmpegExporterSettings, config: PluginConfig);
32
+ start(): Promise<void>;
33
+ handleFrame({ data }: {
34
+ data: string;
35
+ }): Promise<void>;
36
+ generateAudio({ assets, endFrame, }: {
37
+ assets: AssetInfo[][];
38
+ endFrame: number;
39
+ }): Promise<void>;
40
+ checkForAudioStream(asset: MediaAsset): Promise<boolean>;
41
+ end(result: RendererResult): Promise<void>;
42
+ kill(): Promise<void>;
43
+ private prepareAudio;
44
+ private mergeAudioTracks;
45
+ private calculateAtempoFilters;
46
+ private mergeAudioWithVideo;
52
47
  }
53
48
  export {};
54
- //# sourceMappingURL=FFmpegExporterServer.d.ts.map
49
+ //# sourceMappingURL=FFmpegExporterServer.d.ts.map