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

  • 概述
  • 常用的RC模式简介以及在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

x264码率控制介绍、配置及应用相关推荐

  1. X264码率控制总结1——ABR,CQP,CRF

    lakeone X264码率控制总结1--ABR,CQP,CRF 1. X264显式支持的一趟码率控制方法有:ABR, CQP, CRF. 缺省方法是CRF.这三种方式的优先级是ABR > CQ ...

  2. X264码率控制流程分析

    码率控制的理论知识: 码率控制的目的和意义: 图像通信中码率控制的目的:通过调节编码参数,控制单位时间内的编码视频流的数据量,以使产生的比特流符合各种应用的需求.视频压缩的效率和视频内容有很大的关系, ...

  3. 【Codecs系列】X264码率控制总结1——ABR,CQP,CRF

    X264码率控制总结1--ABR,CQP,CRF https://blog.csdn.net/chinabinlang/article/details/88837615

  4. X264码率控制流程分析 (转)

    二.编码器机能20钟头前 码率节制的意见常识: 码率节制的目的以及意义: 图象通讯中码率节制的目的:路程经过过程调治编码参量,节制单元时间内的编码视频文件流的数值量,以使 ... 二.编码器机能20钟 ...

  5. HEVC码率控制介绍(R-Lamda)

    本来是不想贴出相应的代码的,但是还是贴出来大概的模块吧,这样才能不纸上谈兵! R-lamda模型提出到优化已有2年,从近几年的文章来看,大体归为以下几类:一类是帧内的码率控制算法,一类是模型参数更新, ...

  6. 转: X264码率控制总结1——ABR,CQP,CRF

    2019独角兽企业重金招聘Python工程师标准>>> 1. X264显式支持的一趟码率控制方法有:ABR, CQP, CRF. 缺省方法是CRF.这三种方式的优先级是ABR > ...

  7. x264中码率控制(一)

    x264码率控制方法:采用的码率控制算法并没有采用拉格朗日代价函数来控制编码,而是使用一种更简单的方法,即利用半精度帧的SATD(sum of absolute transformeddifferen ...

  8. x264 码率控制算法原理

    x264 的码率控制是如何实现的 ? 本文介绍 x264 码率控制算法的数学原理,和基本框架. 1.理论假设 有助于往下阅读,可以暂时跳过. 设变量:      qscale = 拉格朗日常数 lam ...

  9. x264参数介绍(帧类型和码率控制,分析和视频可用性信息)

    鉴于x264的参数众多,各种参数的配合复杂,为了使用者方便,x264建议如无特别需要可使用preset和tune设置.这套开发者推荐的参数较为合理,可在此基础上在调整一些具体参数以符合自己需要,手动设 ...

  10. x264参数介绍(-,帧类型和码率控制)

    预设值 预设值是x264在r1177版本增加的一个方便的命令行选项.可以用x264.exe –fullhelp查看所有的命令行帮助. profile 默认:无 说明:限制输出文件的profile.这个 ...

最新文章

  1. Linux_RHEL_设置网络
  2. Matlab绘图基础——利用axes(坐标系图形对象)绘制重叠图像 及 一图多轴(一幅图绘制多个坐标轴)
  3. github提交,却不显示提交记录
  4. html3d旋转发光立方体,纯css3实现的3D立体动态旋转立方体特效
  5. dj鲜生-19-登陆功能-利用内置认证体系
  6. Hadoop集群(第10期副刊)_常用MySQL数据库命令
  7. android触摸进度条,Android仿IOS ViewPager滑动进度条
  8. 東京タワー初めてphoto
  9. 容器技术Docker K8s 9 容器服务ACK应用场景
  10. android逆向工程反编译指南(详细教程)
  11. 如何选择jquery版本
  12. PHP将GD库生成的图片输出到字节流及创建临时文件
  13. Burp suite - Burp Clickbandit
  14. 【参赛作品23】华为OpenGauss数据库安装与使用
  15. l那是计算机房吗,机房设计常用计算公式
  16. 最适合发朋友圈的句子
  17. 单片机简单Log日志封装
  18. Linux环境C语言开发基础
  19. 学习经验分享之十一:硕士论文撰写心得
  20. 黑白游戏逆向传奇实战:汇编,CE,OD,易语言,反外挂,网络安全

热门文章

  1. 记一次成功修复U盘的痛苦经历
  2. 3D Engine Demo
  3. 计算机编程是什么专业 难学吗
  4. Android studio 或java打开txt文件
  5. ArcGIS Pro创建企业级地理数据库(Postgis)
  6. python 批量创建文件夹
  7. 浅谈51单片机简易循迹小车制作方案
  8. m451dn linux驱动下载,惠普m451dn驱动下载-惠普hp m451dn打印机驱动下载 v61.120.04官方版--pc6下载站...
  9. 哪款scrm系统性价比更高?更受企业的欢迎?
  10. 卡巴斯基激活码 卡巴斯基2010激活码下载