建议的设置
本部分列出了针对各种常见配置的 VP9 编码建议:
- 针对网站和移动设备(VOD)高度优化的视频
- 优质内容分发(视频点播)
- 体育、动画、10 位内容 (VOD)
- 直播编码
- WebRTC
简介
在对视频进行编码时,需要考虑以下几个方面:
- 您是创建单个版本的媒体内容,还是创建多个不同比特率和分辨率的版本?
- 您要创建的是直播视频流还是点播视频文件?
- 您要编码的是哪种类型的媒体 - 是否包含大量运动画面?详细信息? 动画?
- 您是希望以最高质量(例如付费内容)还是最快速度(例如网络会议)进行编码?
本部分首先介绍基本点播视频文件的设置,然后针对上述所有问题提供建议。
基本设置
编码码率
建议将以下比特率作为网页和移动设备分发的基准。这些建议可最大限度地降低比特率,同时实现适合在面向消费者的网站和移动设备上分发的视频画质;您可以将这些建议视为“低”比特率建议,但仍可实现合理的画质。
建议的目标比特率
帧大小/速率 | 平均比特率(视频点播,kbps) | 平均比特率(直播,kbps) |
---|---|---|
320x240p @ 24、25、30 | 150 | 250 |
640x360p @ 24、25、30 | 276 | 386 |
640x480p @ 24、25、30 | 512(LQ)、750(MQ) | 720 (LQ)、1024 (MQ) |
1280x720p @ 24、25、30 | 1024 | 1440 |
1280x720p @ 50、60 | 1800 | 2500 |
1920x1080p @ 24、25、30 | 1800 | 2500 |
1920x1080p @ 50、60 | 3000 | 4200 |
2560x1440p @ 24、25、30 | 6000 | 8400 |
2560x1440p @ 50,60 | 9000 | 12600 |
3840x2160p @ 24、25、30 | 12000 | 16800 |
3840x2160p @ 50、60 | 18000 | 25200 |
图 2a:目标比特率
VOD 编码设置
适用于大多数类型内容的设置
对于大多数内容类型,我们建议使用受限质量 (CQ) 模式,并设置比特率上限。大多数视频都包含高动态场景(例如动作序列)和细节较少的场景(例如对话)的混合内容。在较长、较简单的场景中,CQ 模式可让编码器保持合理的质量水平(不会浪费比特),同时为复杂的序列分配更多比特。
我们还建议允许比特率范围为目标值的 50% 到 150%,并使用下表所示的质量值。此模式需要进行双遍编码,建议对 HD 及更高分辨率使用较快的设置,如下所示。
CQ 编码的编码器设置
帧高度 | 目标质量 (CQ) | 编码模式 |
---|---|---|
240 | 37 | TWO_PASS_MEDIUM |
360 | 36 | TWO_PASS_MEDIUM |
480 | 34(低质量)或 33(中等质量) | TWO_PASS_MEDIUM |
720 | 32 | TWO_PASS_FAST |
1080 | 31 | TWO_PASS_FAST |
1440 | 24 | TWO_PASS_FAST |
2160 | 15 | TWO_PASS_FAST |
图 2b:CQ 推荐的设置
最后,我们建议在关键帧之间放置 240 帧视频(对于 30fps 的内容,这相当于 8 秒)。关键帧是自给自足的视频帧;它们不依赖于任何其他帧来渲染(有关更详细的说明,请参阅“GOP 结构”)。对于网页和移动设备播放,我们允许在关键帧之间留出充足的间隔,因为这样编码器就可以选择“最佳”关键帧放置位置,从而最大限度地提高质量。
命令行参数示例:640x360 视频
根据上表,360p 视频的建议如下:
- CQ 水平为 36(见图 2b)
- 目标比特率为 276kbps(见图 2a)
- 允许的最低比特率为 138kbps(目标值的 50%)
- 允许的最大比特率为 414kbps(目标值的 150%)
- 关键帧间隔时间上限为 240 秒
- 双遍“中”配置文件
这会为 libvpx 和 FFmpeg 提供以下命令行参数:
libvpx
--end-usage=cq --cq-level=36 --target-bitrate=276 --minsection-pct=50 \
--maxsection-pct=150 --kf-max-dist=240 --passes=2 --good --cpu-used=2
FFmpeg
-crf 36 -b:v 276k -minrate 138k -maxrate 414k -g 240 -good -speed 2
Premium 内容设置
在上面的示例中,我们使用了相当快的编码设置来高效创建视频流。不过,对于某些内容(例如付费电影),值得在编码期间花费更多时间,以获得更高质量的输出。
对于优质内容,我们建议采用与上述相同的设置,但使用不同的预设,指示编码器花费更多时间来优化质量:
优质内容编码模式和命令行参数
帧高度 | 编码模式 | libvpx | FFmpeg |
---|---|---|---|
240 | TWO_PASS_VERY_SLOW |
--good --cpu-used 0 |
-good -speed 0 |
360 | TWO_PASS_VERY_SLOW |
--good --cpu-used 0 |
-good -speed 0 |
480 | TWO_PASS_VERY_SLOW |
--good --cpu-used 0 |
-good -speed 0 |
720 | TWO_PASS_SLOW |
--good --cpu-used 1 |
-good -speed 1 |
1080 | TWO_PASS_MEDIUM |
--good --cpu-used 2 |
-good -speed 2 |
1440 | TWO_PASS_MEDIUM |
--good --cpu-used 2 |
-good -speed 2 |
2160 | TWO_PASS_MEDIUM |
--good --cpu-used 2 |
-good -speed 2 |
图 2c:优质内容编码模式
体育、高动态内容设置
我们建议对体育内容使用 VBR 编码。体育内容往往具有相当一致的高运动和复杂性,与 QP 编码相比,使用 VBR 在运动较少的时段可实现更高的质量。
对于命令行,QP 模式与 VBR 模式之间的主要区别在于,您无需指定 CQ 级别;否则,建议的设置是相同的。
VBR 命令行参数示例:640x360 视频
libvpx
--end-usage=vbr --target-bitrate=276 --minsection-pct=50 --maxsection-pct=150 \
--kf-max-dist=240 --passes=2 --good --cpu-used=2
FFmpeg
-b:v 276k -minrate 138k -maxrate 414k -g 240 -good -speed 2
动画和游戏设置
含噪声 / 低质量内容设置
对于噪声较大的内容,我们建议增加替代参考帧的数量和强度。替代参考帧是“不可见”的帧,永远不会向用户显示,但在创建最终帧时会用作参考(您可以在此处阅读更多信息)。
建议使用以下参数来指示 VP9 使用更多替代参考帧:
libvpx
--auto-alt-ref=1 --lag-in-frames-16 --arnr-maxframes=5 --arnr-strength=3
FFmpeg
10 位/HDR 编码
对于 10 位编码,您需要使用 VP9 Profile 2。10 位编码不需要更多位,因此其余参数相同:
libvpx
--profile=2
FFmpeg
-profile 2
直播编码设置
直播
实时编码通常以 CBR 模式完成,这会限制编码器最大限度提高质量的能力。因此,我们将使用更高的比特率,如图 2a 所示。
对于实时编码,我们还希望最大限度地提高线程数。这是通过以下操作实现的:
- 允许 VP9 将视频拆分为列(宽度不得小于 256 像素,且必须是 2 的幂);
- 指示 VP9 使用更多 CPU 电源。下表列出了针对每种分辨率的建议。
平铺和线程建议
CQ 编码的编码器设置
帧大小 | 平铺列数 | 线程数 |
---|---|---|
320x240 | 1 | 2 |
640x360 | 2 | 4 |
640x480 | 2 | 4 |
1280x720 | 4 | 8 |
1920x1080 | 4 | 8 |
2560x1440 | 8 | 16 |
3840x2160 | 8 | 16 |
图 2d。建议的实时编码分块和线程处理
实时编码还会将截止时间设置为“实时”,以确保性能,并指示备用参考帧不要预测未来(这会引入延迟):
由此,我们针对 360p 直播视频给出的建议如下:
- CBR,目标比特率为 386kbps(见图 2a)
- 2 个图块列(参见图 2d)
- 4 个线程(见图 2d)
- 实时表现
- 没有因交替帧而产生的延迟(没有帧滞后)
这会为 libvpx 和 FFmpeg 提供以下命令行参数:
libvpx
--end-usage=cbr --target-bitrate=386 --cpu-used=4 --tile-columns=2 --rt --lag-in-frames=0
FFmpeg
ffmpeg -i tears_of_steel_1080p.webm -vf scale=640x480 -r 29.97 -b:v 386k \
-minrate 386k -maxrate 386k -c:v libvpx-vp9 -c:a libopus output.webm