video - 将多个 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
解决方案
我已经解决了,但不得不做出妥协。如前两个步骤所示,我将使用它的 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
推荐阅读
- c++ - C++ 继承和 valgrind 内存泄漏
- continuous-integration - CI/CD 管道中的自动英语拼写检查
- java - 如何将领域数据库结果显示到编辑文本?
- php - 在共享服务器上部署 laravel 应用后找不到路由
- azure - Azure Web 应用程序中的随机“密钥集不存在”
- rest - Delphi http 获取另一个端口的请求
- java - Java G1 垃圾收集器是否尊重 MaxHeapFreeRatio 参数?
- flask - uWSGI 中 thread-stacksize 的默认值是多少?
- android - 包含checkedtextview的自定义Listview
- reactjs - material-ui 排版的动态字体大小