文章
照片做成 GIF 动图完全指南:怎样才能小到发得出去
把照片做成 GIF 很容易,难的是体积小到聊天能发出去。本文讲清为什么逐帧延时比复制帧更省体积,以及宽度、循环和张数哪些设置真正决定文件大小。可在浏览器里完成;宽度先收到 480 左右、循环设成无限,体积会立刻小一截。张数先控制在十几张以内更稳,循环先设成无限。
用几张照片做个 GIF 动图,本该是两分钟的事。结果一看文件——40MB,微信发不出去,Discord 和邮箱也全拒收。
常见的建议是「调低质量」,但这没说到点上。GIF 的体积其实由一件简单得多的事决定,搞懂之后解法是显而易见的。
1. GIF 的体积到底由什么决定
对于用照片拼的 GIF,体积大致就是:
帧数 × 每帧像素数
就这么两个。帧数和尺寸是仅有的两个杠杆,而出问题的通常是帧数。
这里有个陷阱。很多「照片转 GIF」的工具是按固定帧率工作的——比如 10fps。你要求每张照片显示 3 秒,工具就会为每张照片写 30 张几乎一模一样的帧。六张照片就变成了 180 帧。本该只有六帧的 GIF,体积大了三十倍。
2. GIF 本身支持逐帧延时——要用会用它的工具
GIF 格式会为每一帧单独存一个延时值。一张照片完全可以只占一帧,然后告诉播放器「这一帧停留 3 秒」。
这不是什么冷门特性——从 1989 年起就在格式里了——但不少转换工具就是不用它,照样拿重复帧去填。
差距一点都不小:
| 做法 | 六张照片各 3 秒 | 实际写入帧数 |
|---|---|---|
| 固定 10fps 靠重复帧填充 | 约 40 MB | 180 |
| 一张照片一帧 + 逐帧延时 | 约 1.5 MB | 6 |
我们的 JPG 转 GIF 工具是一张照片写一帧、逐张单独设延时的,所以做出来的相册 GIF 才小到真的发得出去。
3. 真正影响体积的设置
宽度。 帧数之外最直接的杠杆。发聊天软件和社交平台,480px 完全够用;小尺寸嵌入用 320px 就行。从 640px 降到 320px,像素数直接变成四分之一。
每张停留时长。 在支持逐帧延时的工具里,它不影响体积——停 3 秒和停 0.3 秒都是一帧。选它是为了节奏,不是为了体积。
转场。 直接切换不增加帧。交叉淡入必须把中间过程画出来,所以每个转场都会多出好几帧。除非确实需要那份顺滑,否则建议关掉。
抖动算法。 GIF 每帧只有 256 色,照片类内容必须靠抖动才看得过去。Floyd–Steinberg 在照片上效果最好。但它会带来细密噪点,而噪点很难压缩——所以如果体积特别紧张、且图片本身是纯色或图形类的,关掉抖动反而有帮助。
循环。 不影响体积。表情包类的设成无限循环;有明确结尾的设成只播一次。
4. 该做 GIF 还是 MP4?
动手之前值得先问一句,因为答案经常是 MP4:
GIF 更合适:目标是邮件(多数客户端至今不播视频)、聊天表情位,或者任何需要零配置自动播放并循环的地方。
MP4 更合适:目标是网站或社交平台。同样的动画转成 MP4 通常能小 80%~90%,而且 X、微博这类平台在你上传时本来也会把 GIF 转成视频。
如果 GIF 已经做好了、只是对目标平台来说太大,直接转换通常比重做更省事——见我们的 GIF 转 MP4 指南。
5. 操作步骤
- 把照片拖进来。 JPG、PNG、WebP 和 HEIC 都支持——iPhone 照片不用先转格式。
- 调整顺序。 拖动排序,把不要的移除掉。
- 设每张停留时长。 可以统一调整,也可以先点选某一张单独微调。
- 选画幅比例和适配方式。 裁切填满、完整显示,或者模糊填充。
- 选宽度。 480px 是不错的默认值;需要更小就降到 320px。
- 生成并下载。
6. 常见问题
最多能用多少张照片? 单个 GIF 最多 60 张。实际上通常是体积先到上限,而不是张数。
只放了几张照片,为什么还是很大? 先检查宽度,以及是不是开了交叉淡入。640px 的照片类内容加上抖动,体积涨得很快——先试试 320px。
能分别控制每张显示多久吗? 可以,逐张控制。因为每张照片就是一帧、带自己的延时,所以改时长完全不影响体积。
GIF 会循环播放吗? 默认无限循环,也可以设成只播一次。
HEIC 照片能用吗? 能。HEIC 在你的浏览器里解码,iPhone 照片不用先转成 JPG 就能直接用。
我的照片会被上传吗? 不会。解码、量化调色板、GIF 编码全部在浏览器里完成——这也是这里没有张数和体积限制的原因。