首先,对于单个的视频编码器,它将一个原始的YUV输入序列,经过有损压缩编码之后,变成视频码流,当我们将得到的码流再次解码为YUV序列的时候,由于视频编码环节中的变换量化环节,使得原YUV中的一些信息丢失了,那么如何衡量这些丢失数据对原始输入造成的损害,就成为评价一个编码器,编码质量的重要客观指标,而这个客观指标就是PSNR。
对于原始YUV与压缩后YUV的每一帧求取PSNR值,对整个序列求PSNR的算术平均值便可以,得到这个重要指标。
计算公式连接https://blog.youkuaiyun.com/XX_bai/article/details/89713343
当然一位的追求编码质量,有可能会使的编码速度非常之慢,如何衡量某个编码过程的编码效率,我们使用bitrate这一指标来衡量,对于原始的yuv序列,其拥有fps值,即正常情况下,每秒钟播放序列的帧数。在经过编码压缩后,我们依然要按照,这样的帧数来播放视频序列,由于现在视频被压缩为了码流,因此我们使用,每秒钟码流中的比特数衡量其编码效率。
其计算过程如下,将编码后码流的总比特数(注意单位是比特)除以编码后的总帧数,算出编码后每帧的比特数,然后用其乘以原视频序列的fps,就可以得到bitrate, 单位可以为kbit/s.
通常情况下,当我们改变编码器的量化参数QP的数值,PSNR与bitrate都会发生变化,因为这个参数与视频失真有着非常重要的关系,当我们对比两个不同的编码器,编码能力的时候,我们一般会取,四个不一样的qp数值,并测得他们各自的psnr ,与bitrate数值,这样,我们以bitrate为横坐标,以PSNR为纵坐标,可以画得两条曲线,以此来表征这两个编码器的编码能力。
现在我们知道了两个重要的衡量编码的指标,psnr,bitrate,一个表示编码质量,一个表示编码效率。然而鱼和熊掌不可兼得,一般编码质量越好,编码效率越低。编码效率越高,编码质量越差。
在比较两个编码器的编码能力时,我们使用两个曲线来表征他们的能力,可是大多数时候,这两条曲线很有可能是,交织在一起的,很难说哪个好,且有的编码器效率高,有的编码器质量好。如何综合起来衡量一个编码器的能力好坏呢?并进行比较呢?我们引入了新的评价指标,BDPSNR,BDBR。
量化曲线。很简单,定积分除以积分区间,得到曲线的均值。两个曲线的均值相减,量化出两个曲线的差距,也可以说是间隔。具体的公式省略了。
但要算积分,首先要得到曲线的表达式。而要得到一个稳定的,不会出现什么乱七八糟的参数的表达式。需要对坐标系进行一些调整。这里直接给出调整后的坐标系,具体怎么调整的可以参考文档VCEG-M33。
调整后的坐标系为10∗lg(bitrate)/PSNR
10∗lg(bitrate)/PSNR表示x/y
x/y轴。该坐标系下,表达式可以确定为一个三阶的多项式。
y=a+b∗x+c∗x2+d∗x3
y=a+b∗x+c∗x2+d∗x3
该表达式有四个参数,需要四组xy值,就可以确定这四个参数。因此需要取四个QP值得到四组PSNR/bitrate,确定多项式。
当前有两条曲线,线上分别有四个点,取所有点中的最大最小x值,作为积分区间,计算曲线均值,相减得到BDPSNR,单位为dB。
将x/y轴的对应关系互换,也就是PSNR/10∗lg(bitrate)PSNR/10∗lg(bitrate)表示x/yx/y轴,过程相同,相减得到BDBR,单位为%百分号。因为log(a)−log(b)log(a)−log(b)得到的是log(ab)log(ba),两个值相除,而不再是减。