Ffmpeg 幻灯片每张幻灯片的持续时间不同

Ffmpeg 幻灯片每张幻灯片的持续时间不同

我正在尝试使用 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(文本文件)方法效率更高。

相关内容