2026-10-28
一个要加载九秒的 GIF,多数人根本不会等。压缩 GIF 能把等待时间砍下来,但常见的做法会顺手毁掉你当初选 GIF 的理由:动画本身。掉帧、字幕糊掉、渐变出现色带,都是压过头的结果。这篇讲清体积是怎么算出来的、哪四个开关真正有用、以及什么时候别再用 GIF。
GIF 每一帧都是一张索引色图像,配一块最多 256 色的调色板。所以体积大致等于帧数乘尺寸乘调色板深度。三个数里砍掉任何一个都会变小,砍错了就难看。
收益最大,副作用最可控。一个 1200 像素宽的录屏,缩到 600 宽之后在聊天窗口和文档里没有任何区别,像素数直接掉到四分之一。有字幕的话别压到 480 以下,字会糊。
录屏 GIF 里大量的帧几乎一模一样。从 30 fps 降到 12 fps,帧数直接少六成,动作看起来仍然连贯。例外是快速滚动或动画演示,这类内容低于 20 fps 就会跳。
256 色是上限,不是默认值。降到 64 色对界面截图、终端演示、单色插画几乎没有影响;有照片或渐变的画面降到 64 会出现色带,这种内容留在 128 或 256。
抖动(dither)用假色点模拟过渡色,关掉它文件更小、噪点更少,代价是渐变区域出现硬边。界面截图关掉抖动一般更干净。
拖进去、调上面三个参数、出结果,文件不上传。要批量处理几十个 GIF 的话,命令行 gifsicle 更合适:gifsicle --lossy=80 --colors 64 -O3 in.gif -o out.gif,--lossy 是有损模式,能再省三成左右。
不同格式的取舍在 /blog/lossy-vs-lossless-compression 里有对比。一次要处理几十个文件的流程见 /blog/batch-compress-images-multiple,矢量图标则完全不同,参看 /blog/compress-svg-without-breaking。
从录屏工具直接导出的文件,砍尺寸加降帧率通常能减掉 60% 到 80%。已经优化过的文件只剩下 10% 到 20% 的空间,再往下压就要牺牲画质了。
取决于压哪一项。只砍尺寸和帧率,单帧画质不变。收调色板或开有损模式会真的损失颜色信息,渐变和照片类内容最容易看出来。
多半是同时加载了多个大 GIF,或者 GIF 放在首屏。首屏用视频代替,其余部分改成点击或滚动到可见时再加载,单文件大小不是唯一变量。
必须在邮件、文档、老系统里直接播放就选 GIF,有损模式能压到能用为止。放在自己网站上的长录屏选 MP4 或 WebM,同等内容小一个数量级。