文章

照片做成 GIF 动图完全指南:怎样才能小到发得出去

把照片做成 GIF 很容易,难的是体积小到聊天能发出去。本文讲清为什么逐帧延时比复制帧更省体积,以及宽度、循环和张数哪些设置真正决定文件大小。可在浏览器里完成;宽度先收到 480 左右、循环设成无限,体积会立刻小一截。张数先控制在十几张以内更稳,循环先设成无限。

照片做成 GIF 动图完全指南:怎样才能小到发得出去

用几张照片做个 GIF 动图,本该是两分钟的事。结果一看文件——40MB,微信发不出去,Discord 和邮箱也全拒收。

常见的建议是「调低质量」,但这没说到点上。GIF 的体积其实由一件简单得多的事决定,搞懂之后解法是显而易见的。


1. GIF 的体积到底由什么决定

对于用照片拼的 GIF,体积大致就是:

帧数 × 每帧像素数

就这么两个。帧数和尺寸是仅有的两个杠杆,而出问题的通常是帧数。

这里有个陷阱。很多「照片转 GIF」的工具是按固定帧率工作的——比如 10fps。你要求每张照片显示 3 秒,工具就会为每张照片写 30 张几乎一模一样的帧。六张照片就变成了 180 帧。本该只有六帧的 GIF,体积大了三十倍。


2. GIF 本身支持逐帧延时——要用会用它的工具

GIF 格式会为每一帧单独存一个延时值。一张照片完全可以只占一帧,然后告诉播放器「这一帧停留 3 秒」。

这不是什么冷门特性——从 1989 年起就在格式里了——但不少转换工具就是不用它,照样拿重复帧去填。

差距一点都不小:

做法六张照片各 3 秒实际写入帧数
固定 10fps 靠重复帧填充约 40 MB180
一张照片一帧 + 逐帧延时约 1.5 MB6

我们的 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. 操作步骤

  1. 把照片拖进来。 JPG、PNG、WebP 和 HEIC 都支持——iPhone 照片不用先转格式。
  2. 调整顺序。 拖动排序,把不要的移除掉。
  3. 设每张停留时长。 可以统一调整,也可以先点选某一张单独微调。
  4. 选画幅比例和适配方式。 裁切填满、完整显示,或者模糊填充。
  5. 选宽度。 480px 是不错的默认值;需要更小就降到 320px。
  6. 生成并下载。

6. 常见问题

最多能用多少张照片? 单个 GIF 最多 60 张。实际上通常是体积先到上限,而不是张数。

只放了几张照片,为什么还是很大? 先检查宽度,以及是不是开了交叉淡入。640px 的照片类内容加上抖动,体积涨得很快——先试试 320px。

能分别控制每张显示多久吗? 可以,逐张控制。因为每张照片就是一帧、带自己的延时,所以改时长完全不影响体积。

GIF 会循环播放吗? 默认无限循环,也可以设成只播一次。

HEIC 照片能用吗? 能。HEIC 在你的浏览器里解码,iPhone 照片不用先转成 JPG 就能直接用。

我的照片会被上传吗? 不会。解码、量化调色板、GIF 编码全部在浏览器里完成——这也是这里没有张数和体积限制的原因。


相关阅读