问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

请教关于H264关键帧问题

发布网友 发布时间:2022-04-22 05:14

我来回答

1个回答

热心网友 时间:2023-11-11 15:12

视频的本质就是很多帧图片,在视频采集过程中其实就是图片采集,而h264编码就是对这些图片进行压缩,以便于存储和传输。针对一帧帧的图片,引申出以下的概念:

· I帧:关键帧,采用帧内压缩技术

举个例子,如果你用摄像头对着一棵树来拍摄,1秒之内,实际你发生的变化是非常少的。1秒钟之内实际很少有大幅度的变化.摄像机一般一秒钟会抓取几十帧的数据。动画一般都是15帧/s,平时我们的视频文件一般也就是30帧/s,对于一些要求比较高的,对动作的精细度有要求,想要捕捉到完整的动作的,高级的摄像机一般是60帧/s。I帧一般都是一组帧的第一帧,I帧需要完整的保存下来,如果没有这个关键帧后面解码数据,是完成不了的.所以I帧特别关键.。

· P帧:向前参考帧.压缩时只参考前一个帧.属于帧间压缩技术

视频的第一帧会被作为关键帧完整保存下来.而后面的帧会向前依赖.也就是第二帧依赖于第一个帧.后面所有的帧只存储于前一帧的差异.这样就能将数据大大的减少.从而达到一个高压缩率的效果.

· B帧:双向参考帧,压缩时即参考前一帧也参考后一帧.帧间压缩技术.

B帧,即参考前一帧,也参考后一帧.这样就使得它的压缩率更高.存储的数据量更小.如果B帧的数量越多,你的压缩率就越高.这是B帧的优点,但是B帧最大的缺点是,如果是实时互动的直播,那时与B帧就要参考后面的帧才能解码,那在网络中就要等待后面的帧传输过来.这就与网络有关了.如果网络状态很好的话,解码会比较快,如果网络不好时解码会稍微慢一些.丢包时还需要重传.对实时互动的直播,一般不会使用B帧。 (如果我们对实时性的要求不高的话,就可以使用B帧,单对于一些实时性要求比较高的直播来说,B帧可以完全不用的) 。

如果在一秒钟内,有30帧.这30帧可以画成一组.如果摄像机或者镜头它一分钟之内它都没有发生大的变化.那也可以把这一分钟内所有的帧画做一组.

一组帧:

一个I帧到下一个I帧.这一组的数据.包括B帧/P帧.我们称为GOF(如下图)

简单分析一下我们在平时看视频时候会发现花屏或者卡顿的现象,主要是一组帧(GOF)里面的P帧缺失或者受损让解码时候发生错误导致的。为了避免花屏的发生,一般会不显示发生P帧或者I帧丢失的那一组帧,等到下一个I帧到来时才显示下一组帧,然而这样子治标不治本,长时间显示上一组帧,会导致卡顿现象的发生。

帧内预测压缩,解决的是空域数据冗余问题,一幅图里数据在宽高空间内包含了很多颜色,光亮.人的肉眼很难察觉的数据. 对于这些数据,我们可以认作冗余.直接压缩掉的。

解决的是时域数据冗余问题,摄像头在一段时间内所捕捉的数据没有较大的变化,我们针对这一时间内的相同的数据压缩掉.这叫时域数据压缩。

(除以上之外还有CABAC无损压缩与整数离散余弦变换(DCT)

在分析帧内预测与帧间预测之前我们还需知道 宏块划分与分组

H264宏块划分:

将一个图片左上角用宏块描述,就是宏块是8*8的元素.取出的颜色,像右边的去描述.描述颜色.将一个图片全部用宏块描述就如下图。

基本上宏块划分就完成了,那么宏块还可以在细分吗?当然是可以的,宏块可以进行子块的划分,如下图:

在这个大的宏块里,可以再细化. 我们可以看到在这个大的宏块里,我们更加细化了. 比如我们中间这个全部都是蓝色的这个宏块,就可以用一个色块,更加简单描述就行了。

由上图可以看出,MPEG2和H.264.就会发现MPEG2存储时还算比较完整.占用的空间相对于比较多.而H.264还是减少了很多空间.像重复的颜色他们就用非常简单的色块描述了。

现在我们有一组帧(如下图),记录的是桌球在桌球台上的运动,好明显这一组帧的背景就是桌球台,这是不变的,改变的就是桌球的位置,这就是 帧分组 。

然后进行 组内宏块的查找 (如下图),台球从一角滚到另外一角.相邻的2幅图做组内的宏块查找。将图逐行扫描,扫描到第三行.发现了台球. 然后围绕它的周围查找.发现了有类似的图块。

以上操作找到了对应的宏块,然后就会进行 运动估算。 然后把他们放在同一张图上面(如下图),而在两个位置之间就会存在着一个运动矢量。矢量会包含运动的方向和距离。以此类推,我们将所有的图进行两两比较的话,就会得出第一张图+很多帧的运动矢量,数据就达到了很大的减少。

你以为这样子就结束了嘛?其不然!虽然说每张图的背景都一样的,其实还是存在着一些差别的。好明显就是台球的数据,有些我们肉眼看不清的数据,例如光线的影响。所以帧间预测过程中还会对每帧图进行残差数据的计算,实际经过我们一运算后.它留下的就只是运动矢量数据+残差值的数据。经过这样的一个计算.帧间压缩数据我们就可以看到实际我们只需要存储一点点数据.而不像以前要将几十帧的所有图片数据保存下来.这就达到了压缩的效果,这个过程就叫做帧间压缩技术的原理。

帧内预测压缩在平时开发中使用较多,帧内压缩是针对于I帧的。因为它解决的是空间的数据冗余,而帧间压缩是解决的时间数据冗余。我们刚刚说明的是帧间压缩技术,将大量在时间轨迹上相同的数据压缩掉,只留下运算估量和残差值。

而帧内压缩用到了完全不同的技术手段,我们首先计算出每个宏块的宏块模式,一共9种。如图所示:

帧内预测9种模式原理介绍(1)

帧内预测9种模式原理介绍(2)

经过计算最后得到的数据是每个宏块预测得出宏块的模式数据,如图所示:

在每个宏块模式确定之后呢,就可以形成一张“预测图”,左边是预测图,右边是源图。

得到的“预测图”与原图比较起来还是显得比较粗糙的,然后两者进行残差数据的计算,得到残差值。如图:

低下的就是源于,灰色图就是残差值。

预测模式与残差值压缩:

拿到残差值之后,我们就进行压缩. 压缩时保存,残差数据和每个宏块选择的模式信息数据. 那么有了这2个数据之后.当我们解码时,首先通过宏块的模式信息计算出预测图.然后将预测图与我们的残差值进行累积.就能还原成原图像. 那这个过程就是"帧内压缩技术"的原理过程。

文章图片来源于网络,如未能核实来源或转发内容图片有瑕疵,请及时私信本人进行修改或者删除。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
临沂比较有名的男装品牌 呼伦贝尔市悦动网络科技有限公司怎么样? 呼伦贝尔中汇实业有限公司怎么样? 呼伦贝尔油玉不绝电子商务有限公司怎么样? 如何避免wps卡顿? 属鼠的男人找对象是属什么,属鼠的人和什么属相合 96年鼠的姻缘在哪年 属相相合年份运势提升 2024属鼠找对象属什么最佳 黑客攻击网站能报案吗 黑客攻击报案有用吗 FFmpeg-ffmpeg fps tbr tbn tbc的参数可以修改吗 距离放寒假还有多少天 我想参加唱歌比赛当明星,可是我没有学过唱歌,我... 自学钢琴考用弦乐艺训在线教育靠谱吗 距离寒假结束还有几天? ffmpeg 切割视频时间重叠 学钢琴的弦乐艺训在线教育靠谱吗 ffmpeg推流为什么报failed to update header with ... 离寒假结束还有多少天来着 拉卯枪没调整螺丝怎么调呀 艺考学乐器要不要集训 ffmpeg中怎么编程实现获取视频中某指定的一帧 音乐艺考集训一般多少钱? ffmpeg解码后,如何识别关键帧 求助avconv/ffmpeg 增加关键帧的问题 海参的好坏如何鉴别 海参怎么挑选好坏 如何利用ffmpeg根据关键帧进行分割 海参怎么辨别真假好坏 海参如何辨别好坏 福建音乐艺考集训班,福建器乐培训培训机构哪家专业? 今天离放寒假还有多少天,的啊 求教关于ffmpeg中的packet如何才能判断是I,P,B哪... 乐器艺考:O基础希望通过半年集训考乐器类艺术生,... 音乐艺考集训一般在几月份? ffmpeg 设置什么参数可以把meta信息放在文件头部啊... 高三音乐艺考集训要花费多少钱 python如何调用ffmpeg 艺考 乐器艺考 ffmpeg解码网路H264实时视频流花屏 我开了乐器培训班,怎么写招生简章呢 ffmpeg拷贝流转码问题,怎么解决 ffmpeg转码失败,急求解答,感激不尽 用乐器艺考 用不用集训 北京禾艺培训贵吗 你好 你们可以做国外银行开户吗? 浙江音乐艺考集训,高二该怎么准备艺考? 可以开立海外账户吗? 学音乐的艺术生需要集训吗 7种提升孩子气质的乐器,你的孩子学了么