有啥非常优秀的 Gif 压缩优化工具? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
ALLROBOT
V2EX    程序员

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

  •  1
     
  •   ALLROBOT 2022-04-05 13:11:36 +08:00 3991 次点击
    这是一个创建于 1332 天前的主题,其中的信息可能已经有所发展或是发生改变。

    用的 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 条附言    2022-04-05 15:04:40 +08:00
    注:有损压缩可接受,无损压缩没法压的狠
    30 条回复    2022-04-06 12:42:59 +08:00
    kkocdko
        1
    kkocdko  
       2022-04-05 13:46:43 +08:00 via Android
    最好的方案:用视频格式或者 apng ,webp 替代 gif 。

    或者用这个优化编码器:
    https://github.com/ImageOptim/gifski
    610915518
        2
    610915518  
       2022-04-05 13:59:13 +08:00
    无损。。。太难了,换个编码好一些,比如 mp4
    vanton
        3
    vanton  
       2022-04-05 14:08:09 +08:00
    GIFgear
    ALLROBOT
        4
    ALLROBOT  
    OP
       2022-04-05 14:08:44 +08:00
    @610915518 #2 有些网站仅支持 Gif ,不支持嵌入视频的(有损优化我当然可以接受的)
    SevnChen
        5
    SevnChen  
       2022-04-05 14:38:17 +08:00
    windows 试试 screentogif
    frinstioAKL
        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 编码参数调优
    ALLROBOT
        7
    ALLROBOT  
    OP
       2022-04-05 15:03:24 +08:00
    @SevnChen @kkocdko SreenToGif 压缩优化性能不太好,它提供的 Gifski 似乎不太能很好压缩(我用的 Gifski-较低的质量和更快的编码)

    DPI 从 96 降低到 32 ,32MB 压缩成 29MB

    DPI 32 降低到 4 ,图像长宽缩小至 52%,也只是把 29MB 压成 15MB

    然后删减帧数,多余的帧数手动剪掉,最终压缩成 7MB

    SevnChen
        8
    SevnChen  
       2022-04-05 15:19:22 +08:00
    @ALLROBOT 我之前是用神经网络压缩,印象中效果不错,这会儿手头没 windows ,你可以试一下
    iold
        9
    iold  
       2022-04-05 15:20:21 +08:00 via iPhone
    screentogif 删帧
    ALLROBOT
        10
    ALLROBOT  
    OP
       2022-04-05 15:25:10 +08:00
    @frinstioAKL 32MB-->速度快放 2 倍-->有损压缩 200-->图像缩小 50%-->有损压缩-->3.23MB ,效果不错

    只是每次都上传进行输出,稍微麻烦

    cmd 的话可以制成 bat 脚本快速执行压缩命令
    icyalala
        11
    icyalala  
       2022-04-05 15:29:01 +08:00
    取原始视频,用 ffmpeg 直接制作 gif
    http://blog.pkh.me/p/21-high-quality-gif-with-ffmpeg.html
    ALLROBOT
        12
    ALLROBOT  
    OP
       2022-04-05 15:29:13 +08:00
    @SevnChen

    就三个吧,神经网络压缩属于哪个,或者说需要自己构建并且导入到 SreenToGif ?
    ALLROBOT
        13
    ALLROBOT  
    OP
       2022-04-05 15:35:51 +08:00
    @icyalala 嘿,我用的 ShareX 截屏软件,它的 Gif 截屏流程先录像然后用 FFmpeg 转换 Gif 的

    15 秒视频,结果输出 Gif 体积 30MB~100MB
    GeruzoniAnsasu
        14
    GeruzoniAnsasu  
       2022-04-05 15:54:18 +08:00
    @ALLROBOT 其实 octree 的压缩比是最好的
    ilxv
        15
    ilxv  
       2022-04-05 16:05:35 +08:00   1
    bandizip 那个公司,有一个专门的 GIF 工具,Honeycam ,正版也很便宜
    icyalala
        16
    icyalala  
       2022-04-05 16:10:12 +08:00
    @ALLROBOT 不要用工具,直接用 ffmpeg 命令行自己改参数加 palette 看看
    ALLROBOT
        17
    ALLROBOT  
    OP
       2022-04-05 17:12:20 +08:00
    @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
    ALLROBOT
        18
    ALLROBOT  
    OP
       2022-04-05 17:13:44 +08:00
    @GeruzoniAnsasu 没找到 octree 的,能否提供网址?
    icyalala
        19
    icyalala  
       2022-04-05 17:20:54 +08:00
    @ALLROBOT 不如把你的那段视频放出来,大家每个人都压压看来对比一下效果~
    slowman
        20
    slowman  
       2022-04-05 17:34:53 +08:00
    为什么一定要用 gif ?
    推特把 gif 淘汰了,所有的 gif 都转换成 mp4 ,文件更小,效果更好
    ALLROBOT
        21
    ALLROBOT  
    OP
       2022-04-05 19:45:01 +08:00 via Android
    @icyalala https://pan.baidu.com/s/1-0Ro2EUpf71poRSukwTU1Q?pwd=mbqx


    @1423 不是所有网站都支持视频嵌入并且播放的,gif 兼容性比 mp4 好
    ALLROBOT
        22
    ALLROBOT  
    OP
       2022-04-05 19:51:46 +08:00 via Android
    @icyalala 6 楼发的那个网站压缩效果最好,用十楼的办法进行压缩的,60MB 最终输出为 3.2MB
    如图所示:
    icyalala
        23
    icyalala  
       2022-04-05 21:23:28 +08:00
    @ALLROBOT 我试了下上面视频,拿 ffmpeg 和 gifsicle 处理一下,也能达到 ezgif.com 的体积,调整一下 max_colors 和 gifsicle 质量后能更小一些,应该没有太大差距
    ALLROBOT
        24
    ALLROBOT  
    OP
       2022-04-06 00:06:47 +08:00 via Android
    @icyalala 哈罗,能分享 sh 或 bat 脚本命令吗?希望能了解如何设置命令参数达到 ezgif 压缩程度的_(:з」∠)_
    frinstioAKL
        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 的应该也有)算出类似于质量分, 然后用暴力遍历或者启发式搜索去找到一组合适的调节参数就行, 当然, 上神经网络也许也行. 只是一个想法
    frinstioAKL
        26
    frinstioAKL  
       2022-04-06 01:55:29 +08:00
    @ALLROBOT “用十楼的办法进行压缩的,60MB 最终输出为 3.2MB”, 你用 gifsicle --info xxx.gif 一看就知道他的大概参数了. 分辨率, 调色板数量, 一清二楚. BTW: gif 的编码是应该进行一次升级了, 太过时了
    icyalala
        27
    icyalala  
       2022-04-06 10:14:56 +08:00
    @icyalala 不断调小 scale 、max_colors 、fps 这几个关键参数,体积越小质量越差,多试几次直到质量你能接受就行,然后再继续拿 gifsicle 调。
    rb6221
        28
    rb6221  
       2022-04-06 10:21:41 +08:00
    ulead gif animator 老牌 gif 编辑工具了。包含速度、帧的插入 删除 编辑等等、颜色位深,也可以一键优化。
    mdgwmt0
        29
    mdgwmt0  
       2022-04-06 11:51:35 +08:00
    搞什么幺蛾子
    ALLROBOT
        30
    ALLROBOT  
    OP
       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 plettegen
    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 想表达什么?有话可以直接说出来...
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     956 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 30ms UTC 22:31 PVG 06:31 LAX 14:31 JFK 17:31
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86