录制完一份 GIF 动图,兴冲冲地想发给朋友,却被微信告知体积太大;临时找了不知名工具一通压缩,体积小了但图片也糊得像被哈士奇糟蹋过。

如何科学地压缩动图?哪些工具能让压缩即轻松又见效快?我从 GIF 压缩的原理开始讲解,带你了解这些好用的工具。如果你只想知道怎么做,请直接到文末领取压缩工具。

决定 GIF 体积的因素

GIF 再胖,也不是一口吃成的。

GIF(Graphics Interchange Format,图片互换格式) 是由一张张静态的图片组成的,按顺序「播放」出来。尺寸、颜色、帧率和 GIF 的时长,都是导致 GIF 发胖的元凶影响 GIF 体积的因素。 尺寸和颜色非常好理解,静态的图片也受到它们的影响;而帧率指每秒钟播放的图片数量,帧率更高 GIF 就会更流畅,但也占空间。

通过减少颜色可以显著缩小 GIF 体积
通过减少颜色可以显著缩小 GIF 体积

最后,还有一个因素:GIF 的长度。别的方面差不多时,时间越长,占用空间越大,这和视频差不多。

制作 GIF 时的注意事项

我们知道了影响 GIF 体积的四个主要因素,就可以在录制、转换的时候加以注意。以 Mac 为例,最常见的 GIF 录制工具都提供了基本的参数调节,GIF Brewery 可以把颜色调低,而 Gifox 不仅能设置颜色,还能把帧率降低,牺牲一定的流畅度来换取更小巧的体积。

null

如果你只是录制一个操作演示,或仅仅为了做表情包,我建议的颜色设置是 48 色,帧率调到 10 以下,就能获得相对小体积的 GIF。不过,使用 iOS 设备录屏的读者只能在后期转换 GIF 时进行参数调节,如果你不想打开电脑,我推荐一个 iOS 上的工具:GIF Toaster ,它的自定义选项非常丰富,最重要的是降低图片尺寸和帧率不用付费。

null

iOS 设备的分辨率越做越高,录屏产物体积不容小觑,用A它们制作的 GIF 也有非常大的压缩空间,我一般会使用 3/4 或者 1/2 的尺寸(设备是 iPhone 8 Plus),已经能够满足网页呈现所需的清晰度,做表情包的话完全可以采用 1/3 甚至 1/4。另外,把加速和降低帧率结合起来,也能有效减小 GIF 体积。

拓展阅读:在手机上制作动图从未那么轻松:GIF Toaster | App+1 - 少数派

终极武器:Gifsicle

如果我们制作的动图颜色非常丰富、尺寸也不能太低,还对流畅度或时常有一定要求,那么简单粗暴地牺牲这几者可能并不会带来理想的效果。其实还有一种 GIF 压缩的诡异方法,能做到接近极限的压缩。

先来看一眼这张 GIF,毫无特殊之处,对吗?

null

但当你把它逐帧拆开来(需要「专业工具」imagemagick ),就能看到其实每一帧都不是「完整」的:

null

除了第一帧,后面的帧都是「残破不堪」,但是连在一起播放时又看似正常。简单的理解,通过把前后帧里重复的部分弄成「透明」,自然有效减小了 GIF 体积。现在你下载到的 GIF 图,往往都已经经过了这种处理以追求更小的体积。(想追究原理的戳 这里

想要达到这样的压缩优化效果,我推荐使用一款命令行工具 gifsicle,建议通过 homebrew 来安装它。

  • 如果你的电脑里还没有 homebrew,就打开 Terminal,输入这串命令安装 homebrew:

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

  • 一长串字符闪过之后,接着输入命令安装 gifsicle:

brew install gifsicle

  • 使用 gifsicle 压缩 GIF 时,用这个命令:

gifsicle -O3 [想要压缩的图片] -o [新图片名]

其实 gifsicle 也有着较为丰富可调节参数,但是最实用的还是用 -O3 让它自动为你选择压缩方案,一般能在画质和体积之间取得平衡,并且第一帧之后的每一帧都能得到优化。

当然,在最后,我也为不习惯使用命令行的读者准备了一个封装好的 Automator 程序:点此下载

null