基本编码

视频压缩基础知识

本部分介绍了 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 被认为是适用于各种移动设备和网络设备的安全分辨率。

比特率(码率)

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 中的视频点播内容,其中 0 为最高质量,4 为最低质量。Realtime 的有效值为 5-8;数值越低,质量越高
-tile-columns 平铺将视频拆分为矩形区域,从而实现多线程编码和解码。图块数量始终为 2 的幂。0=1 个图块,1=2,2=4,3=8,4=16,5=32。

以下 FFmpeg 命令将创建一个 640x480 文件,并将质量设置为“良好”,速度设置为 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

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