Передайте несколько входных файлов в ffmpeg, используя один поток в Node - PullRequest
1 голос
/ 01 мая 2019

Я пытаюсь использовать ffmpeg для объединения нескольких видеофайлов. Каждый файл имеет одинаковую кодировку, и их просто нужно сшить вместе. У меня проблема в том, что я хотел бы сделать это с использованием потоков, но ffmpeg поддерживает только один входной поток на команду.

Поскольку файлы имеют одинаковую кодировку, я подумал, что могу объединить их в один поток и передать их в качестве входных данных для ffmpeg.

const CombinedStream = require("combined-stream")
const ffmpeg = require("fluent-ffmpeg")
const AWS = require("aws-sdk")
const s3 = new AWS.S3()

const merge = ({ videos }) => {
  const combinedStream = CombinedStream.create();

  videos //I take my videos from S3 and merge them
    .map((video => {
      return s3
        .getObject({
          Bucket: "myAWSBucketName",
          Key: video
        })
        .createReadStream()
    }))
    .forEach(stream => {
      combinedStream.append(stream)
    })

  ffmpeg()
    .input(combinedStream)
    .save("/tmp/file.mp4")
}

merge({ videos: ["video1.mp4", "video2.mp4"]})

Я надеялся, что ffmpeg сможет прочитать файлы из одного потока и вывести их вместе, но вместо этого я получил эту ошибку:

Error: ffmpeg exited with code 1: pipe:0: Invalid data found when processing input
Cannot determine format of input stream 0:0 after EOF
Error marking filters as finished
Conversion failed!

Кто-нибудь может мне помочь?

...