How to use node-fluent-ffmpeg to split a large video by fixed size to small videos?
Here are some tips questions
I split the video file by stream ,but the file could be read.
const path = require('path');
const fs = require('fs');
const { Duplex, Writable ,Transform} = require('stream');
const ffmpeg = require('fluent-ffmpeg');
const inputFile = './data/test.mp4';
const glob = require('glob')
const maxPieceSize = 1024 * 1024 * 100;
const ext = '.mp4';
const tempext = '.temp.mp4';
const readStream = fs.createReadStream(inputFile);
async function split(readStream){
let currPieceNumber = 0;
let currPieceSize = 0;
let writeStream = fs.createWriteStream(`./split/${currPieceNumber}${tempext}`);
const writable = new Writable({
write: (chunk, encoding, callback) => {
if(chunk.length+ currPieceSize >= maxPieceSize){
writeStream.end()
currPieceNumber++
currPieceSize = 0
writeStream = fs.createWriteStream(`./split/${currPieceNumber}${tempext}`);
}
currPieceSize+= chunk.length
writeStream.write(chunk)
callback()
},
});
readStream.pipe(writable).on('unpipe',()=>{
const files= glob.sync('./split/**.mp4')
// files.forEach(file=>{
// const readStream = fs.createReadStream(file);
// const writeStream = fs.createWriteStream(`./split/${currPieceNumber}${ext}`);
// ffmpeg().input(readStream).outputOptions(['-c copy']).output(writeStream)
// .on('error')
// .on('end',()=>{
// }).run()
// })
});
}
split(readStream);