前言 #
最近在折腾博客图片格式的时候,接触到了 AVIF1 这个比较新的图片格式。了解之后发现它在压缩率上相比传统的 JPEG 有着非常大的优势,于是做了一些研究,在这里记录一下。
什么是 AVIF #
AVIF 是一种基于 AV1 视频编码技术的图片格式。与 JPEG 类似,它使用有损压缩来减小文件大小,但不同之处在于,AVIF 在相同画质下可以把文件体积压缩得更小。
该格式由开放媒体联盟(AOMedia)开发,该联盟由亚马逊、Netflix、谷歌和 Mozilla 等公司组成。文件使用 AV1(AOMedia Video 1)算法压缩,并以 HEIF 容器格式存储2。由于 AV1 压缩技术是免版税的3,所以无需支付任何许可费用即可使用。
你可以在 Can I use 上查看 AVIF 的浏览器支持范围。
AVIF 对比 JPEG #

与 JPEG 相比,AVIF 最明显的优势是文件尺寸大幅缩小。更小的文件意味着更少的带宽消耗和更快的加载速度,将网页中的 JPEG 替换为 AVIF 后,图像的数据消耗量可能会减少一半。
颜色深度是 AVIF 优于 JPEG 的另一个方面。JPEG 仅支持 8 位颜色深度,而 AVIF 支持 HDR4,这意味着更丰富的色彩和更多的细节表现。
Netflix 有一些很好的视觉示例,比较了相同图像分别压缩为 JPEG 和 AVIF 的效果。WebP 和 PNG 格式的其他比较也值得一看。
如何使用 AVIF #
可以使用 FFmpeg5 将其他格式的图片转换为 AVIF 格式。
简单的转换示例:
# JPEG → AVIF
ffmpeg -i input.jpg output.avif
# PNG → AVIF
ffmpeg -i input.png output.avif调整输出质量,使用 -crf 参数(0-63,值越低质量越高):
ffmpeg -i input.jpg -c:v libaom-av1 -crf 30 -b:v 0 output.avif调整压缩级别,使用 -cpu-used 参数(0-8,值越大速度越快,但压缩率越低):
ffmpeg -i input.jpg -c:v libaom-av1 -cpu-used 4 -crf 30 -b:v 0 output.avif组合使用,同时指定质量和压缩级别:
ffmpeg -i example.png -c:v libaom-av1 -crf 30 -cpu-used 4 -b:v 0 example.avif