【问题标题】:How to compress gif effectively to reduce size?如何有效压缩 gif 以减小大小?
【发布时间】:2023-11-01 22:17:01
【问题描述】:

我们在博客中广泛使用 GIF。我们曾经在其中嵌入了 Tenor nano gif(90px 高度保持纵横比,用于 GIF 预览和移动共享)。现在我们想创建自己的 gif,并使用以下命令将 mp4 转换为 gif,同时保持 Tenor 的 nano gif 的属性。使用 ffmpeg 版本 4.1.4

但我们观察到我们创建的 gif 和使用 Tenor 创建的 gif 之间存在巨大差异。

ffmpeg -i input.mp4 -filter_complex "[0:v]fps=10,scale=-1:90:flags=lanczos,split [a][b];[a] palettegen [p];[b][p] paletteuse" -y output.gif

[原版 MP4] - 845KB

Tenor Nano gif - 42KB

ffmpeg gif - 106KB

我们甚至尝试更改抖动算法以进一步减小尺寸,但最终增加了噪点并损坏了 gif 质量

paletteuse=dither=bayer:bayer_scale=5:diff_mode=rectangle

我们也尝试在 gifsicle 中调整颜色量化,但没有用。

gifsicle --resize _x90 --colors 256 --color-method diversity --dither=ordered --resize-method sample input.gif > output.gif

【问题讨论】:

  • 对 gif 的所有帧应用相同的颜色映射。还要尽可能减少颜色的数量。
  • 能否也附上MP4原版?

标签: ffmpeg compression imagemagick gif lossless-compression


【解决方案1】:

对我有用的是为输出 gif 指定较低的帧速率 (-r 10)。如果您追求质量,可能不是您想要的,但如果您追求质量,文件大小可能是妥协。

【讨论】:

  • 这大大减少了我的尺寸,谢谢!
【解决方案2】:

试试这个 bat 文件。我为自己写的。我有 Windows 操作系统。
它将 FFmpeg mp4 转换为 gif

  1. 创建两个包 Your_files 和 Result 将 bat 文件放在文件夹旁边。
    将这些文件夹和 baht 文件放在 ffmpeg.exe 旁边
  2. 将文件(文件)拖到 Your_files 文件夹
  3. 运行 bat 文件
  4. 我们从 Result 文件夹中取出完成的文件
color a
@echo off
set a="Your_files\*.mp4"
set b="Result\%%~na.gif"
set c=ffmpeg
set f=-filter_complex "[0:v] fps=10,scale=-1:-1:flags=full_chroma_int,split [a][b];[a] palettegen=max_colors=255:reserve_transparent=1:stats_mode=diff [p];[b][p] paletteuse=dither=none:bayer_scale=5:diff_mode=rectangle:new=1:alpha_threshold=128" -gifflags -offsetting
for %%a in (%a%) do (%c% -y -i "%%a" %f% %b%)

如果崩溃,请删除以下行: -gifflags -offsetting

【讨论】:

    最近更新 更多