60 FPS 的 GIF 真的存在吗?或者是最大 50 FPS?

kar*_*ice 15 gif ffmpeg animated-gif framerate

我最近一直在玩 FFmpeg 并且我正在尝试转换.avi.gif因为到目前为止我尝试过的其他方法效果不佳。

我注意到的是,当我使用这个命令时:

ffmpeg -I filename.gif
Run Code Online (Sandbox Code Playgroud)

我可以看到一些文件信息,包括 FPS。

而且我看到,为了让您转换为 gif 的视频不会变慢,可能的最高 FPS 是 50 FPS。

现在是正确的吗?GIF 中可以拥有的最高 FPS 数量是不是 50 FPS 就不会变慢?

那么 60 FPS 的 GIF 不存在吗?

dir*_*rkt 25

GIF98a规范说,在有关的部分图形控制扩展

vii) 延迟时间——如果不是 0,该字段指定在继续处理数据流之前等待的百分之一 (1/100) 秒。渲染图形后,时钟立即开始滴答作响。该字段可以与用户输入标志字段结合使用。

这意味着对于 100 FPS 的图像速率,最小值是 1(这在大多数显示器上很难渲染......),对于 50 FPS 的图像速率,下一个最小值是 2,下一个值为 3图像速率为 33.3 FPS。所以完全 60 FPS 是不可能的。

请注意,此扩展适用于具有几秒级延迟的少数帧(最大延迟约为 600 秒),因此 1/100 秒分辨率就足够了。它当然不适用于视频,这就是场编码延迟而不是帧速率的原因。

制作视频 GIF 确实是对规范的滥用(尽管现在它是如此普遍以至于大多数人可能没有意识到这一点,就像大多数人没有意识到 GIF 和 JPEG 使用不同类型的压缩一样,并且旨在使用在不同类型的图像上)。

  • 可以通过将延迟设置为每 3 帧的 2、2、1 来模拟 60 fps 的 GIF。 (6认同)

Gya*_*yan 11

使用 ffmpeg,这是模拟 60 fps 滚动平均值的基本格式

ffmpeg -i video.mp4 -vf "settb=1/100,setpts='if(eq(N,0),0,if(not(mod(N,3)),PREV_OUTPTS+1,PREV_OUTPTS+2))'" -vsync vfr -r 100  out.gif
Run Code Online (Sandbox Code Playgroud)

要使用 ffmpeg 读取这些文件,同时保留这些时间,请使用

ffmpeg -min_delay 1 -i out.gif ...
Run Code Online (Sandbox Code Playgroud)

这将显示

Stream #0:0: Video: gif, bgra, 1280x720 [SAR 64:64 DAR 16:9], 60 fps, 100 tbr, 100 tbn, 100 tbc
Run Code Online (Sandbox Code Playgroud)

任何给定的球员是否满足这些时间要求是另一回事。