AV2 规范正式落地:下一代视频压缩的实战起点

2026-06-02 31 预计阅读时间:1 分钟
来源:oschina.net AI 摘要 原文链接

免责声明:本文为 AI 摘要整理,建议结合原文阅读。摘要可能省略上下文、版本差异或边界条件,不作为官方说明。

预计阅读时间:11 分钟

2026年5月28日,AOMedia 发布了 AV2 视频编码规范 1.0.0 版本。从 AV1 到 AV2,不是简单的版本号递增——压缩效率的跃升意味着同样的画面质量下带宽可以大幅缩减,或者同样的码率下画面细节更丰富。对于每天和视频流、存储成本、CDN 费用打交道的人来说,这个标准值得认真看一眼。

AV2 做了什么不同的事

AV2 的核心思路和 AV1 一脉相承:开放、免专利费、面向互联网场景。但在压缩算法层面,它做了几件关键升级:

更精细的预测模式。 AV1 已经引入了多种 intra 预测工具,AV2 进一步扩展了预测方向和参考样本的组合方式,让编码器在复杂纹理区域(比如运动画面中的毛发、水面波纹)能更准确地"猜"出下一帧的样子,减少残差数据量。

更灵活的变换块划分。 AV1 最大支持 64×64 的变换块,AV2 放宽了划分粒度,允许编码器在更大范围内选择非对称划分。这意味着在大面积渐变区域可以用大块一次处理,在细节密集区域切得更碎——码率分配更精准。

增强的环路滤波与后处理。 AV2 引入了更先进的去块滤波和自适应锐化工具,在低码率场景下减少方块效应的同时保留边缘清晰度。这对直播、短视频这类码率受限场景是直接收益。

对 HDR 和高帧率的原生优化。 AV2 规范在设计阶段就考虑了 10-bit/12-bit 色深和 120fps+ 的编码路径,不像 AV1 那样需要额外 profile 来覆盖。这让它在游戏直播、电影流媒体等高动态范围场景中更省心。

压缩效率的实际意义

AOMedia 的目标可以量化为一句话:同等主观画质下,码率比 AV1 再降 20-30%。

换算成运营数字:

  • 一个日均 100TB 出量的视频平台,如果全量切换 AV2,带宽成本可能下降 20-25TB/天;
  • 4K 60fps 直播流从 AV1 的 6-8Mbps 降到 AV2 的 4-5Mbps,对上行带宽受限的移动端主播是实质性解放;
  • 存储侧,冷备视频库的体积缩减意味着对象存储费用直接打折。

这些数字不是理论推演——AV1 相比 H.264 已经验证过同样的逻辑,AV2 是在同一条曲线上继续往下走。

现在能做什么:编码测试与兼容性检查

AV2 的 1.0.0 规范刚发布,主流编码器(libaom、SVT-AV2 等)还在跟进实现。但作为开发者,现在就可以开始准备。下面是一套可运行的基准测试框架,用 AV1 作为参照系,等 AV2 编码器可用后直接替换参数对比。

用 ffmpeg 做 AV1 编码基准测试

先确认你的 ffmpeg 支持 libaom-av1:

ffmpeg -encoders 2>/dev/null | grep av1

如果输出中有 libaom-av1,就可以跑测试。以下脚本对同一段源视频做多档码率编码,并输出 VMAF 评分:

#!/usr/bin/env bash
# av1_baseline.sh — AV1 编码基准,后续可替换为 AV2 对比
set -euo pipefail

SOURCE="${1:?用法: ./av1_baseline.sh source.mp4}"
OUTPUT_DIR="av1_baseline_results"
mkdir -p "$OUTPUT_DIR"

# 测试码率档位(bps)
RATES=(1000000 2000000 4000000 6000000)

for RATE in "${RATES[@]}"; do
    OUT="${OUTPUT_DIR}/av1_${RATE}.mp4"
    echo "=== 编码码率 ${RATE} bps ==="

    ffmpeg -y -i "$SOURCE" \
        -c:v libaom-av1 \
        -b:v "$RATE" \
        -cpu-used 6 \
        -crf 30 \
        -tiles 2x2 \
        -g 120 \
        -an \
        "$OUT"

    echo "=== 计算 VMAF ==="
    ffmpeg -i "$SOURCE" -i "$OUT" \
        -lavfi "[0:v][1:v]libvmaf=model_path=version=vmaf_v0.6.1:log_path=${OUTPUT_DIR}/vmaf_${RATE}.json" \
        -f null -

    echo "码率 ${RATE} 完成,VMAF 报告: ${OUTPUT_DIR}/vmaf_${RATE}.json"
done

echo "全部完成。汇总 VMAF:"
for RATE in "${RATES[@]}"; do
    SCORE=$(python3 -c "
import json
d = json.load(open('${OUTPUT_DIR}/vmaf_${RATE}.json'))
print(f'{d[\"pooled_metrics\"][\"vmaf\"][\"mean\"]:.2f}')
")
    echo "  ${RATE} bps → VMAF ${SCORE}"
done

运行前需要安装 VMAF 模型文件。最简单的方式:

# macOS
brew install ffmpeg libvmaf

# Ubuntu/Debian
sudo apt install ffmpeg libvmaf-dev

注意cpu-used 6 是速度优先档,正式对比建议用 cpu-used 0(质量优先但极慢)。日常测试用 4-6 即可。

Python 批量对比脚本

当 AV2 编码器可用后,你可以用下面这个脚本自动跑 AV1 vs AV2 的对比矩阵:

#!/usr/bin/env python3
"""codec_bench.py — AV1/AV2 编码对比基准"""
import subprocess, json, pathlib, statistics

SOURCE = pathlib.Path("source.mp4")
RESULTS = pathlib.Path("bench_results")
RESULTS.mkdir(exist_ok=True)

CODECS = {
    # AV2 编码器可用后取消注释
    # "av2": {"encoder": "libaom-av2", "crf": "30", "tiles": "2x2"},
    "av1": {"encoder": "libaom-av1", "crf": "30", "tiles": "2x2"},
}

RATES = [1_000_000, 2_000_000, 4_000_000]  # bps

def encode(codec_name, cfg, rate):
    out = RESULTS / f"{codec_name}_{rate}.mp4"
    cmd = [
        "ffmpeg", "-y", "-i", str(SOURCE),
        "-c:v", cfg["encoder"],
        "-b:v", str(rate),
        "-cpu-used", "4",
        "-crf", cfg["crf"],
        "-tiles", cfg["tiles"],
        "-an", str(out),
    ]
    subprocess.run(cmd, check=True, capture_output=True)
    return out

def vmaf(ref, distorted):
    log = RESULTS / f"vmaf_{distorted.stem}.json"
    cmd = [
        "ffmpeg", "-i", str(ref), "-i", str(distorted),
        "-lavfi",
        f"libvmaf=model_path=version=vmaf_v0.6.1:log_path={log}",
        "-f", "null", "-",
    ]
    subprocess.run(cmd, check=True, capture_output=True)
    data = json.loads(log.read_text())
    return data["pooled_metrics"]["vmaf"]["mean"]

def main():
    print(f"{'Codec':<6} {'Rate':>10} {'VMAF':>8} {'SizeKB':>8}")
    print("-" * 36)
    for name, cfg in CODECS.items():
        for rate in RATES:
            out = encode(name, cfg, rate)
            score = vmaf(SOURCE, out)
            size_kb = out.stat().st_size / 1024
            print(f"{name:<6} {rate:>10} {score:>8.2f} {size_kb:>8.1f}")

if __name__ == "__main__":
    main()

等 SVT-AV2 或 libaom-av2 进入 ffmpeg 主线后,把 CODECS 字典里的 "av2" 行取消注释就能直接跑对比。

落地前要想清楚的几件事

编码速度是第一道门槛。 AV1 刚发布时编码速度是业界吐槽的焦点,SVT-AV1 后来大幅改善了这个问题。AV2 的复杂度更高,初期编码速度大概率比 AV1 慢。如果你的场景是实时直播,需要等硬件编码器(Intel/AMD GPU 内置 AV2 编码单元)或 SVT-AV2 的速度优化版本。

解码端生态比编码端更关键。 视频平台切换编码标准,最大的阻力不在服务端而在客户端——浏览器、手机芯片、智能电视是否支持 AV2 硬解。AV1 从规范发布到主流浏览器全量支持花了大约 3 年。AV2 大致也会走同样的周期。建议现在做的是:

  • 在播放器层预留 codec 降级链:AV2 → AV1 → H.264;
  • 用 HTTP Accept 头或客户端能力上报动态选择编码版本;
  • CDN 缓存策略按 codec 分层,避免转码请求穿透到源站。

专利风险仍然为零,但迁移成本不是。 AOMedia 的核心价值是免专利费。从 H.264/H.265 迁移到 AV2,许可费用直接消失。但迁移本身有成本:转码集群要升级、存储要重新编码存量视频、播放器要适配新解码路径。算一笔总账——如果你的视频业务带宽成本占总成本 15% 以上,AV2 的 ROI 很可能在 12-18 个月内转正。

检查清单:AV2 适配准备

事项 状态 备注
ffmpeg AV2 编码器支持 待跟进 关注 libaom/SVT-AV2 合入主线进度
浏览器 AV2 硬解支持 待跟进 Chrome/Edge/Firefox 需等新版本
移动端芯片 AV2 解码 待跟进 2027 年新 SoC 大概率内置
播放器降级链配置 现在可做 AV2→AV1→H.264 三级降级
VMAF 基准测试框架 现在可做 用上文脚本跑 AV1 基准,后续加 AV2
CDN 多 codec 缓存策略 现在可做 按 codec 参数分缓存 key
存量视频重编码计划 规划中 优先重编码热门内容,冷内容按需转码

AV2 规范的发布是起点,不是终点。真正的工作在编码器实现、解码生态、业务适配这三条线上同步推进。现在跑好 AV1 的基准数据、搭好降级链,等 AV2 工具链成熟时就能最快切换——带宽账单会告诉你这个决策值不值。


相关推荐