用的 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 三张图片对比
1
kkocdko 2022-04-05 13:46:43 +08:00 via Android
|
2
610915518 2022-04-05 13:59:13 +08:00
无损。。。太难了,换个编码好一些,比如 mp4
|
3
vanton 2022-04-05 14:08:09 +08:00
GIFgear
|
5
SevnChen 2022-04-05 14:38:17 +08:00
windows 试试 screentogif
|
6
frinstioAKL 2022-04-05 14:42:23 +08:00 2
首先推荐上 ezgif 试试: https://ezgif.com
鉴于 gif 编码的问题, 无损真的很难, 这方面我写过一个简单的技术科普博文: https://wizyoung.dogcraft.xyz/video2gif-with-high-quality. 用 ffmpeg 来精细化 hack 应该是比较好的, 先用 ffmpeg 把视频抽帧给降低 fps, 再用 ffmpeg 里面的 gif 编码参数调优 |
7
ALLROBOT OP |
9
iold 2022-04-05 15:20:21 +08:00 via iPhone
screentogif 删帧
|
10
ALLROBOT OP @frinstioAKL 32MB-->速度快放 2 倍-->有损压缩 200-->图像缩小 50%-->有损压缩-->3.23MB ,效果不错
只是每次都上传进行输出,稍微麻烦 cmd 的话可以制成 bat 脚本快速执行压缩命令 |
11
icyalala 2022-04-05 15:29:01 +08:00
取原始视频,用 ffmpeg 直接制作 gif
http://blog.pkh.me/p/21-high-quality-gif-with-ffmpeg.html |
13
ALLROBOT OP |
14
GeruzoniAnsasu 2022-04-05 15:54:18 +08:00
@ALLROBOT 其实 octree 的压缩比是最好的
|
15
ilxv 2022-04-05 16:05:35 +08:00 1
bandizip 那个公司,有一个专门的 GIF 工具,Honeycam ,正版也很便宜
|
17
ALLROBOT OP @icyalala 我用 @frinstioAKL 的博客 https://wizyoung.dogcraft.xyz/video2gif-with-high-quality 抄了 FFMPEG 脚本命令,使用参数 max_colors=150, stats_mode=single, dither=sierra2, diff_mode=rectangle, new=on
4.5MB 的 15 秒视频只能转换成 29.5MB 的 Gif 加上 gifsicle 的参数 --optimize=3 --lossy=1000 ,29.5MB 输出为 6.58MB 用--optimize=3 --colors 64 --lossy=500 的话,29.5MB 输出为 5.91MB |
18
ALLROBOT OP @GeruzoniAnsasu 没找到 octree 的,能否提供网址?
|
20
1423 2022-04-05 17:34:53 +08:00
为什么一定要用 gif ?
推特把 gif 淘汰了,所有的 gif 都转换成 mp4 ,文件更小,效果更好 |
21
ALLROBOT OP @icyalala https://pan.baidu.com/s/1-0Ro2EUpf71poRSukwTU1Q?pwd=mbqx
@1423 不是所有网站都支持视频嵌入并且播放的,gif 兼容性比 mp4 好 |
22
ALLROBOT OP @icyalala 6 楼发的那个网站压缩效果最好,用十楼的办法进行压缩的,60MB 最终输出为 3.2MB
如图所示: |
23
icyalala 2022-04-05 21:23:28 +08:00
|
24
ALLROBOT OP @icyalala 哈罗,能分享 sh 或 bat 脚本命令吗?希望能了解如何设置命令参数达到 ezgif 压缩程度的_(:з」∠)_
|
25
frinstioAKL 2022-04-06 01:51:01 +08:00 1
@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 的应该也有)算出类似于质量分, 然后用暴力遍历或者启发式搜索去找到一组合适的调节参数就行, 当然, 上神经网络也许也行. 只是一个想法 |
26
frinstioAKL 2022-04-06 01:55:29 +08:00
@ALLROBOT “用十楼的办法进行压缩的,60MB 最终输出为 3.2MB”, 你用 gifsicle --info xxx.gif 一看就知道他的大概参数了. 分辨率, 调色板数量, 一清二楚. BTW: gif 的编码是应该进行一次升级了, 太过时了
|
27
icyalala 2022-04-06 10:14:56 +08:00
@icyalala 不断调小 scale 、max_colors 、fps 这几个关键参数,体积越小质量越差,多试几次直到质量你能接受就行,然后再继续拿 gifsicle 调。
|
28
janus77 2022-04-06 10:21:41 +08:00
ulead gif animator 老牌 gif 编辑工具了。包含速度、帧的插入 删除 编辑等等、颜色位深,也可以一键优化。
|
29
mdgwmt0 2022-04-06 11:51:35 +08:00
搞什么幺蛾子
|
30
ALLROBOT OP @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 想表达什么?有话可以直接说出来... |