VOD 的推荐设置
用途
本部分针对执行基于文件的编码(即非实时编码)时 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 Player 可让您播放多分辨率编码,其中每个 VP9 编码都位于单独的文件中,并且 DASH 清单提供有关每个编码的信息。
如需详细了解如何以自适应流式传输格式打包视频,请参阅 Shaka Packager。本指南将重点介绍 VP9 在多种分辨率下的编码设置。
建议的设置
以下所有设置均可用于各种分辨率的单个文件,它们组合在一起可提供一套适用于自适应流式传输的全面设置。请注意,640x480 版本有两个版本,一个是低质量 (LQ) 版本,另一个是中等质量 (MQ) 版本。
比特率
建议在对 VP9 文件进行编码以供按需观看时使用受限质量 (CQ) 模式。这种编码模式允许您指定目标平均比特率,同时控制视频的最大质量以及最小和最大比特率。
建议将以下比特率作为网页和移动设备分发的基准。这些建议可最大限度地降低比特率,同时实现适合在面向消费者的网站和移动设备上分发的视频画质;您可以将这些建议视为“低”比特率建议,但仍可实现合理的画质。
对于上述示例,建议将最低比特率设置为目标比特率的 50%,将最高比特率设置为目标比特率的 145%。
帧大小/帧速率 | 目标比特率(视频点播,kbps) | 最低比特率 (50%) | 最高比特率 (145%) |
---|---|---|---|
320x240p @ 24、25、30 | 150 | 75 | 218 |
640x360p @ 24、25、30 | 276 | 138 | 400 |
640x480p @ 24、25、30 | 512(LQ)、750(MQ) | 256(低质量)375(中等质量) | 742(低品质)1088(中品质) |
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(低质量)或 33(中等质量) |
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 ) |
1 |
640x360 | 2 (-tile-columns 1 ) |
2 |
640x480 | 2 (-tile-columns 1 ) |
2 |
1280x720 | 4 (-tile-columns 2 ) |
4 |
1920x1080 | 4 (-tile-columns 2 ) |
4 |
2560x1440 | 8 (-tile-columns 3 ) |
8 |
3840x2160 | 8 (-tile-columns 3 ) |
8 |
在 FFmpeg 中,图块数量由 -tile-columns
参数控制,线程数量由 -threads
控制。例如,640x480 编码会使用命令行 -tile-columns 1 -threads 2
。
FFmpeg 命令行
综合考虑上述建议,可以使用以下 FFmpeg 命令对 VP9 内容进行编码。
请注意,第一遍和第二遍命令是链接在一起的。在第二遍命令中,当 FFmpeg 要求使用输出视频覆盖第一遍统计信息文件时,-y
实参会回答“是”。
另请注意,对于目标输出分辨率不超过 1280x720 的编码,系统会使用 1080p 的源。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 1 \ -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 1 \ -quality good -crf 37 -c:v libvpx-vp9 -c:a libopus \ -pass 2 -speed 1 -y tos-320x240.webm
- 输入文件:tears_of_steel_1080p.webm (1920x800, 544.88 MB)
- 输出文件:tos-320x240.webm (320x240,21.73 MB)
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 2 \
-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 2 \
-quality good -crf 36 -c:v libvpx-vp9 -c:a libopus \
-pass 2 -speed 1 -y tos-640x360.webm
- 输入文件:tears_of_steel_1080p.webm (1920x800, 544.88 MB)
- 输出文件:tos-640x360.webm (640x360,31.53 MB)
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 2 \
-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 2 \
-quality good -crf 34 -c:v libvpx-vp9 -c:a libopus \
-pass 2 -speed 1 -y tos-640x480-low.webm
- 输入文件:tears_of_steel_1080p.webm (1920x800, 544.88 MB)
- 输出文件:tos-640x480-low.webm (640x480,51.18 MB)
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 2 \
-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 2 \
-quality good -crf 33 -c:v libvpx-vp9 -c:a libopus \
-pass 2 -speed 1 -y tos-640x480-medium.webm
- 输入文件:tears_of_steel_1080p.webm (1920x800, 544.88 MB)
- 输出文件:tos-640x480-medium.webm (640x480,69.27 MB)
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 4 \
-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 4 \
-quality good -crf 32 -c:v libvpx-vp9 -c:a libopus \
-pass 2 -speed 2 -y tos-1280x720-24-30fps.webm
- 输入文件:tears_of_steel_1080p.webm (1920x800, 544.88 MB)
- 输出文件:tos-1280x720-24-30fps.webm (1280x720,98.2 MB)
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 4 \
-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 4 \
-quality good -crf 32 -c:v libvpx-vp9 -c:a libopus \
-pass 2 -speed 2-y tos-1280x720-50-60fps.webm
- 输入文件:tears_of_steel_1080p.webm (1920x800, 544.88 MB)
- 输出文件:tos-1280x720-50-60fps.webm (1280x720, 157.1 MB)
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 4 \
-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 4 \
-quality good -crf 31 -c:v libvpx-vp9 -c:a libopus \
-pass 2 -speed 2 -y tos-1920x1080-24-30fps.webm
- 输入文件:tearsofsteel_4k.mov (3840x1714, 6.76 GB)
- 输出文件:tos-1920x1080-24-30fps.webm (1920x1080,151.51 MB)
1920x1080(50 或 60 帧/秒)
ffmpeg -i tearsofsteel_4k.mov -vf scale=1920x1080 -b:v 3000k \
-minrate 1500k -maxrate 4350k -tile-columns 2 -g 240 -threads 4 \
-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 4 \
-quality good -crf 31 -c:v libvpx-vp9 -c:a libopus \
-pass 2 -speed 2 -y tos-1920x1080-50-60fps.webm
- 输入文件:tearsofsteel_4k.mov (3840x1714, 6.76 GB)
- 输出文件:tos-1920x1080-50-60fps.webm (1920x1080,238.18 MB)
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 8 \
-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 8 \
-quality good -crf 24 -c:v libvpx-vp9 -c:a libopus \
-pass 2 -speed 2 -y tos-2560x1440-24-30fps.webm
- 输入文件:tearsofsteel_4k.mov (3840x1714, 6.76 GB)
- 输出文件:tos-2560x1440-24-30fps.webm 2560x1440,533.54 MB
2560x1440(每秒 50 或 60 帧)
ffmpeg -i tearsofsteel_4k.mov -vf scale=2560x1440 -b:v 9000k \
-minrate 4500k -maxrate 13050k -tile-columns 3 -g 240 -threads 8 \
-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 8 \
-quality good -crf 24 -c:v libvpx-vp9 -c:a libopus \
-pass 2 -speed 2 -y tos-2560x1440-50-60fps.webm
- 输入文件:tearsofsteel_4k.mov (3840x1714, 6.76 GB)
- 输出文件:tos-2560x1440-50-60fps.webm 2560x1440,664.04 MB)
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 8 \
-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 8 \
-quality good -crf 15 -c:v libvpx-vp9 -c:a libopus \
-pass 2 -speed 2 -y tos-3840x2160-24-30fps.webm
- 输入文件:tearsofsteel_4k.mov (3840x1714, 6.76 GB)
- 输出文件:tos-3840x2160-24-30fps.webm 3840x2160,1.03 GB)
3840x2160(每秒 50 或 60 帧)
ffmpeg -i tearsofsteel_4k.mov -vf scale=3840x2160 -b:v 18000k \
-minrate 9000k -maxrate 26100k -tile-columns 3 -g 240 -threads 8 \
-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 8 \
-quality good -speed 2 -crf 15 -c:v libvpx-vp9 -c:a libopus \
-pass 2 -y tos-3840x2160-50-60fps.webm
- 输入文件:tearsofsteel_4k.mov (3840x1714, 6.76 GB)
- 输出文件:tos-3840x2160-50-60fps.webm 3840x2160,1.56 GB)