ffmpeg - ffmpeg,将静态图像添加到过渡的开头和结尾
问题描述
ffmpeg noob 在这里,试图帮助我母亲制作一些房地产演练视频。我想建立一个简单的管道,我可以通过它运行视频并输出如下:
- 5 秒(无声)标题卡 ->
- xfade 过渡->
- 属性遍历->
- xfade 过渡->
- 5 秒(无声)标题卡
注意事项:
- 介绍/结尾卡将是相同的内容。
- 输入的演练视频将具有可变长度,因此,如果可能的话,考虑到这一点的动态解决方案将是理想的。如果这需要我使用 编写脚本
ffprobe
,我可以这样做 - 只需要了解语法和操作顺序。 - 视频剪辑将带有一些已经覆盖的音频。我希望标题卡保持静音,并让视频/音频剪辑一起淡入/淡出。
我得到了一个没有过渡的样本:
ffmpeg -loop 1 -t 5 -i title_card.jpg \
-i walkthrough.MOV \
-f lavfi -t 0.1 -i anullsrc \
-filter_complex "[0][2][1:v][1:a][0][2]concat=n=3:v=1:a=1[v][a]" \
-map "[v]" -map "[a]" \
-vcodec libx265 \
-crf 18 \
-vsync 2 \
output_without_transitions.mp4
我一直无法让它与过渡一起工作。最新版本见下文:
ffmpeg -loop 1 -t 5 -r 60 -i title_card.jpg \
-r 60 -i walkthrough.MOV \
-f lavfi -t 0.1 -i anullsrc \
-filter_complex \
"[0][1:v]xfade=transition=fade:duration=0.5:offset=4.5[v01]; \
[v01][0]xfade=transition=fade:duration=0.5:offset=12.8[v]" \
-map "[v]" \
-vcodec libx265 \
-crf 18 \
-vsync 2 \
output_with_transitions.mp4
这一半有效,导致初始标题卡淡入视频,但第二个标题卡从未出现。请注意,我还删除了对音频的任何引用,以使过渡单独工作。
我一直在努力解决这个问题,所以我们将不胜感激:)
解决方案
假设walkthrough.MOV
是 10 秒长:
ffmpeg -loop 1 -t 5 -framerate 30 -i title_card.jpg -i walkthrough.MOV -filter_complex "[0]settb=AVTB,split[begin][end];[1:v]settb=AVTB[main];[begin][main]xfade=transition=fade:duration=1:offset=4[xf];[xf][end]xfade=transition=fade:duration=1:offset=13,format=yuv420p[v];[1:a]adelay=4s:all=1,afade=t=in:start_time=4:duration=1,afade=t=out:start_time=13:duration=1,apad=pad_dur=4[a]" -map "[v]" -map "[a]" -c:v libx265 -crf 18 -movflags +faststart output.mp4
- 您需要升级您
ffmpeg
的才能使其正常工作。当前版本(截至本答案的 4.3)太旧了,所以从 git master 分支获取构建。请参阅FFmpeg 下载以获取针对您的操作系统的构建链接,或参阅FFmpeg Wiki:编译指南。 title_card.jpg
帧速率、宽度和高度必须匹配walkthrough.MOV
。- 请参阅使用 ffmpeg 和 xfade 过滤器合并多个视频文件以了解如何计算 xfade 和淡入淡出偏移量。
- 有关每个过滤器的详细信息,请参阅FFmpeg 过滤器文档。
- 请参阅如何以秒为单位获取视频持续时间?它可以帮助您通过脚本自动执行此操作。
- apad 应该自动与 一起使用
-shortest
,但它不与-filter_complex
. Sopad_dur
用于将额外的静音添加到最后一个标题图像,但whole_dur
如果这对您来说更容易,可以使用它来代替。另一种方法是在您的问题中使用 anullsrc,然后仅使用 concat 过滤器连接音频,但我想展示 adelay+apad 作为可行的替代方案。
推荐阅读
- java - JGit 中 DirCacheEditor 的路径异常无效
- angular - 从 Angular 5 升级到 Angular 7 后,找不到“AppModule”的 NgModule 元数据
- python - 如何让用户在列表中添加或删除新项目?
- laravel - 为什么laravel望远镜中的日志是空的?
- continuous-integration - 如何通过 Auth0 Lock 界面以编程方式登录?
- sql - SQL - 选择唯一行且超过 4 小时
- python-3.x - Jupyter Notebook 找不到模块
- web-config - ImageProcessor:将 Azure 存储帐户凭据保密并在运行时设置配置?
- c - 范围划分后如何获得相等数量的元素留下余数
- r - ggplot2 或 sjPlot 和堆积条形图列