前言:为什么选择 AVIF?

在内容优先的互联网时代,图片体积是影响加载速度和用户体验的关键因素。AVIF (AV1 Image File Format) 是新一代的图片格式,它基于 AV1 视频编码技术,在有损压缩方面遥遥领先于传统的 JPG,并且支持 PNG 拥有的透明度属性,同时完美支持动画(动图)。

B站 等大型网站已几乎全面采用 AVIF 来优化图片加载。本文将探讨如何利用强大的 FFmpeg 工具,选取最优的 AV1 编码器,将视频高效压缩成 AVIF 动图,以实现减小图片体积、节省带宽和加快访问速度的目标。


0. 测试环境和视频信息

使用 FFmpeg 配合不同的 AV1 编码器(aom、svt、nvenc)进行 10 秒钟视频片段的编码测试,以对比它们在体积、速度和压缩质量上的表现。

属性 描述
测试视频 10 秒
原始分辨率 3840x1920(4k)
测试质量标准 CRF 32 (值越低,质量越高,体积越大)
缩放测试分辨率 360P 左右 (scale=360:-1)
核心命令参数 -pix_fmt yuv420p -an -f avif

测试视频帧截图


1. 编码器对比:AOM vs. SVT

libaom-av1 是 AV1 官方参考编码器,以最高的压缩效率著称;libsvtav1(SVT)是英特尔主导的开源编码器,以多线程和高速度为主要优势。

1.1 低分辨率(180P)对比

命令模板:

# AOM:
ffmpeg -ss 0 -t 10 -i test.mp4 -vf "scale=360:-1" -c:v libaom-av1 -crf 32 -an -f avif aomtest.avif

# SVT:
ffmpeg -ss 0 -t 10 -i test.mp4 -vf "scale=360:-1" -c:v libsvtav1 -crf 32 -an -f avif svttest.avif
编码器 体积 (KB) 编码时间 (s) 速度倍数 (vs AOM) 压缩效果
libaom-av1 201 KB 100 s 1x (基准) 最佳
libsvtav1 230 KB 1 s 100x 优秀

AOM 180P 动图示例
AOM 180P 动图示例


SVT 180P 动图示例
SVT 180P 动图示例

1.2 高分辨率(1920P)对比

命令模板:

# AOM:
ffmpeg -ss 0 -t 10 -i test.mp4 -c:v libaom-av1 -crf 32 -an -f avif aomtestfull.avif

# SVT:
ffmpeg -ss 0 -t 10 -i test.mp4 -c:v libsvtav1 -crf 32 -an -f avif svttestfull.avif
编码器 体积 (KB) 编码时间 (s) 速度倍数 (vs AOM) 压缩效率 (体积% vs AOM)
libaom-av1 3754 KB 600 s (10分钟) 1x (基准) 基准 (100%)
libsvtav1 3822 KB 10 s 60x 98.2%

AOM 1920P 动图示例
AOM 1920P 动图示例


SVT 1920P 动图示例
SVT 1920P 动图示例

1.3 小结

编码器 优点 缺点 适用场景
libaom-av1 压缩效果最好,适用于对体积有极高要求且不计较时间的场景。 编码时间极长(10分钟),CPU 利用率低。 非实时、低分辨率的静态图像或批量夜间任务。
libsvtav1 速度极快(多线程优化),压缩效果仍十分优秀。 体积略大(高分场景仅大 1.8%)。 实时性要求高、批量处理、以及大部分实际部署场景。

最终选择: libsvtav1 提供了速度(快 60~100 倍)与压缩效率(仅略低于 AOM)的最佳平衡点。


2. 显卡编码

对于 RTX 40 系或显卡,使用 av1_nvenc 编码器。同时,将 CRF 替换为 QP 参数。

** NVENC 测试命令 (180P):**

ffmpeg  -ss 0 -t 10 -i test.mp4 -vf "scale=360:-1" \
-c:v av1_nvenc -qp 32 -pix_fmt yuv420p -an -f avif nvenc_test.avif
编码器 优点 缺点
av1_nvenc 速度极致,几乎没有等待时间。 体积比上面两者大了一倍