Gif帧持续时间似乎比预期的慢

时间:2020-10-21 23:51:07

标签: python python-imaging-library gif

我正在使用枕头成像库创建GIF。我遇到了一个问题,我试图使某些帧以尽可能短的帧持续时间非常快地闪烁,但是当我将帧的持续时间设置为1(GIF的最小持续时间,为100时) ,实际上持续时间似乎比预期的长。

我使用类似于以下内容的简单Image.save()GIF format)命令保存gif:

# durations are actually in milliseconds in the pillow library, but
# they translate to 100ths of a second (1/10 of the value input here)
durations = [650, 10, 900, 750, 10, 800, 10, ... ]
my_gif.save(filename, format='GIF', save_all=True, duration=durations, loop=0, disposal=2)

我不确定这个问题是特定于枕头库还是更一般的GIF格式。但是我注意到了以下几点:

  • gif的视觉效果比预期的慢
  • 当我将生成的GIF加载到EZGif.com之类的GIF编辑工具时,它报告帧持续时间符合预期-“闪烁帧”的持续时间为1,这是我在保存文件。
  • 当我使用EZGif 加速 GIF时,奇怪的是,由EZGif生成的GIF的“加速”版本使用的帧持续时间为2而不是闪烁帧的1,但是它的视觉播放速度似乎更快,更接近于我实际想要发生的情况。

原始图像“加速”图像

报告到EZGif中时每帧的持续时间

Original Image  |  Sped Up Image

    65                   32
    1                    2
    90                   45
    1                    2
    75                   37
    1                    2
    80                   40
    1                    2
    4                    2
    1                    2
    114                  56
    1                    2
    35                   17
    1                    2
    100                  50
    1                    2
    1                    2
    1                    2
    20                   10
    1                    2
    250                  125
    1                    2

问题...

有人可以帮助解释这种看似差异的原因吗?这是GIF格式的工作方式,还是枕头成像库存在问题?如何生成具有我希望它们更快的“闪烁”效果的GIF?

1 个答案:

答案 0 :(得分:1)

经过进一步研究,这似乎是跨不同浏览器和平台进行gif渲染的已知问题。尽管GIF规范表明GIF最高支持100fps,但实际上Buttery Smooth 10fps

中指出,大多数现代浏览器最多仅支持50fps。

This superuser answer最初是导致我理解此问题的原因。它解释了问题,并提供了一些上下文链接,包括指向Frame Delay Times for Animated Gifs的链接,该链接提供了有关此差异背后的历史的其他上下文。后一篇文章暗示了这样一个事实,即某些浏览器可能会将1/100的值解释为10/100,这似乎比预期的要慢得多。

有趣的是,我发现将gif帧延迟设置为2/100(而不是1/100)会导致在我测试过的现代浏览器中帧播放更快,这似乎为其支持的最高速度(50fps)。我怀疑EZGif已经知道这一点,并已在其算法中加以说明。