用途

本部分针对基于文件的编码(即未直播)提供 VP9 编码设置建议。

这些建议旨在实现以下目标:

  • 在质量和编码速度之间取得平衡
  • 实现合理质量的最低比特率
  • 可适应各种内容类型的设置

这些建议不会:

  • 地址动态编码
  • 针对特定内容类型(例如高动态度体育视频片段)进行优化
  • 根据具体设备或网络要求配置设置

单分辨率编码

VP9 支持一系列从较小分辨率到 4K 的帧大小。帧尺寸越大,画质越高,但所需的带宽和传输处理能力也会越高。

如果您要创建单一分辨率,640x480 在各种网页和移动设备上都比较安全。以下 FFmpeg 命令行参数允许您创建 750kbps 的单分辨率文件。

-vf scale=640x480 -b:v 750k -quality good -speed 0 -crf 33 \
  -c:v libvpx-vp9 -c:a libopus output.webm

多分辨率编码

如果您计划定位多个分辨率,或者您的传送网络具有不同的带宽,建议您创建多个分辨率。然后,您的播放器便可以控制向观看者发送哪种分辨率的图像。

多分辨率视频编码常用于自适应比特率流式传输,在这种视频流中,视频播放器会根据用户的带宽在分辨率之间实时切换。例如,Shaka 播放器允许您播放多分辨率编码,其中每个 VP9 编码位于一个单独的文件中,而 DASH 清单提供有关每个编码的信息。

如需详细了解如何以自适应流式传输格式打包视频,请参阅 Shaka 打包器。本指南将重点介绍适用于多种分辨率的 VP9 编码设置。

以下所有设置均可用于不同分辨率的单个文件,两者一起提供适合自适应流式传输的综合集。请注意,640x480 版本有两个版本,一个低质量 (LQ),另一个中等质量 (MQ)。

比特率

在对 VP9 文件进行编码以按需观看时,建议使用受限质量 (CQ) 模式。这种编码模式可让您指定目标平均比特率,同时控制视频的最高质量和最小和最大比特率。

建议将以下比特率作为网络和移动分发的基准。这些建议可将比特率控制在最低水平,以便确保视频质量适合消费者网站和移动分发;您可将这些建议视为仍可实现合理质量的“低”比特率建议。

对于上述示例,建议将最低比特率设为目标比特率的 50%,最大比特率设为目标值的 145%。

帧大小/帧速率 目标比特率(VOD、kbps) 最小比特率 (50%) 最大比特率 (145%)
320x240p @ 24,25,30 150 75 “打开地图并查看您的位置”
640x360p @ 24,25,30 276 138 400
640x480p,24,25,30 512 (LQ)、750 (MQ) 256 (LQ) 375 (MQ) 742 (LQ) 1088 (MQ)
1280x720p @ 24,25,30 1024 512 1485
1280x720p @ 50.60 1800 900 2610
1920x1080p @ 24、25,30 1800 900 2610
1920x1080p @ 50.60 3000 1500 4350
2560x1440p @ 24、25、30 6000 3000 8700
2560x1440p @ 50.60 9000 4500 13050
3840x2160p @ 24,25,30 12000 6000 17400
3840x2160p @ 50.60 18000 9000 26100

图 2a:推荐的 VOD 比特率

在 FFmpeg 中,比特率由以下命令控制:

FFMPeg
-b:v <arg> 设置比特率(例如 500k)
-minrate <arg>
-maxrate <arg>
设置最小和最大比特率。

例如,对 640x480 内容进行编码时,您可以使用命令行 -b:v 750k -minrate 375 -maxrate 1088

质量

在 CQ 模式下,您还可以设置最高质量级别。对于文件级 VP9 编码,建议具有以下质量级别:

帧高度 目标质量 (CQ)
240 37
360 36
480 34 (LQ) 或 33 (MQ)
720 32
1080 31
1440 24
2160 15

在 FFmpeg 中,质量是使用 -crf 命令设置的。例如,要将画质设为 33,您可以使用命令 -crf 33

多通编码和编码速度

使用文件级编码可以灵活地提高速度。您还可以对同一材质执行多次遍历以提高质量,并为每种材质选择速度。

在 FFmpeg 中编码 VP9 文件时,建议将 -quality 参数设置为 good,然后使用 -speed 参数根据下表设置第一次和第二次遍历的速度。这样可以在编码时间和输出质量之间取得很好的平衡。

帧高度 速度(首次通过) 速度(第二次通行证)
240 4 1
360 4 1
480 4 1
720 4 2
1080 4 2
1440 4 2
2160 4 2

例如,FFmpeg 中的首次编码编码字符串可能包含 -quality good -speed 4

关键帧间距

建议允许在关键帧之间最多有 240 帧的视频(对于 30fps 的内容,则为 8 秒)。关键帧是自给自足的视频帧;它们不依赖任何其他帧来呈现,但往往比其他帧类型大。对于网页和移动设备播放,在关键帧之间留出足够的间距,可让编码器选择关键帧的最佳位置,从而最大限度地提升画质。

在 FFmpeg 中,关键帧间距使用 -g 命令控制,指示帧数。对于 240 帧,则为 -g 240

平铺和线程处理建议

平铺操作会将视频帧拆分为多个列,这略微降低画质,但会加快编码性能。图块必须至少为 256 像素,因此可使用的图块数量有限制。

根据图块数量和输出帧的分辨率,更多的 CPU 线程可能很有用。一般来说,当输出帧非常小时,多个线程的值有限。

建议使用以下设置来平铺和处理不同分辨率下的线程。

帧大小 并列列数 线程数
320x240 1(-tile-columns 0 2
640x360 2(-tile-columns 1 4
640x480 2(-tile-columns 1 4
1280x720 4(-tile-columns 2 8
1920x1080 4(-tile-columns 2 8
2560x1440 8 (-tile-columns 3) 16
3840x2160 8 (-tile-columns 3) 16

在 FFmpeg 中,图块数由 -tile-columns 参数和 -threads 的线程数控制。例如,640x480 编码会使用命令行 -tile-columns 2 -threads 4

FFmpeg 命令行

综合上述建议,可以使用以下 FFmpeg 命令对 VP9 内容进行编码。

请注意,第一个传递命令和第二个传递命令链接在一起。当 FFmpeg 请求使用输出视频覆盖第一项统计信息文件时,第二步命令中的 -y 参数答案为“是”。

另请注意,1080p 来源用于定位最高 1280x720 输出的编码。4K 源用于较大的输出。

320x240(24、25 或 30 帧/秒)

ffmpeg -i tears_of_steel_1080p.webm -vf scale=320x240 -b:v 150k \
  -minrate 75k -maxrate 218k -tile-columns 0 -g 240 -threads 2 \
  -quality good -crf 37 -c:v libvpx-vp9 -c:a libopus \
  -pass 1 -speed 4 tos-320x240.webm && \
ffmpeg -i tears_of_steel_1080p.webm -vf scale=320x240 -b:v 150k \
  -minrate 75k -maxrate 218k -tile-columns 0 -g 240 -threads 2 \
  -quality good -crf 37 -c:v libvpx-vp9 -c:a libopus \
  -pass 2 -speed 1 -y tos-320x240.webm

640x360(每秒 24 帧、25 帧或 30 帧)

ffmpeg -i tears_of_steel_1080p.webm -vf scale=640x360 -b:v 276k \
  -minrate 138k -maxrate 400k -tile-columns 1 -g 240 -threads 4 \
  -quality good -crf 36 -c:v libvpx-vp9 -c:a libopus \
  -pass 1 -speed 4 tos-640x360.webm && \
ffmpeg -i tears_of_steel_1080p.webm -vf scale=640x360 -b:v 276k \
  -minrate 138k -maxrate 400k -tile-columns 1 -g 240 -threads 4 \
  -quality good -crf 36 -c:v libvpx-vp9 -c:a libopus \
  -pass 2 -speed 4 -y tos-640x360.webm

640x480(低画质,24、25 或 30 帧/秒)

ffmpeg -i tears_of_steel_1080p.webm -vf scale=640x480 -b:v 512k \
  -minrate 256k -maxrate 742k -tile-columns 1 -g 240 -threads 4 \
  -quality good -crf 34 -c:v libvpx-vp9 -c:a libopus \
  -pass 1 -speed 4 tos-640x360-low.webm && \
ffmpeg -i tears_of_steel_1080p.webm -vf scale=640x480 -b:v 512k \
  -minrate 256k -maxrate 742k -tile-columns 1 -g 240 -threads 4 \
  -quality good -crf 34 -c:v libvpx-vp9 -c:a libopus \
  -pass 2 -speed 4 -y tos-640x480-low.webm

640x480(中等质量,24、25 或 30 帧/秒)

ffmpeg -i tears_of_steel_1080p.webm -vf scale=640x480 -b:v 750k \
  -minrate 375k -maxrate 1088k -tile-columns 1 -g 240 -threads 4 \
  -quality good -crf 33 -c:v libvpx-vp9 -c:a libopus \
  -pass 1 -speed 4 tos-640x360-medium.webm && \
ffmpeg -i tears_of_steel_1080p.webm -vf scale=640x480 -b:v 750k \
  -minrate 375k -maxrate 1088k -tile-columns 1 -g 240 -threads 4 \
  -quality good -crf 33 -c:v libvpx-vp9 -c:a libopus \
  -pass 2 -speed 4 -y tos-640x480-medium.webm

1280x720(每秒 24 帧、25 帧或 30 帧)

ffmpeg -i tears_of_steel_1080p.webm -vf scale=1280x720 -b:v 1024k \
  -minrate 512k -maxrate 1485k -tile-columns 2 -g 240 -threads 8 \
  -quality good -crf 32 -c:v libvpx-vp9 -c:a libopus \
  -pass 1 -speed 4 tos-1280x720-24-30fps.webm && \
ffmpeg -i tears_of_steel_1080p.webm -vf scale=1280x720 -b:v 1024k \
  -minrate 512k -maxrate 1485k -tile-columns 2 -g 240 -threads 8 \
  -quality good -crf 32 -c:v libvpx-vp9 -c:a libopus \
  -pass 2 -speed 4 -y tos-1280x720-24-30fps.webm

1280x720(每秒 50 或 60 帧)

ffmpeg -i tears_of_steel_1080p.webm -vf scale=1280x720 -b:v 1800k \
  -minrate 900k -maxrate 2610k -tile-columns 2 -g 240 -threads 8 \
  -quality good -crf 32 -c:v libvpx-vp9 -c:a libopus \
  -pass 1 -speed 4 tos-1280x720-50-60fps.webm && \
ffmpeg -i tears_of_steel_1080p.webm -vf scale=1280x720 -b:v 1800k \
  -minrate 900k -maxrate 2610k -tile-columns 2 -g 240 -threads 8 \
  -quality good -crf 32 -c:v libvpx-vp9 -c:a libopus \
  -pass 2 -speed 4-y tos-1280x720-50-60fps.webm

1920x1080(24、25 或 30 帧/秒)

ffmpeg -i tearsofsteel_4k.mov -vf scale=1920x1080 -b:v 1800k \
  -minrate 900k -maxrate 2610k -tile-columns 2 -g 240 -threads 8 \
  -quality good -crf 31 -c:v libvpx-vp9 -c:a libopus \
  -pass 1 -speed 4 tos-1920x1080-24-30fps.webm && \
ffmpeg -i tearsofsteel_4k.mov -vf scale=1920x1080 -b:v 1800k \
  -minrate 900k -maxrate 2610k -tile-columns 3 -g 240 -threads 8 \
  -quality good -crf 31 -c:v libvpx-vp9 -c:a libopus \
  -pass 2 -speed 4 -y tos-1920x1080-24-30fps.webm

1920x1080(每秒 50 或 60 帧)

ffmpeg -i tearsofsteel_4k.mov -vf scale=1920x1080 -b:v 3000k \
  -minrate 1500k -maxrate 4350k -tile-columns 2 -g 240 -threads 8 \
  -quality good -crf 31 -c:v libvpx-vp9 -c:a libopus \
  -pass 1 -speed 4 tos-1920x1080-50-60fps.webm && \
ffmpeg -i tearsofsteel_4k.mov -vf scale=1920x1080 -b:v 3000k \
  -minrate 1500k -maxrate 4350k -tile-columns 3 -g 240 -threads 8 \
  -quality good -crf 31 -c:v libvpx-vp9 -c:a libopus \
  -pass 2 -speed 4 -y tos-1920x1080-50-60fps.webm

2560x1440(24、25 或 30 帧/秒)

ffmpeg -i tearsofsteel_4k.mov -vf scale=2560x1440 -b:v 6000k \
  -minrate 3000k -maxrate 8700k -tile-columns 3 -g 240 -threads 16 \
  -quality good -crf 24 -c:v libvpx-vp9 -c:a libopus \
  -pass 1 -speed 4 tos-2560x1440-24-30fps.webm && \
ffmpeg -i tearsofsteel_4k.mov -vf scale=2560x1440 -b:v 6000k \
  -minrate 3000k -maxrate 8700k -tile-columns 3 -g 240 -threads 16 \
  -quality good -crf 24 -c:v libvpx-vp9 -c:a libopus \
  -pass 2 -speed 4 -y tos-2560x1440-24-30fps.webm

2560x1440(每秒 50 或 60 帧)

ffmpeg -i tearsofsteel_4k.mov -vf scale=2560x1440 -b:v 9000k \
  -minrate 4500k -maxrate 13050k -tile-columns 3 -g 240 -threads 16 \
  -quality good -crf 24 -c:v libvpx-vp9 -c:a libopus \
  -pass 1 -speed 4 tos-2560x1440-50-60fps.webm && \
ffmpeg -i tearsofsteel_4k.mov -vf scale=2560x1440 -b:v 9000k \
  -minrate 4500k -maxrate 13050k -tile-columns 3 -g 240 -threads 16 \
  -quality good -crf 24 -c:v libvpx-vp9 -c:a libopus \
  -pass 2 -speed 4 -y tos-2560x1440-50-60fps.webm

3840x2160(24、25 或 30 帧/秒)

ffmpeg -i tearsofsteel_4k.mov -vf scale=3840x2160 -b:v 12000k \
  -minrate 6000k -maxrate 17400k -tile-columns 3 -g 240 -threads 24 \
  -quality good -crf 15 -c:v libvpx-vp9 -c:a libopus \
  -pass 1 -speed 4 tos-3840x2160-24-30fps.webm && \
ffmpeg -i tearsofsteel_4k.mov -vf scale=3840x2160 -b:v 12000k \
  -minrate 6000k -maxrate 17400k -tile-columns 3 -g 240 -threads 24 \
  -quality good -crf 15 -c:v libvpx-vp9 -c:a libopus \
  -pass 2 -speed 4 -y tos-3840x2160-24-30fps.webm

3840x2160(每秒 50 或 60 帧)

ffmpeg -i tearsofsteel_4k.mov -vf scale=3840x2160 -b:v 18000k \
  -minrate 9000k -maxrate 26100k -tile-columns 3 -g 240 -threads 24 \
  -quality good -crf 15 -c:v libvpx-vp9 -c:a libopus \
  -pass 1 -speed 4 tos-3840x2160-50-60fps.webm && \
ffmpeg -i tearsofsteel_4k.mov -vf scale=3840x2160 -b:v 18000k \
  -minrate 9000k -maxrate 26100k -tile-columns 3 -g 240 -threads 24 \
  -quality good -speed 4 -crf 15 -c:v libvpx-vp9 -c:a libopus \
  -pass 2 -y tos-3840x2160-50-60fps.webm