@revideo/renderer 0.3.5-white.969 → 0.3.5

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 (42) hide show
  1. package/lib/server/render-video.d.ts.map +1 -1
  2. package/lib/server/render-video.js +1 -7
  3. package/lib/server/tsconfig.tsbuildinfo +1 -1
  4. package/package.json +4 -4
  5. package/lib/client/FFmpegExporterClient.d.ts +0 -46
  6. package/lib/client/FFmpegExporterClient.d.ts.map +0 -1
  7. package/lib/client/FFmpegExporterClient.js +0 -118
  8. package/lib/client/ffpmeg.d.ts +0 -3
  9. package/lib/client/ffpmeg.d.ts.map +0 -1
  10. package/lib/client/ffpmeg.js +0 -9
  11. package/lib/client/index.d.ts +0 -3
  12. package/lib/client/index.d.ts.map +0 -1
  13. package/lib/client/index.js +0 -9
  14. package/lib/index.js +0 -5
  15. package/lib/index.js.map +0 -1
  16. package/lib/server/RendererPlugin.d.ts +0 -3
  17. package/lib/server/RendererPlugin.d.ts.map +0 -1
  18. package/lib/server/RendererPlugin.js +0 -50
  19. package/lib/server/ffmpeg/FFmpegBridge.d.ts +0 -22
  20. package/lib/server/ffmpeg/FFmpegBridge.d.ts.map +0 -1
  21. package/lib/server/ffmpeg/FFmpegBridge.js +0 -92
  22. package/lib/server/ffmpeg/FFmpegExporterServer.d.ts +0 -39
  23. package/lib/server/ffmpeg/FFmpegExporterServer.d.ts.map +0 -1
  24. package/lib/server/ffmpeg/FFmpegExporterServer.js +0 -264
  25. package/lib/server/ffmpeg/FFmpegPlugin.d.ts +0 -3
  26. package/lib/server/ffmpeg/FFmpegPlugin.d.ts.map +0 -1
  27. package/lib/server/ffmpeg/FFmpegPlugin.js +0 -23
  28. package/lib/server/ffmpeg/ImageStream.d.ts +0 -10
  29. package/lib/server/ffmpeg/ImageStream.d.ts.map +0 -1
  30. package/lib/server/ffmpeg/ImageStream.js +0 -25
  31. package/lib/server/ffmpeg/VideoFrameExtractor.d.ts +0 -41
  32. package/lib/server/ffmpeg/VideoFrameExtractor.d.ts.map +0 -1
  33. package/lib/server/ffmpeg/VideoFrameExtractor.js +0 -148
  34. package/lib/server/ffmpeg/utils.d.ts +0 -8
  35. package/lib/server/ffmpeg/utils.d.ts.map +0 -1
  36. package/lib/server/ffmpeg/utils.js +0 -141
  37. package/lib/server/renderVideo.d.ts +0 -10
  38. package/lib/server/renderVideo.d.ts.map +0 -1
  39. package/lib/server/renderVideo.js +0 -124
  40. package/lib/server/utils.d.ts +0 -3
  41. package/lib/server/utils.d.ts.map +0 -1
  42. package/lib/server/utils.js +0 -20
@@ -1,141 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getSampleRate = exports.checkForAudioStream = exports.mergeAudioWithVideo = exports.doesFileExist = exports.getVideoDuration = exports.createSilentAudioFile = exports.concatenateMedia = void 0;
4
- const path = require("path");
5
- const fs = require("fs");
6
- const os = require("os");
7
- const ffmpeg = require("fluent-ffmpeg");
8
- const uuid_1 = require("uuid");
9
- async function concatenateMedia(files, outputFile) {
10
- const tempFile = path.join(os.tmpdir(), `${(0, uuid_1.v4)()}.txt`);
11
- const fileContent = files.map(file => `file '${file.replace(/'/g, "\\'")}'`).join('\n');
12
- await fs.promises.writeFile(tempFile, fileContent);
13
- return new Promise((resolve, reject) => {
14
- const ffmpegCommand = ffmpeg();
15
- ffmpegCommand.input(tempFile)
16
- .inputOptions([
17
- '-f concat',
18
- '-safe 0'
19
- ])
20
- .outputOptions([
21
- '-c copy'
22
- ])
23
- .on('error', (err) => {
24
- console.error('Error:', err);
25
- fs.promises.unlink(tempFile).catch(console.error);
26
- reject(err); // Reject the promise on error
27
- })
28
- .on('end', () => {
29
- console.log('Concatenation finished.');
30
- fs.promises.unlink(tempFile).catch(console.error);
31
- resolve(); // Resolve the promise on successful completion
32
- })
33
- .save(outputFile);
34
- });
35
- }
36
- exports.concatenateMedia = concatenateMedia;
37
- async function createSilentAudioFile(filePath, duration) {
38
- return new Promise((resolve, reject) => {
39
- ffmpeg()
40
- .addInput('anullsrc')
41
- .audioChannels(2)
42
- .audioFrequency(48000)
43
- .outputOptions(['-t', duration.toString(), '-acodec', 'aac'])
44
- .on('end', () => {
45
- console.log(`Silent audio file created at ${filePath}`);
46
- resolve(filePath);
47
- })
48
- .on('error', (err) => {
49
- console.error('Error creating silent audio file:', err);
50
- reject(err);
51
- })
52
- .save(filePath);
53
- });
54
- }
55
- exports.createSilentAudioFile = createSilentAudioFile;
56
- async function getVideoDuration(filePath) {
57
- return new Promise((resolve, reject) => {
58
- ffmpeg.ffprobe(filePath, (err, metadata) => {
59
- if (err) {
60
- reject(err);
61
- return;
62
- }
63
- const duration = metadata.format.duration;
64
- if (duration) {
65
- resolve(duration);
66
- }
67
- else {
68
- reject(new Error('Could not determine video duration.'));
69
- }
70
- });
71
- });
72
- }
73
- exports.getVideoDuration = getVideoDuration;
74
- async function doesFileExist(filePath) {
75
- try {
76
- await fs.promises.access(filePath, fs.constants.F_OK);
77
- return true;
78
- }
79
- catch {
80
- return false;
81
- }
82
- }
83
- exports.doesFileExist = doesFileExist;
84
- async function mergeAudioWithVideo(audioPath, videoPath, outputPath) {
85
- return new Promise((resolve, reject) => {
86
- ffmpeg()
87
- .input(videoPath)
88
- .input(audioPath)
89
- .outputOptions([
90
- '-c:v',
91
- 'copy',
92
- '-c:a',
93
- 'aac',
94
- '-strict',
95
- 'experimental',
96
- ])
97
- .on('end', () => {
98
- resolve();
99
- console.log(`\nRendered successfully! Video saved to: ${outputPath}`);
100
- })
101
- .on('error', err => {
102
- console.error(`Error merging video and audio: ${err.message}`);
103
- reject(err);
104
- })
105
- .save(outputPath);
106
- });
107
- }
108
- exports.mergeAudioWithVideo = mergeAudioWithVideo;
109
- async function checkForAudioStream(file) {
110
- return new Promise((resolve, reject) => {
111
- ffmpeg.ffprobe(file, (err, metadata) => {
112
- if (err) {
113
- console.error(`error checking for audioStream for file ${file}`, err);
114
- reject(err);
115
- return;
116
- }
117
- const audioStreams = metadata.streams.filter(s => s.codec_type === 'audio');
118
- resolve(audioStreams.length > 0);
119
- });
120
- });
121
- }
122
- exports.checkForAudioStream = checkForAudioStream;
123
- async function getSampleRate(filePath) {
124
- return new Promise((resolve, reject) => {
125
- ffmpeg.ffprobe(filePath, (err, metadata) => {
126
- if (err) {
127
- reject(err);
128
- return;
129
- }
130
- const audioStream = metadata.streams.find(s => s.codec_type === 'audio');
131
- if (audioStream && audioStream.sample_rate) {
132
- resolve(audioStream.sample_rate);
133
- }
134
- else {
135
- reject(new Error('No audio stream found'));
136
- }
137
- });
138
- });
139
- }
140
- exports.getSampleRate = getSampleRate;
141
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zZXJ2ZXIvZmZtcGVnL3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDZCQUE2QjtBQUM3Qix5QkFBeUI7QUFDekIseUJBQXlCO0FBQ3pCLHdDQUF3QztBQUN4QywrQkFBb0M7QUFHN0IsS0FBSyxVQUFVLGdCQUFnQixDQUFDLEtBQWUsRUFBRSxVQUFrQjtJQUN0RSxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUUsRUFBRSxHQUFHLElBQUEsU0FBTSxHQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQzNELE1BQU0sV0FBVyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxTQUFTLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDeEYsTUFBTSxFQUFFLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFFbkQsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRTtRQUNyQyxNQUFNLGFBQWEsR0FBRyxNQUFNLEVBQUUsQ0FBQztRQUUvQixhQUFhLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQzthQUMxQixZQUFZLENBQUM7WUFDWixXQUFXO1lBQ1gsU0FBUztTQUNWLENBQUM7YUFDRCxhQUFhLENBQUM7WUFDYixTQUFTO1NBQ1YsQ0FBQzthQUNELEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRTtZQUNuQixPQUFPLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsQ0FBQztZQUM3QixFQUFFLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ2xELE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLDhCQUE4QjtRQUM3QyxDQUFDLENBQUM7YUFDRCxFQUFFLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRTtZQUNkLE9BQU8sQ0FBQyxHQUFHLENBQUMseUJBQXlCLENBQUMsQ0FBQztZQUN2QyxFQUFFLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ2xELE9BQU8sRUFBRSxDQUFDLENBQUMsK0NBQStDO1FBQzVELENBQUMsQ0FBQzthQUNELElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUN0QixDQUFDLENBQUMsQ0FBQztBQUNMLENBQUM7QUE1QkgsNENBNEJHO0FBR0ksS0FBSyxVQUFVLHFCQUFxQixDQUFDLFFBQWdCLEVBQUUsUUFBZ0I7SUFDMUUsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRTtRQUNyQyxNQUFNLEVBQUU7YUFDTCxRQUFRLENBQUMsVUFBVSxDQUFDO2FBQ3BCLGFBQWEsQ0FBQyxDQUFDLENBQUM7YUFDaEIsY0FBYyxDQUFDLEtBQUssQ0FBQzthQUNyQixhQUFhLENBQUMsQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLFFBQVEsRUFBRSxFQUFFLFNBQVMsRUFBRSxLQUFLLENBQUMsQ0FBQzthQUM1RCxFQUFFLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRTtZQUNkLE9BQU8sQ0FBQyxHQUFHLENBQUMsZ0NBQWdDLFFBQVEsRUFBRSxDQUFDLENBQUM7WUFDeEQsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3BCLENBQUMsQ0FBQzthQUNELEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRTtZQUNuQixPQUFPLENBQUMsS0FBSyxDQUFDLG1DQUFtQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQ3hELE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNkLENBQUMsQ0FBQzthQUNELElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNwQixDQUFDLENBQUMsQ0FBQztBQUNMLENBQUM7QUFqQkgsc0RBaUJHO0FBRUksS0FBSyxVQUFVLGdCQUFnQixDQUFDLFFBQWdCO0lBQ25ELE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7UUFDckMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQyxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUU7WUFDekMsSUFBSSxHQUFHLEVBQUUsQ0FBQztnQkFDUixNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ1osT0FBTztZQUNULENBQUM7WUFDRCxNQUFNLFFBQVEsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQztZQUMxQyxJQUFJLFFBQVEsRUFBRSxDQUFDO2dCQUNiLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUNwQixDQUFDO2lCQUFNLENBQUM7Z0JBQ04sTUFBTSxDQUFDLElBQUksS0FBSyxDQUFDLHFDQUFxQyxDQUFDLENBQUMsQ0FBQztZQUMzRCxDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUM7QUFmSCw0Q0FlRztBQUVJLEtBQUssVUFBVSxhQUFhLENBQUMsUUFBZ0I7SUFDaEQsSUFBSSxDQUFDO1FBQ0gsTUFBTSxFQUFFLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN0RCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFBQyxNQUFNLENBQUM7UUFDUCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7QUFDSCxDQUFDO0FBUEgsc0NBT0c7QUFFSSxLQUFLLFVBQVUsbUJBQW1CLENBQ3JDLFNBQWlCLEVBQ2pCLFNBQWlCLEVBQ2pCLFVBQWtCO0lBRWxCLE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7UUFDckMsTUFBTSxFQUFFO2FBQ0wsS0FBSyxDQUFDLFNBQVMsQ0FBQzthQUNoQixLQUFLLENBQUMsU0FBUyxDQUFDO2FBQ2hCLGFBQWEsQ0FBQztZQUNiLE1BQU07WUFDTixNQUFNO1lBQ04sTUFBTTtZQUNOLEtBQUs7WUFDTCxTQUFTO1lBQ1QsY0FBYztTQUNmLENBQUM7YUFDRCxFQUFFLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRTtZQUNkLE9BQU8sRUFBRSxDQUFDO1lBQ1YsT0FBTyxDQUFDLEdBQUcsQ0FDVCw0Q0FBNEMsVUFBVSxFQUFFLENBQ3pELENBQUM7UUFDSixDQUFDLENBQUM7YUFDRCxFQUFFLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxFQUFFO1lBQ2pCLE9BQU8sQ0FBQyxLQUFLLENBQUMsa0NBQWtDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO1lBQy9ELE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNkLENBQUMsQ0FBQzthQUNELElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUN0QixDQUFDLENBQUMsQ0FBQztBQUNMLENBQUM7QUE3Qkgsa0RBNkJHO0FBRUksS0FBSyxVQUFVLG1CQUFtQixDQUFDLElBQVk7SUFDbEQsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRTtRQUNyQyxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRTtZQUNyQyxJQUFJLEdBQUcsRUFBRSxDQUFDO2dCQUNSLE9BQU8sQ0FBQyxLQUFLLENBQ1gsMkNBQTJDLElBQUksRUFBRSxFQUNqRCxHQUFHLENBQ0osQ0FBQztnQkFDRixNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ1osT0FBTztZQUNULENBQUM7WUFFRCxNQUFNLFlBQVksR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FDMUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsVUFBVSxLQUFLLE9BQU8sQ0FDOUIsQ0FBQztZQUNGLE9BQU8sQ0FBQyxZQUFZLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ25DLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDO0FBbEJILGtEQWtCRztBQUVJLEtBQUssVUFBVSxhQUFhLENBQUMsUUFBZ0I7SUFDaEQsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRTtRQUNyQyxNQUFNLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRTtZQUN6QyxJQUFJLEdBQUcsRUFBRSxDQUFDO2dCQUNSLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDWixPQUFPO1lBQ1QsQ0FBQztZQUNELE1BQU0sV0FBVyxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFVBQVUsS0FBSyxPQUFPLENBQUMsQ0FBQztZQUN6RSxJQUFJLFdBQVcsSUFBSSxXQUFXLENBQUMsV0FBVyxFQUFFLENBQUM7Z0JBQzNDLE9BQU8sQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDbkMsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLE1BQU0sQ0FBQyxJQUFJLEtBQUssQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDLENBQUM7WUFDN0MsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDO0FBZkgsc0NBZUcifQ==
@@ -1,10 +0,0 @@
1
- import { BrowserLaunchArgumentOptions } from 'puppeteer';
2
- interface RenderVideoSettings {
3
- name?: string;
4
- range?: [number, number];
5
- puppeteer?: BrowserLaunchArgumentOptions;
6
- workers?: number;
7
- }
8
- export declare const renderVideo: (configFile: string, params?: Record<string, unknown>, settings?: RenderVideoSettings) => Promise<void>;
9
- export {};
10
- //# sourceMappingURL=renderVideo.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"renderVideo.d.ts","sourceRoot":"","sources":["../../server/renderVideo.ts"],"names":[],"mappings":"AAUA,OAAkB,EAAU,4BAA4B,EAAC,MAAM,WAAW,CAAC;AAiB3E,UAAU,mBAAmB;IAE3B,IAAI,CAAC,EAAE,MAAM,CAAC;IAGd,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAEzB,SAAS,CAAC,EAAE,4BAA4B,CAAC;IACzC,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,eAAO,MAAM,WAAW,eACV,MAAM,WACT,OAAO,MAAM,EAAE,OAAO,CAAC,aACtB,mBAAmB,kBAmE9B,CAAC"}
@@ -1,124 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.renderVideo = void 0;
4
- const ffmpeg_1 = require("@revideo/ffmpeg");
5
- const fs = require("fs");
6
- const os = require("os");
7
- const path = require("path");
8
- const puppeteer_1 = require("puppeteer");
9
- const readline = require("readline");
10
- const uuid_1 = require("uuid");
11
- const vite_1 = require("vite");
12
- const RendererPlugin_1 = require("./RendererPlugin");
13
- function buildUrl(port, fileName, workerId, totalNumOfWorkers, range = [0, Infinity], hiddenFolderId) {
14
- return `http://localhost:${port}/render?fileName=${fileName}&workerId=${workerId}&totalNumOfWorkers=${totalNumOfWorkers}&startInSeconds=${range[0]}&endInSeconds=${range[1]}&hiddenFolderId=${hiddenFolderId}`;
15
- }
16
- const renderVideo = async (configFile, params, settings = {}) => {
17
- console.log('Rendering...');
18
- const resolvedConfigPath = path.resolve(process.cwd(), configFile);
19
- const projectName = settings.name ?? 'project';
20
- const hiddenFolderId = (0, uuid_1.v4)();
21
- const numOfWorkers = settings.workers ?? 1;
22
- const renderPromises = [];
23
- for (let i = 0; i < numOfWorkers; i++) {
24
- const port = 9000 + i;
25
- renderPromises.push(initBrowserAndServer(port, resolvedConfigPath, params, settings.puppeteer).then(({ browser, server }) => {
26
- const url = buildUrl(port, `${projectName}-${i}`, i, numOfWorkers, settings.range, hiddenFolderId);
27
- return renderVideoOnPage(browser, server, url);
28
- }));
29
- }
30
- await Promise.all(renderPromises);
31
- const audioFiles = [];
32
- const videoFiles = [];
33
- for (let i = 0; i < numOfWorkers; i++) {
34
- const videoFilePath = `${os.tmpdir()}/revideo-${projectName}-${i}-${hiddenFolderId}/visuals.mp4`;
35
- const audioFilePath = `${os.tmpdir()}/revideo-${projectName}-${i}-${hiddenFolderId}/audio.wav`;
36
- if (!(await (0, ffmpeg_1.doesFileExist)(audioFilePath))) {
37
- const videoDuration = await (0, ffmpeg_1.getVideoDuration)(videoFilePath);
38
- await (0, ffmpeg_1.createSilentAudioFile)(audioFilePath, videoDuration);
39
- }
40
- videoFiles.push(videoFilePath);
41
- audioFiles.push(audioFilePath);
42
- }
43
- await (0, ffmpeg_1.concatenateMedia)(videoFiles, path.join(process.cwd(), `output/${projectName}-visuals.mp4`));
44
- await (0, ffmpeg_1.concatenateMedia)(audioFiles, path.join(process.cwd(), `output/${projectName}-audio.wav`));
45
- await (0, ffmpeg_1.mergeAudioWithVideo)(path.join(process.cwd(), `output/${projectName}-audio.wav`), path.join(process.cwd(), `output/${projectName}-visuals.mp4`), path.join(process.cwd(), `output/${projectName}.mp4`));
46
- console.log(`\nRendered successfully! Video saved to: ${path.join(process.cwd(), `output/${projectName}.mp4`)}`);
47
- await cleanup(projectName, numOfWorkers, hiddenFolderId);
48
- };
49
- exports.renderVideo = renderVideo;
50
- async function initBrowserAndServer(fixedPort, resolvedConfigPath, params, puppeteerOptions) {
51
- const [browser, server] = await Promise.all([
52
- puppeteer_1.default.launch({ headless: true, ...puppeteerOptions }),
53
- (0, vite_1.createServer)({
54
- configFile: resolvedConfigPath,
55
- server: {
56
- port: fixedPort,
57
- },
58
- plugins: [(0, RendererPlugin_1.rendererPlugin)(params)],
59
- }).then(server => server.listen()),
60
- ]);
61
- if (!server.httpServer) {
62
- throw new Error('HTTP server is not initialized');
63
- }
64
- const address = server.httpServer.address();
65
- const port = address && typeof address === 'object' ? address.port : null;
66
- if (port === null) {
67
- throw new Error('Server address is null');
68
- }
69
- return { browser, server, port };
70
- }
71
- async function renderVideoOnPage(browser, server, url) {
72
- const page = await browser.newPage();
73
- if (!server.httpServer) {
74
- throw new Error('HTTP server is not initialized');
75
- }
76
- const address = server.httpServer.address();
77
- const port = address && typeof address === 'object' ? address.port : null;
78
- if (port === null) {
79
- throw new Error('Server address is null');
80
- }
81
- // Attach logs from puppeteer to the console
82
- page.on('console', msg => {
83
- for (let i = 0; i < msg.args().length; ++i) {
84
- console.log(`${port}: ${msg.args()[i]}`);
85
- }
86
- });
87
- page.exposeFunction('logProgress', (progress) => {
88
- const percentage = Math.floor(progress * 100);
89
- const barLength = 20;
90
- const filledLength = Math.floor((percentage / 100) * barLength);
91
- const bar = '█'.repeat(filledLength) + '-'.repeat(barLength - filledLength);
92
- const consoleLine = process.stdout.rows + port - 9000;
93
- readline.cursorTo(process.stdout, 0, consoleLine);
94
- readline.clearLine(process.stdout, 0);
95
- process.stdout.write(`Progress for worker on port ${port}: [${bar}] ${percentage}%`);
96
- });
97
- const renderingComplete = new Promise((resolve, reject) => {
98
- page.exposeFunction('onRenderComplete', async () => {
99
- await Promise.all([browser.close(), server.close()]);
100
- resolve();
101
- });
102
- page.exposeFunction('onRenderFailed', async (errorMessage) => {
103
- await Promise.all([browser.close(), server.close()]);
104
- console.error('Rendering failed:', errorMessage);
105
- reject(new Error(errorMessage));
106
- });
107
- });
108
- await page.goto(url);
109
- return renderingComplete;
110
- }
111
- async function cleanup(projectName, numOfWorkers, hiddenFolderId) {
112
- const cleanupFolders = [];
113
- const cleanupFiles = [];
114
- for (let i = 0; i < numOfWorkers; i++) {
115
- cleanupFolders.push(`${os.tmpdir()}/revideo-${projectName}-${i}-${hiddenFolderId}`);
116
- cleanupFiles.push(path.join(process.cwd(), `output/${projectName}-${i}.mp4`));
117
- }
118
- cleanupFiles.push(path.join(process.cwd(), `output/${projectName}-audio.wav`));
119
- cleanupFiles.push(path.join(process.cwd(), `output/${projectName}-visuals.mp4`));
120
- const folderCleanupPromises = cleanupFolders.map(folder => fs.promises.rm(folder, { recursive: true, force: true }).catch(() => { }));
121
- const fileCleanupPromises = cleanupFiles.map(file => fs.promises.unlink(file).catch(() => { }));
122
- await Promise.all([...folderCleanupPromises, ...fileCleanupPromises]);
123
- }
124
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVuZGVyVmlkZW8uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zZXJ2ZXIvcmVuZGVyVmlkZW8udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNENBTXlCO0FBQ3pCLHlCQUF5QjtBQUN6Qix5QkFBeUI7QUFDekIsNkJBQTZCO0FBQzdCLHlDQUEyRTtBQUMzRSxxQ0FBcUM7QUFDckMsK0JBQWtDO0FBQ2xDLCtCQUFpRDtBQUNqRCxxREFBZ0Q7QUFFaEQsU0FBUyxRQUFRLENBQ2YsSUFBWSxFQUNaLFFBQWdCLEVBQ2hCLFFBQWdCLEVBQ2hCLGlCQUF5QixFQUN6QixRQUEwQixDQUFDLENBQUMsRUFBRSxRQUFRLENBQUMsRUFDdkMsY0FBc0I7SUFFdEIsT0FBTyxvQkFBb0IsSUFBSSxvQkFBb0IsUUFBUSxhQUFhLFFBQVEsc0JBQXNCLGlCQUFpQixtQkFBbUIsS0FBSyxDQUFDLENBQUMsQ0FBQyxpQkFBaUIsS0FBSyxDQUFDLENBQUMsQ0FBQyxtQkFBbUIsY0FBYyxFQUFFLENBQUM7QUFDak4sQ0FBQztBQWFNLE1BQU0sV0FBVyxHQUFHLEtBQUssRUFDOUIsVUFBa0IsRUFDbEIsTUFBZ0MsRUFDaEMsV0FBZ0MsRUFBRSxFQUNsQyxFQUFFO0lBQ0YsT0FBTyxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUU1QixNQUFNLGtCQUFrQixHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0lBQ25FLE1BQU0sV0FBVyxHQUFHLFFBQVEsQ0FBQyxJQUFJLElBQUksU0FBUyxDQUFDO0lBQy9DLE1BQU0sY0FBYyxHQUFHLElBQUEsU0FBTSxHQUFFLENBQUM7SUFFaEMsTUFBTSxZQUFZLEdBQUcsUUFBUSxDQUFDLE9BQU8sSUFBSSxDQUFDLENBQUM7SUFDM0MsTUFBTSxjQUFjLEdBQUcsRUFBRSxDQUFDO0lBRTFCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxF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
@@ -1,3 +0,0 @@
1
- export declare function trackProgress(id: number, progress: number): void;
2
- export declare function printProgress(): void;
3
- //# sourceMappingURL=utils.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../server/utils.ts"],"names":[],"mappings":"AAEA,wBAAgB,aAAa,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,QAEzD;AAED,wBAAgB,aAAa,SAW5B"}
@@ -1,20 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.printProgress = exports.trackProgress = void 0;
4
- const progressTracker = new Map();
5
- function trackProgress(id, progress) {
6
- progressTracker.set(id, progress);
7
- }
8
- exports.trackProgress = trackProgress;
9
- function printProgress() {
10
- let line = '';
11
- for (const [key, value] of progressTracker.entries()) {
12
- line += `Progress on worker ${key}: ${(value * 100).toFixed(0)}% `;
13
- }
14
- if (line === '') {
15
- return;
16
- }
17
- console.log(line);
18
- }
19
- exports.printProgress = printProgress;
20
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zZXJ2ZXIvdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsTUFBTSxlQUFlLEdBQUcsSUFBSSxHQUFHLEVBQWtCLENBQUM7QUFFbEQsU0FBZ0IsYUFBYSxDQUFDLEVBQVUsRUFBRSxRQUFnQjtJQUN4RCxlQUFlLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxRQUFRLENBQUMsQ0FBQztBQUNwQyxDQUFDO0FBRkQsc0NBRUM7QUFFRCxTQUFnQixhQUFhO0lBQzNCLElBQUksSUFBSSxHQUFHLEVBQUUsQ0FBQztJQUNkLEtBQUssTUFBTSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsSUFBSSxlQUFlLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQztRQUNyRCxJQUFJLElBQUksc0JBQXNCLEdBQUcsS0FBSyxDQUFDLEtBQUssR0FBRyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUNyRSxDQUFDO0lBRUQsSUFBSSxJQUFJLEtBQUssRUFBRSxFQUFFLENBQUM7UUFDaEIsT0FBTztJQUNULENBQUM7SUFFRCxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3BCLENBQUM7QUFYRCxzQ0FXQyJ9