是否可以使用 FFMPEG 创建一系列持续时间较短的图片?

是否可以使用 FFMPEG 创建一系列持续时间较短的图片?

最简单的幻灯片只是一系列图片,每张图片的显示时间相同。

我还想制作一个序列,但在持续时间方面更复杂:

我希望第一张图片的持续时间为 1 秒,下一张图片的持续时间比一秒短一点,下一张甚至更短,这样序列开始时会很慢,到结束时会变得更快。

我不知道该怎么做,我唯一能猜测的是,每张图片的持续时间可以通过类似的函数来计算

duration = 1/picture_number
duration = 1 - (picture_number/picture_total)

或者在脚本中:

duration=1
while [duration > 0]
do
duration=duration*0.99
done

答案1

这可以通过单个命令完成。基本方法是从幻灯片开始,其中每个图像具有相同的持续时间,然后使用选择过滤器从每个连续图像的显示时间中修剪出更多的时间。

ffmpeg -framerate 1 -i img%d.jpg \
       -vf fps=25,select='lt(mod(t,1),1-floor(t)/25)',setpts=N/25/TB \
       out.mp4

-framerate 1--> 这控制图像最初翻转的速度。

fps=25--> 我们设置最终帧速率。另外,需要这样做才能有框架可以使用。

select='lt(mod(t,1),1-floor(t/1)/25)'--> 从每一秒开始,减少一帧。

setpts=N/25/TB--> 使所选帧的时间戳连续,否则 ffmpeg 将复制帧来填补空白并达不到我们的目标。

要从 3 秒的初始持续时间开始,您可以将帧速率更改为1/3并将选择更改为lt(mod(t,3),3-floor(t/3)/25)。您需要更改 25 来控制持续时间减少的速度。较高的值将以较慢的速度减少持续时间。

相关内容