理解 x264、x265、vpx 中的码率控制模式

原文: https://slhck.info/video/2017/03/01/rate-control.html
原文时间:2017.03.01
翻译时间:2019.01.30

原文可能还在持续更新(最近一次是2018年8月),如有疑问请先查看原文和变动

什么是“码率控制”?它指的是视频编码器如何决定用多少比特数据来编码一帧画面。(有损)视频编码的目的就是在尽量保证源视频质量的同时,尽可能减少输出文件的大小。在权衡文件大小和视频质量的过程中,码率控制是至关重要的一步。

码率控制体现在多种形式上——你将会了解到 “1-pass(一次编码)” 和 “2-pass(二次编码)”、“CBR(固定码率)” 和 “VBR(动态码率)”,或许你还能知道 “VBV编码(视频缓存检验器)” 或者 “CRF(固定码率因子)”

为什么需要关心这些?我们已经看够那些用了错码率控制模式或者错误码率的视频编码命令。这篇文章是一份不同码率控制模式的简明指导,会为最终用户解释它们的适用场景。注意这不是一份码率失真优化的详细说明书。

序言:动态 vs. 固定 码率

很多人可能对音频编码器的码率控制更加熟悉,特别是那些像我一样伴随着MP3成长起来的人。为了翻录CD,我们一度使用固定码率(CBR)进行编码,直到后来动态码率编码(VBR)的出现。动态的码率确保在给定条件限制(VBR质量等级)的情况下,能得到尽可能小的文件大小和尽可能高的视频质量。

简单来说,VBR能让编码器在视频容易被压缩的部分节省数据空间,留给那些 “难以编码的内容”。怎么区分压缩的难易度呢?比如视频中大多运动部分,编码时都需要更多数据空间,因为连续视频帧之间的内容差别会更大。高空间细节和复杂纹理也一样难以编码。

编码场景是什么?

选择哪种码率控制模式和你的实际用例是强关联的。以下列举的不同场景都会影响你在设计编码管线时做出的选择:

  1. 归档用 —— 被压缩的文件用于在外部设备或网络空间中存储归档。输出文件应当以尽量小的文件大小保持尽可能最高的质量,但通常此时你不会在乎文件的实际大小。
  2. 流媒体 —— 用于通过网络在典型的视频点播服务(VoD)流媒体方案中传输文件,如HTTP渐进式下载或HTTP自适应流。你需要确保传输文件不能超过某个特定码率,或者需要为同一个文件的不同播放形式提供不同的码率设置(自适应流)。
  3. 直播流媒体 —— 和 2 类似,但编码过程应当越快越好,而且直播场景下你不可能提前知道媒体内容的任何信息。
  4. 为终端设备编码 —— 用于在DVD、蓝光机等其他终端设备上播放媒体文件。你可能会想要输出文件有一个比较固定的大小。

总之,了解实际场景会帮助你选择合适的码率控制模式。


码率控制模式

现在让我们深入了解一些不同的模式。我会围绕 x264x265libvpxffmpeg中可用)这些当下流行的 H.264 和 H.265 编码器进行阐述。你可以在这个链接 (ffmpeg libx264, libx264rgb )中了解更多这些编码器所支持的参数。

对于 x265,编译 ffmpeg 时需要加上 --enable-libx265,并不是所有的参数都能直接传入 x265,需要配置 --x265-params 选项。对于 libvpx,编译 ffmpeg 时需要加上 --enable-libvpx

提醒一句:像 x264 这样的编码器在默认情况下不会死板地将视频帧填充到不必要的数据量,这意味着如果你的编码内容很简单,最终输出的码率大小可能会小于指定给编码器的数值。别担心,记住一点就行——在有浪费情况时,为了达到目标码率而进行编码时毫无意义的。

Constant QP(CQP)

量化参数(Quantization Parameter)控制了视频帧中每一个宏区块(Macroblock)的压缩量。较大的数值,量化值更高,意味着更多的压缩,更低的质量,较小的数值代表相反的含义。H.264 的 QP 范围是 0 到 51,在 x264 和 x265 中,可以简单地为整个编码过程设置一个固定的 QP 值。注意:libvpx 不能设置固定 QP。

ffmpeg -i <input> -c:v libx264 -qp 23 <output>
ffmpeg -i <input> -c:v libx265 -x265-params qp=23 <output>

可以阅读

  • 5
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值