首页 > 解决方案 > 将多个 ffmpeg 命令合二为一

问题描述

我正在尝试自动化工作中的一些步骤。我的任务是在我们的讲座视频开头添加免责声明,在开始和结束时将讲座视频修剪几秒钟(淡入和淡出),并在我们的讲座视频顶部添加一个徽标。我可以做到这一点,但不幸的是只能在单独的步骤中。我想要实现的是用一个命令完成所有步骤。

我能够将一些命令组合起来,但不能将一个命令与以下命令组合起来。

我不知道我是否对 FFmpeg 期望过高。

在此先感谢您的任何建议。

这是我的代码:

使用淡入淡出创建免责声明

ffmpeg -i media/disclaimer.jpg -filter_complex "[0:v]fps=fps=30,loop=loop=450:size=30:start=0[v0];[v0]fade=t=in:st=0:d=1,fade=t=out:st=14:d=1" disclaimer.mp4

在免责声明中添加空音轨

ffmpeg -i disclaimer.mp4 -f lavfi -i aevalsrc=0 -shortest -y disclaimer_final.mp4 

为讲座视频添加徽标

ffmpeg -i lecture.mp4 -i logo.png -filter_complex "overlay=0:0" lecture_logo.mp4

修剪讲座视频

ffmpeg -ss 00:00:05 -i lecture_logo.mp4 -to 00:45:32 -async 1 lecture_out.mp4

为讲座视频添加淡入淡出

ffmpeg -i lecture_out.mp4 -filter_complex "[0:v]fade=t=in:st=0:d=2,fade=t=out:st=2730:d=2;[0:a]afade=t=in:st=0:d=2,afade=t=out:st=2730:d=2" lecture_final.mp4

最后连接免责声明和讲座视频

ffmpeg -i disclaimer_final.mp4 -i lecture_final.mp4 -filter_complex "[0:v][0:a][1:v][1:a] concat=n=2:v=1:a=1 [outv] [outa]" -map "[outv]" -map "[outa]" final.mp4

标签: videoffmpeg

解决方案


我已经解决了,但不得不做出妥协。如前两个步骤所示,我将使用它的 mp4 输出,而不是生成免责声明并添加虚拟音轨。其余四个步骤已合并到以下命令中:

ffmpeg -i lecture.mp4 -i logo.png -i disclaimer.mp4 -filter_complex \
"[0:v]trim=start=5:end=2732,setpts=PTS-STARTPTS[v0]; \
[0:a]atrim=start=5:end=2732,asetpts=PTS-STARTPTS[a0]; \
[v0][1:v]overlay=0:0[vv0]; \
[vv0]fade=t=in:st=0:d=2,fade=t=out:st=2725:d=2[vvv0]; \
[a0]afade=t=in:st=0:d=2,afade=t=out:st=2725:d=2[aa0]; \
[2:v][2:a][vvv0][aa0]concat=n=2:v=1:a=1[vv][aa]" \
-map [vv] -map [aa] output.mp4

推荐阅读