Java教程

H264编解码及性能比较

本文主要是介绍H264编解码及性能比较,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

H.264编解码及性能比较

一、视频编码格式处理

1、视频帧转换为YUV文件格式

在这里插入图片描述

二、H.264采用的视频编码实现技术

(1) 分层设计

H.264在视频编码层(VCL)和网络提取层(NAL)之间进行概念分割,以实现在不同的传输环境下的有效传输,便于与当前和将来的编码格式和不同类型的网络进行无缝连接。

(2) 帧内预测编码

根据邻近块的值来预测当前宏块的值,再对预测值和原始值的差值进行变换、量化和编码。对于亮度块,使用4×4与16×16编码模式,对色度块采用8×8编码模式。

以亮度块的4×4帧内预测模式为例,由周围的15个像素预测4×4的16个像素,共有9种预测模式,分别计算各自的SAE,以最小者作为该块的预测模式。

(3) 帧间预测编码——基于块的运动补偿

树状结构运动补偿:使用不同大小和形状的块进行运动补偿(低频区域使用大块,高频区域使用小块);
使用1/4像素精度运动矢量
在多个参考帧中进行运动搜索,选择一个与编码帧最相似的帧作为参考帧
引入SI帧和SP帧:适应码流带宽自适应和抗误码的要求,改善网络亲和性,支持流媒体服务

图1-3 运动补偿中的宏块和子宏块模式

(4) 量化处理

H.264标准支持52个量化步长,量化参数QP每增加6,量化步长Qstep增加一倍。量化步长取值范围很广,这就为编码中兼顾比特率和编码质量提供了足够多的灵活度和准确度。

(5) 熵编码

H.264标准中给出了两种熵编码方法:CAVLC(Context-based Adaptive Variable Length Coding,基于上下文的自适应可变长编码)和CABAC(Context-based Adaptive Binary Arithmetic Coding,基于上下文的自适应二进制算术编码),其中前者为基本编码方法,后者可选编码方法,且后者的编码性能相较于前者较好,但计算复杂度更高。

对不同码流,不同结构IBP帧图像进行性能比较

在这里插入图片描述
在这里插入图片描述

率失真曲线概念、绘制等

所谓率失真(distortion-rate),其实指的是图像失真度与编码码率二者之间的相互关系。
其中的图像失真度,目前一般采用原始图像与编码重建图像之间的峰值性噪比PSNR来衡量,这个PSNR可以是亮度PSNR,也可以是亮度与色度PSNR的线性组合。一般最简单的情况下,采用亮度的PSNR(Y-PSNR)来作为主要衡量依据。其中所谓的峰值信号,即图像中像素的最大值(比方说像素亮度的最大值);其中所谓的噪声,指的是原始图像与重建图像中各像素值的均方差(差值的平方取均值);将两者一除,取其比值,再转换成分贝形式,即为PSNR。
其中的编码码率,指的是选取不同编码参数、量化参数、预测模式时最终所需传输的运动矢量、参考帧编号、预测残差值等总体编码数据的多少。
率失真优化:其一般目的就在于,在以尽可能小的编码码率下,获取的图像失真度尽可能的少,唯有如此,编码器的编码效率才是最高。当然,也不排除率失真优化的一些其他的特殊目的,比方说,在保证码率不过上限的情况下失真度最小、在保证失真度不过下限的情况下码率最小,等等
率失真分析:指某种可合理选择编码/量化参数及预测模式、从而实现率失真优化的建模、优化、分析过程。在H.264的编码器中,一般均采用基于拉格朗日的优化算法来进行选取相应的编码参数及预测模式,从而达到编码控制及率失真优化的目的。
率失真优化过程的算法及实现优化程度,将极大地影响编码器运行效率及配置要求,同时也极大地影响编码器编码效率和质量,因此是个非常重要的环节。
以上转载自CSDN博主 renhuailu

三、视频编码器输出

在这里插入图片描述
增大GOP或提高GOP中P/B帧的占比,可以提高压缩比,降低码率。因此一般而言,在码率一定的条件下,GOP越大,图像质量越好(P/B帧的比重更大);在图像质量一定的条件下,GOP越大,码率越低。
在这里插入图片描述
实际码率=987352bps
对应PSNR值为43.275dB

视频来源为自己拍摄的2021北京草莓音乐节 歌手陈粒片段
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
率失真曲线:

在这里插入图片描述
在码率相同的前提下,视频性能
GOP15 > GOP4 > GOP1
当二者 P帧占比相同,B帧占比更大,图像质量更好。
比较不同编码器时,相同格式序列,相同码率下,PSNR值更大者性能更好(例如在中低码率下,某某视频编码器性能更好)

这篇关于H264编解码及性能比较的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!