ffmpeg - 生成帧限制的 GIF 预览

ffmpeg - 生成帧限制的 GIF 预览

我有一个程序可以从视频生成 10 帧 GIF 幻灯片,无论视频长度如何,幻灯片帧始终为 0.5 秒长。*

它的工作原理是首先获取视频的时长,然后运行以下代码片段,该代码片段通过 imagemagick 和 gifsicle 传输 ffmpeg 的输出:

ffmpeg -i video.webm -filter:v "fps=1/#{duration / 10.0}" -frames:v 10 -f image2pipe -vcodec ppm - | convert -delay 50 -loop 0 -gif:- | gifsicle -O2 > preview.gif

我想转换此代码片段以使用单个 ffmpeg 命令。

首先,进行基本的健全性检查。input.webm持续时间 = 100 秒:

ffmpeg -y -i input.webm -vf "fps=1/10" 

正如预期的那样,这有效。它创建了具有正确帧数但错误帧时序的输出。

我预计获得恒定 2 FPS 的解决方案是简单地使用 -r 选项来设置输出 FPS:

ffmpeg -i input.webm -vf "fps=1/10" -r 2 preview.gif

这不起作用。它生成了一个与之前具有相同帧时间的文件。

考虑到具有此恒定帧速率设置的视频的时间基准可以是 0.5 秒,而 PTS 可以是帧号,所以我也尝试过这样做:

ffmpeg -i input.webm -vf "fps=1/10,settb=1/2,setpts=N" preview.gif

但这也不起作用。ffmpeg删除了除 3 帧以外的所有帧,并且它们仍然显示了 10 秒,而不是半秒。

我在这里做错了什么?


* 如果输入视频少于 10 帧,则将生成少于 10 帧的输出 GIF。但是,帧时间将相同。

答案1

使用 settb 和 setpts 时还需要设置 -r 选项:

ffmpeg -y -i input.webm -vf "fps=1/10,settb=1/2,setpts=N" -r 2 preview.gif

相关内容