Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

视频编解码之编码基础 #8

Open
cherishman2005 opened this issue Oct 11, 2021 · 1 comment
Open

视频编解码之编码基础 #8

cherishman2005 opened this issue Oct 11, 2021 · 1 comment

Comments

@cherishman2005
Copy link
Owner

cherishman2005 commented Oct 11, 2021

  1. 如何理解压缩码流?

可按2部分进行理解:

语法:码流中各个元素的位置关系。
如:01001001…,表示图像编码类型(01),宏块类型(00),编码系数1001等。
语义:每个语法元素所表达的意义。
例如:图像编码类型。

即时通讯音视频开发(三):视频编解码之编码基础_1.png
2. 编码层次的组成

编码层次由如下部分组成:

序列(Sequence)
图像组(Group of Pictures,GOP)
图像(Picture)
条带(Slice)
宏块(Macroblock,MB)
块(Block)

  1. 具体的码流结构

image

  1. PB帧编码

image

  1. IBBP序列编码对象

序列是指一段连续编码的并具有相同参数的视频图像。
序列起始码是指专有的一段比特串,标识一个序列的压缩数据的开始。如MPEG-2的序列起始码为十六进制数000001(B3)。
序列头是指记录序列信息,包含档次(Profile),级别(Level),宽度,高度,是否是逐行序列,帧率等内容。
序列结束码是指专有的一段比特串,标识该序列的压缩数据的结束。如MPEG-2的序列结束码为十六进制数000001(B7)。
6. 图像组编码对象

image

  1. 图像编码结构

包括:

图像。
图像起始码:专有的一段比特串,标识一个图像的压缩数据的开始。
如MPEG-2的图像起始码为十六进制数000001(00)。
图像头:记录图像信息。
包含图像编码类型,图像距离,图像编码结构,图像是否为逐行扫描。
8. 图像分块编码

即时通讯音视频开发(三):视频编解码之编码基础_6.png
9. 条带编码结构

条带:多个宏块的组合。
条带起始码:专有的一段比特串,标识一个条带的压缩数据的开始。如MPEG-2的条带起始码为十六进制数000001(0~AF)。
条带头:记录当前图像的相关信息。含条带位置,条带量化参数,宏块编码技术标识等。
10. 条带编码对象

即时通讯音视频开发(三):视频编解码之编码基础_7.png
11. 宏块编码结构

宏块:16x16的像素块(对亮度而言)。
宏块内容:宏块编码类型,编码模式,参考帧索引,运动矢量信息,宏块编码系数等。
12. 宏块编码对象

即时通讯音视频开发(三):视频编解码之编码基础_8.png
13. 块编码结构

8x8或4x4块的变换量化系数的熵编码数据。
CBP (Coded Block Patten):用来指示块的变换量化系数是否全为零。
对于YUV(4:2:0)编码,CBP通常6比特长,每个比特对应一个块,当某一块的变换量化系数全为零时,其对应比特位值为0,否则为1。
每个块的变换量化系数的最后用一个EOB (End of Block)符号来标识。
14. 视频编解码关键技术

预测:通过帧内预测和帧间预测降低视频图像的空间冗余和时间冗余。
变换:通过从时域到频域的变换,去除相邻数据之间的相关性,即去除空间冗余。
量化:通过用更粗糙的数据表示精细的数据来降低编码的数据量,或者通过去除人眼不敏感的信息来降低编码数据量。
扫描:将二维变换量化数据重新组织成一维的数据序列。
熵编码:根据待编码数据的概率特性减少编码冗余。

即时通讯音视频开发(三):视频编解码之编码基础_9.png
15. 预测

空间预测:利用图像空间相邻像素的相关性来预测的方法

帧内预测技术:利用当前编码块周围已经重构出来的像素预测当前块
Intra图像编码(I帧)

时间预测:利用时间上相邻图像的相关性来预测的方法

帧间预测:运动估计(Motion Estimation,ME),运动补偿(Motion Compensation,MC)
Inter图像编码:前向预测编码图像(P帧),双向预测编码图像(B帧)
16. 帧内预测

I帧图像的每个宏块都采用帧内(Intra)预测编码模式。
宏块分成8x8或者4x4块,对每个块采用帧内预测编码,称作Intra8x8或者Intra4x4。
帧内预测有多个预测方向:水平,垂直,左下,右上。
帧内预测还有直流(DC)预测。
色度块预测还有平面预测。

即时通讯音视频开发(三):视频编解码之编码基础_10.png
17. 量化

1量化原理

将含有大量的数据集合映射到含有少量的数据集合中。

即时通讯音视频开发(三):视频编解码之编码基础_11.png

即时通讯音视频开发(三):视频编解码之编码基础_12.png

即时通讯音视频开发(三):视频编解码之编码基础_13.png

即时通讯音视频开发(三):视频编解码之编码基础_14.png

即时通讯音视频开发(三):视频编解码之编码基础_15.png

2一般情况下量化后高频部分包含大量的零系数

即时通讯音视频开发(三):视频编解码之编码基础_16.png

3量化对主观质量的影响

即时通讯音视频开发(三):视频编解码之编码基础_17.png
18. 码率控制

受到缓冲区,带宽的限制,编码码率不能无限制的增长,因此需要通过码率控制来将编码码流控制在目标码率范围内。

一般通过调整量化参数的手段控制码率:

帧级控制
条带级控制
宏块级控制

码率控制考虑的问题:

防止码流有较大的波动,导致缓冲区发生溢出,
同时保持缓冲区尽可能的充满,让图像质量尽可能的好而且稳定

CBR(Constant Bit Rate):比特率稳定,但图像质量变化大。VBR(Variable Bit Rate):比特率波动大,但图像质量稳定。

码率控制算法:

码率分配
码率控制

码率控制属于非标准技术,编码端有,解码端没有。

@cherishman2005
Copy link
Owner Author

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant