使用Node中的单个流将多个输入文件传递到ffmpeg

时间:2019-05-01 12:37:21

标签: node.js ffmpeg stream node-streams

我正在尝试使用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!

有人可以帮助我吗?

0 个答案:

没有答案