使用FFmpeg生成GIF文件体积过大,求简易压缩方法
缩小FFmpeg转换GIF体积的简易方法
哈哈,我太懂这种GIF体积突然爆炸的痛苦了!你的输入视频才259k,转出来直接到1.7M确实有点离谱,给你几个简单的参数调整思路,改完就能明显压缩体积,而且画质不会崩得太厉害:
优化调色板(最有效!)
GIF是基于调色板的格式,FFmpeg默认的色彩处理不够精细,生成一个自定义调色板能大幅减少色彩冗余。分两步执行命令:- 生成优化调色板:
这里/usr/bin/ffmpeg -ss 00:00:00.00 -t 5 -i /htdocs/vv.mp4 -vf "scale=480:-1,palettegen=max_colors=64" -y /htdocs/temp_palette.pngmax_colors=64可以根据需求调整(比如32/128),数字越小体积越小,画质也会有轻微下降。 - 用调色板生成GIF:
/usr/bin/ffmpeg -ss 00:00:00.00 -t 5 -i /htdocs/vv.mp4 -i /htdocs/temp_palette.png -lavfi "scale=480:-1 [x]; [x][1:v] paletteuse=dither=bayer" -y /htdocs/gg.gif
- 生成优化调色板:
降低帧率
视频一般是30帧/秒,但GIF不需要这么高的流畅度,降到15或10帧足够用,直接加-r 15参数:/usr/bin/ffmpeg -ss 00:00:00.00 -t 5 -i /htdocs/vv.mp4 -vf "scale=480:-1" -r 15 -gifflags +transdiff -y /htdocs/gg.gifLossy压缩
给GIF加上有损压缩参数-lossy 80(数值范围0-200,越高压缩率越大),在画质损失很小的情况下能压掉不少体积:/usr/bin/ffmpeg -ss 00:00:00.00 -t 5 -i /htdocs/vv.mp4 -vf "scale=480:-1" -gifflags +transdiff -lossy 80 -y /htdocs/gg.gif进一步缩小分辨率
如果你的内容不需要480的宽度,改成360甚至320,比如scale=360:-1,体积会直接按比例缩小,效果立竿见影。
如果想一步到位,把几个优化参数结合起来,试试这个组合命令:
/usr/bin/ffmpeg -ss 00:00:00.00 -t 5 -i /htdocs/vv.mp4 -vf "scale=360:-1,palettegen=max_colors=64" -y /htdocs/temp_palette.png /usr/bin/ffmpeg -ss 00:00:00.00 -t 5 -i /htdocs/vv.mp4 -i /htdocs/temp_palette.png -lavfi "scale=360:-1 [x]; [x][1:v] paletteuse=dither=bayer" -r 15 -gifflags +transdiff+optimize -lossy 80 -y /htdocs/gg.gif
生成完GIF后,删掉临时的temp_palette.png就行啦~
内容的提问来源于stack exchange,提问作者Allen_Tsang
相关产品推荐
相关产品推荐

