视频编码中CBR和VBR的区别,CRF和CQP的区别
在视频编码中,有一个模块是码率控制,即通过选择一系列编码参数,使得视频编码后的比特率满足所需要的速率限制,并且使编码失真竟可能小。该模块严格上不属于视频编码标准,属于率失真优化有两范畴。码率控制分为两个步骤,一个是码率分配,二是确定量化参数;
在实际应用中,存在好几种码率控制方法,分别是CBR,VBR,ABR和CVBR,下面对着四个技术进行展开:
CBR:constant bitrate
顾名思义,以恒定比特率方式进行编码,有运动发生时,由于码率恒定,只能通过增大QP来减少码字大小,图像质量变差,当场景静止时,图像质量又变好,因此图像质量不稳定。这种算法优先考虑码率(带宽)。适合在流式播放中应用。CBR编码的缺点在于编码内容的质量不稳定,容易产生马赛克。因为对于某些较复杂的图像比较难压缩,所以CBR流的某些部分质量就比其他部分差。
具体的,一段视频一共有10分钟,我们设置的码流为1M,那么这个视频中每一秒的画面都是1M码流。
VBR:variable bitrate
顾名思义,即以可变的比特方式进行编码,比特分配根据图像内容的复杂度进行。如果图像细节较丰富或者含有大量的运动,则给其分配大一点的码流,若图像比较平坦,就给其分配较少的码流, 这样既保证了质量,又兼顾带宽限制。这种算法适合图像内容变化幅度较大的情况;
适合的应用场景是媒体存储,不适合网络传输;
ABR:average bitrate
平均比特率,是在CBR和VBR两者之间的一种权衡,即设定一段时间的平均码率,在此时间内,对简单,静态的图像分配低于平均码率的码率,对于复杂的,大量运动的图像分配高于平均码率的码流;
适合网络传输;
CVBR:Constrained VariableBit Rate
是VBR的一种改进方法,对应的Maximum bitRate恒定或者Average BitRate恒定。兼顾了CBR和VBR的优点:在图像内容静止时,节省带宽,有运动发生时,利用前期节省的带宽来尽可能的提高图像质量,达到同时兼顾带宽和图像质量的目的。这种方法通常会让用户输入最大码率和最小码率,静止时,码率稳定在最小码率,运动时,码率大于最小码率,但是又不超过最大码率。比较理想的模型如下:
码率控制:
对帧间图像进行码率控制:
可以根据被参考的重要性来分配码率,如过某个帧经常被参考,则给他分配多点的码率,如果没有被参考,则可以分配少点的码率;
对帧内图像怎么进行码率控制;
细节多的分配少点的码率,比如石头,树枝,运动物体分配少点码率,因为被参考的可能性不大;
如果一个块被选中是帧内模式,怎么改可以让它选择帧间模式;
改lamda?码率控制?不知道;
在做足球直播时,固定码率好还是固定QP好?固定QP好,可以节省码率;
如果固定码率,则在画面静止时会浪费带宽,而固定QP时,画面静止时也不会浪费太多的比特;
转发自https://www.cnblogs.com/sunny-li/p/9979796.html
本文翻译自 https://slhck.info/video/2017/02/24/crf-guide.html ,不当之处,请多指教。
----------------------------正文-------------------------
什么是CRF?
CRF是264和265中默认的质量/码率控制设置。这个值可以在0到51之间,值越低,质量越好,文件大小越大。在x264上面,一般取值为18-28,默认值是23。在ffmpeg中,crf是这么使用的
ffmpeg -i input.mp4 -c:v libx264 -crf 23 output.mp4
在x265中,默认的crf值是28
ffmpeg -i input.mp4 -c:v libx265 -crf 28 output.mp4
如果你不确定要用哪个crf的值的话,请先用默认值,然后根据你对输出质量的主观印象去调整。大约crf的值差别为6就会导致文件大小的加倍或减半。
你应该在线下的文件存储中使用crf的编码,来获取一个最佳的编码方式。对于其他的使用场景,请使用其他的码率控制模式。
------------------------------------------------------------------------------------
CRF和QP
CRF是恒定质量的编码方式,与恒定码率(CBR)是相反的。通常,为了获取恒定质量的编码,我们可以通过用同样的大小去压缩每一个相同类型的帧,即,扔掉相对来说相同数量的信息。用专业术语来说,就是使用相同的量化参数QP。这个量化参数QP定义了从一个像素宏块中丢掉多少信息。通常这将导致整个视频序列的码率不稳定。
不过,这里所说的CRF比恒定量化参数要复杂一点儿。CRF会用将每一帧的压缩不同的大小,为了让主观的质量感受差不多,会用不同的QP。他是通过把运动也考虑进来做到这一点的。在编码中,如果Qp=18,则每一帧都是QP=18,当然根据帧的类型不同会有一些微小的波动,忽略之。设置CRF=18的时候,对于运动比较大的场景,会把QP设得更高一些,对于运动比较比较不剧烈的帧,会降低QP。这会导致比特率的分配随时间变化不同。
例如,下图展示了两个不同的视频(BBB big buck bunny和TOS tears of steal),用不同的等级去编码(17和23),分别用恒定量化参数CQP和恒定质量CRF模式
我们看到,CRF的线总是比CQP的要低,意味着采用CRF模式的时候,可以省比特数,而采用CQP的时候,稍微会浪费一点文件大小。
为什么运动这么重要?
比起运动的物体,人眼对静止的物体会观察到更多的细节。基于这一想法,编码时,对运动物体给更高的压缩率,而对静止的物体保留更多的细节。
用外行的话说,这是因为你的视觉系统会被运动分散注意力,而不会有足够的时间去注意运动物体的细节。用专业术语来讲,运动掩盖了块效应。从另一个方面来说,当一帧运动不够大时,人就会话更多的时间去注意图像的细节了,所以你希望压缩的越少越好。这个时候的压缩噪声对于人眼来说就比较显著了。
你可能会问,那么CQP是不是会取得好的视频质量呢?事实上,感官感受是差不多的,只是CQP的模式会在你不真正注意的区域浪费更多的空间。
从应用的层面来说,很多人都会在单通道的编码使用CRF,另一个采用CRF的原因是这个是开发者x264或x265时默认选择的码率控制模式。
定量的视频质量怎么样呢?
如果你有一些简单的方式可以比较视频质量的话(比如,比较每一帧的PSNR),你会发现CRF的质量比CQP的要差。但是如果你用人眼去主观评价的话,CRF和CQP看起来差不多。它对于人眼比较关注的地方压缩的比较小。客观质量评价可能会比较差,但主观质量还是可以的。
这其实有一个对于简单的质量评价方式psnr或ssim的一个质疑,它不能把运动之类的影响人眼的感受的因素考虑进去,因为他们是逐帧去评价的。一些评价标准,像VQM和VMAF对于评价视频来说是更好的一种方式。
质量和比特率之间是什么关系?
不是所有的视频都是一样好压缩的。运动较少,细节较少的视频是比较容易压缩的,反之相反了。这里说的容易是指,同样的码率的情况下,比较容易达到更好的图像质量。
CRF解决这一问题,对于不同的视频,不同的CRF参数导致不同的码率。事实上,你无法根据码率估计crf的参数。
例如,你把CRF设成23,对于一个视频源,你会得到1500 kb/s,而对于另一个,你会得到1000kb/s,两个看起来质量差不多。事实上,CRF要做的,就是保留确定数量的细节,不管用多少码率。
云编码服务Bitmovin在正式编码之前,也用CRF来评估视频的复杂度。
需要注意一点,如果你的CRF选的太高(比如30),你会看到在运动比较剧烈的地方有很多的块效应,因为这些地方的码率太低了。编码器会对更复杂的区域用QP32,如本文开头提到的,根据你想要的视频质量选择要的CRF参数。
为什么你还是会在电视或者网络上看到很多块效应呢?
为什么呢?问题是对于这些视频,他们用了太低的码率,特别是在广播中,码流是用固定码率去压缩的,这样就不会考虑运动了。因此,一些电视节目在真正复杂的细节的图像处没有采用相应的压缩率,看起来就比较多的块了。
现在的码流处理会更加的智能一些。youtube和neflix用2-pass甚至3-pass的算法,对于后者来说,采用CRF编码来决定对于某一特定源,应该用某种码率去编码。确保对于复杂场景有足够的码率去使用,而又不超过用户的带宽。
视频编码中CBR和VBR的区别,CRF和CQP的区别相关推荐
- 视频编码中CBR和VBR的区别
在视频编码中,有一个模块是码率控制,即通过选择一系列编码参数,使得视频编码后的比特率满足所需要的速率限制,并且使编码失真竟可能小.该模块严格上不属于视频编码标准,属于率失真优化有两范畴.码率控制分为两 ...
- 视频编码中vbr和cbr 、avbr、 qvbr 、cvbr、fixqp优缺点
VBR(Variable Bitrate Coding)和CBR(Constant Bitrate Coding)是视频编码中最基础的两种压缩模式,其他模式都是在这两种模式的基础上进行了某种程度的扩展 ...
- 视频编码中的一些缩写
视频编码中一些缩写 HEVC/VVC 码率控制 AVS3 指令集相关 @***-保持更新-*** GOP(Group of Pictures)--图像组 CTU(Coding Tree Unit)-- ...
- 【待更新】感知视频编码中的感知检测技术(显著性物体检测向)
之前对ROI编码感兴趣,做了显著性检测方面的文献综述.截至到2019年1月13号有13400字. 现在搬上来,一来交流,二来重温 感知视频编码PVC HVS 针对HVS所构建的数学模型分类 基于HVS ...
- 视频编码中的块效应、振铃效应和呼吸效应分析
1.块效应: (1)概念: 主要是由视频图像采用基于块的编码方式和量化造成相邻块之间存在明显差异的现象,在视频编码中人眼察觉到的小块边界处的不连续. (2)产生原因: 1.编码过程中对残差进行DCT变 ...
- A Convolutional Neural Network Approach for Half-Pel Interpolation in Video Coding一视频编码中半像素插值的卷积神经网络
摘要 - 运动补偿是视频编码中的基本技术,用于消除视频帧之间的时间冗余.为了进一步提高编码效率,已经使用了子像素运动补偿,其需要对分数样本进行插值.视频编码标准通常采用源自信号处理理论的固定插值滤波器 ...
- 【Codecs系列】之视频编码中的块效应、振铃效应和呼吸效应分析
Date: 2018.5.28 1.块效应: (1)概念: 主要是由视频图像采用基于块的编码方式和量化造成相邻块之间存在明显差异的现象,在视频编码中人眼察觉到的小块边界处的不连续. (2)产生原因: ...
- 【Codecs系列】视频编码中常用熵编码介绍
Date: 2017/10/21 Content:视频编码中常用熵编码方法介绍 1.熵编码 编码过程中按照熵原理不丢失任何信息的编码,即编码过程中不丢失信息量,保存信息熵. 熵编码是无损压缩的编码方法 ...
- 视频编码中的RC(rate control)是什么?码率控制 CBR (Constant Bit Rate)、VBR (Variable Bit Rate)
再看RXW源码的时候在视频编码结构体里有一个RC结构体,RC(rate control)到底是啥? 码率控制技术 RC (Rate Control) 是实际视频编码器中一个非常重要的技术模块. 根据实 ...
- 什么是码率控制? 在视频编码中,码率控制的概念是什么,它是通过什么实现的?
码率控制实际上是一种编码的优化算法,它用于实现对视频流码流大小的控制.那么它控制的目的是什么呢? 我们可以试想一下,同样的视频编码格式,码流大,它包含的信息也就越多,那么对应的图像也就越清晰,反之亦然 ...
最新文章
- jQuery九类选择器
- Python_note2 基本图形绘制+turtle库使用
- java笔记--关于线程同步(7种同步方式)
- sybase的sysprocesses中的hostname显示不全_Linux中Postfix邮件认证配置(五)
- hocon配置文件_GitHub - Himmelt/Hocon: Simple Hocon Configuration Library [轻量 Hocon 配置库]...
- 万向节死锁_万向节死锁 gimbal lock
- python求两数最大公因数_『用python求俩个数的最大公约数和最小公倍数』
- 借用 FCKEditor 的文件上传/管理界面
- Eclipse插件安装全方式
- Smartmail外贸CRMBuild1.0版系统白皮书
- Python各类图像库的图片读写方式总结
- 剑指offer-从尾到头打印链表
- 20154319 实验九web安全基础实践
- xshell7,xftp7个人免费版官方下载,无需破解,免激活,下载即可使用
- 微信小程序--图片Image几种mode 设置图片方法
- 用纯css打造表格第一行和前几列锁定
- 英文科技论文写作与学术报告Lecture 4习题答案
- 解决IDEA连接mysql时出现Server returns invalid timezone问题一劳永逸的方法
- HTL里面使用sling model的时候传参问题
- ipad计算机功能,ipad功能如此强大,为何不能取代电脑,网友:已经可以取代电脑了...