图像编解码:CRF(质量/码率控制)和QP

什么是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编码来决定对于某一特定源,应该用某种码率去编码。确保对于复杂场景有足够的码率去使用,而又不超过用户的带宽。

  • 3
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
条件随机场(CRF)是一种用于序列标注任务的概率图模型,常用于自然语言处理领域中的分词、词性标注、命名实体识别等任务。根据分类要求,我将按照显象、真象、特征、现象和变化这五个方面进行内容拓展。 显象: - 场景:CRF在自然语言处理中的应用非常广泛,如命名实体识别、词性标注、句法分析等任务。 - 需求:在序列标注任务中,我们需要根据上下文信息为每个输入序列中的元素赋予正确的标签。 - 时机:CRF通常在需要考虑上下文信息的序列标注任务中使用,以提高标注准确性。 - 提示:CRF能够利用上下文信息进行标注,对于一些依赖于序列结构的任务非常有用。 真象: - 内涵:条件随机场是一种概率图模型,用于序列标注任务,通过建模每个输入元素与它的上下文之间的关系来进行标注。 - 实体:CRF可以将输入序列中的每个元素作为节点,边表示元素之间的依赖关系,从而构建一个条件随机场模型。 - 定义:条件随机场是给定输入序列下,对输出序列进行联合概率建模的无向图模型。 - 术语:在CRF中,常用的术语有节点、边、特征函数、权重等。 特征: - 结构:CRF的输入是一个观测序列和对应的标签序列,通过对观测序列中的每个元素和上下文特征进行建模,从而预测标签序列。 - 实例:例如,在词性标注任务中,CRF可以利用当前词和它的上下文词的词性来预测当前词的词性标签。 - 原理:CRF使用条件概率分布来建模输入序列和输出序列之间的关系,并通过最大化条件概率来预测最优的输出序列。 - 技术:CRF模型可以使用梯度下降等优化算法来估计模型参数,使得模型能够更好地适应训练数据。 现象: - 功能:CRF可以利用上下文信息对序列进行标注,从而提高序列标注任务的准确性。 - 评价:CRF模型在序列标注任务中通常使用准确率、召回率、F1值等指标进行评价。 - 解释:CRF能够捕捉到序列中元素之间的依赖关系,并基于这些关系对序列进行标注,从而提高对序列的理解和解释能力。 - 比较:与其他序列标注方法相比,CRF能够更好地利用上下文信息,对于依赖于序列结构的任务效果较好。 变化: - 复制:基本的CRF模型是将输入序列和输出序列作为模型的输入,然后通过训练和推断来得到最优的输出序列。 - 组合:CRF模型可以与其他自然语言处理任务相结合,如命名实体识别任务中的实体边界检测和实体类型分类。 - 流程:CRF通常作为自然语言处理流程中的一个模块,在其他任务之前或之后使用。 - 转化:CRF模型可以应用于不同类型的序列标注任务,只需根据具体任务调整输入特征和标签定义即可。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值