x264码率控制介绍、配置及应用

概述

在视频编码中,编码器要考虑为每一帧给定的视频分配多少比特。有损压缩的目的是在保持视频质量的前提下,尽可能地减少使用的比特。码率控制(Rate Control, RC)要做的就是控制编码质量和码流尺寸之间的折衷。
常见的RC方法有:CQP、CRF、CBR、VBR、ABR和CVBR。本文首先对这几种方法的作用进行简介,然后介绍x264中怎么使用参数配置使用这些模式,并给出每种配置的注意点。

常用的RC模式简介以及在x264中的配置

无损模式
将CRF设置为0或QP设置为0会进行无损编码。

x264 --crf 0 -o <output> <input>
x264 --qp 0 -o <output> <input>

CQP:Constant Quantization Parameter(1-pass)
恒定QP是最简单的码率控制方式,把某个量化值QP作为目标,每帧图像都按照一个特定的QP来编码,每帧编码后的数据量大小是未知的。常用于算法研究阶段,算法的验证。

x264 --qp 23 --ipratio 1.4 --pbratio 1.3 -o <output> <input> 

注意:
1)始终对I,P和B帧使用恒定的QP
2)要在x264中启用,使用–qp,–ipratio和–pbratio选择P,I和B帧分别需要的QP值。其中ipratio适用于所有模式。 只要禁用了MB树,pbratio便适用于所有模式。
3)可生成用于2-pass的日志文件

CRF:Constant Rate Factor
恒定码率因子CRF,以特定的“视频主观质量”为目标进行RC,CRF又称为Quality-Based VBR模式。CRF可以编码较高视觉质量的视频,但是文件大小不可控。其主要思想是:通过降低“less important”帧的比特数,将省下的比特数分配给有助于提升主观质量的帧,从而实现各帧输出视觉质量基本恒定的效果。“less important”指的是复杂和高速运动的场景帧,这些帧通常会消耗大量比特,但是人眼难以察觉。
在x264编码器内部CRF和bitrate采用了相同的调整策略,只是它不遵循一个特定的输出码率。

x264 --crf 24 -o <output> <input> 

注意:
1)所有帧在编码过程中保持质量恒定;
2)无法控制生成文件的比特率和文件大小。可以通过改变CRF值,直到获得所需的比特率;
3)CRF取18时在视觉上认为是无损的(实际上,仍然是有损压缩),x264默认值为23。CRF取值±6会使比特数有一半的变化。例如,使用CRF=18编码,最终平均比特率为3.0 Mbit/s,但是,希望VBV上限设置为1.5 Mbit/s,因此可以将CRF增加到大约24,才能获得一半的比特率;
4)同时使用–crf和–pass 2冲突,所以无法用于2-pass编码,同时也可生成用于2-pass的log文件;
5)配合VBV使用,即CRF+VBV可以指定最大比特数,不至于导致比特浪费而且也可以达到较高的质量。

ABR:Average Bitrate
平均比特率ABR,可以实现恒定的平均目标码率,编码时需要设置平均码率bitrate。ABR可以为简单的场景分配较少的比特,把节省的比特用于复杂场景,保持一段时间内的码率恒定。我的理解,这是一种最理想但最难实现的RC模式,因为在编码过程中,无法提前预知视频的复杂程度,所以,码率会变化,特别在编码开始时,码率波动会很大,最后趋于稳定。另外,为达到为了达到这种模式编码得到的视频码流,最终的文件大小恒定,而无法保证视觉质量。

x264 --bitrate 1500 -o <output> <input>

注意:
1)适用于生成1-pass日志文件:可用于后续2-pass的VBR或CBR的模式;
2)适用于快速编码并且不在乎质量的情况(通常没有),所以ABR的开发者都不推荐使用ABR
3)使码流保持在指定的比特率附近。无法保证视觉质量,但是可以很好的控制文件大小和比特率。

CBR:Constant Bitrate
CBR就是以恒定比特率方式进行编码,有运动发生时,由于码率恒定,只能通过增大QP来减少码字大小,图像质量变差;当场景静止时,图像质量又变好,因此图像质量不稳定,这种算法优先考虑码率(带宽)。CBR编码码比特率基本保持恒定在目标比特率,有利于流式播放。CBR的缺点在于复杂场景码率不够用,简单场景码率浪费,因此编码内容的视觉质量不稳定。通常在较低比特率下,这种质量的变化会更加明显。

实际上在x264中不存在CBR模式,但是可以通过以下配置“模拟”CBR编码模式:

//bitrate会赋值给vbv-maxrate,最大瞬时码率也是1000
x264 --vbv-bufsize 2000 --bitrate 1000 -o <output> <input>
//指定最大瞬时码率vbv-maxrate,可达到1024
x264 --vbv-bufsize 2000 --vbv-maxrate 1024 --bitrate 1000 -o <output> <input> 

注意:
1)最大值的vbv-maxrate的限制可能会导致质量严重下降,仅用在需要将比特率限制在一定值以下的情况;
2)CBR对于生成2-pass的CBR编码的首遍日志文件非常有用。 2遍通常对CBR并没有多大帮助,有时会带来损失;
3)CBR模式下,可以使用–nal-hrd cbr指定填充比特到目标比特;
4)优点:用于恒定比特流的场景,如直播;
5)缺点:不利于视频存档;无法有效使用bandwith

VBR:variable bitrate
VBR编码为简单场景分配较大的QP,为复杂的场景分配较小的QP,得到基本稳定的输出视觉质量。相对于CBR,在相同文件大小的条件下,VBR的输出结果要比CBR好的多,这有利于媒体下载和本地存储。VBR的缺点在于输出码流大小不可控。同时对于复杂度恒定的内容(例如新闻播音)没什么优势。执行2-pass及2次以上pass编码的模式就是所谓的VBR模式。

x264 --pass 1 --bitrate 1000 -o <output> <input> 
x264 --pass 2 --bitrate 1000 -o <output> <input> //VBR

VBV:Video Buffering Verifier
视频缓冲验证器VBV可确保将比特率限制在一定的范围内,VBV对于流式传输很有用,可以确保在特定时间范围内发送的比特不会超过指定的最大比特数。VBV可以与2-pass的VBR一起使用(多个pass中均可用),称为CVBR。CVBR中使用的VBV buffer(vbv-bufsize)用于码流的缓冲。有了vbv-bufsize的存在,可以在保证vbv-maxrate的条件下,根据vbv-bufsize的剩余情况,对QP进行调整,使得输出码流、VBV buffer两者保持恒定(bitrate会波动)。该方法在较长的时间内编码得到的码率到达平均比特。
VBV也可以与CRF一起使用,该模式也称为“具有上限的CRF”。

**您应该如何设置bufsize?**这取决于您希望比特率有多少可变性。一个好的默认设置是使缓冲区大小是最大速率的两倍,但是建议可能会根据流设置而有所不同。如果客户端缓冲区较小(大约几秒钟),则bufsize的大小应与maxrate的大小相同。如果您想限制流的比特率,请尝试将bufsize设置为最大速率的一半或更小。
优点:在带宽限制下进行流传输;实时流式传输(VBV+CRF,1-pass编码);VOD流式传输(VBV+bitrate,2pass)。

2-pass模式
2-pass模式可以进行简单的配置,编码用于网络传输的码流。但是该模式有两个缺点:
(1)直接指定bitrate编码时,不想CRF可以提前得知,得到的视频质量很好,所以最终的视频质量无法保证,这就必须进行一些测试以确保指定的比特率对于某些复杂的内容而言确实足够高。
(2)由于VBV buffer的存在,比特率可能会出现局部峰值,这就意味着,接收端可能出现超比特的情况;
(3)允许编码器进行两次(或多次)编码,可以使编码器提前计算出在1-pass中编码帧所需的成本,然后在第二遍中更有效地使用可用比特数。最终可以保证在一定的比特率约束下,输出质量最佳。据x264开发人员说,1-pass和2-pass的视觉质量几乎一样好,但是1-pass的压缩效率可能会差一点(2-pass可以完全用完指定的比特,不会浪费比)。

x264 --pass 1 --bitrate 1000 -o <output> <input>  //1-pass ABR
x264 --pass 2 --bitrate 1000 -o <output> <input>  //2-pass ABR=VBR

注意:
1)执行2-pass及2次以上pass编码的模式就是所谓的VBR模式
2)使用更快的编码配置,可以得到比1-pass编码质量好的码流,不一定需要更长的编码时间;
3)经过2-pass编码之后,再进行多次编码对于质量的提升都微乎其微;
4)可以很好的控制文件大小和比特率
5)优点:可以达到特定的目标比特率;
6)缺点:不利于实时码流传输。

使用场景总结

·对于1-pass编码,可以使用CQP,ABR,CBR,CRF或无损编码(尽量避免使用ABR,ABR质量无法保证)。
·如果对比特率较敏感(例如流媒体),最好的选择是设置码率上限的CRF(CRF + VBV)或CBR。
·对于2-pass以上次数的编码,ABR和CBR用于1-pass生成log文件,将ABR,VBR或CBR用作后续pass的编码。
·x264中,只有ABR和CBR可用于生成1-pass的log文件。

Tips:
1.视频本地保存(保证质量)——使用CRF保证想要的质量
2.视频点播(确保视频不超过特定大小)——2-pass的最优CRF值(由于是点播,所以有时间调整得到最优CRF值)+VBV或者ABR+VBV限制比特数
3.直播流(要求保证质量+快速编码+带宽)——1-pass的CRF+VBV或者ABR+VBV限制比特数,或者在比特允许的情况下可以使用CBR
4.确保视频最终具有特定大小——2-pass ABR

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值