HEVC视频编解码标准学习笔记-1

视频编解码标准H.265/HEVC(High Efficiency Video Coding)通过将视频数据编码为更高效格式,大幅改善了视频流的压缩效率。这里主要介绍Tile、Slice和CTU的定义,以及介绍这些技术组件之间的相互关系。

CTU(编码树单元)

在H.265/HEVC中,CTU(编码树单元)是视频编码的最基本处理单元,它是对H.264/AVC中宏块(Macroblock)技术的一种扩展。CTU的尺寸最大可以达到64x64像素,并且它能被进一步递归地分割成更小的编码块(Coding Block, CB)和变换块(Transform Block, TB)。CTU能在不同的深度上对视频数据进行编码,使得编解码处理能够根据视频内容的不同而灵活调整,大幅度提升编码效率。

Slice和Tile

在H.265/HEVC中,Slice和Tile是对视频图像帧实行并发编解码处理的两个关键机制,但二者有着不同的侧重点。

Slice(切片)

Slice是视频图像中的一部分,由一连串的CTU组成。Slice的设计初衷是为了支持错误恢复、并行处理和提供一定程度上的随机访问。Slice可以是条带形状(条形切片,但必须是符合光栅扫描的顺序,也即从左到右,从上到下)或任意矩形,取决于它们是如何界定的。一幅图像可以包含多个Slice,每个Slice可以单独进行编码和解码,实现了编解码处理的灵活性和效率。

Tile

Tile是通过将图像在空间上进行分割得到的。一个图像可以被分割成几个Tile,这对于图像的并发处理尤为重要。与Slice不同,Tile提供一种机制来并行处理视频中的多个区域。Tile的设计提高了视频处理过程中的并发性,有利于充分利用现代多核处理器的计算能力。

(VVC中新增了子图像划分,后续再学习,也希望各位大佬可以加个好友共享一下学习资源,感谢~)

Tile、Slice和CTU之间的关系

Tile、Slice和CTU共同构成了H.265/HEVC编码体系中的多层结构,这些技术配合使用可以在视频编解码中实现不同的目的:
Slice划分目的是压缩数据的高效存储与传输,每个Slice对应一个独立的NAL单元;

Tile划分目的是在增强并行处理能力的同时又不引入新的错误扩散(这里的错误扩散我理解的是当前解码部分会依赖于已解码的像素,如果出现错误,像素错误会扩散到其他CTU);

CTU划分目的是为了适应不同的视频内容

层次结构 :从层次上讲,CTU是编解码处理的最小单位,而Slice则是对由若干个CTU组成的视频图像区域进行编码的单元。Tile则通过对整幅图像在空间上的分割来提高处理的并发性。这样的分层和模块化设计既实现了编解码效率的最大化,也保持了足够的灵活性来应对不同的编码情境。

Slice和Tile是互相包含的关系,也即既可以一个Slice包含多个Tile,也可以一个Tile包含多个Slice,但至少需要满足一下两个条件之一:

1、一个Slice中的所有CTU属于同一个Tile(我的理解是这里是指一个Tile包含多个Silce的情况,需要保证其中每个Silce都完整属于Tile)

2、一个Tile中的所有CTU属于同一个Slice(我的理解是这里是指一个Slice包含多个Tile的情况,需要保证其中每个Tile都完整属于Slice)

并发处理 :通过Tile和Slice的应用,可以在宏观上对视频图像进行区域划分,实现多个图像区域的并行处理。这对于大幅提高视频编解码效率、加快处理速度、并最终减少编码延迟起到了至关重要的作用。(其中Slice在《新一代视频编解码H266/VVC:原理、标准与实现》有提到,Slice的压缩数据不依赖于其他Slice,可以被独立 解码,这里的独立我的理解是这里应该是该Slice涉及的语法元素自身可以确定,指可以正常的进行解码,而不一定能独立的解码输出成一帧图像或一部分图像,因为B slice和P Slice中还需要参考图像参考列表中的内容,不知道这里理解的对不对,如果有大佬能看到这里,希望能指导一下,万分感谢~)

H.265/HEVC的Tile、Slice和CTU这三个组件通过其独特的结构和功能,为视频编解码技术带来了前所未有的效率和灵活性。它们之间的协同工作不仅提升了编码的效率,还大幅改善了视频质量和传输的可靠性。随着视频内容的不断增长和分辨率的提高,这些技术的优势将更加明显,为未来的视频技术发展奠定坚实的基础。

相关推荐
流浪的小新4 分钟前
【AI】人工智能、LLM学习资源汇总
人工智能·学习
A懿轩A1 小时前
C/C++ 数据结构与算法【数组】 数组详细解析【日常学习,考研必备】带图+详细代码
c语言·数据结构·c++·学习·考研·算法·数组
dvlinker1 小时前
C++开源项目 VLC 源代码的交叉编译以及库的裁剪方法详解
ffmpeg·mingw-w64·msys2·cygwin·开源vlc·vlc编译·vlc裁剪
云边有个稻草人1 小时前
【优选算法】—复写零(双指针算法)
笔记·算法·双指针算法
南宫生9 小时前
力扣-图论-17【算法学习day.67】
java·学习·算法·leetcode·图论
sanguine__9 小时前
Web APIs学习 (操作DOM BOM)
学习
冷眼看人间恩怨9 小时前
【Qt笔记】QDockWidget控件详解
c++·笔记·qt·qdockwidget
数据的世界0111 小时前
.NET开发人员学习书籍推荐
学习·.net
四口鲸鱼爱吃盐11 小时前
CVPR2024 | 通过集成渐近正态分布学习实现强可迁移对抗攻击
学习
OopspoO14 小时前
qcow2镜像大小压缩
学习·性能优化