我正在使用枕头成像库创建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格式。但是我注意到了以下几点:
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?
答案 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已经知道这一点,并已在其算法中加以说明。