如何有效压缩gif以减小大小?

时间:2019-08-07 09:53:42

标签: ffmpeg compression imagemagick gif lossless-compression

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

但是,我们发现所创建的gif与使用次中音创建的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

我们也尝试过调整Gificle中的颜色量化,但这没有用。

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

2 个答案:

答案 0 :(得分:0)

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

  1. 创建两个包Your_files和Result,将bat文件放在文件夹旁边。
    将这些文件夹和泰铢文件放在ffmpeg.exe旁边
  2. 将文件(文件)拖到Your_files文件夹中
  3. 运行蝙蝠文件
  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

答案 1 :(得分:0)

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