帧间预测原理及过程函数
码流分析实验报告(3篇)

第1篇一、实验目的1. 了解码流的基本概念和组成。
2. 掌握码流分析的基本方法和工具。
3. 通过实际案例分析,加深对码流特性的理解。
二、实验原理码流是指视频信号在传输过程中经过压缩编码后形成的数字信号。
码流分析是对码流进行分解、统计和评估的过程,旨在了解视频信号在压缩编码过程中的特性,为视频处理和应用提供依据。
码流分析主要包括以下几个方面:1. 码率分析:分析视频信号的码率分布,了解视频质量与码率的关系。
2. 帧内码流分析:分析帧内宏块、子宏块等编码单元的码率分布,了解视频细节信息。
3. 帧间码流分析:分析帧间预测编码的码率分布,了解视频运动信息和帧间相关性。
三、实验设备与环境1. 实验设备:电脑、码流分析软件(如FFmpeg、VLC等)、视频编码器(如H.264、H.265等)。
2. 实验环境:Windows操作系统、实验室网络环境。
四、实验步骤1. 选择视频素材:选择具有代表性的视频素材,如高清电影、体育赛事等。
2. 视频编码:使用视频编码器对视频素材进行压缩编码,生成码流文件。
3. 码流分析:使用码流分析软件对码流文件进行解析,获取码率、帧率、分辨率等参数。
4. 数据统计:对码流分析结果进行统计,分析视频信号在压缩编码过程中的特性。
5. 结果分析:结合视频信号特性,分析视频质量与码率、帧率、分辨率等因素的关系。
五、实验结果与分析1. 码率分析通过码流分析软件,获取视频素材的码率分布如下:- 平均码率:1000 kbps- 码率峰值:2000 kbps- 码率谷值:500 kbps分析:视频素材的平均码率为1000 kbps,峰值码率为2000 kbps,谷值码率为500 kbps。
这说明视频素材在压缩编码过程中,存在一定程度的码率波动。
2. 帧内码流分析通过码流分析软件,获取视频素材帧内宏块的码率分布如下:- 平均码率:600 kbps- 码率峰值:1000 kbps- 码率谷值:300 kbps分析:视频素材帧内宏块的平均码率为600 kbps,峰值码率为1000 kbps,谷值码率为300 kbps。
HEVC帧间编码器算法优化

高性能视频编码帧间预测的单元划分优化算法

高性能视频编码帧间预测的单元划分优化算法单娜娜;周巍;段哲民;魏恒璐【摘要】新一代的高性能视频编码(HEVC)通过应用各种先进技术来大幅提高视频编码的性能,然而,这些方法也大大增加了整个编码过程,尤其是预测编码阶段的计算复杂度.该文提出一种应用于高性能视频编码帧间预测的快速单元划分算法.该算法基于HEVC灵活的四叉树结构,根据被编码单元的运动特性来确定所编码信息的阈值,并以此作为单元划分的提前终止条件,从而减少了不必要的单元划分操作和率失真代价的相关计算,达到节省编码时间和降低编码复杂度的目的.实验结果表明,在峰值信噪比(PSNR)损失仅为0.0418 dB的情况下,所提算法可以平均降低46.1%的编码时间.【期刊名称】《电子与信息学报》【年(卷),期】2016(038)005【总页数】8页(P1194-1201)【关键词】高性能视频编码;编码单元;帧间预测;率失真代价【作者】单娜娜;周巍;段哲民;魏恒璐【作者单位】西北工业大学电子信息学院西安 710072;西北工业大学电子信息学院西安 710072;西北工业大学电子信息学院西安 710072;西北工业大学电子信息学院西安 710072【正文语种】中文【中图分类】TN919.811 引言新一代视频编码标准,即高性能视频编码(High Efficiency Video Coding, HEVC)标准,是由VCEG(Video Coding Experts Group)和MPEG(Moving Picture ExpertsGroup)联合成立的视频编码联合组(Joint Collaborative Team on Video Coding, JCT-VC)开发制定的[1]。
HEVC目前已经基本实现了在相同的质量下,压缩率比H.264/AVC提高一倍的目标,但是如何进一步提升编码效率和降低编码复杂度仍然是该领域内极具挑战性的热点问题。
在针对提高编码单元(CU)划分效率的有关问题上,人们进行了大量的研究,文献[2]提出了借助图像梯度信息提前选择CU深度范围的快速选择算法。
HEVC帧内预测算法的优化

预 测快速 算法。在全 I 帧模 式下 , 该算 法在 H V E C校验模 型( HM20 上的实验结果 表 明: .) 在保证 与原算法 的性能相差不 大的情况
下 , 码 时 间平 均 可 以缩 减 2 %。 编 9
【 关键词 】H VC 帧内预测 ; E ; 纹理特征 ; 深度 ; M20 H .
Co t 2 s 的值
_
熬
MD = ∑ MD Av Ax
…
( 2 )
=0
, 如果前 者小 则将 R C s l d ot 对应 的最佳 预测 _
4 定义为
.
模式作 为 L U的最优 预测模式 , 则将 R C s 2 应 的 C 否 d ot 对 _
2 一】 Ⅳ
最佳 预测 模式作 为 L U的最优 预测模式 。类似地 , C 对每
C U进 行 预 测 , 时对 其用 大尺 寸 C 这 U预 测也 是 没 必要 的 。如果 可 以先 判断 出 C U的纹理特 性或参 考周 围已编 码C U的深度 , 则可 中止小尺寸 C 或跳过大尺 寸 C U U的模
.
2v 1 ,一
MD = ∑ D An
…
() 4
=
0
M D 定义为 Ay
.
2 一1 Ⅳ
式 搜索 , 从而节省编码时 间。另外 , 在进行 帧内预测模 式
搜 索时 , 遍历 3 种 预测方 向模式 , 很复杂 , 要 4 也 有学者 针 对这方面也作 了改进 l 。
一
MD= ∑ ,一 A y mI )
…
=0
不 断完 善 的同时 , 多人开 始着手算 法 的优 化 。其 中针 很
对 帧 内预测有 两个研 究热点 : 角度 预测模式 的优化 和块 分 割的优化 。这里主要对块分割进行优化 。
第四章 预测编码和变换编码

一、静止图像的二维预测编码
选择值 预测值
c a
b d x
0
1 2 3 4
非预测
a b c a+b-c a+(b-c)/2 b+(a-c)/2
三邻域预测法
5 6
7
(a+b)/2
这种压缩算法被应用到JPEG标准的无损压缩模式之中, 中等复杂程度的图像压缩比可达到2:1。 Lossless JPEG
发送端预测器带有存储器,把tn时刻以前的采样值x1, x2, x3,…, xk-1
^ ek为xn与Xk的差值, ek’为ek经量化器量化的值
xk’是接收端的输出信号 误差ek为
^ 存储起来并据此对xk进行预测,得到预测值 X
k
^ ek= xk- xk’= xk-( k +ek’)= (xkXk )- ek’= ek - ek’ X
自适应量化
在一定量化级数下减少量化误差或在同样的误
差条件下压缩数据,根据信号分布不均匀的特 点,希望系统具有随输入信号的变化区间足以 保持输入量化器的信号基本均匀的能力,这种 能力叫自适应量化。
示例二:
ADPCM采用与DPCM相同的预测器,但对误差量化时采用自 适应改变量化器的量化阶数的压缩结果
^
实际上就是发送端的量化器对误差ek’量化的误差 对 ek’的量化越粗糙,压缩比越高,失真越大.
为接纳量化步骤,需要改变图4-1中的无损编码器以使编码器和解 码器所产生的预测能相等。为此在图4-2中将有损编码器的预测器 放在1个反馈环中。这个环的输入是过去预测和与其对应的量化误 差的函数
’ =e ’ + ^ x k k Xk
DM编码失真示例
基于片类型和帧间预测的H.264去块滤波新算法

内预测 、/ 14像素精度 的运 动估 计 、 多参 考帧 与多种 大小 块 的 帧 间预测技 术 、 统一 的熵 编码表 、 于 内容的 自适 应变 长编码 基 与基 于内容 的 自适应算 术编码 以及 去方块 效应 自适应滤 波器 等 , 而极 大地提高 了视 频 的压缩效 率。 同时 , 于不 同的业 从 对
联合 视频组 (V ) 定 的新 一 代视 频压 缩编码 标准 。它 引入 JT 制
了一 系 列 先 进 的 视 频 编 码 技 术 , 4X 如 4整 数 变 换 、 域 内 的 帧 空
成部分之一 , 该系统在改善 视频质量 和压 缩效率 的 同时 , 相应
地增加 了较高 的计算 复杂度 , 除去其 中的乘 、 除法 , 波器 的计 滤
务 , .6 灵活地采用相 应 的时延 限制 , H2 4 使得 网络 的适应 性更
强 。但是这种 H 24的优越性是 以增加计算 的复 杂度为 代价 .6
度进 行不同强度 的滤波 。由于环 内去方 块效应 滤波 的高 自适 应性 是基 于块边界和像素在等级上进行划分 和处理 的 , 以在 所
0 引言
H.6/ V 2 4 A C视频编码标准 是 由 IO IC和 IU— S /E T T组成 的
A C可 节 省 大 约 5 % 的 码 率 , 其 计 算 复 杂 度 大 约 是 V 0 但
H-6 23的 4或 5倍 。 去方块滤波 系统 是 H.6 / V 24 A C视 频编 码标 准 的重 要 组
关键 词 :边界 强度 ;H. 6 2 4;片类型 ;去块 滤波 ;帧 间预 测 中图分 类号 :T 9 9 8 P 9 N 1 . ;T 3 1 文献 标 志码 :A 文章编 号 :10 .6 5 2 1 ) 7 2 6 .4 0 1 3 9 (0 1 0 — 7 10
视频编码的基本原理

视频编码的基本原理视频编码是将视频信号转化为数字数据,以便存储、传输和处理的过程。
基本原理包括以下几个方面:1. 空间域压缩(Spatial Compression):视频信号中的冗余信息主要分为空间冗余和时间冗余。
空间域压缩通过去除空间冗余来减少数据量。
其中,最常用的方法是基于离散余弦变换(Discrete Cosine Transform,DCT)的压缩方法。
DCT将视频分解为一组频率分量,通过保留重要的频率成分,舍弃不重要的频率成分来进行压缩。
2. 时域压缩(Temporal Compression):视频信号中的时间冗余主要源于帧间的冗余信息。
时域压缩通过利用帧间跳动(Inter-frame Prediction)来减少冗余。
常用的方法有帧内预测(Intra-frame Prediction)和帧间预测(Inter-frame Prediction)。
帧内预测利用当前帧的局部像素信息来预测当前帧的像素值,帧间预测利用前后帧之间的相关性来预测当前帧的像素值。
通过将预测误差编码为残差(Residuals),可以进一步减少数据量。
3. 熵编码(Entropy Coding):熵编码主要用于进一步减小数据量,通过统计学原理将频繁出现的信息用较少的比特表示,而将不经常出现的信息用较多的比特表示。
最常用的方法是霍夫曼编码(Huffman Coding),它将出现概率较高的符号用较短的编码表示,出现概率较低的符号用较长的编码表示。
4. 帧率控制(Frame rate control):帧率控制用于调整视频的播放速率和帧率。
通过控制每秒播放的帧数,可以达到节省存储空间和降低传输带宽的目的。
帧率控制方法包括丢帧(Frame Dropping)和插帧(Frame Interpolation)。
丢帧方法根据需要丢弃一些帧,插帧方法则根据需要生成新的帧。
综上所述,视频编码的基本原理包括空间域压缩、时域压缩、熵编码和帧率控制等。
基于相对运动和纹理走向的快速帧间选择算法

A d . u 提 出利 用 当前块 的 D T系 数 计 算 该 nyC Y C 块 的的能量 , 从而得 到块 的纹理 复杂度 , 进行快 速划 分模 式 的选 择 。该 技术 的一个 不 足 之处 是 依 靠 A C
系数 总能量来 判断 宏块 细 节 高低 , 样 必 须对 宏 块 这 进行 额外 的 D T变 换 。根据 块 的细 节 程 度 和纹 理 C 方 向选 择不 同模式 集 j 基 于率 失 真代 价 的不 同对 ,
式 、 动 向量之 间 的相关 性 , 这些模 式之 问的相对 运 用
帧间算法的改进 , 大致可分为: 率失真代价函数
的简化 、 小预测模 式 的选 择 范 围或者 是 提 前终 止 缩
运 动的剧 烈程 度去 初 步划 分 帧 间模 式 。其 次 , 该算 法用 到 了一个 简化 的纹 理复 杂度判 断方法 去判断 纹
¥ 2= ( 2 8一AX)¥( 8一△y /( 8 ) 8¥ )
块 的纹理走 向 ; 3 第 部分用 前两者 的依据 快速决 出较 佳 的帧间模 式。
2 1 基于 覆盖面 积的运 动复杂 性判 决 .
同理 再计算 剩下 的两个 8× 8块 和第 一个 8X 8 块 的覆盖 面积 , 它们 的平 均值得到 s 。 取 2
同理计 算 另外 3个 8×8块 的覆 盖 比例 , 取它们 的平 均值得 到 1 。
图 1 b 是先 将第 2个 8× () 8块 平移 到 和第 1个 8X 块重合 , 8 再计算它们 的覆盖 面积。AX = 1一 2 X X, △Y= 1 Y , 际上是两小块 的相对运动 。那 么, Y 一 2实
摘
要 :针对 H 2 4基 于率失真优 化 算 法的模 式 选择 的 高复杂度 ,提 出了一种 快 速 帧 间预 测 算 .6
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
帧间预测是采用基于块的运动补偿从一个或多个先前编码的图像帧中产生一个预测模型的。H.264与早起标准的主要不同之处在于支持不同的块尺寸(从16×16到4×4)以及支持精细子像素精度的运动矢量(亮度成分是1/4像素精度)
每个宏块(16×16)的亮度分量可以按四种方式划分,即按一个16×16块,或两个16×8块,或两个8×16块,或者4个8×8块的划分进行运动补偿。如果选择8×8模式,宏块中的4个8×8子宏块可以用另一种方式进一步划分,或者作为一个8×8块,或作为两个8×4块,或作为两个4×8块,或者作为四个4×4块。
每个分块或者子宏块都产生一个单独的运动矢量。每个运动矢量均需要编码和传输,同时分块模式信息需要进行编码并放在压缩比特流中。
每个色度块按照与亮度分量同样的分块方式进行划分。 编码每个分块的运动矢量需要大量比特位。由于相邻块的运动矢量高度相关,所以每个块的运动矢量都是从邻近的先前编码块中进行预测得到的。当前运动矢量与预测运动矢量MVp的差值MVD被编码和传输。
MVp的预测规则如下: 假设E是当前宏块、子宏块或子宏块分块,A是E左边的分块或子分块,B是E上边的分块或子分块,C是E右上的分块或子分块。如果E左边的分块数大于1,则最上边的分块被选为A。如果E上边的分块数大于1,则最左边的分块被选为B。
1.除了16×8和8×16两种分块尺寸的其余传输块,MVp是分块A、B、C的运动矢量的中值(不是平均值) 2.对于16×8分块,上边16×8分块的MVp是从B预测得到的,下边16×8分块的MVp是从A预测得到的。 3.对于8×16分块,左边8×16分块的MVp是从A预测得到的,右边8×16分块的MVp是从C预测得到的。 4.对于skip宏块,产生一个16×16块的MVp,和第1种情况一样。MVp的形成规则相应修改。
如果得不到一个或多个先前传输块的话(如,它在当前条带之外),则MVp的形成原则相应修改。
——————————————————————————————————————– Yeah! 又可以看实例了: 这里对foreman_part_qcif.yuv的第二帧中地址为40的宏块(白色框框住,图贴在文章开头)进行分析,关键代码还是在encode_one_macroblock_high中,由于该帧是P帧,所以会进行帧间预测。其中最重要的函数为BlockMotionSearch,该函数为所有大小的分块完成运动搜索的过程,得到最优的MV。 1.进行skip模式,实现函数FindSkipModeMotionVector,该函数只是从周围块的MV来预测当前宏块的MVp,获得MVp的函数GetMotionVectorPredictorNormal。由于skip宏块是没有MVD的,它把MVp作为运动矢量并得到运动补偿宏块。实例中获得的MVp为(-17, 3)
2.16×16模式,也需要先获得MVp(-17, 3),于是将(-16, 4)定为搜索中心(最近的整数像素),在一定的搜索范围(32)之内进行整像素搜索,需要搜索的位置有(32*2+1)*(32*2+1)=4225个。对于每个位置,都要计算一个motion cost(block_sad+mv_cost),最终找到使cost最小(2311)的MV(-16, 8)。然后在该点周围9个点(包括该点)再进行半像素搜索,找到一个cost最小(3639)的MV(-16, 6),这里采用的误差度量不再是SAD(Sum of Absolute Difference),而是SATD(Sum of Absolute Transformed Difference),所以与之前的2311没可比性,这个配置文件里面可以配置,只不过默认的配置是整像素采用SAD,半像素和四分之一像素采用SATD。进行完半像素搜索后,再在cost最小的半象素点周围的9个点进行四分之一像素搜索,最后找到一个cost值最小(3523)的MV(-17, 7)。
3.16×8模式,要对上下两个16×8块进行运动搜索,先是上面的块,MVp为(-17, 5),于是从(-16, 4)开始进行整像素搜索,得到SAD最小的是(-24, 4),半像素搜索(-26, 2),四分之一像素搜索(-27,2),最小cost为1262。然后是下面的块,类似得到最小cost(2020)的MV(-15, 5)。两个cost的和为1262+2020=3282。
4.8×16模式,和16×8的区别就是现在的分块为左右两个,分别得到左块和右块的MV为(-32, 3)和(-15, 5),cost为761+1825=2586。
5.8×8模式,如上面所说,如果选择8×8模式,四个8×8子宏块可以用另外四种方式进行划分,所以需要对4个子宏块进行运动估计和模式选择。需要用RDO技术来选择。
先是第一个8×8子宏块。SMB8x8模式,cost最小(483)的MV(-30, 2),rdcost = 1827.9051343856379;8×4模式,上块和下块最优MV分别为(-32, 2)和(-32, 3),cost为323+146=469,rdcost = 1839.9845446142001;4×8模式rdcost = 2071.8257241570759;4×4模式rdcost = 1906.9051343856379。选择rdcost最小的模式,也就是8×8模式,见图中高亮宏块的左上角8×8块。
第二个8×8子宏块。8X8 rdcost = 2192.8257241570759;8×4 rdcost = 2337.8735125141839; 4×8 rdcost = 1486.6669036999515,左块和右块MV分别为(-21, 5)、(-15, 3),SATD cost = 413;4×4 rdcost = 1927.9051343856379。选择rdcost最小的模式,也就是4×8模式模式,见图中高亮宏块的右上角8×8块。
第三块和第四块采用类似的方法,分别选择了SMB8x8模式和SMB4x4模式。见图中高亮宏块的左下和右上8×8块。
——————————————————————————————————————– 所有帧间预测模式都做完了,下面就是要通过各个模式的rdcost来选择最佳模式了。 skip模式,48032.539705114279 P16x16模式,13120.288152342357 P16x8模式,12449.192575628142 P8x16模式,10033.668325899660 P8x8模式,8257.1286207853791 即使是P帧,也还是要做帧内预测的,下面是帧内模式的rdcost I16x16模式,16021.447683899336 I4x4模式,13026.446972799482 I_PCM模式,105585.41572855003 当然是选rdcost最小的咯,也就是P8x8,而四个8×8子宏块的分块情况也在之前选择好了。 ——————————————————————————————————————— 之后还是把用Elecard StreamEye工具得到的该宏块的信息贴出来研究下: position : 7×3 (112×48) mb_addr : 40 size (in bits) : 146 mb_type : 4 宏块类型,见标准文档表7-13,4表示的宏块类型名称为P_8x8ref0 pmode : 3 预测模式,8×8 mb_type : Inter(P_8x8ref0) slice_number : 0 transform_8x8 : 0 field\frame : frame cbp bits : 0 1100 0 00 0 00 : 0000 00 00 : 0011 : 0001 quant_param : 28 QP pmode : Part_8x8 预测模式名称 sub_pmode : SubPart_8x8 SubPart_4x8 子宏块的分块方式 : SubPart_8x8 SubPart_4x4 sub_pdir : Pred_L0 Pred_L0 ? : Pred_L0 Pred_L0 mvL0 : MV,与之前分析的一致 -30, 2, 0| -30, 2, 0| -21, 5, 0| -15, 3, 0 -30, 2, 0| -30, 2, 0| -21, 5, 0| -15, 3, 0 -33, 3, 0| -33, 3, 0| -26, 2, 0| -10, 3, 0 -33, 3, 0| -33, 3, 0| -26, 2, 0| -20, 43, 0
——————————————————————————————————————— 下面分析码流,相关函数writeMBLayerPSlice 先写入的是一个mb_skip_run语法元素,表示之前有多少个skip宏块,这里为0,因为之前的宏块不是skip空块
再写入MBType,表示宏块类型 然后是4个8×8子宏块的模式 之后写入的是运动矢量信息 再然后写入cbp和DQuant 最后写如的是亮度和色度的残差 该实例中,mb_skip_run占1bit,MBType占5bits,子宏块的模式占10bits,运动矢量信息占82bits,cbp占9bits,DQuant占1bit,亮度残差占38bits,色度残差为空,一共1+5+10+82+9+1+38=146bits,与上面一致,忽忽
其中运动矢量信息的编码函数为write_pslice_motion_info_to_NAL,编码每个块的最佳MV和MVp的差值MVD。
.