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

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

原图 903 kb

Tinypng压缩过的 96KB

目标就是用FFmpeg做到近似Tinypng的处理效果

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

如果不清楚 可以用下面的命令来输出一个log看一眼

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

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

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

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的差距,我还是搞不清楚差距在哪里。

如果有人知道希望可以指导一下

最新文章

  1. phpcms中的RBAC权限系统
  2. toad 常用快捷键与配置
  3. linux学习笔记 2013-09-02
  4. CLRS:build_max_heap(strorage in array)
  5. kindeditor编辑器图片水印
  6. MySQL Replication 常用架构
  7. NetAdvantage
  8. Android doGet方法
  9. .net Mvc Controller 接收 Json/post方式 数组 字典 类型 复杂对象
  10. java main方法背后的故事?(转)
  11. [转]How To Use CSS3 Media Queries To Create a Mobile Version of Your Website
  12. HDU 2844 Coins 背包问题 + 二进制优化
  13. QQGame防专线中断系统介绍
  14. hdu2059 龟兔赛跑 DP
  15. 实现excel导入导出功能,excel导入数据到页面中,页面数据导出生成excel文件
  16. junit搭配hamcrest使用
  17. 从源码角度简单看StringBuilder和StringBuffer的异同
  18. <算法图解>读书笔记:第4章 快速排序
  19. Django里URL配置中name参数的作用
  20. en

热门文章

  1. linq to sql 和linq to php 的区别
  2. 递归计算一个目录的大小【os.wallk()】
  3. C#根据淘宝接口网址获取客户端访问IP和网络运营商
  4. Splay普及版
  5. UCOSii和Linux的区别和联系
  6. 4D产品(DLG、DEM、DOM、DRG)介绍及区别
  7. 项目部署到weblogic后页面乱码问题
  8. java.sql.SQLSyntaxErrorException: ORA-01722: 无效数字
  9. Windows 的 Oracle Data Access Components (ODAC)
  10. JavaWeb基础—项目名的写法