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

相关推荐
Y1nhl2 小时前
Pyspark学习一:概述
数据库·人工智能·深度学习·学习·spark·pyspark·大数据技术
能来帮帮蒟蒻吗2 小时前
Go语言学习(15)结构体标签与反射机制
开发语言·笔记·学习·golang
Aphelios3805 小时前
Java全栈面试宝典:线程机制与Spring IOC容器深度解析
java·开发语言·jvm·学习·rbac
日暮南城故里5 小时前
Java学习------源码解析之StringBuilder
java·开发语言·学习·源码
有个人神神叨叨7 小时前
OpenAI发布的《Addendum to GPT-4o System Card: Native image generation》文件的详尽笔记
人工智能·笔记
安全方案8 小时前
精心整理-2024最新网络安全-信息安全全套资料(学习路线、教程笔记、工具软件、面试文档).zip
笔记·学习·web安全
士别三日&&当刮目相看8 小时前
JAVA学习*Object类
java·开发语言·学习
序属秋秋秋9 小时前
算法基础_基础算法【高精度 + 前缀和 + 差分 + 双指针】
c语言·c++·学习·算法
慵懒学者9 小时前
15 网络编程:三要素(IP地址、端口、协议)、UDP通信实现和TCP通信实现 (黑马Java视频笔记)
java·网络·笔记·tcp/ip·udp
爱吃馒头爱吃鱼9 小时前
QML编程中的性能优化二
开发语言·qt·学习·性能优化