node js ffmpeg complexfilter覆盖另一个视频

时间:2016-10-13 07:26:48

标签: node.js ffmpeg overlay

我有这个代码计划输出一个包含vid1和vid2的视频。所以我在vid1的右边添加了一个填充,并尝试使用overlay将vid2放在该空间上,而输出视频则显示右侧的vid1副本。有人可以告诉我我的代码有什么问题以及如何修复它?感谢

ffmpeg("vid1.mp4")
.input("vid2.mp4")
.complexFilter([
    "scale=300:300[rescaled]",
    {
        filter:"pad",options:{w:"600",h:"300"},
        inputs:"rescaled",outputs:"padded"
    },
    {
        filter:"overlay", options:{x:"300",y:"0"},
        inputs:["padded","vid2.mp4"],outputs:"output"
    }
], 'output')
.output("output.mp4")
.on("error",function(er){
    console.log("error occured: "+er.message);
})
.on("end",function(){
    console.log("success");
})
.run();

1 个答案:

答案 0 :(得分:0)

我在之前的项目中使用以下代码来执行相同的操作:

ffmpeg()
.input("vid1.mp4")
.input("vid2.mp4")
.complexFilter([
  '[0:v]scale=300:300[0scaled]',
  '[1:v]scale=300:300[1scaled]',
  '[0scaled]pad=600:300[0padded]',
  '[0padded][1scaled]overlay=shortest=1:x=300[output]'
])
.outputOptions([
  '-map [output]'
])
.output("output.mp4")
.on("error",function(er){
  console.log("error occured: "+er.message);
})
.on("end",function(){
  console.log("success");
})
.run();

请注意,在这种情况下,视频中的任何音频都会被忽略并删除。如果您还需要音频,则必须添加使用[0:a]和[1:a]通道作为输入的复杂混音滤波器。

outputOptions列表中的-map参数告诉ffmpeg项目将变量输出映射到output.mp4文件中。如果需要音频,则必须将另一个-map参数添加到outputOptions以及音频。