我使用 fluent-ffmpeg 从图像制作 3 个视频,然后为它们添加音频,然后将它们与具有自己的音频的普通视频合并,但出现了输入板错误。
如果我向普通视频中添加音频,它可以工作,但我怎样才能保留它的音频并将它们全部合并而不会出现输入板错误?
所以我有一个片段数组,可以是图像或视频,在我们的例子中,我们有 3 个图像片段和 1 个普通视频片段。在这里,我使用 loop() 从具有动态持续时间的图像创建视频。
let ffmpegInstance = ffmpeg(
`./images/images-with-same-size/${fragment.filename}`
);
if (fragment.duration && fragment.type === "image") {
ffmpegInstance.loop(fragment?.duration);
}
if (fragment.type === "image") {
ffmpegInstance
.addInput("./audio/audio.mp3")
.inputOptions(
"-ss",
time,
"-to",
time + fragment.duration,
"-async",
"1"
);
time = time + fragment.duration;
console.log("time:", time);
}
ffmpegInstance
.videoCodec("libx264") // Codec from api
.videoBitrate("12000k") // Video Quality
.videoFilters([
{
filter: "fade",
options: "in:0:15",
},
]) // Transitions
.on("error", function (err) {
console.error("An error occurred: " + err.message);
})
.on("end", function () {
res.write(`<p>Processing finished for ${fragment.filename}</p>`);
fragment.filePath = `./output/project-${VIDEO_CONFIG.projectId}/videos/video-${fragment.filename}.avi`;
callback(null, fragment);
})
.save(
`./output/project-${VIDEO_CONFIG.projectId}/videos/video-${fragment.filename}.avi`
);
所以我为那些由图像制作的视频添加了输入音频,但没有为普通视频添加音频,因为它有自己的音频。然后我将所有由图像制作的视频与最后一个片段的视频合并。
VIDEO_CONFIG.fragments
.reduce((prev, curr) => prev.input(curr.filePath), ffmpeg())
.outputFPS(60)
.on("error", (err) => {
res.end();
console.log(
`An error occurred while merging video files: ${err.message}`
);
})
.on("end", () => {
res.write("FINAL VIDEO END");
res.end();
})
.mergeToFile(
`./output/project-${VIDEO_CONFIG.projectId}/final-video-${VIDEO_CONFIG.projectId}.mp4`
);
然后我收到这个错误An error occurred while merging video files: ffmpeg exited with code 1: Cannot find a matching stream for unlabeled input pad 7 on filter Parsed_concat_0.
因此,我有 3 个由带有视频和音频输入板的图像制作的视频,这意味着当它们合并时,第 4 个视频是输入板 7。
问题是,如果我将输入音频添加到普通视频中,它可以工作,但我会丢失它的初始音频。我该如何绕过这个问题?请帮忙,我一个月前就试图找到解决方案。
我只是想知道是否可以将由图像 + 音频制作的视频与另一个有自己音频的普通视频合并。如果可以用图像创建视频并为其添加音频,我想它可以与其他有自己音频的视频合并。