下面介绍不同的码率控制模型和适用场景:

CQP:固定QP,最简单的码率控制方式,每帧图像都按照一个特定的QP来编码,每帧编码后的数据量有多大是未知的,既不是码率优先模型也不是质量优先模型,不过是实现最简单的模型;

适用场景:一般不建议使用这种方式,因为这种方式不考虑编码内容的复杂性,用相同的压缩比处理每一帧。出来的视频质量码率都不固。个人觉得只有那种非常简单的场景,比如静止不变的场景运动量很小的场景可以尝试用,一遇到复杂场景,码率波动就非常大。或者在算法研究或者验证可以使用。

特点

·瞬时码率会随场景复杂度波动;

·编码速度快,调控最简单,每帧的QP值相同;

·x264和x265中支持CQP模式,libvpx不支持;

·H.264中QP范围是[0, 51]。QP值越大表示越大的量化步长,编码视频的质量越低。QP为0表示进行无损编码;


CRF:(Constant Rate Factor)恒定码率系数。把某一个”视觉质量”作为输出目标。通过降低那些耗费码率但是又难以用肉眼察觉的帧(高速运动或者纹理丰富)的质量提升那些静态帧的码率来达到此目的。

特点:帧间QP变化,帧内宏块的QP变化,输出码率未知,各帧输出的视觉质量基本恒定,这种方式相当于固定质量模式+限制码率峰值的方式。

适用场景:适用于对视频质量有一定要求的场合,CRF值可以简单理解为对视频质量期望的一个输出固定值,希望无论是在运动复杂场景下还是在静止简单情况下,都希望有一个稳定的主观视频质量可以选择该模式,该模式是视频质量优先模型。视频质量可以简单理解为视频的清晰度,像素的细腻程度和视频的流畅度。

特点

·与恒定QP类似,但追求主观感知到的质量恒定,瞬时码率也会随场景复杂度波动,视频帧之间或者内部宏块之间的QP值都不一样;

·对于快速运动或细节丰富的场景会适当增大量化失真(因为人眼不敏感),反之对于静止或平坦区域则减少量化失真;

·CRF是x264和x265的默认码率控制方式,也可用于libvpx;

·CRF值越大视频压缩率越高,但视频质量越低,各codec的CRF取值范围一般[0-51],但是一般默认值x264用23,x265库默认为28;

·如果你不确定要使用什么CRF,从默认值开始,并根据对输出的主观印象进行更改。如果质量没有足够好则较低的CRF。如果文件太大了则选择更高的CRF。更改±6会导致码率大小的一半/两倍左右的变化,±1会导致码率10%左右的变化。


CBR:(Constant Bit Rate)恒定码率,一定时间范围内比特率基本保持的恒定,属于码率优先模型。

适用场景:一般也不建议使用这种方式,虽然输出的码率总是处于一个稳定值,但是质量不稳定,不能充分有效利用网络带宽,因为这种模型不考虑视频内容的复杂性,把所有视频帧的内容统一对待。但是有些编码软件只支持固定质量或者固定码率方式,有时不得不用。用的时候在允许的带宽范围内尽可能把带宽设置大点,以防止复杂运动场景下视频质量很低,如果设置的不合理,在运动场景下直接就糊的看不成了。

特点

·码率稳定,但是质量不稳定,带宽有效利用率不高,特别当该值设置不合理,在复杂运动场景下,画面非常模糊,非常影响观看体验;

·但是输出视频码率基本稳定,便于计算视频体积大小;


VBR:(Variable Bit Rate)可变码率,简单场景分配比较大的QP,压缩率小,质量高。复杂场景分配较小QP。得到基本稳定的视觉质量,因为人眼人眼本来就对复杂场景不敏感,缺点在于输出码率大小不可控。

有两种调控模式:质量优先模式和2PASS二次编码模式。

质量优先模式:

不考虑输出视频文件的大小,完全按照视频的内容复杂程度来分配码率,这样视频的播放效果质量最好。

二次编码方式2PASS:

第一次编码检测视频内容的简单和复杂部分,同时确定简单和复杂的比例。第二遍编码会让视频的平均码率不变,复杂的地方分配多bit,简单地方分配少bit。这种编码虽然很好,但是速度会跟不上。

适用场景:VBR适用于那些对带宽和编码速度不太限制,但是对质量有很高要求的场景。特别是在运动的复杂场景下也可以保持比较高的清晰度且输出质量比较稳定,适合对延时不敏感的点播,录播或者存储系统。

特点

·码率不稳定,质量基本稳定且非常高;

·编码速度一般比较慢,点播、下载和存储系统可以优先使用,不适合低延时、直播系统;

·这种模型完全不考虑输出的视频带宽,为了质量,需要多少码率就占用多少,也不太考虑编码速度;


ABR:(Average Bit Rate)恒定平均目标码率,简单场景分配较低bit,复杂场景分配足够bit,使得有限的bit数能够在不同场景下合理分配,这类似VBR。同时一定时间内,平均码率又接近设置的目标码率,这样可以控制输出文件的大小,这又类似CBR。可以认为是CBR和VBR的折中方案,这是大多人的选择。特别在对质量和视频带宽都有要求的情况下,可以优先选择该模式,一般速度是VBR的两倍到三倍,相同体积的视频文件质量却比CBR好很多。

适用场景:ABR在直播和低延时系统用的比较多,因为只编码了一次,所以速度快,同时兼顾了视频质量和带宽,对于转码速度有要求的情况下也可以选择该模式。B站的大部分视频就选择了该模式。

特点:

·视频质量整体可控,同时兼顾了视频码率和速度,是一个折中方案,实际用的比较多;

·使用过程一般要让调用方设置,最低码率、最高码率和平均码率,这些值要尽可能设置合理点;

 


上面介绍了几种码率调控方案,在不同的编码器中有不同的叫法和称呼,细节可能不一样。但是基本都是通过影响QP的大小,然后进一步影响量化过程的颗粒程度实现的。具体在使用时需要进一步参考具体编码器实现。

一般优先使用ABR,在速度,码率大小,质量方面都能取得比较满意的平衡。其它VBR、CBR、CRF都有自己的场景,在使用时需要有条件使用。


总结思考:

今天介绍的视频码控方案,是很多上层技术的基础。其中码率自适应技术、根据场景都动态调整编码参数和RIO感兴趣区域编码等技术都建立在对编码过程中码控方案的选择和细化上,进而影响了编码的量化程度和量化颗粒,最终在视频质量、速度和带宽之间取得比较满意的平衡点。同时这些模型在不同的编码库如x264或者x265上,参数设置是互斥的,有时会因为参数设置不当造成码率失效,设置的参数不起作用,这点也需要特别注意。

其次,这块内容熟悉后,对一些线上问题的排查也很有好处。清楚调整帧率、分辨率等参数的调整副作用。也欢迎后台留言分享你实际项目这块的相关内容。

https://blog.csdn.net/weixin_41422027/article/details/108094786

视频编码码率控制:CBR、VBR和ABR相关推荐

  1. 视频编码中的RC(rate control)是什么?码率控制 CBR (Constant Bit Rate)、VBR (Variable Bit Rate)

    再看RXW源码的时候在视频编码结构体里有一个RC结构体,RC(rate control)到底是啥? 码率控制技术 RC (Rate Control) 是实际视频编码器中一个非常重要的技术模块. 根据实 ...

  2. 码率控制、VBR、CBR

    码率控制实际上是一种编码的优化算法,它用于实现对视频流码流大小的控制.那么它控制的目的是什么呢? 我们可以试想一下,同样的视频编码格式,码流大,它包含的信息也就越多,那么对应的图像也就越清晰,反之亦然 ...

  3. H264编码- 码率控制 RQ 模型参数推导过程以及JM代码分析

    摘要:本文主要介绍H264码率控制过程中,RQ模型参数更新推导过程,并结合JM19.0代码分析其功能实现. H264码率控制中比较重要的一个模型是RQ模型,不管是图像级码率控制还是基本单元码率控制都会 ...

  4. 视频码控:CBR、VBR和ABR

    问题背景: 无论是查线上一些花屏.卡顿,马赛克问题,还是进行码率自适应的功能开发,抑或进行客户端播放器的JitterBuffer的优化,都需要编码器发送端的配合.我们需要在编码速度.网络带宽,视频质量 ...

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

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

  6. ABR CQP CRF码率控制总结

    1. X264显式支持的一趟码率控制方法有:ABR, CQP, CRF. 缺省方法是CRF.这三种方式的优先级是ABR > CQP > CRF. [cpp] view plaincopy ...

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

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

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

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

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

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

最新文章

  1. MySQL中对varchar类型排序问题的解决
  2. docker安装实验和docker容器的使用,云计算技术与应用报告
  3. 【Java 语言】Java 多线程 一 ( 线程基础 : 线程启动 | 线程停止 | 线程暂停 | 线程优先级 | 守护线程)
  4. Jzoj4790 选数问题
  5. BZOJ3172: [Tjoi2013]单词
  6. 骚年快答 | 微服务架构中的BFF到底是啥?
  7. 【C/C++】Linux下使用system()函数一定要谨慎
  8. 【转】Dynamics 365Online 如何启用手机端APP的离线功能
  9. Objective-C初学者指南(第2版)
  10. 织梦留言簿使用及修改
  11. dsp c语言流水灯程序,DSP流水灯源程序
  12. 云服务器虚拟化安全,云计算中的安全云服务的资源池化和虚拟化(1)
  13. word中的英文字体选择
  14. android 探索怎么代码打开辅助功能
  15. Mac上iPad Pro高清桌面动态壁纸
  16. linux主机路由命令,linux下路由设置详解
  17. ERROR 1118 (42000): Row size too large (8126). Changing some columns to TEXT or BLOB or using ROW_
  18. 2019.3.8 提高B组 T2 JZOJ 3055 比赛
  19. MATLAB身份证号识别
  20. python调用canape_利用CANape进行基于CCP的汽车控制器的匹配标定的设计

热门文章

  1. CSharp + OpenCvSharp实现医学图像拼接
  2. Pr:抠像与视频合成
  3. 内存虚拟化EPT技术简介
  4. 网页服务器修复,网页被劫持 网页被劫持后跳转发布网修复方法
  5. 陈强《计量经济学及Stata应用》习题答案
  6. 深入理解ES8的新特性SharedArrayBuffer
  7. 计算机网络技术中,分组交换技术在计算机网络技术中的作用及特点是什么?
  8. matlab print dmeta,打印图窗或保存为特定文件格式
  9. GIS——地图比例尺
  10. js计算两个时间相差的年、月、日、时、分、秒。