使用 duration 而不是 -r 时,ffmpeg 变得非常慢

使用 duration 而不是 -r 时,ffmpeg 变得非常慢

我正在做什么:

我仍在编写幻灯片脚本。也就是说,我使用 ffmpeg 的连接解复用器(files.txt)为 ffmpeg 提供一组.jpg用于幻灯片放映的文件。

过去我希望所有图像每张显示 3 秒,因此我使用(误用?)ffmpeg 的帧速率标志-r 1/3来实现所述持续时间,结果非常完美并且非常快(所有 600 张图像大约需要 10 秒)。

我现在想做的事:

现在,我想通过改变持续时间(更有趣的幻灯片持续时间更长,等等,你知道的)让幻灯片更具动态效果。因此,我决定放弃帧速率标志,并duration 3在 concat 文件中设置正确的帧速率。当然,每个文件都有正确的秒数。这很有效 - 有点。

我唯一的问题是:现在 ffmpeg 运行该脚本需要很长时间。不只是一点点,而是大约需要 30 倍的时间。即使我已经使用-c:v libx264 -preset ultrafast

所以,它不再实用了。我是不是错过了什么,还是有第三种方法?

编辑:

刚刚注意到 ffmpeg 删除了这个警告:More than 1000 frames duplicated。当静态图像以 25 fps(默认值)的速度最多显示 5 秒时,情况就不会如此。

亲切的问候!

答案1

当您使用duration指令时,你设置的是应用于下一个文件,相对于为当前文件计算的起始时间戳。为了使其工作,-r不能使用输入。这反过来意味着每个图像都被分配了 25 fps 的默认帧速率。目前,这无法更改。但是,您可以降低帧速率。由于您没有小数秒,因此您可以将帧速率降低到 1 fps。

ffmpeg -f concat -i list.txt -vf fps=1 out.mp4

我省略了所有编码选项。请使用 ffmpeg 4.0 或更高版本。

相关内容