Featured image of post AV1 编码测试

AV1 编码测试

结合 VMAF 视觉质量评估的 SVT-AV1 编码方法

准备工作

本方案使用 ab-av1 开源编码工具。所需依赖:ffmpeg 版本大于 git-2022-02-24,编译时已启用 libsvtav1, libvmaf & libopus。

  1. ab-av1
  2. FFmpeg-Builds

原片

Blender 基金会免费提供的《钢铁之泪》。4K 分辨率,mov 容器,6.3 GB。

命令行

1
.\ab-av1.exe auto-encode --svt tune=0 --vfilter "scale=1920:-2:flags=lanczos" --pix-format yuv420p --acodec libopus --downmix-to-stereo -i D:\tearsofsteel_4k.mov --preset 2 --min-vmaf 96 -o D:\tearsofsteel.webm

命令行拆解

参数说明
auto-encode根据 --min-vmaf 提供的值搜寻最佳 crf 匹配值,并自动进行编码。
–svt tune=0为视觉质量优化编码过程。[0 = VQ, 1 = PSNR, 2 = SSIM, 3 = IQ]
–vfilter “scale=1920:-2:flags=lanczos”调用 ffmpeg 缩放滤镜,缩放后宽度为 1920,高度需为偶数;缩放算法使用 lanczos。
–pix-format yuv420p指定像素格式为 yuv420p,如果未指定的话会使用默认值 yuv420p10le。
–acodec libopus指定音频编码器为 libopus,默认码率为 128 kb/s。
–downmix-to-stereo多声道转换为立体声。
-i D:\tearsofsteel_4k.mov输入 ffmpeg 要处理的视频文件,其他 ffmpeg 参数应该在这之前。
–preset 2较低的预设使用更多功能,生成更高效的文件,需要更多的计算时间。
–min-vmaf 96普遍认为 vmaf 大于或等于 95,视觉上接近无损。
-o D:\tearsofsteel.webm指定输出为 webm 容器,否则默认是 mkv 容器。

在线播放验证

这里遇到一个问题:cloudflare pages 不支持 video/webm 格式的 content-lengthaccept-ranges 这两个标头,会导致首次播放的时候无法拖动进度条,所以视频我选择存放在 R2。

总结

最终生成的 1080p 视频文件,视频码率仅需要 1500 kb/s 即可达到肉眼无损的条件。回想以前做 x264 转码的时候,视频码率一般都会给 2000~3000 kb/s,60fps 的还会给更多,或者有体积限定的话会根据体积来计算码率。现在这种通过 vmaf 模型来评估视频质量的方法,确实又是一个新的里程碑了,原来万物皆可大模型。