2016-06-06:X264码率控制

时间:2024-12-08 21:34:20

H.264与x264

H264是一个视频压缩编码标准。https://zh.wikipedia.org/wiki/H.264/MPEG-4_AVC

X264实现H264视频压缩标准的开源项目。http://www.videolan.org/developers/x264.html

码率控制模式

ABR(Average Bitrate)平均目标码率

 

CBR(Constant Bitrate)固定码率

X264尽可能使整体码率与给定码率相等,因此编码文件大小确定,适合需要精确控制文件大小场景。另外,如果使用一次编码,在画质上不如同等大小的CRF,故一般配合pass参数使用。

QP(Constant Quantizer)固定量化值

需要注意的是这里的量化参值为P帧的量化值。I帧(IDR帧)和B帧的量化值又由ipratio和bpratio参数来确定,不过通常这两个参数无需手动设置。
QP模式相对于压缩前的原视频来说,每一个P帧,I帧,B帧都会固定的损失一部分质量,并且损失判定是固定的。但由于I,P,B帧的插入是不确定的,因此最终文件的大小是无法确定的。当设置为qp=0时将产生无损的画面输出。

CRF(Constant Ratefactor )固定码率系数

如果说QP是固定量化器,CBR是固定文件最终大小,那么CRF则是则是”固定肉眼质量”;因此,CRF可以提供跟QP一样的视觉的质量,但是文件更小。

CRF是通过降低那些“不那么重要”的帧的质量做到这一切的,“不那么重要”意思是过于耗费码率又难以用肉眼察觉的帧,省下来的码率会用在其它更有效的帧里。其实CRF就是一个浮动QP模式,其按照特定的标准,根据人眼的需求,给予每帧不同的QP值。另外,CRF模式无法预测最终文件体积。

因为肉眼对于复杂以及运动场景中的信息不敏感,因此,可以使用更低的码率编码复杂或者高速运动场景;使用更高的码率编码简单或者静止场景,从而获得更好的主观质量。关于CRF更详细的描述参见http://slhck.info/articles/crf

源码编译

X264配置 ./configure --enable-shared --enable-debug --prefix=../vs2008_build/

./configure --enable-shared --prefix=../build/

note:
yasm编译出来的后缀因版本问题与makefile中后缀经常不一致,导致无法编译通过问题。例如:链接时,查找文件的后缀为.o,而yasm编译出来的文件后缀为.obj,可以使用手动方式修改为.o,从而使编译通过。

参考资料

[x264-devel] Making sense out of x264 rate control methods

XSplit Quality, VBV-Buffer, VBV-Maxrate and Preset Settings

The relationship between --vbv-bufsize and --vbv-maxrate

x264 rate control modes

windows环境下编译最新的x264库

MinGW-64下载

X264编码库使用MinGW-w64编译出来的库,依赖libwinpthread-1.dll,并且在执行x264_encoder_encode函数时,存在长时间未返回的情形,具体原因未分析。暂时使用其他版本的MinGW编译