我正在使用 ImageMagick 将一组 png 转换为单个 gif。我希望这个 gif 尽可能快地循环播放。
这大约是我期望的输出(由Wikipedia 提供):
这是我实际得到的输出:
在我的浏览器 (Firefox 17) 上,预期的 gif 运行速度是实际 gif 的两倍多。这让我感到惊讶,因为我指定每帧应该有 0 延迟。
首先,我通过分解从维基百科借来的 gif 创建了 36 个 png:
--caution: command generates 36 pngs
convert.exe newton.gif newton_%d.png
Run Code Online (Sandbox Code Playgroud)
然后我习惯于coalesce
将 png 重新组合成一个 gif。
convert.exe -dispose none -delay 0 newton_%d.png[0-35] -coalesce output.gif
Run Code Online (Sandbox Code Playgroud)
identify
确认每一帧都没有延迟:
identify.exe -format "%T, " output.gif
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
Run Code Online (Sandbox Code Playgroud)
实际上,这比原始延迟要少:
identify.exe -format "%T, " newton.gif
5, 2, 2, 2, 2, 2, 2, 2, 2, 4, 2, 2, 2, 2, 2, 2, 2, 2, 5, 2, 2, 2, 2, 2, 2, 2, 2, 4, 2, 2, 2, 2, 2, 2, 2, 2,
Run Code Online (Sandbox Code Playgroud)
实际 gif 的延迟比预期的 gif 少。那么为什么预期的 gif 是实际 gif 的两倍呢?
Dav*_*Mah 18
我试验并创建了 10 毫秒(延迟 = 1)版本。
似乎呈现 gif 的程序往往不遵守百分之一秒的延迟率。相反,它们使用的值远大于您选择的小值。
我无法真正评论他们这样做的原因。我遇到的原因不止一个,可能都是猜测。
一般来说,我建议您在所有情况下都使用至少 200 秒的延迟。
来源(证明了这似乎有多种原因。有些相对较旧):
ter*_*don 18
看起来@DavidMah 是对的。在我的 Linux 系统上,最小延迟是 0.5:
convert -dispose none -delay 0.4 newton_%d.png[0-35] -coalesce output0.4.gif
Run Code Online (Sandbox Code Playgroud)
convert -dispose none -delay 0.5 newton_%d.png[0-35] -coalesce output0.5.gif
Run Code Online (Sandbox Code Playgroud)
convert -dispose none -delay 1 newton_%d.png[0-35] -coalesce output1.gif
Run Code Online (Sandbox Code Playgroud)
出于某种原因,图像似乎无法在我的浏览器中正确显示。使用本地图像查看器 ( eom
),第一张图像与原始问题中的图像一样慢,而其他两个图像都比维基百科的快。无论如何,我都会发布,以防这是我的浏览器特有的问题。无论如何,如果您尝试上面发布的命令,您应该会获得更好的速度。
更新:似乎有两个问题。浏览器(至少是在 Linux 上运行的 Firefox 和 Chromium)无法显示延迟 <1.5 的 gif。1.5 工作正常,1.4 很慢。我的图像查看器可以处理 0.5 及以上的延迟。尝试下载上述图像之一并在您最喜欢的图像查看器中打开它。另外,看看这些:
convert -dispose none -delay 1.4 newton_%d.png[0-35] -coalesce output1.4.gif
Run Code Online (Sandbox Code Playgroud)
convert -dispose none -delay 1.5 newton_%d.png[0-35] -coalesce output1.5.gif
Run Code Online (Sandbox Code Playgroud)
UPDATE2:@DavidMah 在下面的评论中指出十进制值四舍五入为最接近的整数。因此,1.4 舍入为 1,这太慢了,而 1.5 舍入为 2 就可以了。