iavoe

iavoe作者

经验分享·163.7天前

[本帖有问题, 暂未修复] h.265科普-快速理解 CTU, CU, CTB, CB, PB, PU, TB, TU

#本篇科普的内容难度很大, 如果哪里看不懂请务必在下方评论#
#本文主要翻译, 整理自#
codesequoia.wordpress.com/2012/10/28/hevc-ctu-cu-ctb-cb-pb-and-tb/
以及
www.zhihu.com/question/22602336/answer/104527230
.*
.*
所谓的CTU, CU, CTB, CB, PB, 还有 TB 总体来说就是h.264中概念的改进强化版.
看到标题是不是吓到了呢? 然而这种"小白退散"类的内容就是那些标准作家的最爱. 于是, 这里整理了一些有牵扯到h.265核心的缩写词汇.

由于牵扯到其它术语的关系, 我们要先从h.264的Macroblock - 宏块说起~

宏块是通过将画面分成一个个大小不同的块来在不同位置实行不同的压缩策略的处理方式. 宏块分为三种: I宏块, P宏块以及B宏块. 和I帧, P帧, B帧类似, 都是通过"I"储存完整信息, "P"参考"I"补充自身, "B"直接参考"P"和"I"以生成自身. 这三种宏块是组成"帧"的不可或缺的结构哦~

想象你任职于某航天局, 正在整理四张某个类地行星的黑白照片地图, 你要在其中标出"海","平原","高原","山脉"四种元素
1.首先, 你要将整个地图划分为均等的大方块, 只要方块中有超过一个元素的时候, 就将这些方块拆成更小的“田”字.

2.当4张地图全部完成划分时, 将"海"的块涂成蓝色,"平原"的块涂成绿色,"高原"和"山脉"的块涂成土黄色和棕色.

3.最后, 一张地图作为参考资源而成为I帧, I帧仅支持I宏块,
另一张有一些第一张里没有的内容, 自然就划分为P帧, P帧支持P宏块以及I宏块,
剩余的地图里都是和以上相同的内容, 所以作为B帧, B帧支持I宏块P宏块以及B宏块, 当然其中B宏块的数量肯定是最多的~
所谓的“宏块”就是这么个原理~

4.另外, 在h.264中称呼一开始被拆分成均等的块状时的"地图"的话, 就叫Macroblock Tree - 宏块树, 因为宏块的划分过程就向树枝分叉一样.
.*
.
回想2012年那会儿, AB两站大多还是512x288或者512x384的视频, 但现在的分辨率却是大不同了, 随手上个1920*1080都不在话下~ 所以随着时代的变化, 曾经的宏块概念也随时代改进了.

1.在h.265标准设计之初, 目标处理的画面大多都是720p起步, 自然需要更大的宏块以有效地编码这些运动矢量. 于是, h.265就搞出了宏块树的改进版 --- Coding Tree Unit - CTU - 编码树单元. 作为宏块的改进,就是一开始你将“地图”拆分成大小均等的方块时,每个方块的称呼.

2.CTU单元的大小可以是64×64(个像素), 32×32 以及 16×16. 而一个宏块最大也就是 16×16, 和h.264相比确实是鸟枪换炮了~

*注意下图的8×8并不是CTU的大小, 之后会讲到.

2.一个CTU的组成由YCbCr色彩编码以及其他语法组成,可以参考之前对YCbCr编码的科普: 42.96.168.211:8088/topics/84

图中的CTB - Coding Tree Block - 编码树块就是指每个YCbCr色块(block)啦, CTU中的YCbCr信息. 而Y, Cb, Cr三个元素都是独立的编码树块.

.*
.*以下内容"编码树单元"和"编码树块"将被省略掉"编码"二字
.*

3.每个CTB在像素上的大小和树单元相同. 根据视频帧, 有时树块可能太大, 无法决定是否应该执行哪种图像预测, 这时CTB会采取和之前提到的宏块分裂一样, 分裂成小到8×8的Coding Block - CB - 编码块. 而CB本身的YCbCr信息集合起来也不叫CTU, 而是CU - Coding Unit - 编码单元啦~

所以, "树块"与"码块", 以及"树单元"与"码元"的关系就是树干和树枝之间的关系了.

.*
.*
.*
.*
最后剩下的就是PB, PU, TB, TU四个东西了.不多说了, 先上图:

之前有说, 码块 - CB的最小大小就是8×8个像素, 也就是说, 当画面细节要小于这个值, h.265就不如h.264了吗? 非也, 当图片里出现了这样的细节后, 就是PB和TB出现的时候了~
一个是长方形块, 一个是超精细块, 就问你怕不怕?

最后, PU以及TU的由来也是YCbCr全组合后的PB和TB, 明白了吗?

评论 0 立即评论

目前尚无评论

后发表评论