Imagemagick:如何减小具有大静态区域的动画 GIF 的大小?

Posted

技术标签:

【中文标题】Imagemagick:如何减小具有大静态区域的动画 GIF 的大小?【英文标题】:Imagemagick: How to reduce size for annimated GIF with big static areas? 【发布时间】:2019-07-21 17:50:03 【问题描述】:

我从屏幕截图中创建了一个动画output.gif,最终未压缩为 89MB。一半的 GIF 是静态的,但最好将它们放在一起,而不是图像 + 包含移动部分的 GIF。

使用 Imagemagick 和以下命令,我设法将其大小减小到 18.1MB:

convert output.gif -coalesce -fuzz 3% +dither -layers Optimize compressed.gif

增加百分比会产生更小的尺寸结果,但质量会受到影响。

鉴于此 GIF 包含较大的静态非动画区域,您是否建议使用一个选项来在不影响质量的情况下更好地减小文件大小?

更新我为此使用 Ubuntu,这是我的完整工作流程:

    使用Kazam 截屏正是我需要的,因此无需进行任何类型的编辑。 使用命令ffmpeg -i input.avi output.mp4 转换为mp4。 为框架创建目录mkdir frames。 生成中间图像ffmpeg -i output.mp4 -r 25 'frames/frame-%04d.png'。 转到帧cd frames。 从图像 convert -delay 4 -loop 0 *.png output.gif 生成 GIF。 优化和压缩 GIF 以减小文件大小convert output.gif -coalesce -fuzz 3% +dither -layers Optimize compressed.gif

【问题讨论】:

avi 是否可以接受 - 会更小。您也可以尝试删除 -fuzz 3% +dither 并将其替换为 -colors 32-colors 63 看看是否有帮助。 嗨@MarkSetchell!感谢您的回复。我最初有 AVI,但它是 1.7GB 左右。我正在使用完整的工作流程更新我的问题。 请参阅imagemagick.org/Usage/anim_opt 了解 gif 动画优化。为所有帧使用一个通用颜色图。在imagemagick.org/Usage/quantize/#remap_common 上查看 -remap 【参考方案1】:

减小 GIF 大小的最佳方法是将尽可能多的帧置于“组合”模式。这些帧仅包含与前一帧相比发生变化的内容,并且可能非常小,但这可能需要使用完全相同的颜色图对所有帧进行编码,并且相同的部分是真正相同的(没有模糊性,没有随机编码伪影) . Gimp 可以做到这一点,但其他专门从事 GIF 处理的实用程序也可以做到这一点(也许是 Gifsicle)?

另外,屏幕截图的 GIF 动画不需要 25fps,10fps 就足够了。

【讨论】:

感谢您的回答!您能否还提供您建议的命令,这些命令可能有助于改进使文件更小?这似乎很明显,但它不适合我......我已经展示了我的整个工作流程,那么我应该在此之上做什么?例如使用gifslice需要哪些命令和选项? 主要标准是完全相同的部分是真正相同的(没有模糊性,没有随机编码伪影)。由于您的第一个输出是 AVI 文件(压缩视频),这很可能不对。您可以尝试在 Gimp 中加载 GIF,然后尝试 Filters>Animations>Optimize (for GIF) 并再次导出。也许还有足够多的共同点需要优化。

以上是关于Imagemagick:如何减小具有大静态区域的动画 GIF 的大小?的主要内容,如果未能解决你的问题,请参考以下文章

Imagemagick 专注于区域

Imagemagick convert -fill不会更改特定调色板区域的边缘

如何缓存静态画布区域以获得性能

使用黑色像素填充256色调色板的空白区域

20155326《网络对抗》免考项目——深入恶意代码之生成恶意代码的动静态结合分析

20145326蔡馨熤《计算机病毒》——代码的动静态分析结合