• 请不要在回答技术问题时复制粘贴 AI 生成的内容
ALLROBOT
V2EX  ›  程序员

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

  •  1
     
  •   ALLROBOT · Apr 5, 2022 · 5053 views
    This topic created in 1678 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
    kkocdko
    Apr 5, 2022 via Android
    1
    最好的方案:用视频格式或者 apng ,webp 替代 gif 。

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

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

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

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

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

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

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

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

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

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


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