提示

返回博客列表

AV1 到底能不能用:libsvtav1 参数、编码耗时实测与选型建议

客户看了些资料,问我们:"要不要把视频都转成 AV1?听说能省一半带宽。"

我当时的反应是"得测"。因为"省带宽"和"能用"是两件事:AV1 的压缩率确实比 H.265 好,但编码慢得多,而且解码端支持度是碎片化的——如果用户的设备播不了,省下来的带宽毫无意义。

我花了两天做了一轮实测:三个编码器 × 多个速度档 × 六类素材,测 VMAF、耗时、体积。结论是:AV1 在同画质下比 H.265 省 20~30%(不是 50%),编码慢 3~20 倍。我们最后的方案不是"全转 AV1",而是"给支持 AV1 的设备多提供一档"。

这篇写完整的实测数据和决策过程。

TL;DR:AV1 的三个编码器:libsvtav1(推荐,速度快、质量好)、libaom-av1(参考实现,慢)、librav1e(中庸)。关键参数:-preset(SVT-AV1 是 0~13,越大越快)、-crf、-g(关键帧间隔)、-svtav1-params "tune=0:lp=8"。实测:SVT-AV1 preset 8 的体积是 H.265 的 78%,耗时是 3.4 倍;libaom 更省一点但慢得离谱。选型建议:点播大流量场景加一档 AV1(配合 ABR 让支持的设备用),归档和时效紧的任务继续用 H.265;老设备占比高的场景别用。

目录

一、先认识三个 AV1 编码器

编码器 ffmpeg 名称 出身 特点
SVT-AV1 libsvtav1 Intel + Netflix 联合开发 速度快、并行好;质量接近 libaom;生产首选
libaom libaom-av1 AOM 官方参考实现 质量最好(同码率下),极慢
rav1e librav1e Mozilla/Xiph 速度中等,质量中等,生态一般

还有硬件编码器(Intel Arc 的 AV1 硬件编码、NVIDIA 40 系的 AV1 编码),但支持面还很窄。

结论:生产用 libsvtav1,除非你有充足的算力并且追求极致压缩率(那就用 libaom)。

二、确认你的 ffmpeg 支持

ffmpeg -hide_banner -encoders 2>/dev/null | grep -i av1
#  V..... libaom-av1             libaom AV1 (codec av1)
#  V..... libsvtav1              SVT-AV1(Scalable Video Technology for AV1) encoder (codec av1)
#  V..... librav1e               librav1e encoder (codec av1)

如果只有解码器没有编码器,说明编译时没带这些库——要么换一个 ffmpeg 构建(官方静态构建一般都有),要么自己编译(前面那篇静态编译的文章讲过流程,SVT-AV1 需要 libsvtav1-dev 和 --enable-libsvtav1)。

检查版本(版本差异很大,老版本性能差不少):

ffmpeg -hide_banner -h encoder=libsvtav1 2>/dev/null | head -20

三、SVT-AV1 的参数怎么调

基本命令:

ffmpeg -i input.mp4 \
  -c:v libsvtav1 \
  -preset 8 \
  -crf 32 \
  -g 240 \
  -pix_fmt yuv420p10le \
  -svtav1-params "tune=0:lp=8" \
  -c:a libopus -b:a 96k \
  output.mkv

参数说明:

参数 含义 建议
-preset 速度档,0~13(0 最慢质量最好,13 最快) 生产用 6~10
-crf 质量目标(AV1 的 CRF 尺度和 H.264/265 不同,见下) 1080p 常用 30~36
-qp 固定量化参数(与 crf 二选一)
-g 关键帧间隔(帧数) 点播 240(约 10 秒 @24fps),ABR 要对齐
-pix_fmt 建议 10bit(AV1 的 10bit 支持好,且压缩率更高) yuv420p10le
-svtav1-params tune= 0=VQ(视觉质量,默认)、1=PSNR(客观指标) 用 0
-svtav1-params lp= 逻辑处理器数(并行度) 设为机器的核数
-svtav1-params film-grain= 胶片颗粒合成强度(0~50) 保留颗粒感时用 4~8

AV1 的 CRF 尺度跟 H.264/H.265 不一样——H.265 的 CRF 28 大致对应 AV1 的 CRF 32 左右。不要直接照搬数值,一定要实测校准。这是我第一次用的时候最容易犯的错(我直接用了 28,结果画质明显偏低)。

preset 的选择(SVT-AV1):

preset 相对速度 相对体积 适合
0~4 极慢 最小 离线、追求极致
5~7 慢 小 归档、不赶时间
8~10 中 中 生产常用
11~13 快 偏大 实时/准实时

四、libaom 的参数

ffmpeg -i input.mp4 \
  -c:v libaom-av1 \
  -crf 30 \
  -cpu-used 4 \
  -row-mt 1 \
  -tiles 2x2 \
  -g 240 \
  -pix_fmt yuv420p10le \
  -b:v 0 \
  output.mkv
参数 含义
-cpu-used 速度,0~8(越大越快质量越低)
-row-mt 1 行级多线程,必须开,否则慢很多
-tiles 2x2 分块(利于并行解码)
-b:v 0 配合 crf 使用(表示不限码率)
-aom-params 更多底层参数

-row-mt 1 这一条极其重要:不开的话 libaom 只用单线程,慢得让人怀疑人生。我第一次测的时候忘了开,得出的"libaom 比 SVT-AV1 慢 50 倍"的结论完全是错的。

五、实测:速度、体积、画质

测试条件:8 核机器(i7-10700),1080p 素材,30 秒片段,目标 VMAF ≈ 93。

编码耗时与体积(相对 libx265 preset slow = 100%)

编码器 参数 相对耗时 相对体积 VMAF
libx265 preset slow, crf 26 1.0× 100% 93.5
libx264 preset slow, crf 23 0.55× 158% 93.4
libsvtav1 preset 8, crf 32 3.4× 78% 93.6
libsvtav1 preset 10, crf 32 1.9× 84% 93.3
libsvtav1 preset 6, crf 32 8.1× 72% 93.7
libaom-av1 cpu-used 4, crf 30 18× 70% 93.8
libaom-av1 cpu-used 8, crf 30 5.2× 81% 93.2

关键数字:

  • AV1(SVT-AV1 preset 8)比 H.265 省 22% 体积(不是"一半");
  • 代价是 3.4 倍编码时间;
  • 想再省(preset 6,省 28%)就要付出 8 倍时间。

分内容类型的差异

内容 AV1 vs H.265 体积 说明
动画 68% 收益最大
访谈 76%
赛事 80%
屏录(PPT) 72%
夜景(高噪点) 85% 收益最小
胶片颗粒 62% 开 film-grain 后收益巨大(颗粒被"合成"而不是编码)

film-grain 参数是个隐藏武器:它允许编码器把颗粒"建模"而不是逐帧编码,对老片/胶片素材能省非常多。代价是解码端要支持颗粒合成(大部分现代解码器支持)。

我的判断

AV1 省 20~30% 是不是值得? 取决于你的成本结构:

假设:存储/CDN 成本 = C,编码算力成本 = E
转 AV1:存储省 25%,编码耗时 ×3.4

如果 C >> E(点播大流量、长期存储)→ 值得
如果 C ≈ E 或者 C < E(时效紧、短期存储)→ 不值得

对我们(长期存储 + 播放量大)来说,点播内容值得;对时效性内容(客户当天下发)不值得。

六、解码端:谁支持 AV1

这一节决定了你能不能用。

平台 AV1 硬件解码 说明
Chrome / Edge ✅(2019 后) 支持好
Firefox ✅
Safari ⚠️ 部分 macOS 14+/iOS 17+ 在支持的硬件上
Android ⚠️ 2020 后的中高端 老设备只能软解(发热、耗电)
iPhone ⚠️ A17 Pro / M3 系列才有硬解 老 iPhone 软解
智能电视 ⚠️ 2021 后的中高端 便宜的盒子基本不行
老设备 ❌ 完全播不了

软解的代价:AV1 软解比 H.264 软解 CPU 占用高不少,手机上会明显发热掉电。

这就是"不能全转 AV1"的核心原因——你的用户里一定有一部分设备播不了(或者播得很痛苦)。

判断方法:看你的用户设备分布(如果有统计)。我们当时看了站点的 UA 数据,能确认支持 AV1 的大概占 62%——这个比例足够"加一档",但远不够"替换掉 H.264"。

七、和 VP9、H.265 怎么比

编码 压缩率(相对 H.264) 编码速度 解码支持 专利
H.264 100% 快 最好 有专利池
H.265 ~50% 中 中等(硬件支持碎片化) 专利复杂(HEVC Advance)
VP9 ~55% 中 浏览器好,硬件一般 免费
AV1 ~40% 慢 新设备好,老设备差 免费( royalty-free )

AV1 最大的优势其实不是压缩率,而是免专利费——这是它被 Netflix/YouTube/各大厂商推动的根本原因。对商业分发来说,避开 HEVC 的专利不确定性是有实际价值的。

什么时候用 VP9:Web 端、不想碰专利、目标浏览器为主、编码速度要求比 AV1 宽松一点。VP9 的编码速度比 AV1 快不少,是很多 YouTube 类场景的折中选择。

八、我们的决策:分层提供

最后我们没有"全转 AV1",而是做了多码率里的额外一档:

H.264 档(必选)  → 所有设备
H.265 档(可选)  → 支持 HEVC 的设备
AV1 档(新增)    → 支持 AV1 的设备(客户端探测能力后选择)

ABR 的 master playlist 里同时列出三档,播放器根据自己的解码能力选择:

#EXT-X-STREAM-INF:BANDWIDTH=1200000,CODECS="av01.0.05M.08,opus",RESOLUTION=1920x1080
1080p_av1.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=4500000,CODECS="hvc1.2.4.L120.B0,mp4a.40.2",RESOLUTION=1920x1080
1080p_hevc.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=6000000,CODECS="avc1.640029,mp4a.40.2",RESOLUTION=1920x1080
1080p_avc.m3u8

收益:支持 AV1 的那 62% 用户,带宽省了约 22%;不支持的照旧。没有牺牲任何人的兼容性。

代价:多一档的编码和存储成本。但因为 AV1 档本身体积小(78%),总成本增加有限(约 +25% 存储,换 22% 带宽节省)。

实施建议:

  1. 先小范围灰度(比如 5% 的内容),确认客户端能力探测正确、切换无误;
  2. 监控播放失败率——如果 AV1 档的失败率明显高于其他档,说明能力探测有问题,立刻撤;
  3. 客户端能力探测用 MediaCapabilities.decodingInfo()(浏览器)或者平台 API(移动端),不要靠 UA 猜。

九、批量编码的性能优化

AV1 慢,所以批量处理时要榨干性能:

1. 并行度

-svtav1-params "lp=8"          # 逻辑处理器数 = 核数

SVT-AV1 内部并行做得不错,单任务能吃满多核。所以批量处理时"一个文件一个进程"就够了,不要像 H.265 那样切片并行(切片对 AV1 的收益更大,但复杂度也更高)。

2. 大文件切片并行

对特别大的文件(几小时),切片并行依然有效(前面那篇文章的做法)。注意每段参数一致。

3. 10bit 输入输出

-pix_fmt yuv420p10le

AV1 的 10bit 编码效率更高(即使源是 8bit),而且解码器支持好。所以即使最终要 8bit,编码时也用 10bit。

4. 关键帧间隔

AV1 的关键帧比 H.265 更"贵"(体积大)。所以 GOP 可以设长一些(点播 10 秒甚至更长),能省体积。但 ABR 场景要对齐(前面 ABR 那篇讲过)。

5. 容器

AV1 常配 MKV 或 WebM(开源生态),MP4 也支持(需要较新的封装器)。HLS 分发用 fMP4(前面那篇讲过)。音频建议 libopus(配合 AV1 的开源组合)。

十、坑清单

  1. 直接照搬 H.265 的 CRF 值 → 画质不对。AV1 的 CRF 尺度不同,要重新校准。
  2. libaom 忘了 -row-mt 1 → 只用单线程,慢几十倍。
  3. 用 libaom 做生产批量 → 慢到不可能。用 libsvtav1。
  4. preset 数值理解反了 → SVT-AV1 是 0 慢 13 快,和 x264 的命名体系完全不同。
  5. 没设 lp → 并行度不对,没吃满 CPU。
  6. 8bit 编码 → 压缩率不如 10bit。用 yuv420p10le。
  7. 全量转 AV1 → 老设备播不了。分层提供。
  8. 靠 UA 猜解码能力 → 不准。用 MediaCapabilities 之类的能力探测 API。
  9. 不监控 AV1 档的播放失败率 → 出问题发现不了。
  10. 以为能省 50% → 实测 20~30%。做预算时别用宣传数字。
  11. 胶片/颗粒素材不用 film-grain → 白白浪费 AV1 的这个优势。
  12. GOP 设太短 → AV1 关键帧贵,体积增加。点播可以长一些。
  13. ffmpeg 版本太老 → 老版本的 SVT-AV1 封装有 bug(比如 -crf 不生效)。用较新的版本。
  14. 中途换编码器版本 → 不同版本的输出可能不一致(质量/体积)。生产环境固定版本。
  15. 只测一个素材就下结论 → 不同内容收益差异很大(62%~85%)。测代表性的几类。
  16. 忽略音频 → AV1 常配 Opus,但某些平台不支持 Opus。确认播放端支持再换。

最后说说这次评估的方法论收获。

"要不要用新技术"这类问题,答案是"看场景",但这个"看场景"不能是模糊的——它必须有数字支撑。

我这次做的事其实很简单:

  1. 定义清楚衡量指标(体积、耗时、画质 VMAF、兼容性覆盖率);
  2. 跑一批有代表性的样本;
  3. 结合自己的成本结构和用户分布算账;
  4. 得出一个分层的、有条件的结论。

第 4 点很重要。如果一个技术评估的结论是"用"或者"不用",那多半是偷懒了。真实的结论通常是"在什么条件下用什么、给谁用"。

还有一点:宣传材料里的数字要打折。AV1 的"省 50%"是在特定条件下(对比 H.264、特定素材、最慢的编码档)得到的。我们实测"对比 H.265、混合素材、生产可用的速度档"是 22%。两个数字都对,但后者才是你能指望的。

所以现在看到任何"提升 X 倍""节省 Y%"的宣传,我的第一反应都是:在什么的基准上、什么条件下测的? 然后自己跑一遍——跑一遍的成本通常是半天,而基于错误数字做决策的代价要大得多。

想亲手试试?用 VidDown 一键解析下载

粘贴视频链接即可解析,多平台支持、网页端即用;下载桌面客户端解锁海外平台本地解析,开通会员更享不限次下载。

顶部