问题描述
有一个关于 fluent ffmpeg 的问题,我对它很陌生,所以需要一些帮助。
我正在尝试从 S3 获取图像和视频,以便我可以从中制作完整的视频。
所以我正在用 .loop 制作视频,其中包含来自图像的特定视频长度。
然后我添加了一个带有音频的普通视频。
然后我正在削减音频长度,因此添加的音频将仅在由图像制作的视频上播放。
当与图像中的视频合并的视频开始播放时,它会有自己的音频。
问题是,如果我合并所有视频,我会收到此错误:
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.
所以我需要向不是由图像制作的视频添加音频,以便流可以工作。我怎样才能避免这种情况并让该视频拥有自己的音频?我应该添加什么 inputoptions?另外,当我剪切音频时它有延迟,我可以添加哪些音频过滤器?
``
const videosFromImages = [];
VIDEO_CONfig.fragments.forEach((fragment) => {
videosFromImages.push(function (callback) {
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`
);
});
});
async.series(videosFromImages,function (err,videosFromImages) {
// result Now equals 'done'
async.waterfall(
[
(done) => {
console.log("VIDEO_CONfig",VIDEO_CONfig.fragments);
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();
console.log("end:");
})
.mergetoFile(
`./output/project-${VIDEO_CONfig.projectId}/final-video-${VIDEO_CONfig.projectId}.mp4`
);
done(null);
},],(err) => {
if (err) {
console.log("err:",err);
}
}
);
});
res.write("<p>Processing</p>");
} catch (error) {
console.error("error:",error);
}
``
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)