逛论坛的时候发现看不到别人发的图片,我第一反应是他的图床挂了,结果是高贵的Chrome不支持heic
格式,It's only apple can do
了属于是。
- 2024.8.30更新, iPhone 16 系列据报道将支持 JPEG-XL 格式的图片,体积是 JPEG 的三分之一。
时间线
对比
示例图片
1 | ❯ exiftool /Volumes/TOSHIBA/tg/59190594_p0.jpg |
阿里OSS图片转换结果
1 | image/auto-orient,1/quality,q_100/format,{jpg|jpeg|png|webp|avif|heic} |
原图 | jpg | jpeg | png | webp | avif | heic |
---|---|---|---|---|---|---|
1759 kB | 407 kB | 407 kB | 472 kB | 454 kB | 不支持 | 不支持 |
-77% | -77% | -73% | -74% |
- 在大部分情况下,都是用图片的更低的兼容性换更小的体积
- 阿里云等对象存储厂商提供了直接添加参数完成图片转换的功能
- 以下对比都是将图片相对质量设置为100%,真实场景下一定会更小
- 不同图片适合的压缩率不同,此处图片仅做参考
ffmpeg批量转换
FFmpeg 是一个可以处理音视频的软件,功能非常强大,主要包括,编解码转换,封装格式转换,滤镜特效。同时也支持 各种网络协议,支持多种高层协议的推拉流,也支持更底层一点的TCP/UDP 协议推拉流。
在多平台系统方面,FFmpeg 的兼容性也优势显著,FFmpeg 可以在 windows,Linux,Mac,ios,android 等等操作系统上运行。
下面通过 ffmpeg + zsh 批处理,而不是通过 Node.js 之类自动压缩。原因其一,前者比后者性能更高,C 和 JavaScript 不用多说;原因其二,前者比后者相对简单点。
安装 ffmpeg
1 | brew install ffmpeg |
查看支持的格式
1 | ffmpeg -formats |
批量转换
- 转换为webp
1 | [[ ! -d ./webp ]] && mkdir ./blog/webp |
- 转换为avif
1 | for %%i in ("./blog/png/*.png") do ffmpeg -i "%%i" -c:v av1 -strict experimental -b:v 0 -crf 30 "./blog/avif/%%~ni.avif" |