mirror of
https://github.com/DeNNiiInc/Web-Page-Performance-Test.git
synced 2026-04-18 12:05:59 +00:00
46 lines
1.3 KiB
JavaScript
46 lines
1.3 KiB
JavaScript
const ffmpeg = require('fluent-ffmpeg');
|
|
const fs = require('fs');
|
|
|
|
/**
|
|
* Stitches two videos side-by-side.
|
|
* @param {string} video1 Path to first video
|
|
* @param {string} video2 Path to second video
|
|
* @param {string} outputPath Path to save output
|
|
* @returns {Promise<string>}
|
|
*/
|
|
function stitchVideos(video1, video2, outputPath) {
|
|
return new Promise((resolve, reject) => {
|
|
if (!fs.existsSync(video1) || !fs.existsSync(video2)) {
|
|
return reject(new Error('One or both input videos not found'));
|
|
}
|
|
|
|
ffmpeg()
|
|
.input(video1)
|
|
.input(video2)
|
|
.complexFilter([
|
|
{
|
|
filter: 'hstack',
|
|
options: { inputs: 2 },
|
|
outputs: 'v'
|
|
}
|
|
])
|
|
.map('v') // Map the video stream from filter
|
|
// We assume no audio for speed tests usually, or we ignore it
|
|
.outputOptions([
|
|
'-c:v libx264',
|
|
'-crf 23',
|
|
'-preset fast'
|
|
])
|
|
.save(outputPath)
|
|
.on('end', () => {
|
|
resolve(outputPath);
|
|
})
|
|
.on('error', (err) => {
|
|
console.error('FFmpeg error:', err);
|
|
reject(err);
|
|
});
|
|
});
|
|
}
|
|
|
|
module.exports = { stitchVideos };
|