1

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);
  
radiorz
  • 1,459
  • 4
  • 18
  • 36

0 Answers0