跳转到内容

AVIF 与 HEIF 编码、位深(Bit Depth)与速度档位调优

复制本页

AVIF 将 AV1 视频帧内编码封装在 HEIF(ISO Base Media File Format)容器中。在相同主观画质下,AVIF 通常比 JPEG 节省约 40%~50% 的体积,比 WebP 节省约 15%~25%,且支持 8-bit、10-bit 与 12-bit 位深以及 HDR 色域。

在 libvips 中,AVIF 与 HEIC/HEIF 共享底层的 heifload / heifsave 算子(通过 libheif 调用 aom、rav1e 或 svt-av1 编码器),并将 compression 参数设为 av1。

参数项 govips AvifExportParams sharp .avif(options) pyvips / vips CLI heifsave 生产推荐值与说明
质量因子 Quality(默认 80) quality(默认 50) Q=55 / --Q 55 注意默认值差异:AVIF 压缩效率高,线上常用 50 ~ 65(约对应 JPEG 80 ~ 85)
编码速度 / 耗时 Effort(0..9,默认 5;旧字段 Speed 已废弃) effort(0..9,默认 4) effort=4 / --effort 4 在 libvips >= 8.13 下方向一致:0 最快但体积较大,9 最慢压缩率最高(实时服务推荐 3 ~ 5)
无损模式 Lossless: true lossless: true lossless=True / --lossless AVIF 无损压缩率通常不如无损 WebP,且耗时较高
位深(Bit Depth) Bitdepth(8 / 10 / 12) bitdepth(8 / 10 / 12) bitdepth=8 8-bit 兼容性最广;10/12-bit 适合广色域/HDR 且需编码器支持
色度抽样 —(AvifExportParams 未暴露 subsample_mode) chromaSubsampling(默认 '4:4:4') subsample_mode sharp / pyvips / CLI 对摄影图显式设为 '4:2:0'(或 on)可进一步减小体积并兼容硬件解码器
package main
import (
"fmt"
"os"
"github.com/davidbyttow/govips/v2/vips"
)
func main() {
if err := vips.Startup(nil); err != nil {
fmt.Fprintln(os.Stderr, err)
os.Exit(1)
}
defer vips.Shutdown()
// 运行前可先探测当前编译环境是否支持 AVIF
if !vips.IsTypeSupported(vips.ImageTypeAVIF) {
fmt.Fprintln(os.Stderr, "AVIF is not supported by this libvips build")
os.Exit(1)
}
image, err := vips.NewImageFromFile("input.jpg")
if err != nil {
fmt.Fprintln(os.Stderr, err)
os.Exit(1)
}
defer image.Close()
params := vips.NewAvifExportParams()
params.Quality = 55
params.Bitdepth = 8
params.Effort = 4 // 0..9,数值越小编码越快(NewAvifExportParams 默认 5)
params.StripMetadata = true
data, _, err := image.ExportAvif(params)
if err != nil {
fmt.Fprintln(os.Stderr, err)
os.Exit(1)
}
if err := os.WriteFile("output.avif", data, 0o644); err != nil {
fmt.Fprintln(os.Stderr, err)
os.Exit(1)
}
}

流式写出与编解码器可用性边界

Section titled “流式写出与编解码器可用性边界”
  1. govips v2.19.0 的流式写出边界:govips 提供了 SaveToWriterHeif(w, heifParams),但没有单独的 SaveToWriterAvif 包装函数;导出 AVIF 时请使用 image.ExportAvif(avifParams)(或在 SaveToWriter 中传入 Format: vips.ImageTypeAVIF 的 ExportParams)。
  2. libheif 后端差异:系统安装的 libheif 可能只编译了 AV1 编码器(支持 AVIF),而未编译具有专利限制的 HEVC/x265 编码器(不支持导出 .heic)。若遇到 Unsupported compression 错误,请参阅缺少编解码器与格式不支持。