有啥非常优秀的 Gif 压缩优化工具?

2022-04-05 13:11:36 +08:00
 ALLROBOT

用的 gifsicle 工具,但感觉没压缩多少(我是 4K 分辨率)

命令 gifsicle xx.gif --optimize=3 --colors 64 --lossy=1000 -o xx.gif ,只能把 ShareX 软件输出的 38M 的 Gif 压缩到 8M😅

请问有降低 DPI 、超强压缩无损的 gif 优化工具?

期望 50M 压缩到 5M 以下,DPI 、彩色数、帧数可以降低到最小,求推荐比 Gifsicle 更加优秀的优化工具

使用参数: --optimize=3 --colors 128 --lossy=1000 --optimize=3 --colors 128 --lossy=5000 --optimize=3 --colors 128 --lossy=10000

原图 38M ,下面大小分别是 8M,5M,3M 三张图片对比

3276 次点击
所在节点    程序员
30 条回复
ALLROBOT
2022-04-05 19:45:01 +08:00
@icyalala https://pan.baidu.com/s/1-0Ro2EUpf71poRSukwTU1Q?pwd=mbqx


@1423 不是所有网站都支持视频嵌入并且播放的,gif 兼容性比 mp4 好
ALLROBOT
2022-04-05 19:51:46 +08:00
@icyalala 6 楼发的那个网站压缩效果最好,用十楼的办法进行压缩的,60MB 最终输出为 3.2MB
如图所示:
icyalala
2022-04-05 21:23:28 +08:00
@ALLROBOT 我试了下上面视频,拿 ffmpeg 和 gifsicle 处理一下,也能达到 ezgif.com 的体积,调整一下 max_colors 和 gifsicle 质量后能更小一些,应该没有太大差距
ALLROBOT
2022-04-06 00:06:47 +08:00
@icyalala 哈罗,能分享 sh 或 bat 脚本命令吗?希望能了解如何设置命令参数达到 ezgif 压缩程度的_(:з」∠)_
frinstioAKL
2022-04-06 01:51:01 +08:00
@ALLROBOT 你贴的这个视频很好压缩啊, 只用 ffmpeg 就行

1. 先用 ffmpeg 把视频 n 倍速播放, 比如: ffmpeg -i TEST.mp4 -filter:v "setpts=0.3*PTS" TEST2.mp4
2. 然后再用我 blog 里面的脚本:
```shell
set -e

# global filter
fps=8
scale=270:-1
interpolation=lanczos

# for palettegen
max_colors=64 # up to 256
reserve_transparent=on
stats_mode=diff # chosen from [full, diff, single]

# for paletteuse
dither=bayer # chosen from [bayer, heckbert, floyd_steinberg, sierra2, sierra2_4a, none]
bayer_scale=5 # [0, 5]. only works when dither=bayer. higher means more color banding but less crosshatch pattern and smaller file size
diff_mode=rectangle # chosen from [rectangle, none]
new=off # when stats_mode=single and new=on, each frame uses different palette

ffmpeg -i $1 -vf "fps=$fps,scale=$scale:flags=$interpolation,split[split1][split2];[split1]palettegen=max_colors=$max_colors:reserve_transparent=$reserve_transparent:stats_mode=$stats_mode[pal];[split2][pal]paletteuse=dither=$dither:bayer_scale=$bayer_scale:diff_mode=$diff_mode:new=$new" -y $2
```

sh ./gifgen.sh TEST2.mp4 TEST2.gif

得到的 gif 只有 2.3 M, 而且还很清晰.
https://imgur.com/dgcTLsp

多调下参, 再结合 gifsicle 可以更小咯, 在清晰度和体积之前寻找一个平衡即可.

如果想实现全自动化, 我觉得一个可行的思路是先肉眼调节到一个可以接受的极限画质, 再用一些图像质量评判标准(gif 的应该也有)算出类似于质量分, 然后用暴力遍历或者启发式搜索去找到一组合适的调节参数就行, 当然, 上神经网络也许也行. 只是一个想法
frinstioAKL
2022-04-06 01:55:29 +08:00
@ALLROBOT “用十楼的办法进行压缩的,60MB 最终输出为 3.2MB”, 你用 gifsicle --info xxx.gif 一看就知道他的大概参数了. 分辨率, 调色板数量, 一清二楚. BTW: gif 的编码是应该进行一次升级了, 太过时了
icyalala
2022-04-06 10:14:56 +08:00
@icyalala 不断调小 scale 、max_colors 、fps 这几个关键参数,体积越小质量越差,多试几次直到质量你能接受就行,然后再继续拿 gifsicle 调。
janus77
2022-04-06 10:21:41 +08:00
ulead gif animator 老牌 gif 编辑工具了。包含速度、帧的插入 删除 编辑等等、颜色位深,也可以一键优化。
mdgwmt0
2022-04-06 11:51:35 +08:00
搞什么幺蛾子
ALLROBOT
2022-04-06 12:42:59 +08:00
@frinstioAKL @icyalala 非常感谢指导,用命令写了 sh 脚本,下次截图方便输出超小体积的 Gif 了,不用到 SreenToGif 特意剪辑了👍

```
set -e

# global filter
fps=8
scale=270:-1
scale_=270
interpolation=lanczos

# for palettegen
max_colors=64 # up to 256
reserve_transparent=on
stats_mode=diff # chosen from [full, diff, single]

# for paletteuse
dither=sierra2 # chosen from [bayer, heckbert, floyd_steinberg, sierra2, sierra2_4a, none]
bayer_scale=5 # [0, 5]. only works when dither=bayer. higher means more color banding but less crosshatch pattern and smaller file size
diff_mode=rectangle # chosen from [rectangle, none]
new=on # when stats_mode=single and new=on, each frame uses different palette

time=$(date +"%Y-%m-%d--%H-%M-%S")

ffmpeg -i $1 -vf "fps=$fps,scale=$scale:flags=$interpolation,split[split1][split2];[split1]palettegen=max_colors=$max_colors:reserve_transparent=$reserve_transparent:stats_mode=$stats_mode[pal];[split2][pal]paletteuse=dither=$dither:bayer_scale=$bayer_scale:diff_mode=$diff_mode:new=$new" -y new_mp4_temp.gif

# --optimize 优化等级[1,2,3] --lossy=有损优化等级[0~无穷]
gifsicle new_mp4_temp.gif --optimize=3 --lossy=100 -o net_output_temp.gif

mv net_output_temp.gif $time\_fps=$fps\_scale=$scale_\_max_colors=$max_colors.gif
```

关于#26 ,Gif 之父前不久过世了,我不大清楚有啥团队能继续优化 Gif 编码了

@janus77 @ilxv 感谢推荐软件

@mdgwmt0 想表达什么?有话可以直接说出来...

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/845009

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX