1

I am trying to concat multiple videos of different extensions with ffmpeg-fluent npm package but I am not getting output. I shared my code below.

const express = require("express");
const multer = require("multer");
const fluent_ffmpeg = require("fluent-ffmpeg");
const mergedVideo = fluent_ffmpeg();
const app = express();
const fs = require("fs");
const path = require("path");
const ffmpeg = require('@ffmpeg-installer/ffmpeg').path;
const ffprobe = require('@ffprobe-installer/ffprobe').path;

mergedVideo.setFfmpegPath(ffmpeg);
mergedVideo.setFfprobePath(ffprobe);

const PORT = process.env.PORT || 3000;

var dir = "public";
var subDirectory = "public/uploads";

app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(express.static(path.join(__dirname,"public")));

if (!fs.existsSync(dir)) {
  fs.mkdirSync(dir);
  fs.mkdirSync(subDirectory);
}

const storage = multer.diskStorage({
  destination: function (req, file, cb) {
    cb(null, "public/uploads");
  },
  filename: function (req, file, cb) {
    cb(
      null,
      file.fieldname + "-" + Date.now() + path.extname(file.originalname)
    );
  }
});

var upload = multer({ storage: storage });

app.post('/merge',upload.any(),(req,res) => {
   
    let file_list = [];
    let str_command = "";
    
    req.files.forEach((element)=>{
        //file_list.push("-i "+"./"+element.path);
        file_list.push("./"+element.path);
    });
    
    for(let i = 0;i<file_list.length;i++){
      str_command +=`[${i}:v][${i}:a]`;
    }
   
    filter_option = `${str_command} concat=n=${file_list.length}:v=1:a=1 [outv] [outa]`;
   
    output_option = ['-map [outv]','-map [outa]'];
   
    let chainedInputs = file_list.reduce((result, inputItem) => result.addInput(inputItem), mergedVideo);
  
    chainedInputs
    .complexFilter([filter_option])
    .outputOption(output_option)
    .on('error', function(err) {
      console.log("Error:",err.message);
    })
    .on('start', function() {
      console.log('Merging...');
    })
    .on('progress', function(progress) {
      // Progress goes here
      console.log(progress);
    })
    .on('end', function() {
      console.log(output_file + ' merged.');
    })
    .save('output.mp4');
});

app.get("/", (req, res) => {
  res.sendFile(__dirname + "/index.html");
});

app.listen(PORT, () => {
  console.log(`App is listening on Port ${PORT}`);
});

The error I am getting in Terminal :

App is listening on Port 3000
Merging...
Error: ffmpeg exited with code 1: Error reinitializing filters!
Failed to inject frame into filter network: Invalid argument
Error while processing the decoded data for stream #2:0
Conversion failed!

Here is my folder structure:

Folder Structure

0 Answers0