前言

我们知道一些平台上传的动态图片是不能超过 10M 的,一旦超过之后就会失败,通常我们会进行压缩。

最开始我使用的是 FFMPEG ,然后发现越用越大,于是放弃。

一番搜寻下来,发现了 gifsicle 可以使用,介绍给大家。

安装

Mac 使用 HomeBrew 进行安装

1
brew install gifsicle

Ubuntu 可以使用 apt

1
sudo apt install gifsicle

使用

1
gifsicle -O3 input.gif -o output.gif

-O 表示的是优化的级别

  • 1 表示仅存储每张图像的更改部分,默认是 1
  • 2 和 1 一样但是会使用透明度
  • 3 效果最好,但通常较慢

一次压缩不够,可以进行多次。不过到后面的效果就不是那么好了。

进一步优化

通过上面的步骤,还是有可能达不到我们想要的效果,这时候就需要删除一些帧才能够达到压缩的目的。

gifsicle 支持选定哪些帧要保留,这就给我们留下了操作空间。

gifsicle 的每一帧需要以 # 开头,所以我们就可以使用 seq 来生成对应的帧数。

如果想要输出 10 以内的偶数帧可以这么写

1
seq -f "#%g" 0 2 10

结果如下

1
2
3
4
5
6
#0
#2
#4
#6
#8
#10

好了,有了这些知识就可以从 gif 中每 5 帧选一帧了,这样压缩起来效果就很好了。

1
gifsicle -U input.gif `seq -f "#%g" 0 5 100` -O2 -o output.gif

总结

  • gifsicle 可以用于压缩 gif ,有三个压缩级别 O1O2O3O3 效果最好,默认是 O1
  • gifsicle 支持选定特定的帧,可以巧妙的实现压缩的需求

参考