H264--1--编码原理以及I帧B帧P帧

合集下载

I,P,B帧和PTS,DTS的关系

I,P,B帧和PTS,DTS的关系

基本概念:I frame :帧内编码帧又称intra picture,I 帧通常是每个GOP(MPEG 所使用的一种视频压缩技术)的第一个帧,经过适度地压缩,做为随机访问的参考点,可以当成图象。

I帧可以看成是一个图像经过压缩后的产物。

P frame: 前向预测编码帧又称predictive-frame,通过充分将低于图像序列中前面已编码帧的时间冗余信息来压缩传输数据量的编码图像,也叫预测帧;B frame: 双向预测内插编码帧又称bi-directional interpolated prediction frame,既考虑与源图像序列前面已编码帧,也顾及源图像序列后面已编码帧之间的时间冗余信息来压缩传输数据量的编码图像,也叫双向预测帧;PTS:Presentation Time Stamp。

PTS主要用于度量解码后的视频帧什么时候被显示出来DTS:Decode Time Stamp。

DTS主要是标识读入内存中的bit流在什么时候开始送入解码器中进行解码。

在没有B帧存在的情况下DTS的顺序和PTS的顺序应该是一样的。

IPB帧的不同:I frame:自身可以通过视频解压算法解压成一张单独的完整的图片。

P frame:需要参考其前面的一个I frame 或者B frame来生成一张完整的图片。

B frame:则要参考其前一个I或者P帧及其后面的一个P帧来生成一张完整的图片。

两个I frame之间形成一个GOP,在x264中同时可以通过参数来设定bf的大小,即:I 和p或者两个P之间B的数量。

通过上述基本可以说明如果有B frame 存在的情况下一个GOP的最后一个frame一定是P.DTS和PTS的不同:DTS主要用于视频的解码,在解码阶段使用.PTS主要用于视频的同步和输出.在display的时候使用.在没有B frame的情况下.DTS和PTS的输出顺序是一样的.例子:下面给出一个GOP为15的例子,其解码的参照frame及其解码的顺序都在里面:如上图:I frame 的解码不依赖于任何的其它的帧.而p frame的解码则依赖于其前面的I frame或者P frame.B frame的解码则依赖于其前的最近的一个I frame或者P frame 及其后的最近的一个P frame.。

i帧和p帧的关系

i帧和p帧的关系

i帧和p帧的关系在视频编码中,i帧和p帧是两种常用的帧类型。

它们之间存在着密切的关系,相互配合,共同构成了视频的完整画面。

本文将就i帧和p帧的关系展开探讨。

一、i帧和p帧的定义和特点i帧(intra frame)即帧内编码帧,也被称为关键帧。

它是视频序列中的某一帧,它的压缩仅依靠自身的数据进行,与其他帧之间没有关联。

i帧是视频的起始帧,也是解码器恢复视频的起点。

每个i 帧都是一个完整的画面,包含了丰富的空间信息,因此它的文件大小通常较大。

p帧(predictive frame)即帧间预测编码帧。

它是根据前一帧(一般为i帧或p帧)进行差异编码,通过预测和补偿来实现数据的压缩。

p帧只存储了发生变化的像素信息,因此文件大小相对较小。

p帧通过参考前一帧的像素信息来进行解码,从而恢复出完整的画面。

二、i帧和p帧的关系i帧和p帧是视频编码中的两个重要概念,它们之间存在着密切的关系。

在视频序列中,通常会以i帧为起点,后续的p帧通过对前一帧的预测和补偿来实现数据的压缩。

具体而言,p帧通过对前一帧进行运动估计和运动补偿,找出两帧之间的差异,并只存储这些差异。

这样一来,视频序列中的连续帧之间的差异就被有效地减小了,从而实现了更高效的压缩。

在解码时,解码器首先解码i帧,然后根据i帧的信息进行p帧的解码。

由于p帧仅存储了差异信息,因此解码时需要结合参考帧进行像素的恢复。

解码器会根据前一帧的像素信息和p帧的差异信息进行像素的重构,从而还原出完整的画面。

通过不断地参考前一帧的信息,p帧可以实现对整个视频序列的高效压缩和解码。

三、i帧和p帧的应用i帧和p帧的应用广泛存在于各种视频编码标准中,如H.264、H.265等。

在实际应用中,编码器会根据视频的特点和要求,合理地选择i帧和p帧的间隔和数量,以实现更好的压缩效果和视频质量。

通常情况下,i帧的间隔较长,而p帧的间隔较短,以保证视频的连续性和流畅性。

i帧和p帧的应用也在实时视频传输中具有重要意义。

H264编解码协议详解

H264编解码协议详解

H264编解码协议详解H.264编解码协议,也被称为AVC(Advanced Video Coding),是一种广泛应用于视频压缩的标准。

它是一种基于帧的压缩算法,可以将高质量的视频数据以较低的比特率传输和存储。

以下是H.264编解码协议的详细解释:1.压缩结构H.264使用了多种技术来实现高效率的视频压缩。

它使用了预测编码、变换编码和熵编码等多种技术。

预测编码通过利用帧间和帧内的冗余性,对视频进行空间和时间上的预测。

变换编码则通过对预测误差进行离散余弦变换(DCT),在频域上进行编码。

最后,熵编码使用了熵编码表将变换后的数据进行进一步的压缩。

2.帧结构H264将视频数据划分为一系列的帧,每个帧包含了许多宏块(macroblock)。

其中,关键帧(I帧)是完全独立的帧,它包含了视频的全局信息。

预测帧(P帧)和双向预测帧(B帧)则通过对前一帧和前后一帧进行预测来进行编码。

P帧只依赖前一帧,而B帧则依赖前后两帧。

这种结构可以进一步提高视频压缩的效率。

3.量化参数H.264使用量化参数对预测误差进行编码。

量化参数决定了每个预测误差值的精度,较大的量化参数会导致更高的压缩率,但也会导致较大的失真。

编码器和解码器可以通过动态调整量化参数来平衡压缩率和失真。

4.帧间预测帧间预测是H.264压缩的核心技术之一、它通过对前后帧的像素进行比较,预测当前帧的像素值。

如果在帧间没有大的运动,那么预测误差就会较小,从而达到更好的压缩效果。

帧间预测有多种模式,包括帧间直接模式(inter-direct mode)、帧间双向模式(inter-bidirect mode)和帧间skip模式(inter-skip mode)等。

5.熵编码H.264使用了基于上下文的自适应变长编码(CAVLC)和基于上下文的自适应二进制算术编码(CABAC)两种熵编码技术。

CAVLC主要用于编码量化系数和运动矢量等数据,而CABAC主要用于编码预测模式和其他语法元素。

【知识点】H264,H265硬件编解码基础及码流分析

【知识点】H264,H265硬件编解码基础及码流分析

【知识点】H264,H265硬件编解码基础及码流分析前⾔⾳视频开发需要你懂得⾳视频中⼀些基本概念,针对编解码⽽⾔,我们必须提前懂得编解码器的⼀些特性,码流的结构,码流中⼀些重要信息如sps,pps,vps,start code以及基本的⼯作原理,⽽⼤多同学都只是⼀知半解,所以导致代码中的部分内容虽可以简单理解却不知其意,所以,在这⾥总结出了当前主流的H.264,H.265编码相关的原理,以供学习.1. 概览1.1. 为什么要编码众所周知,视频数据原始体积是巨⼤的,以720P 30fps的视频为例,⼀个像素⼤约3个字节,如下所得,每秒钟产⽣87MB,这样计算可得⼀分钟就将产⽣5.22GB。

数据量/每秒=1280*720*33*3/1024/1024=87MB因此,像这样体积重⼤的视频是⽆法在⽹络中直接传输的.⽽视频编码技术也就因运⽽⽣.关于视频编码原理的技术可以参考本⼈其他⽂章,这⾥不做过多描述.1.2. 编码技术经过很多年的开发迭代,已经有很多⼤⽜实现了视频编码技术,其中最主流的有H.264编码,以及新⼀代的H.265编码,⾕歌也开发了VP8,VP9编码技术.对移动端⽽⾔,苹果内部已经实现了如H.264,H.265编码,我们需要使⽤苹果提供的VideoToolbox框架来实现它.1.3. 编码分类软件编码(简称软编):使⽤CPU进⾏编码。

硬件编码(简称硬编):不使⽤CPU进⾏编码,使⽤显卡GPU,专⽤的DSP、FPGA、ASIC芯⽚等硬件进⾏编码。

优缺点软编:实现直接、简单,参数调整⽅便,升级易,但CPU负载重,性能较硬编码低,低码率下质量通常⽐硬编码要好⼀点。

硬编:性能⾼,低码率下通常质量低于硬编码器,但部分产品在GPU硬件平台移植了优秀的软编码算法(如X264)的,质量基本等同于软编码。

iOS系统中的硬编码苹果在iOS 8.0系统之前,没有开放系统的硬件编码解码功能,不过Mac OS系统⼀直有,被称为Video ToolBox的框架来处理硬件的编码和解码,终于在iOS 8.0后,苹果将该框架引⼊iOS系统。

图像视频编码的国际标准以及每种图像和视频编码的技术特点

图像视频编码的国际标准以及每种图像和视频编码的技术特点

H.261是ITU-T针对可视电话和会议电视、窄带ISDN等要求实时编解码和低延时应用提出的一个编码标准。该标准包含的比特率为p*64Kbit/s,其中p是一个整数,取值范围为1~30,对应比特率为64Kbit/s~92Mbit/s。
6、H.261
H.261标准大体上分为两种编码模式:帧内模式和帧间模式。对于缓和运动的人头肩像,帧间编码模式将占主导位置;而对画面切换频繁或运动剧烈的序列图像,则帧间编码模式要频繁地向帧内编码模式切换。
1)输入/输出图像彩色分量之比可以是4∶2∶0,4∶2∶2,4∶4∶4。
2)输入/输出图像格式不限定。
3)可以直接对隔行扫描视频信号进行处理。
4)在空间分辨率、时间分辨率、信噪比方面的可分级性适合于不同用途的解码图像要求,并可给出传输上不同等级的优先级。
JPEG-2000另一个极其重要的优点就是感兴趣区(ROI,Region Of Interest)特性。用户在处理的图像中可以指定感兴趣区,对这些区域进行压缩时可以指定特定的压缩质量,或在恢复时指定特定的解压缩要求,这给人们带来了极大的方便。在有些情况下,图像中只有一小块区域对用户是有用的,对这些区域采用高压缩比。在保证不丢失重要信息的同时,又能有效地压缩数据量,这就是感兴趣区的编码方案所采取的压缩策略。基于感兴趣区压缩方法的优点,在于它结合了接收方对压缩的主观要求,实现了交互式压缩。
JEPG对图像的压缩有很大的伸缩性,图像质量与比特率的关系如下:
a)15~20比特/像素:与原始图像基本没有区别(transparent quality)。
b)075~15比特/像素:极好(excellent quality),满足大多数应用。
c)05~075比特/像素:好至很好(good to very good quality),满足多数应用。

H264编码原理以及I帧、B和P帧详解,H264码流结构分析

H264编码原理以及I帧、B和P帧详解,H264码流结构分析

H264编码原理以及I帧、B和P帧详解,H264码流结构分析H264码流结构分析/chenchong_219/article/details/379905411、码流总体结构:h264的功能分为两层,视频编码层(VCL)和⽹络提取层(NAL)。

H.264 的编码视频序列包括⼀系列的NAL 单元,每个NAL 单元包含⼀个RBSP。

⼀个原始的H.264 NALU 单元常由 [StartCode] [NALU Header] [NALU Payload] 三部分组成,其中 Start Code ⽤于标⽰这是⼀个NALU 单元的开始,必须是"00 00 00 01" 或"0000 01"。

其中RBPS有分为⼏种类型:NAL的解码单元的流程如下:2、 NAL Header:占⼀个字节,由三部分组成forbidden_bit(1bit),nal_reference_bit(2bits)(优先级),nal_unit_type(5bits)(类型)。

forbidden_bit:禁⽌位。

nal_reference_bit:当前NAL的优先级,值越⼤,该NAL越重要。

nal_unit_type :NAL类型。

参见下表⼏个例⼦:3、 ffmpeg解析H264流程分析这是⼀段实际的码流在上⾯的图⽚中,共有三个起始码:0x00 0000 01const uint8_t*ff_h264_decode_nal(H264Context*h, const uint8_t *src,int *dst_length, int*consumed, int length)中分析过程为:h->nal_ref_idc= src[0] >> 5;h->nal_unit_type= src[0] & 0x1F;此处src[0]即为06,写成⼆进制位0000 0110,则h->nal_ref_idc = 0,h->nal_unit_type = 6可以判断这个NALU类型为SEI,重要性优先级为0。

H.264百度百科

H.264百度百科

H.264百科名片H.264,同时也是MPEG-4第十部分,是由ITU-T视频编码专家组(VCEG)和ISO/IEC动态图像专家组(MPEG)联合组成的联合视频组(JVT,Joint Video Team)提出的高度压缩数字视频编解码器标准。

目录[隐藏]H.264基本概况H.264算法的优势H.264的发展历史H.264的高级技术背景H.264的特征和高级优势H.264标准概述H.264标准的主要特点H.264标准的关键技术H.264基本概况H.264算法的优势H.264的发展历史H.264的高级技术背景H.264的特征和高级优势H.264标准概述H.264标准的主要特点H.264标准的关键技术∙H.264的技术亮点∙H264编码技术∙H264层次构成∙H.264解码∙H.264的性能比较∙H.264的错误恢复工具∙H.264在移动中通应急图像传输中的应用∙关于H.264的六个问题∙国内H.264编解码器生产厂家∙Intel G965支持H.264[编辑本段]H.264基本概况随着HDTV的兴起,H.264这个规范频频出现在我们眼前,HD-DVD和蓝光DVD 均计划采用这一标准进行节目制作。

而且自2005年下半年以来,无论是NVIDIA 还是ATI都把支持H.264硬件解码加速作为自己最值得夸耀的视频技术。

H.264到底是何方“神圣”呢?H.264是一种高性能的视频编解码技术。

目前国际上制定视频编解码技术的组织有两个,一个是“国际电联(ITU-T)”,它制定的标准有H.261、H.263、H.263+等,另一个是“国际标准化组织(ISO)”它制定的标准有MPEG-1、MPEG-2、MPEG-4等。

而H.264则是由两个组织联合组建的联合视频组(JVT)共同制定的新数字视频编码标准,所以它既是ITU-T的 H.264,又是ISO/IEC的MPEG-4高级视频编码(Advanced Video Coding,AVC),而且它将成为MPEG-4标准的第10部分。

IBP帧详解

IBP帧详解

IBP帧详解>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> H264中I、B、P帧编码的基本流程I帧编码的基本流程为:(1) 进行帧内预测,决定所采用的帧内预测模式。

(2) 像素值减去预测值,得到残差。

(3) 对残差进行变换和量化。

(4) 编程编码和算术编码。

(5) 重构图像并滤波,得到的图像作为其它帧的参考帧。

P帧和B帧编码的基本流程为:(1) 进行运动估计,计算采用帧间编码流程编码模式的率失真函数(节)值。

P帧只参考前面的帧,B帧可参考后面的帧。

(2) 进行帧内预测,选取率失真函数值最小的帧内模式与帧间模式比较,确定采用哪种编码模式。

(3) 计算实际值和预测值的差值。

(4) 对残差进行变换和量化。

(5) 熵编码,如果是帧间编码模式,编码运动矢量MPEG压缩中的I、B、P帧首先,MPEG-1压缩的基本思想:帧内压缩和帧间压缩。

其次,时间相关性的统计分析:统计的结果表明,在间隔1~2帧的图像中,各像素只有10%以下的点,其亮度差值变化超过2%,而色度差值的变化只有1%以下。

采用的压缩方法: 分组:把几帧图像分为一组(GOP),为防止运动变化,帧数不宜取多。

1.定义帧:将每组内各帧图像定义为三种类型,即I帧、B帧和P帧;2.预测帧:以I帧做为基础帧,以I帧预测P帧,再由I帧和P帧预测B 帧;3.数据传输:最后将I帧数据与预测的差值信息进行存储和传输。

如何提取关键帧(I帧,P帧,B帧)

如何提取关键帧(I帧,P帧,B帧)

如何提取关键帧(I帧,P帧,B帧)开发流媒体播放器的时候,特别是在windows mobile,symbian(S60)平台开发时,很可能遇到需要自己开发播放器的情况。

S60平台提供了CVideoPlayUtility接口可以实现流媒体播放器,但由于非开源,所以相对于自己开发播放器,很多操作受到限制。

live555主要用于网络流接收,ffmpeg则是对接收到的数据进行编码/解码。

I帧,P帧,B 帧是视频流中三种分类,其中I帧也就是关键帧是基础帧,P帧一般根据I帧确定,而B帧需要前面两着的信息。

举例说:the Input sequence for video encoder1 2 3 4 5 6 7I B B P B B ILet's take 1,2,3.. as PTS for simplificationthe out sequence for video encoder ( this equals the decoder sequence)1 423 7 5 6I P B B I B B播放器LIVE555收到的序列顺序就应该是:1 423 7 5 6经过解码器解码,顺序又回到1 2 3 4 5 6 7这种正常顺序。

所以我们可以根据avcodec_decode_video来判断帧别。

avcodec_decode_video之后的顺序是一定的。

严格按照1 2 3 4。

这样的顺序来。

判断I帧,P,B帧方法:(1):假如解码成功,则不是I帧就是P帧(根据AVFrame->keyframe判断是否是I帧)。

假如不是I帧,也不是P帧,则只能是B帧(通过pts判断)。

(2):采用AVFrame->pict_type综合pts的办法:if(FF_I_TYPE==picture->pict_type){Printlog("<II>");}else if(FF_P_TYPE==picture->pict_type){Printlog("<PP>");}else if(FF_B_TYPE==picture->pict_type){Printlog("<BB>");}else if(FF_S_TYPE==picture->pict_type){Printlog("<SS>");}else{Printlog("<OtherType>");}正常情况下是不会打印出B帧的,因为解码成功的肯定是I帧或者是P帧.判断ffmpeg读到的packet是否为关键帧av_read_frame(avFormatCtx, readPacket)if(readpacket->flags &AV_PKT_FLAG_KEY ){key frame}//////如果是h264编码,从帧数据判断frame = |length|data|length后面紧跟着的第一个byte后5位如果是01001则为关键帧if((frame[4] & 0x1f) == 5){NSLog(@"关键帧");}else{NSLog(@"非关键帧");}。

h264检测是I帧还是P帧,解决录像第一帧有马赛克问题

h264检测是I帧还是P帧,解决录像第一帧有马赛克问题

h264检测是I帧还是P帧,解决录像第一帧有马赛克问题最近使用h264码流数据进行录像,但是录出来的第一帧有马赛克,究其原因是录像的第一帧不是关键帧,所以需要录像是需要判断第一帧是否是关键帧,方法有两种,第一种是原码流的基础上查找,第二种是将原码流传递给ffmpeg让ffmpeg判断key_frame,第二种相对简单,但是由于这样一来录像和解码视频切合的太紧密,之后修改比较麻烦,所以选择第一种方案,查看注释1可以明白如何检测h264码流的关键帧,下面是我截取原码流的关键帧和p帧0000000 :是sps0000000 : 是pps0000000 : 是帧类型关键帧类型:1.<span style="color:#FF0000;"><span style="font-size:24px;">0000000: <span style="color:#CCCCCC;">0000 0001 6742 401f 9654 0501 ed00 f39e ....gB@..T......2.0000010: a</span><span style="color:#3366FF;">000 0000 0168 ce3880</span>00 0000 01<span style="color:#000000;">65</span> 8880 .....h.8.....e..3.0000020: 4001 8231 2000 4f11 d84d 5fff fb3b c28a @..1 .O..M_..;..4.0000030: 00bc fc83 03db b3e3 8603 9c59 fa0f a82c ...........Y...,5.0000040: df55 fdf6 8414 032a e766 bd4b fbea 05af .U.....*.f.K....</span>6.</span>P帧类型:1.0000000: <span style="color:#C0C0C0;">0000 0001 6742 401f 9654 0501 ed00 f39e ....gB@..T......2.0000010: a</span><span style="color:#3366FF;">000 0000 0168 ce3880</span>00 0000 01<span style="color:#000000;">41</span> 9a02 .....h.8.....A..3.0000020: 0586 7cb9 9125 5788 8f90 7f1f 1930 7eef ..|..%W......0~.4.0000030: 6383 bebd 2cc5 3627 92c3 390b 46dc d4a5 c...,.6'..9.F...5.0000040: 774b 3484 57f8 9840 fba3 1dd6 800f 2242 wK4.W..@......"B6.0000050: 8816 080f 8f8d 84c6 09aa cda6 363d 00da ............6=..7.0000060: b563 4392 bc65 93e2 63bb 6d30 472e 3ef1 .cC..e..c.m0G.>.8.0000070: 545d 6a3f 36c3 2f7d 6b1e 3c91 d15d d687 T]j?6./}k.<..]..所以在代码中需要检索第29个字节,来判断是65还是41,1.public static String byteToHexString(byte src){2. StringBuilder stringBuilder = new StringBuilder("");3. int v = src & 0xFF;4. String hv = Integer.toHexString(v);5.if (hv.length() < 2) {6. stringBuilder.append(0);7. }8. stringBuilder.append(hv);9.return stringBuilder.toString();10. }11.p rivate boolean isFirstIFrame = true;12.p rivate String IFrame = "65";//关键帧是0x6513.//<span style="font-size:16px"></span>bArrayImage是存放h264原码流字节数组14.i f (是在录像) {15.if (isFirstIFrame) {16. String type = byteToHexString(bArrayImage[29]);17.if (type.equals(IFrame)) { //第29个字符是判断帧的类型18. isFirstIFrame = false;19. ShootingVideoData(bArrayImage, Video_Data_iVideoLen);//录制第一帧:关键帧20. }21. }else {22. ShootingVideoData(bArrayImage, Video_Data_iVideoLen);23. }24. }这样在录制出的第一帧录像就没有马赛克了。

H.264-MJPEG-MPEG-4的区别

H.264-MJPEG-MPEG-4的区别

该标准从颁布的那一刻起,MPEG-1取得一连串的成功,如VCD和MP3的大量使用,Windows95以后的版本都带有一个MPEG-1软件解码器,可携式MPEG-1摄像机等等。
2.MPEG-2标准
MPEG组织于1994年推出MPEG-2压缩标准,以实现视/音频服务与应用互操作的可能性。 MPEG-2标准是针对标准数字电视和高清晰度电视在各种应用下的压缩方案和系统层的详细规定,编码码率从每秒3兆比特~100兆比特,标准的正式规范在ISO/IEC13818中。MPEG-2不是MPEG-1的简单升级,MPEG-2在系统和传送方面作了更加详细的规定和进一步的完善。MPEG-2特别适用于广播级的数字电视的编码和传送,被认定为SDTV和HDTV的编码标准。
M-JPEG源于JPEG压缩技术,是一种简单的帧内JPEG压缩,压缩图像质量较好,在画面变动情况下无马赛克,但是由于这种压缩本身技术限制,无法做到大比例压缩,录像时每小时约1-2GB空间,网络传输时需要2M带宽,所以无论录像或网络发送传输,都将耗费大量的硬盘容量和带宽,不适合长时间连续录像的需求,不大实用于视频图像的网络传输。
MPEG-2的编码码流分为六个层次。为更好地表示编码数据,MPEG-2用句法规定了一个层次性结构。它分为六层,自上到下分别是:图像序列层、图像组(GOP)、图像、宏块条、宏块、块。
MPEG-2标准在广播电视领域中的主要应用如下:
(1)视音频资料的保存
一直以来,电视节目、音像资料等都是用磁带保存的。这种方式有很多弊端:易损,占地大,成本高,难于重新使用。更重要的是难以长期保存,难以查找、难以共享。随着计算机技术和视频压缩技术的发展,高速宽带计算机网络以及大容量数据存储系统给电视台节目的网络化存储、查询、共享、交流提供了可能。

I帧和I-B-P帧的区别

I帧和I-B-P帧的区别

MPEG压缩中的 I、B、P帧首先,MPEG-1压缩的基本思想:帧内压缩和帧间压缩。

其次,时间相关性的统计分析:统计的结果表明,在间隔1~2帧的图像中,各像素只有10%以下的点,其亮度差值变化超过2%,而色度差值的变化只有1%以下。

采用的压缩方法: 分组:把几帧图像分为一组(GOP),为防止运动变化,帧数不宜取多。

1.定义帧:将每组内各帧图像定义为三种类型,即I帧、B帧和P帧;2.预测帧:以I帧做为基础帧,以I帧预测P帧,再由I帧和P帧预测B帧;3.数据传输:最后将I帧数据与预测的差值信息进行存储和传输。

I帧:帧内编码帧I帧特点:1.它是一个全帧压缩编码帧。

它将全帧图像信息进行JPEG压缩编码及传输;2.解码时仅用I帧的数据就可重构完整图像;3.I帧描述了图像背景和运动主体的详情;4.I帧不需要参考其他画面而生成;5.I帧是P帧和B帧的参考帧(其质量直接影响到同组中以后各帧的质量);6.I帧是帧组GOP的基础帧(第一帧),在一组中只有一个I帧;7.I帧不需要考虑运动矢量;8.I帧所占数据的信息量比较大。

P帧:前向预测编码帧。

P帧的预测与重构:P帧是以I帧为参考帧,在I帧中找出P帧“某点”的预测值和运动矢量,取预测差值和运动矢量一起传送。

在接收端根据运动矢量从I帧中找出P帧“某点”的预测值并与差值相加以得到P帧“某点”样值,从而可得到完整的P帧。

P帧特点:1.P帧是I帧后面相隔1~2帧的编码帧;2.P帧采用运动补偿的方法传送它与前面的I或P帧的差值及运动矢量(预测误差);3.解码时必须将I帧中的预测值与预测误差求和后才能重构完整的P帧图像;4.P帧属于前向预测的帧间编码。

它只参考前面最靠近它的I帧或P帧;5.P帧可以是其后面P帧的参考帧,也可以是其前后的B帧的参考帧;6.由于P帧是参考帧,它可能造成解码错误的扩散;7.由于是差值传送,P帧的压缩比较高。

B帧:双向预测内插编码帧。

B帧的预测与重构B帧以前面的I或P帧和后面的P帧为参考帧,“找出”B帧“某点”的预测值和两个运动矢量,并取预测差值和运动矢量传送。

MPEG帧的概念

MPEG帧的概念

MPEG帧的概念和H.264的补充MPEG定义根据MPEG的定义,帧分为I帧,B帧,P帧。

这些帧定义如下:I帧:就是关键帧,I帧压缩采用基准帧模式,只提供帧内压缩,即把帧图像压缩到I帧时,仅仅考虑了帧内的图像。

I帧压缩不能除去帧间冗余度。

帧内压缩基于离散余弦变换(DCT),类似于JPEG和H.261图像中使用DCT的压缩标准。

I帧压缩可以得到6;1的压缩比而不产生任何可觉察的模糊现象。

B帧:为双向帧间编码。

它从前面和后面的I帧或P帧中提取数据。

B帧基于当前帧与前一帧和后一帧图像之间的差别进行压缩。

B帧压缩可以达到200:1的压缩比,其文件尺寸一般为I帧压缩尺寸的15%,不到P帧压缩尺寸的一半。

P帧:采用了前向预测,意思是P帧是根据前面的P帧或I帧预测得来的。

P帧采用预测编码,利用相邻帧的一般统计信息进行预测。

也就是说,它考虑运动特性,提供帧间编码。

P帧预测当前帧与前面最近的I帧或P帧的差别。

H.264补充H.264中也有I B P帧,不同的是,H.264是以多幅图像为参考,因此可以获取更高的压缩比,以及更连贯的动作。

但是这也造成H.264耗资源大,延时也略大于MPEG-4。

除了I B P帧外,H.264提出了SP和SI帧,这两种帧介于I和P之间。

SP的编码原理和P类似,仍是基于帧间预测的运动补偿预测编码,两者之间的差异在于SP帧能够参照不同参考帧重构出相同的图像帧。

充分利用这一特性,SP帧可以取代I帧,广泛应用于Bitstream Switching, Splicing, Random Access, Fast Forward Fast Backward以及Error Recovery等应用中。

同时大大降低了码率的开销。

SI则是基于帧内预测的编码技术,其重构图像的方法和SP完全相同。

SP帧的编码效率尽管略低于P,却远远高于I,大大改善了H.264的网络亲和性,支持灵活的流媒体服务应用,具有很强的抗误码性能,适于在噪声干扰大、丢包率高的无线信道中传输。

视频编码的基本原理视频编码的基本...

视频编码的基本原理视频编码的基本...

视频编码的基本原理视频编码的基本原理视频图像数据有极强的相关性,也就是说有大量的冗余信息。

其中冗余信息可分为空域冗余信息和时域冗余信息。

压缩技术就是将数据中的冗余信息去掉(去除数据之间的相关性),压缩技术包含帧内图像数据压缩技术、帧间图像数据压缩技术和熵编码压缩技术。

去时域冗余信息使用帧间编码技术可去除时域冗余信息,它包括以下三部分:-运动补偿运动补偿是通过先前的局部图像来预测、补偿当前的局部图像,它是减少帧序列冗余信息的有效方法。

-运动表示不同区域的图像需要使用不同的运动矢量来描述运动信息。

运动矢量通过熵编码进行压缩。

-运动估计运动估计是从视频序列中抽取运动信息的一整套技术。

注:通用的压缩标准都使用基于块的运动估计和运动补偿去空域冗余信息主要使用帧间编码技术和熵编码技术:-变换编码帧内图像和预测差分信号都有很高的空域冗余信息。

变换编码将空域信号变换到另一正交矢量空间,使其相关性下降,数据冗余度减小。

-量化编码经过变换编码后,产生一批变换系数,对这些系数进行量化,使编码器的输出达到一定的位率。

这一过程导致精度的降低。

-熵编码熵编码是无损编码。

它对变换、量化后得到的系数和运动信息,进行进一步的压缩。

视频编码的基本框架H.261H.261标准是为ISDN设计,主要针对实时编码和解码设计,压缩和解压缩的信号延时不超过150ms,码率px64kbps(p=1~30)。

H.261标准主要采用运动补偿的帧间预测、DCT变换、自适应量化、熵编码等压缩技术。

只有I帧和P帧,没有B帧,运动估计精度只精确到像素级。

支持两种图像扫描格式:QCIF和CIF。

H.263H.263标准是甚低码率的图像编码国际标准,它一方面以H.261为基础,以混合编码为核心,其基本原理框图和H.261十分相似,原始数据和码流组织也相似;另一方面,H.263也吸收了MPEG等其它一些国际标准中有效、合理的部分,如:半像素精度的运动估计、PB 帧预测等,使它性能优于H.261。

I帧P帧B帧

I帧P帧B帧

I帧(I frame)——帧内解码图像在MPEG编码的过程中,部分视频帧序列压缩成为I帧;部分压缩成P帧;还有部分压缩成B帧。

I帧法是帧内压缩法,也称为“关键帧”压缩法。

I帧法是基于离散余弦变换DCT(Discrete Cosine Transform)的压缩技术,这种算法与JPEG压缩算法类似。

采用I帧压缩可达到1/6的压缩比而无明显的压缩痕迹。

B帧(B frame)——双向帧间解码图像基本概念B帧法是双向预测的帧间压缩算法。

当把一帧压缩成B帧时,它根据相邻的前一帧、本帧以及后一帧数据的不同点来压缩本帧,也即仅记录本帧与前后帧的差值。

只有采用B帧压缩才能达到200:1的高压缩。

B帧的模式B 帧在 MPEG-4 中有四种参考模式,如果是同时参考前后的画面压缩,则记录的是和 (前画面pixel 值后画面 pixel 值)/2 的差值,也就是和「前后画面的平均」的差值。

所以记录的差值个数和 P 帧一样,只有一个,没有增加。

而因为 B 帧位于前后画面的中间,以「前后画面的平均」,也就是「前后画面的中间值」来作为预测数值(预测 B 帧的 pixel 数值为多少?如果有误差,再记录差值),这样这个预测数值会比单独使用前一个画面来预测,更接近目前真正的 B 帧的数值,可想而知,如此所需要记录的差值就会很小甚至可以根本不用记录,所以便可以省下很多的 bits,提高压缩率。

例如亮度变化 -> I B P 7 8 9如果 B 只参考前一个画面压缩,则需记录差值 1。

如果以 (I P)/2 压缩,则差值为 0,不需记录差值。

(虽然要记录两个矢量,不过矢量也可以再做进一步预测压缩,总的来说,还是会比单独参考前一个画面压缩来得小很多)如果画面不是这样变化怎么办?通常来讲画面都会是这样变化,如果不是这样变化我们就不使用 B 帧就算变化不是如此规则,换个方式想,B 帧可以参考的画面还是比 P 帧多,再怎么找,也还是 B 帧可以找到误差更小的方块来使用的机率大(因为可以选择、参考的对象较多),所以 B 帧还是比 P 帧的压缩率来得高。

H.264介绍

H.264介绍

klaus.wng@
I 帧所占数据的信息量比较大。 b) P 帧:前向预测编码帧 P 帧表示的是这一帧跟之前的一个关键帧(或 P 帧)的差别,解码时需要用之前缓 存的画面叠加上本帧定义的差别,生成最终画面。 (也就是差别帧,P 帧没有完整画面 数据,只有与前一帧的画面差别的数据) P 帧的预测与重构:P 帧是以 I 帧为参考帧,在 I 帧中找出 P 帧“某点”的预测值和 运动矢量,取预测差值和运动矢量一起传送。 在接收端根据运动矢量从 I 帧中找出 P 帧 “某点”的预测值并与差值相加以得到 P 帧“某点”样值,从而可得到完整的 P 帧。 P 帧特点: P 帧是 I 帧后面相隔 1~2 帧的编码帧; P 帧采用运动补偿的方法传送它与前面的 I 或 P 帧的差值及运动矢量(预测误差); 解码时必须将 I 帧中的预测值与预测误差求和后才能重构完整的 P 帧图像; P 帧属于前向预测的帧间编码。它只参考前面最靠近它的 I 帧或 P 帧; P 帧可以是其后面 P 帧的参考帧,也可以是其前后的 B 帧的参考帧; 由于 P 帧是参考帧,它可能造成解码错误的扩散; 由于是差值传送,P 帧的压缩比较高。 c) B 帧:双向预测内插编码帧 B 帧是双向差别帧,也就是 B 帧记录的是本帧与前后帧的差别(具体比较复杂,有 4 种情况,但我这样说简单些) ,换言之,要解码 B 帧,不仅要取得之前的缓存画面, 还要解码之后的画面,通过前后画面的与本帧数据的叠加取得最终的画面。B 帧压缩率 高,但是解码时 CPU 会比较累。 B 帧的预测与重构: B 帧以前面的 I 或 P 帧和后面的 P 帧为参考帧,“找出”B 帧“某 点”的预测值和两个运动矢量,并取预测差值和运动矢量传送。接收端根据运动矢量在 两个参考帧中“找出(算出)”预测值并与差值求和,得到 B 帧“某点”样值,从而可得到 完整的 B 帧。 B 帧特点 B 帧是由前面的 I 或 P 帧和后面的 P 帧来进行预测的; B 帧传送的是它与前面的 I 或 P 帧和后面的 P 帧之间的预测误差及运动矢量; B 帧是双向预测编码帧; B 帧压缩比最高,因为它只反映丙参考帧间运动主体的变化情况,预测比较准确; B 帧不是参考帧,不会造成解码错误的扩散。 注:I、 B、 P 各帧是根据压缩算法的需要, 是人为定义的,它们都是实实在在的物理帧。 一般来说,I 帧的压缩率是 7(跟 JPG 差不多) ,P 帧是 20,B 帧可以达到 50。可见使用 B 帧能节省大量空间,节省出来的空间可以用来保存多一些 I 帧,这样在相同码率下,可以 提供更好的画质。 4. 压缩算法的说明 h264 的压缩方法: 分组:把几帧图像分为一组(GOP, 也就是一个序列),为防止运动变化,帧数不宜取多。 定义帧:将每组内各帧图像定义为三种类型,即 I 帧、B 帧和 P 帧; 预测帧:以 I 帧做为基础帧,以 I 帧预测 P 帧,再由 I 帧和 P 帧预测 B 帧; 数据传输:最后将 I 帧数据与预测的差值信息进行存储和传输。

MEDIACODERH264格式编码参数设置及详解

MEDIACODERH264格式编码参数设置及详解

MediaCoder H.264格式编码参数设置及详解由于现在大部分视频转码都选择H.264格式进行编码,同时CUDA编码的画质还达不到x264软编码的质量(如果你对画质无要求,可以直接忽略该教程。

)所以该教程对Mediacoder H.264格式编码参数设置进行一次详解,希望对画质有一定要求编码爱好者有所帮助。

视频选项栏界面:视频质量/码率比例可选百分比,选择是否对原始视频码率进行压缩。

如果对画质要求较高,建议选择100%,即不对原始视频码率进行压缩。

码率模式:设置转换视频时所采用的编码方式。

可选项:1. 平均码率模式;2. 固定质量模式;3. 恒定码率模式;4. 恒定量化参数;5. 2次编码模式;6. 3次编码模式;建议:选择固定质量模式即对原始视频画质质量进行固定,编码后视频大小不可控。

格式:设置转换后临时的视频文件(未与音频文件封装之前)的格式。

可选项:XviD、H.264、MPEG1、MPEG2、MPEG4、Theora、Flash Video、Dirac Video、Windows Media Video、RealMedia、H.263、H.263+、H.261、MS-MPEG4-V2、DV Video、Motion JPEG、Lossless JPEG、Huffyuv、Snow、AMV、Raw Video建议:选择H.264(注意:格式的选择会影响下面容器的选择,不是所有的格式都能封装到一个容器中的!)容器:最后进行封装时使用的容器,如XXXX.AVI就是使用的AVI作为容器。

可选项:Default、AVI、MP4、Matroska、MPEG1、MPEG2、MPEG2-TS、Flash Video、ASF、3GP、3GP2、MOV、MJPEG、RealMedia、DV Forma、OGG、NUT、PMP、Raw Stream建议:选择MP4(MP4具有良好的播放兼容性,iphone、ipad等均可以直接点播)如果对兼容性没要求,建议选择MKV(注意:很多转换任务一开始就报有关容器的错误,是因为混流软件对转换后的音频文件或视频文件无法混流所致.具体MediaCoder的混流器能封装什么格式的视频文件和音频文件,请参考其他有关资料!)复制视屏流:当勾选参数时,MediaCoder不会对原始视频进行转换,而是直接无损提取。

视频编码之I帧、P帧、B帧

视频编码之I帧、P帧、B帧

视频编码之I帧、P帧、B帧
视频传输原理
视频是利⽤⼈眼视觉暂留的原理,通过播放⼀系列的图⽚,使⼈眼产⽣运动的感觉。

单纯传输视频画⾯,视频量⾮常⼤,对现有的⽹络和存储来说是不可接受的。

为了能够使视频便于传输和存储,⼈们发现视频有⼤量重复的信息,如果将重复信息在发送端去掉,在接收端恢复出来,这样就⼤⼤减少了视频数据的⽂件,因此有了H.264视频压缩标准。

在H.264压缩标准中I帧、P帧、B帧⽤于表⽰传输的视频画⾯。

I帧⼜称帧内编码帧,是⼀种⾃带全部信息的独⽴帧,⽆需参考其他图像便可独⽴进⾏解码,可以简单理解为⼀张静态画⾯。

视频序列中的第⼀个帧始终都是I帧,因为它是关键帧。

2、P帧
P帧⼜称帧间预测编码帧,需要参考前⾯的I帧才能进⾏编码。

表⽰的是当前帧画⾯与前⼀帧(前⼀帧可能是I帧也可能是P帧)的差别。

解码时需要⽤之前缓存的画⾯叠加上本帧定义的差别,⽣成最终画⾯。

与I帧相⽐,P帧通常占⽤更少的数据位,但不⾜是,由于P帧对前⾯的P 和I参考帧有着复杂的依耐性,因此对传输错误⾮常敏感。

B帧⼜称双向预测编码帧,也就是B帧记录的是本帧与前后帧的差别。

也就是说要解码B帧,不仅要取得之前的缓存画⾯,还要解码之后的画⾯,通过前后画⾯的与本帧数据的叠加取得最终的画⾯。

B帧压缩率⾼,但是对解码性能要求较⾼。

总结:
I帧只需考虑本帧;P帧记录的是与前⼀帧的差别;B帧记录的是前⼀帧及后⼀帧的差别,能节约更多的空间,视频⽂件⼩了,但相对来说解码的时候就⽐较⿇烦。

因为在解码时,不仅要⽤之前缓存的画⾯,⽽且要知道下⼀个I或者P的画⾯,对于不⽀持B帧解码的播放器容易卡顿。

H264基础简介

H264基础简介

H264基础简介前⾔H264是属于视频的编码层的标准格式,视频编码显然是为了压缩⼤⼩。

我们看下⼀个完全没压缩的视频数据⼤⼩。

假设视频是⾼清(1280 * 720),每秒30帧,也就是每秒的数据1280 * 720 *30 / 8(字节) /1024(KB)/1024(MB) = 3.11MB那么90分钟的电影就要16.7GB,这个数据量显然在当前⽹络下是不现实的。

视频压缩的原理就是去除视频冗余部分,下⾯列举下1,时间冗余时间冗余是序列图像(电视图像、动画)和语⾳数据中所经常包含的冗余。

图像序列中的两幅相邻的图像,后⼀幅图像与前⼀幅图像之间有较⼤的相关性,这反映为时间冗余。

同理,在语⾔中,由于⼈在说话时发⾳的⾳频是⼀连续的渐变过程,⽽不是⼀个完全的在时间上独⽴的过程,因⽽存在时间冗余。

2,空间冗余空间冗余是图像数据中经常存在的⼀种冗余。

在同⼀幅图像中,规则物体和规则背景(所谓规则是指表⾯颜⾊分布是有序的⽽不是杂乱⽆章的)的表⾯物理特性具有相关性,这些相关性的光成像结构在数字化图像中就表现为数据冗余。

,3,知识冗余有许多图像的理解与某些基础知识有相当⼤的相关性,例如:⼈脸的图像有固定的结构。

⽐如,嘴的上⽅有⿐⼦。

⿐⼦的上⽅有眼睛,⿐⼦位于正脸图像的中线上等等。

这类规律性的结构可由先验知识相背景知识得到,我们称此类冗余为知识冗余。

4,结构冗余有些图像从⼤域上看存在着⾮常强的纹理结构,例如布纹图像和草席图像,我们说它们在结构上存在冗余。

5,视觉冗余⼈类视觉系统对于图像场的任何变化,并不是都能感知的。

例如,对于图像的编码和解码处理时,由于压缩或量⽐截断引⼊了噪声⽽使图像发⽣了⼀些变化,如果这些变化不能为视觉所感知,则仍认为图像⾜够好。

事实上⼈类视觉系统⼀般的分辨能⼒约为26灰度等级,⽽⼀般图像量化采⽤28灰度等级,这类冗余我们称为视觉冗余。

通常情况下,⼈类视觉系统对亮度变化敏感,⽽对⾊度的变化相对不敏感;在⾼亮度区,⼈眼对亮度变化敏感度下降。

H.264有四种画质级别

H.264有四种画质级别

H.264有四种画质级别H.264有四种画质级别分别是BP、EP、MP、HP:1、BP-Baseline Profile:基本画质。

⽀持I/P 帧,只⽀持⽆交错(Progressive)和CAVLC;2、EP-Extended profile:进阶画质。

⽀持I/P/B/SP/SI 帧,只⽀持⽆交错(Progressive)和CAVLC;3、MP-Main profile:主流画质。

提供I/P/B 帧,⽀持⽆交错(Progressive)和交错(Interlaced),也⽀持CAVLC 和CABAC 的⽀持;4、HP-High profile:⾼级画质。

在main Profile 的基础上增加了8x8内部预测、⾃定义量化、⽆损视频编码和更多的YUV 格式;想要说明H.264 HP与H.264 MP的区别就要讲到H.264的技术发展了。

JVT于2003年完成H.264基本部分标准制定⼯作,包含Baseline profile、Extended profile和Main profile,分别包括不同的编码⼯具。

之后JVT⼜完成了H.264 FRExt(即:Fidelity Range Extensions)扩展部分(Amendment)的制定⼯作,包括High profile(HP)、High 10 profile(Hi10P)、High 4:2:2 profile(Hi422P)、High 4:4:4 profile(Hi444P)4个profile。

H.264 Baseline profile、Extended profile和Main profile都是针对8位样本数据、4:2:0格式的视频序列,FRExt将其扩展到8~12位样本数据,视频格式可以为4:2:0、4:2:2、 4:4:4,设⽴了High profile(HP)、High 10 profile(Hi10P)、High 4:2:2profile(Hi422P)、High 4:4:4 profile(Hi444P) 4个profile,这4个profile都以Main profile为基础。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

H264--1--编码原理以及I帧B帧P帧
前言
-----------------------
H264是新一代的编码标准,以高压缩高质量和支持多种网络的流媒体传输著称,在编码
方面,我理解的他的理论依据是:参照一段时间内图像的统计结果表明,在相邻几幅图像画面中,一般有差别的像素只有10%以内的点,亮度差值变化不超过2%,而色度差值的变化只有1%以内。

所以对于一段变化不大图像画面,我们可以先编码出一个完整的图像帧A,随后的B帧就不编码全部图像,只写入与A帧的差别,这样B帧的大小就只有完整帧的1/10或更小!B
帧之后的C帧如果变化不大,我们可以继续以参考B的方式编码C帧,这样循环下去。

这段
图像我们称为一个序列(序列就是有相同特点的一段数据),当某个图像与之前的图像变化很大,无法参考前面的帧来生成,那我们就结束上一个序列,开始下一段序列,也就是对这个图像生成一个完整帧A1,随后的图像就参考A1生成,只写入与A1的差别内容。

在H264协议里定义了三种帧,完整编码的帧叫I帧,参考之前的I帧生成的只包含差异
部分编码的帧叫P帧,还有一种参考前后的帧编码的帧叫B帧。

H264采用的核心算法是帧内压缩和帧间压缩,帧内压缩是生成I帧的算法,帧间压缩是
生成B帧和P帧的算法。

----------------------
序列的说明
----------------------
在H264中图像以序列为单位进行组织,一个序列是一段图像编码后的数据流,以I帧开始,到下一个I帧结束。

一个序列的第一个图像叫做 IDR 图像(立即刷新图像),IDR 图像都是 I 帧图像。

H.264 引入 IDR 图像是为了解码的重同步,当解码器解码到 IDR 图像时,立即将参考帧队列清空,
将已解码的数据全部输出或抛弃,重新查找参数集,开始一个新的序列。

这样,如果前一个序列出现重大错误,在这里可以获得重新同步的机会。

IDR图像之后的图像永远不会使用IDR之前的图像的数据来解码。

一个序列就是一段内容差异不太大的图像编码后生成的一串数据流。

当运动变化比较少时,一个序列可以很长,因为运动变化少就代表图像画面的内容变动很小,所以就可以编一个I帧,然后一直P帧、B帧了。

当运动变化多时,可能一个序列就比较短了,比如就包含一个I 帧和3、4个P帧。

-----------------------
三种帧的说明
-----------------------
I帧:帧内编码帧,I帧表示关键帧,你可以理解为这一帧画面的完整保留;解码时只需要本帧数据就可以完成(因为包含完整画面)
I帧特点:
1.它是一个全帧压缩编码帧。

它将全帧图像信息进行JPEG压缩编码及传输;
2.解码时仅用I帧的数据就可重构完整图像;
3.I帧描述了图像背景和运动主体的详情;
4.I帧不需要参考其他画面而生成;
5.I帧是P帧和B帧的参考帧(其质量直接影响到同组中以后各帧的质量);
6.I帧是帧组GOP的基础帧(第一帧),在一组中只有一个I帧;
7.I帧不需要考虑运动矢量;
8.I帧所占数据的信息量比较大。

P帧:前向预测编码帧。

P帧表示的是这一帧跟之前的一个关键帧(或P帧)的差别,解码时需要用之前缓存的画面叠加上本帧定义的差别,生成最终画面。

(也就是差别帧,P帧没有完整画面数据,只有与前一帧的画面差别的数据)
P帧的预测与重构:P帧是以I帧为参考帧,在I帧中找出P帧“某点”的预测值和运动矢量,取预测差值和运动矢量一起传送。

在接收端根据运动矢量从I帧中找出P帧“某点”的预测值并与差值相加以得到P帧“某点”样值,从而可得到完整的P帧。

P帧特点:
1.P帧是I帧后面相隔1~2帧的编码帧;
2.P帧采用运动补偿的方法传送它与前面的I或P帧的差值及运动矢量(预测误差);
3.解码时必须将I帧中的预测值与预测误差求和后才能重构完整的P帧图像;
4.P帧属于前向预测的帧间编码。

它只参考前面最靠近它的I帧或P帧;
5.P帧可以是其后面P帧的参考帧,也可以是其前后的B帧的参考帧;
6.由于P帧是参考帧,它可能造成解码错误的扩散;
7.由于是差值传送,P帧的压缩比较高。

B帧:双向预测内插编码帧。

B帧是双向差别帧,也就是B帧记录的是本帧与前后帧的差别
(具体比较复杂,有4种情况,但我这样说简单些),换言之,要解码B帧,不仅要取得之前的缓存画面,还要解码之后的画面,通过前后画面的与本帧数据的叠加取得最终的画面。

B 帧压缩率高,但是解码时CPU会比较累。

B帧的预测与重构
B帧以前面的I或P帧和后面的P帧为参考帧,“找出”B帧“某点”的预测值和两个运动矢量,并取预测差值和运动矢量传送。

接收端根据运动矢量在两个参考帧中“找出(算出)”预测值并与差值求和,得到B帧“某点”样值,从而可得到完整的B帧。

B帧特点
1.B帧是由前面的I或P帧和后面的P帧来进行预测的;
2.B帧传送的是它与前面的I或P帧和后面的P帧之间的预测误差及运动矢量;
3.B帧是双向预测编码帧;
4.B帧压缩比最高,因为它只反映丙参考帧间运动主体的变化情况,预测比较准确;
5.B帧不是参考帧,不会造成解码错误的扩散。

注:I、B、P各帧是根据压缩算法的需要,是人为定义的,它们都是实实在在的物理帧。

一般来说,I帧的压缩率是7(跟JPG差不多),P帧是20,B帧可以达到50。

可见使用B帧能节省大量空间,节省出来的空间可以用来保存多一些I帧,这样在相同码率下,可以提供更好的画质。

--------------------------------
压缩算法的说明
--------------------------------
h264的压缩方法:
1.分组:把几帧图像分为一组(GOP,也就是一个序列),为防止运动变化,帧数不宜取多。

2.定义帧:将每组内各帧图像定义为三种类型,即I帧、B帧和P帧;
3.预测帧:以I帧做为基础帧,以I帧预测P帧,再由I帧和P帧预测B帧;
4.数据传输:最后将I帧数据与预测的差值信息进行存储和传输。

帧内(Intraframe)压缩也称为空间压缩(Spatial compression)。

当压缩一帧图像时,仅考虑本帧的数据而不考虑相邻帧之间的冗余信息,这实际上与静态图像压缩类似。

帧内一般采用有损压缩算法,由于帧内压缩是编码一个完整的图像,所以可以独立的解码、显示。

帧内压缩一般达不到很高的压缩,跟编码jpeg差不多。

帧间(Interframe)压缩的原理是:相邻几帧的数据有很大的相关性,或者说前后两帧信息变化很小的特点。

也即连续的视频其相邻帧之间具有冗余信息,根据这一特性,压缩相邻帧
之间的冗余量就可以进一步提高压缩量,减小压缩比。

帧间压缩也称为时间压缩(Temporal compression),它通过比较时间轴上不同帧之间的数据进行压缩。

帧间压缩一般是无损的。

帧差值(Frame differencing)算法是一种典型的时间压缩法,它通过比较本帧与相邻帧之间
的差异,仅记录本帧与其相邻帧的差值,这样可以大大减少数据量。

顺便说下有损(Lossy )压缩和无损(Lossy less)压缩。

无损压缩也即压缩前和解压缩
后的数据完全一致。

多数的无损压缩都采用RLE行程编码算法。

有损压缩意味着解压缩后的
数据与压缩前的数据不一致。

在压缩的过程中要丢失一些人眼和人耳所不敏感的图像或音频信息,而且丢失的信息不可恢复。

几乎所有高压缩的算法都采用有损压缩,这样才能达到低数据率
的目标。

丢失的数据率与压缩比有关,压缩比越小,丢失的数据越多,解压缩后的效果一般越差。

此外,某些有损压缩算法采用多次重复压缩的方式,这样还会引起额外的数据丢失。

相关文档
最新文档