使用FFMPEG 压缩png图片 与tinypng压缩结果对比

Tinypng  https://tinypng.com/ 一个在线png压缩工具html

FFmpeg https://ffmpeg.org/download.html  json

原图 903 kbide

Tinypng压缩过的 96KB工具

 

目标就是用FFmpeg作到近似Tinypng的处理效果优化

首先是判断颜色格式 这里我提早作好了准备 原图的rgb24 输出是 pal8 也就是输入 24位 输出256色ui

若是不清楚 能够用下面的命令来输出一个log看一眼3d

ffprobe -hide_banner -v quiet -print_format json -show_format -show_streams in.png > in.logorm

in.log文件中 "pix_fmt": "pal8", 这个就是对应的色彩htm

 

直接转换 颗粒感很厚重 并且体积也不小 123 KBblog

ffmpeg -hide_banner -i in.png -pix_fmt pal8 out_1.png

 

效果看起来不好,因而我想到了降噪 

ffmpeg -hide_banner -i in.png -pix_fmt pal8  -vf dctdnoiz=4.5 -y out_2.png

2D DCT降噪 但好像没什么效果  看来缘由并非这样的 124 KB

我尝试调整了多种降噪和dither参数 可是效果都很惨 这里就不细说了

看起来问题并非出在内容上面,应该是思路有错误 

后来友人提醒:

我看了下圖像信息
不會是因爲調色板吧?
統計一下,第一張圖用到了256色
第二張衹有133
那麽就是第一張圖用了調色板來映射256色
而第二張就是老老實實地按照本来的256色來
其實gif就是這樣的
通過調色板來映射256色,因此能勉强達到一個能接受的效果 

 好吧 看来须要优化一下调色板 

ffmpeg -i in.png -vf palettegen=max_colors=256:stats_mode=single -y out_3.png

这里的输出结果是一个调色板 并非完整图像 因为这是单张静图因此mode使用的是single

这个参数有几种具体区别能够看文档 http://ffmpeg.org/ffmpeg-all.html#palettegen-1

再用优化过的调色板去转换 获得结果 116 KB

ffmpeg -i in.png -i out_3.png -lavfi "[0][1:v] paletteuse" -pix_fmt pal8 -y out_4.png

 

至此,效果上已经能够接受了可是体积还差10KB的差距,我仍是搞不清楚差距在哪里。

若是有人知道但愿能够指导一下

相关文章
相关标签/搜索