基本编码

视频压缩基础知识

本部分将介绍 VP9 编码的基本选项,包括帧大小、基本比特率控制和质量。

如果您对视频压缩不熟悉,建议您观看此视频,详细了解视频压缩的需求及其工作原理。

简单的编码

以下 FFmpeg 命令会使用 Opus 音频将输入文件转换为 VP9 视频。这是使用默认设置的最简单的编码。

ffmpeg -i tears_of_steel_1080p.webm -c:v libvpx-vp9 -c:a libopus output.webm

此 FFmpeg 编码使用以下命令行参数:

FFMPeg
-i <filename> 指定输入文件名
-c:v libvpx-vp9 指示 FFmpeg 创建 VP9 视频
-c:a libopus 指示 FFmpeg 创建 Opus 音频
output.webm 指定输出文件名

FFmpeg 会根据您使用的输出文件名推断出要创建的文件类型。在此示例中,FFmpeg 将输出 WebM 文件,因为我们请求了 output.webm

解决方案

每个视频都有帧尺寸(表示像素宽度和高度)。以下 FFmpeg 命令行参数可用于控制 VP9 编码的输出视频帧大小:

FFMPeg
-vf scale=<width>x<height> 帧宽度和高度

例如,以下 FFmpeg 命令将会输出一个 640x480 VP9 WebM 视频。

ffmpeg -i tears_of_steel_1080p.webm -vf scale=640x480 \
  -c:v libvpx-vp9 -c:a libopus output.webm

分辨率越低,质量越高,但分辨率越高,解码所需的带宽和处理能力越强,而在旧款设备上可能不受支持。对于 VP9,640x480 被视为在众多移动设备和 Web 设备上都能使用的安全分辨率。

比特率(比特率)

VP9 支持多种不同的比特率模式:

模式
常量量子 (Q) 允许您指定固定的量化值;比特率会有所不同
约束质量 (CQ) 允许您设置最高质量级别。比特率参数可能因质量而异
可变比特率 (VBR) 在比特率限制期间平衡画质和比特率
恒定比特率 (CBR) 尝试在比特率各不相同的情况下保持比特率相当稳定

对于文件级视频(而非直播视频),我们建议使用 CQ 模式。 以下 FFmpeg 命令行参数用于 CQ 模式:

FFMPeg
-b:v <arg> 设置目标比特率(例如 500k)
-minrate <arg>
-maxrate <arg>
设置最小和最大比特率。
-crf <arg> 设置最高质量级别。有效值为 0-63,数字越小表示质量越高。

例如,以下 FFmpeg 命令将使用 CQ 模式创建一个中等质量的 640x480 视频文件,平均比特率为 750kbps,最大质量限制为 33。

ffmpeg -i tears_of_steel_1080p.webm -vf scale=640x480 \
  -b:v 750k -crf 33 -c:v libvpx-vp9 -c:a libopus output.webm

比特率取决于您希望实现的质量以及视频的分辨率。您可在此处找到针对不同分辨率的比特率的完整建议。

画质和速度设置

压缩视频会在输出质量与创建输出所需的时间之间权衡取舍。一般来说,您可以通过留出更多编码时间来提高质量,但获得最高质量所需的时间可能并不切实际。

VP9 提供了多种设置来平衡质量和速度:

  • 质量设置会指示编码器压缩视频的方式。可用模式最佳、良好和实时。

  • 线程设置允许编码器使用多个 CPU 线程对视频进行编码。这些设置可能会稍微降低画质,但可显著提高编码和解码速度。

这两类设置由多个命令行参数控制:

FFMPeg
-threads 表示编码过程中要使用的线程数。
-quality 可以设为 goodbestrealtime
-speed 根据质量是设为 good 还是 realtime,此参数具有不同的含义。速度设置 0-4 适用于 goodbest 中的 VoD,其中 0 为最高画质,4 为最低画质。Realtime 有效值为 5-8;数值越低表示质量越高
-tile-columns 平铺操作会将视频拆分为矩形区域,以支持多线程编码和解码。平铺图片数量始终是 2 的幂。0=1 个图块,1=2,2=4,3=8,4=16,5=32。

以下 FFmpeg 命令将创建一个 640x480 的文件,画质设为 'good' 且速度设置为 0(高画质):

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

您选择的画质和速度设置可能会因分辨率和可用处理能力而异。您可以在下一部分找到全套建议。