zoukankan      html  css  js  c++  java
  • 2016-06-06:X264码率控制

    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编译

  • 相关阅读:
    String 尺取法
    dos 命令
    又见01背包
    01串
    Python-Matplotlib 10 面向对象 VS Matlab Style
    [ 转 ] Fiddler 教程
    Android 查看设备文件
    Python-Matplotlib 9 颜色和样式 [r]
    Python-Matplotlib 8 箱形图
    Python-Matplotlib 7 饼状图
  • 原文地址:https://www.cnblogs.com/zhouLee/p/5562949.html
Copyright © 2011-2022 走看看