我正在尝试使用 ffmpeg 创建幻灯片。查看了各种来源,但找不到我想要的内容,我认为我从根本上误解了 ffmpeg 的工作原理。
- 我想创建一个脚本(不引用任何外部 txt 文件),因为该脚本将由代码生成。
- 我想单独指定每个图像名称,因为图像名称不容易进行模式匹配。
- 我想单独指定每幅图像应显示多长时间。
- 如果这很重要,请在 Win 10 上运行,因此使用
^
s 来防止换行。
根据我找到的信息,我的最佳努力是这样的:
ffmpeg -y ^
-loop 1 -t 5 -i "images/1.png" ^
-loop 1 -t 3 -i "images/2.png" ^
-loop 1 -t 4 -i "images/3.png" ^
-c:v libx264 -pix_fmt yuv420p -r 25 -movflags +faststart video.mp4
但这会导致视频时长为 4 秒,只显示最后一张图片,其余部分将被忽略(或不确定发生了什么)。我在这里遗漏了什么?
答案1
假设所有输入都具有相同的属性(分辨率、位深度等),您可以使用 concat 过滤器
ffmpeg -y ^
-loop 1 -t 5 -i "images/1.png" ^
-loop 1 -t 3 -i "images/2.png" ^
-loop 1 -t 4 -i "images/3.png" ^
-filter_complex "concat=n=3:v=1:a=0"
-c:v libx264 -pix_fmt yuv420p -r 25 -movflags +faststart video.mp4
您可能会遇到样本纵横比不匹配的问题。在这种情况下,请将过滤器更改为concat=n=3:v=1:a=0:unsafe=1
。
一旦超过几百张图片,您就会遇到命令长度限制。使用 concat demuxer(文本文件)方法效率更高。