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

news/2025/2/11 23:55:23/

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


http://www.ppmy.cn/news/1361053.html

相关文章

【Vuforia+Unity】AR06-空间环境识别功能(AreaTargets)

Vuforia原理:把被识别的物体转成图、立体图、柱形图,3D模型、环境模型,然后模型生成Vuforia数据库-导入Unity-参考模型位置开始摆放数字内容,然后参考模型自动隐藏-发布APP-识别生活中实物-数字内容叠加上去! 不论你是否曾有过相关经验,只要跟随本文的步骤,你就可以成功…

西门子200SMART SB AE01的正确用法

西门子200SMART SB AE01,就是1路模拟量输入的SB板。信号板直接安装在 SR/ST CPU 本体正面,无需占用电控柜空间,安装、拆卸方便快捷。有些小型的系统如果只有1路模拟量输入,或者模块配置中恰好缺少1路模拟量输入,就可以…

window: C++ 获取自己写的dll的地址

我自己用C写了一个插件,插件是dll形式的,我的插件式在dll的目录下有个config文件夹,里面是我用json写的插件配置文件,当插件运行的时候我需要读取到json配置文件,所有最重要的就是如何获取dll的路径. 大概就是这么个结构, 我自己封装了一个函数.只适用于window编程,因为里面用…

Postgresql源码(124)两个事务更新同一行数据时的行为和原理分析

XactLockTableWait函数、transactionid锁的一些原理和分析 结论 更新行时,会根据xmax拿transactionid锁,等对应的事务结束。 如果结束是回滚,则heap_update继续更新。如果结束时提交,则heap_update要返回上层ExecUpdate调用EvalP…

【PostgreSQL内核学习(二十七) —— (编码转换)】

编码转换 概述处理客户端与服务器之间的字符串编码转换pg_do_encoding_conversion 函数FindDefaultConversionProc 函数FindDefaultConversion 函数 处理服务器与客户端之间的字符串编码转换两者的联系和区别 声明:本文的部分内容参考了他人的文章。在编写过程中&am…

Unity编辑器扩展之是否勾选Text组件BestFit选项工具(此篇教程也可以操作其他组件的属性)

想要批量化是否勾选项目预制体资源中Text组件BestFit属性(此篇教程也可以操作其他组件的属性,只不过需要修改其中对应的代码),可以采用以下步骤。 1、在项目的Editor文件中,新建一个名为TextBestFitBatchProcessor的…

整型数组按个位值排序/最低位排序(C语言)

题目描述 给定一个非空数组(列表),其元素数据类型为整型,请按照数组元素十进制最低位从小到大进行排序,十进制最低位相同的元素,相对位置保持不变。 当数组元素为负值时,十进制最低位等同于去除…

创新性3D数据合成模型,微软推出EgoGen

随着AR、VR等设备的广泛应用,第一人称的应用开始增多。但在研发方面面临不同的挑战,例如,图像模糊、视觉混乱、遮挡更严重等,给视觉模型的训练带来重大挑战。 一方面,人工标注真实第一视角数据集,来培训深度学习模型的成本和难度都很高。另一…