FMUSER更轻松地传输视频和音频!
es.fmuser.org
it.fmuser.org
fr.fmuser.org
de.fmuser.org
af.fmuser.org ->荷兰语
sq.fmuser.org ->阿尔巴尼亚人
ar.fmuser.org ->阿拉伯语
hy.fmuser.org - >亚美尼亚
az.fmuser.org ->阿塞拜疆
eu.fmuser.org ->巴斯克
be.fmuser.org ->白俄罗斯语
bg.fmuser.org - >保加利亚
ca.fmuser.org ->加泰罗尼亚语
zh-CN.fmuser.org ->中文(简体)
zh-TW.fmuser.org - >中国(繁体)
hr.fmuser.org ->克罗地亚语
cs.fmuser.org ->捷克
da.fmuser.org ->丹麦语
nl.fmuser.org - >荷兰
et.fmuser.org ->爱沙尼亚语
tl.fmuser.org ->菲律宾
fi.fmuser.org ->芬兰语
fr.fmuser.org - >法国
gl.fmuser.org ->加利西亚语
ka.fmuser.org ->乔治亚
de.fmuser.org ->德语
el.fmuser.org - >希腊
ht.fmuser.org ->海地克里奥尔语
iw.fmuser.org ->希伯来语
hi.fmuser.org ->印地语
hu.fmuser.org - >匈牙利
is.fmuser.org ->冰岛语
id.fmuser.org ->印尼语
ga.fmuser.org ->爱尔兰
it.fmuser.org - >意大利
ja.fmuser.org ->日语
ko.fmuser.org ->韩文
lv.fmuser.org ->拉脱维亚
lt.fmuser.org - >立陶宛
mk.fmuser.org ->马其顿语
ms.fmuser.org ->马来语
mt.fmuser.org ->马耳他语
no.fmuser.org - >挪威
fa.fmuser.org ->波斯语
pl.fmuser.org ->波兰语
pt.fmuser.org ->葡萄牙语
ro.fmuser.org - >罗马尼亚
ru.fmuser.org ->俄语
sr.fmuser.org ->塞尔维亚语
sk.fmuser.org ->斯洛伐克
sl.fmuser.org - >斯洛文尼亚
es.fmuser.org ->西班牙语
sw.fmuser.org ->斯瓦希里语
sv.fmuser.org ->瑞典语
th.fmuser.org - >泰国
tr.fmuser.org ->土耳其语
uk.fmuser.org ->乌克兰语
ur.fmuser.org ->乌尔都语
vi.fmuser.org - >越南
cy.fmuser.org ->威尔士语
yi.fmuser.org - >意第绪语
前言
H264视频压缩算法无疑是目前所有视频压缩技术中使用最广泛和最受欢迎的算法。 随着诸如x264 / openh264和ffmpeg之类的开源库的引入,大多数用户不再需要对H264的细节进行过多的研究,从而大大降低了使用H264的人们的成本。
但是为了充分利用H264,我们仍然必须弄清楚H264的基本原理。 今天我们将看一下H264的基本原理。
H264概述
H264压缩技术主要使用以下方法压缩视频数据。 包括:
帧内预测压缩解决了空间数据冗余的问题。
帧间预测压缩(运动估计和补偿)解决了时域数据冗余的问题。
整数离散余弦变换(DCT),它将空间相关性转换为频域中的不相关数据,然后对其进行量化。
CABAC压缩。
压缩帧分为:I帧,P帧和B帧:
I帧:关键帧,使用帧内压缩技术。
P帧:前向参考帧,压缩时仅参考先前处理过的帧。 使用帧音频压缩技术。
B框架:双向参考框架。 在压缩期间,它指的是前一帧和后一帧。 使用帧间压缩技术。
除了I / P / B帧外,还有图像序列GOP。
GOP:两个I帧之间是一个图像序列,一个图像序列中只有一个I帧。 如下所示:
现在我们将详细描述H264压缩技术。
H264压缩技术
H264的基本原理实际上非常简单,下面简要介绍一下H264压缩数据的过程。 摄像机捕获的视频帧(以每秒30帧计算)被发送到H264编码器的缓冲区。 编码器必须首先为每个图像划分宏块。
以下面的图片为例:
分区宏块
H264默认使用16X16区域作为宏块,也可以将其划分为8X8大小。
划分宏块后,计算宏块的像素值。
以此类推,计算图像中每个宏块的像素值,并对所有宏块进行如下处理。
子区块
H264使用16X16宏块来获得相对平坦的图像。 但是,为了获得更高的压缩率,较小的子块也可以划分为16X16宏块。 子块的大小可以是8X16、16X8、8X8、4X8、8X4、4X4,这非常灵活。
在上图中,红色框中的大多数16X16宏块具有蓝色背景,并且在此宏块中绘制了三只鹰的图像的一部分。 为了更好地处理三只鹰的部分图像,将H264多个子块划分为16X16宏块。
这样,在帧内压缩之后,可以获得更有效的数据。 下图是分别使用mpeg-2和H264压缩上述宏块的结果。 左半部分是MPEG-2子块分割后的压缩结果,右半部分是H264子块压缩的结果。 可以看出,H264分割法具有更多的优点。
分割宏块后,可以对H264编码器缓冲区中的所有图片进行分组。
框架分组
对于视频数据,主要有两种类型的数据冗余,一种是时间上的数据冗余,另一种是空间上的数据冗余。 其中,时间上的数据冗余最大。 让我们首先谈谈视频数据时间的冗余问题。
为什么时间冗余最大? 假设相机每秒捕获30帧,则这30帧的数据主要相关。 也可能有30多个数据帧,数十个帧或数百个数据帧特别紧密相关。
对于这些密切相关的帧,实际上,我们只需要保存一帧数据,并且可以根据某些规则从该帧中预测其他帧,因此视频数据具有最大的时间冗余。
为了通过预测方法实现相关帧压缩数据,有必要对视频帧进行分组。 那么,如何确定某些框架紧密相关并且可以组合在一起呢? 让我们看一个例子。 下面是一组运动中的台球的捕获视频帧。 台球从右上角滚动到左下角。
H264编码器每次都会取出两个相邻的帧以比较宏块,以便计算两个帧的相似度。 如下所示:
通过宏块扫描和宏块搜索,可以发现两个帧之间的相关性非常高。 此外,发现该组帧的相关度非常高。 因此,上述帧可以分为一组。 该算法是:在相邻图像中,通常不同的像素仅在10%以内,亮度差异不超过2%,色度差异仅在1%之内变化。 我们认为可以将图组合在一起。
在这样的一组帧中,编码后,我们仅保留第一篇文章的完整数据,而其他帧则通过参考前一帧进行计算。 我们将第一个帧称为IDR / I帧,将其他帧称为P / B帧,因此我们将编码数据帧组GOP称为。
运动估计和补偿
在H264编码器中对帧进行分组之后,有必要计算帧组中对象的运动矢量。 以上面的移动台球视频帧为例,让我们看一下它是如何计算运动矢量的。
H264编码器首先从缓冲区标头中顺序取出两帧视频数据,然后执行宏块扫描。 当在其中一张图片中找到对象时,在另一张图片附近(在搜索窗口中)执行搜索。 如果此时在另一个图像中找到了对象,则可以计算该对象的运动矢量。 下图显示了搜索后台球的位置。
通过上图中的台球位置之间的差异,可以计算出桌面图片的方向和距离。 H264依次记录每帧中球的移动距离和方向,并变为以下形式。
在计算运动矢量之后,减去相同部分(即绿色部分)以获得补偿数据。 最后,我们只需要压缩和保存补偿数据,然后在解码时就可以恢复原始图像。 压缩的数据仅需要记录少量数据。 如下:
我们将运动矢量和补偿称为帧间压缩技术,它可以及时解决视频帧的数据冗余问题。 除了帧间压缩外,还必须在帧内执行数据压缩。 帧内数据压缩解决了空间数据冗余问题。 现在我们将介绍帧内压缩技术。
帧内预测
人眼对图像具有一定的识别度,它对低频亮度非常敏感,而对高频亮度不是很敏感。 因此,基于一些研究,可以从图像中删除对人眼不敏感的数据。 以这种方式,提出了帧内预测技术。
H264的帧内压缩与JPEG非常相似。 将图像划分为宏块后,可以以9种模式预测每个宏块。 查找最接近原始图像的预测模式。
下图是预测整个图片中每个宏块的过程。
帧内预测后的图像与原始图像之间的比较如下:
然后,将原始图像和帧内预测图像相减以获得残差值。
然后保存我们之前获得的预测模式信息,以便我们可以在解码时恢复原始图像。 效果如下:
经过帧内和帧间压缩后,尽管数据大大减少了,但仍有优化的空间。
对残差数据进行DCT
可以对残差数据进行整数离散余弦变换,以去除数据的相关性并进一步压缩数据。 如下图所示,左侧是原始数据的宏块,右侧是计算出的残差数据的宏块。
残留数据的宏块被数字化,如下图所示:
在残差数据宏块上执行DCT转换。
删除关联数据后,我们可以看到数据已被进一步压缩。
DCT完成后,还远远不够,并且需要CABAC进行无损压缩。
CABAC
上述帧内压缩是有损压缩技术。 换句话说,在压缩图像后,无法将其完全还原。 CABAC是一种无损压缩技术。
无损压缩技术可能是每个人最熟悉的霍夫曼编码,一种用于高频词的短代码,一种用于低频词的长代码,以达到数据压缩的目的。 MPEG-2中使用的VLC是这种算法,我们以AZ为例,A属于高频数据,Z属于低频数据。 看看如何完成。
CABAC还是用于高频数据的短代码和用于低频数据的长代码。 同时,它将基于上下文进行压缩,这比VLC效率高得多。 效果如下:
现在,将AZ替换为视频帧,如下所示。
从上图可以明显看出,使用CACBA的无损压缩方案比VLC高效得多。
摘要
至此,我们已经完成了H264编码原理。 本文主要讨论以下几点:
1.建音介绍了H264的一些基本概念。 例如I / P / B框架,GOP。
2.详细解释了H264编码的基本原理,包括:
宏块划分
图像分组
帧内压缩技术原理
帧间压缩技术的原理。
DCT
CABAC压缩原理。
|
输入电子邮件以获取惊喜
es.fmuser.org
it.fmuser.org
fr.fmuser.org
de.fmuser.org
af.fmuser.org ->荷兰语
sq.fmuser.org ->阿尔巴尼亚人
ar.fmuser.org ->阿拉伯语
hy.fmuser.org - >亚美尼亚
az.fmuser.org ->阿塞拜疆
eu.fmuser.org ->巴斯克
be.fmuser.org ->白俄罗斯语
bg.fmuser.org - >保加利亚
ca.fmuser.org ->加泰罗尼亚语
zh-CN.fmuser.org ->中文(简体)
zh-TW.fmuser.org - >中国(繁体)
hr.fmuser.org ->克罗地亚语
cs.fmuser.org ->捷克
da.fmuser.org ->丹麦语
nl.fmuser.org - >荷兰
et.fmuser.org ->爱沙尼亚语
tl.fmuser.org ->菲律宾
fi.fmuser.org ->芬兰语
fr.fmuser.org - >法国
gl.fmuser.org ->加利西亚语
ka.fmuser.org ->乔治亚
de.fmuser.org ->德语
el.fmuser.org - >希腊
ht.fmuser.org ->海地克里奥尔语
iw.fmuser.org ->希伯来语
hi.fmuser.org ->印地语
hu.fmuser.org - >匈牙利
is.fmuser.org ->冰岛语
id.fmuser.org ->印尼语
ga.fmuser.org ->爱尔兰
it.fmuser.org - >意大利
ja.fmuser.org ->日语
ko.fmuser.org ->韩文
lv.fmuser.org ->拉脱维亚
lt.fmuser.org - >立陶宛
mk.fmuser.org ->马其顿语
ms.fmuser.org ->马来语
mt.fmuser.org ->马耳他语
no.fmuser.org - >挪威
fa.fmuser.org ->波斯语
pl.fmuser.org ->波兰语
pt.fmuser.org ->葡萄牙语
ro.fmuser.org - >罗马尼亚
ru.fmuser.org ->俄语
sr.fmuser.org ->塞尔维亚语
sk.fmuser.org ->斯洛伐克
sl.fmuser.org - >斯洛文尼亚
es.fmuser.org ->西班牙语
sw.fmuser.org ->斯瓦希里语
sv.fmuser.org ->瑞典语
th.fmuser.org - >泰国
tr.fmuser.org ->土耳其语
uk.fmuser.org ->乌克兰语
ur.fmuser.org ->乌尔都语
vi.fmuser.org - >越南
cy.fmuser.org ->威尔士语
yi.fmuser.org - >意第绪语
FMUSER更轻松地传输视频和音频!
联系我们
分类目录
订阅电子邮件