V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
ALLROBOT
V2EX  ›  程序员

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

  •  1
     
  •   ALLROBOT · Apr 5, 2022 · 4403 views
    This topic created in 1497 days ago, the information mentioned may be changed or developed.

    用的 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 三张图片对比

    Supplement 1  ·  Apr 5, 2022
    注:有损压缩可接受,无损压缩没法压的狠
    30 replies    2022-04-06 12:42:59 +08:00
    kkocdko
        1
    kkocdko  
       Apr 5, 2022 via Android
    最好的方案:用视频格式或者 apng ,webp 替代 gif 。

    或者用这个优化编码器:
    https://github.com/ImageOptim/gifski
    610915518
        2
    610915518  
       Apr 5, 2022
    无损。。。太难了,换个编码好一些,比如 mp4
    vanton
        3
    vanton  
       Apr 5, 2022
    GIFgear
    ALLROBOT
        4
    ALLROBOT  
    OP
       Apr 5, 2022
    @610915518 #2 有些网站仅支持 Gif ,不支持嵌入视频的(有损优化我当然可以接受的)
    SevnChen
        5
    SevnChen  
       Apr 5, 2022
    windows 试试 screentogif
    frinstioAKL
        6
    frinstioAKL  
       Apr 5, 2022   ❤️ 2
    首先推荐上 ezgif 试试: https://ezgif.com

    鉴于 gif 编码的问题, 无损真的很难, 这方面我写过一个简单的技术科普博文: https://wizyoung.dogcraft.xyz/video2gif-with-high-quality. 用 ffmpeg 来精细化 hack 应该是比较好的, 先用 ffmpeg 把视频抽帧给降低 fps, 再用 ffmpeg 里面的 gif 编码参数调优
    ALLROBOT
        7
    ALLROBOT  
    OP
       Apr 5, 2022
    @SevnChen @kkocdko SreenToGif 压缩优化性能不太好,它提供的 Gifski 似乎不太能很好压缩(我用的 Gifski-较低的质量和更快的编码)

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

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

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

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

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

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

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

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


    @1423 不是所有网站都支持视频嵌入并且播放的,gif 兼容性比 mp4 好
    ALLROBOT
        22
    ALLROBOT  
    OP
       Apr 5, 2022 via Android
    @icyalala 6 楼发的那个网站压缩效果最好,用十楼的办法进行压缩的,60MB 最终输出为 3.2MB
    如图所示:
    icyalala
        23
    icyalala  
       Apr 5, 2022
    @ALLROBOT 我试了下上面视频,拿 ffmpeg 和 gifsicle 处理一下,也能达到 ezgif.com 的体积,调整一下 max_colors 和 gifsicle 质量后能更小一些,应该没有太大差距
    ALLROBOT
        24
    ALLROBOT  
    OP
       Apr 6, 2022 via Android
    @icyalala 哈罗,能分享 sh 或 bat 脚本命令吗?希望能了解如何设置命令参数达到 ezgif 压缩程度的_(:з」∠)_
    frinstioAKL
        25
    frinstioAKL  
       Apr 6, 2022   ❤️ 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  
       Apr 6, 2022
    @ALLROBOT “用十楼的办法进行压缩的,60MB 最终输出为 3.2MB”, 你用 gifsicle --info xxx.gif 一看就知道他的大概参数了. 分辨率, 调色板数量, 一清二楚. BTW: gif 的编码是应该进行一次升级了, 太过时了
    icyalala
        27
    icyalala  
       Apr 6, 2022
    @icyalala 不断调小 scale 、max_colors 、fps 这几个关键参数,体积越小质量越差,多试几次直到质量你能接受就行,然后再继续拿 gifsicle 调。
    rb6221
        28
    rb6221  
       Apr 6, 2022
    ulead gif animator 老牌 gif 编辑工具了。包含速度、帧的插入 删除 编辑等等、颜色位深,也可以一键优化。
    mdgwmt0
        29
    mdgwmt0  
       Apr 6, 2022
    搞什么幺蛾子
    ALLROBOT
        30
    ALLROBOT  
    OP
       Apr 6, 2022
    @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 想表达什么?有话可以直接说出来...
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   5724 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 75ms · UTC 06:55 · PVG 14:55 · LAX 23:55 · JFK 02:55
    ♥ Do have faith in what you're doing.