【视频编码\VVC】编码结构基础知识

2024-03-02 10:44

本文主要是介绍【视频编码\VVC】编码结构基础知识,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

编码结构概述

包含两个方面:编码时的分层处理架构和编码后码流的语法架构

为支持视频编码标准的通用性,标准只规定码流的语法语义。

高级语法:片头及其以上的语法架构。

VVC编码码流包含一个或多个编码视频序列(CVS),每个CVS以帧内随机接入点(IRAP)图像或逐渐解码刷新(GDR)图像开始。

编码视频序列

CVS是时域独立可解码的基本单元。每个包含一个或多个按解码顺序排列的访问单元(AU),每个AU包含一个或多个同一时刻的图像单元(PU)(一副编码图像)。所以AU中的不同PU被归属为不同的层(Layer),一个CVS中所有同层的PU组成了编码视频序列层(CLVS)

每个PU包含一个多多个片(slice),每个slice由相同的树形编码单元(CTU)组成,每个CTU包含亮度树形编码块(CTB)和两个色度分量树形编码块。每个CTU按照二、三、四叉树划分为不同的矩形编码单元(CU)。

为了保证视频编码层的灵活使用,VVC也采用了视频编码层(VCL)和网络适配层(NAL)的双层架构。编码视频流被封装成NAL单元,并且对视频流进行标识,一遍适配网络传输或存储。

参数集

参数集是一个独立的数据单元,包含视频不同层级编码单元的共用信息。包括

  • 视频参数集(VPS):层级信息和输出层信息,用于支持分层编码
  • 序列参数集(SPS):包含一个CVS中所有图像共用的信息,档次、级别、分辨率、编码工具开关
  • 图像参数集(PPS):一副图像所有slice的共用信息,编码工具开关标识、量化参数、分块信息
  • 图像头(PH):图像级信息, 包含频繁变化的信息。
  • 自适应参数集(APS):类似图像头信息或slice头信息,会被多个slice使用
  • 解码能力信息(DCI):profile、tile、level信息,用于编码流的会话协商
  • 附加增强信息(SEI):视频内容的附加信息

非编码数据的参数集作为Non-VCLU进行传输,提升了传输关键数据的鲁棒性。

VPS

包含的信息:

  • 每个PU子层标识,子层间的相互依赖关系
  • 标识输出层集合
  • 会话所需的有关操作点关键信息,档次、级别

SPS

  • 图像格式信息:采样格式、图像分辨率、量化深度、解码图像是否需要裁剪及裁剪参数
  • 编码参数信息:编码块、变换块的最小尺度和最大尺度,帧内预测、帧间预测时变换块的最大划分升读
  • 与参考图像相关的信息:参考图像序列号POC
  • 档次、层和级
  • 时域分级信息:时域子层的最大数目、控制传输POC进位的参数、时域顺序标识开关、与子层相关的参数
  • 可视化可用信息VUI:用于表征视频格式的额外信息。
  • 其他信息:包括当前SPS引用的VPS\SPS编号和SPS拓展信息

PPS

  • 编码工具的可用性标志:符号位隐藏、帧内预测受限、去方块滤波、P/B图像的加权预测、环路滤波边界处理、变化跳过模式
  • 量化过程相关语法元素:QP初始值设定、计算每个CU的QP所需要的参数、量化参数偏移量、色度参数的偏移量
  • Tile的相关语法元素:tile的划分、总行数、总列数
  • 去方块滤波相关语法元素
  • slice头中的控制信息,是否有额外的slice头比特、图像编码顺序与输出顺序的先后哦关系、基于上下文的自适应算术编码中确定上下文初始化表格使用的方法
  • 编码一副图像时可以共用的其他信息。

多层视频

多层视频编码结构

可分级视频编码

Scalability可分级视频指对视频进行一次编码得到包含多个子集的码流,解码部分子集即可得到一定质量的重建视频。分为时域可分级、质量可分级、空域可分级。

多视点视频编码

由摄像机整列从不同角度拍摄同一场景得到的一组视频信号。除了利用单视点视频的空时域相关性,还可以利用视点间的相关性。

多层视频编码

为了支持上述两个视频的需求,VVC采用了多层给视频编码结构。

每个AU可以包含多个PU,每个PU属于一层,各层间可以独立编码也可以使用层间参考预测编码。各层间的依赖关系由VPS描述,参曹真管理模块根据VPS信息吧参考图像按照规则放入参考帧列表即可。

VVC将图形划分到多个时域层,每层都有一个标识所属时域层的时域层标识号。

VVC允许一个CVS内的图像具有不同的空间分辨率,即参考图像重采样(RPR),可以生成自适应视频流,具有更强的信道匹配能力。需要利用重采样技术。

视频序列

编码视频序列

视频序列由若干时间连续的图像构成,对其进行压缩时,先将该视频序列分割为若干小的图像组(GOP),在VVC中,一个GOP编码后所生成的压缩数据对应标准中的CVS。是时域独立可解码的基本单元,可以作为随机接入点对视频流进行解码。

解码顺序和播放顺序

图像类型

IRAP

IRAP后的第一幅解码图像被称为IRAP图像。

前置图像:解码顺序在IRAP之后而播放顺序在前面的图像。分为随机接入可解码前置(RADL)和随机接入跳过前置(RASL)

后置图像:解码顺序在IRAP之后并播放顺序也在后。

VVC规定了2种IRAP图像

即时刷新(IDR)图像:其前置图像必须是RADL图像,不依赖IDR图像前的室内流信息进行独立解码。

完全随机接入(CRA)图像:允许参考CRA图像前的视频流获得更高编码效率。

GDR

每帧GDR图像中的部分区域仅采用帧内编码,连续多帧GDR(不同帧不同区域)采用帧内编码的区域可以组成一个完整的帧,该帧包含帧内编码模式,可以随机接入。

GDR从non-IDR图像开始解码,在解码特定数量的图像后就能获得内容正确的解码图像 的能力,九二一实现从帧间预测图像随机接入,可以将I帧的高码率分散到一小段时间内传输,防止码率在短时间内突然增大。

GDR图像中的刷新区域与非刷新区域的边界被标识为虚拟边界。

图像

除了PPS,还使用PH和APS来标识图像的共用编码参数。

APS包含大量数据,主要传递自适应环路滤波参数ALF、亮度映射和色度缩放LMCS参数、量化矩阵参数。

图像头

对图像中所有slice有效,承载slice的共用参数

PH承载频繁变换的编码参数信息:图像标识、slice类型允许、图像序列、去方块滤波参数、SAO参数。

PH用于识别一幅图像的第一个slice。

Slice

slice划分的目的时压缩数据的高效存储、传输,每个slice对应一个单独的NAL单元。独立解码。

熵编码在每个slice开始前进行初始化。

分为:I\P\B Slice后面在前面的基础上增加

Tile

一副图像可以划分为若干个Tile,从水平方向和垂直方向将一副图像分割为若干个矩形区域,每个tile包含整数个CTU。

划分tile是为了增强并行处理能力的同时又不引入新的错误扩散。每个tile中的CTU按照光栅扫描进行编码。

子图像

由图像内一块矩形区域的一个或多个slice组成。

树形编码单元

CTU由一个亮度CTB和两个对应的色度CTB组成。

CTU可以进一步划分为多个编码端元CU。

划分方式:垂直二叉树划分、水平二叉树划分、垂直三叉树划分、水平三叉树划分。

嵌套了多类型树的四叉树划分提供了一种内容自适应的编码树结构划分,如何划分采用率失真优化确定。

还有对图像边界上CU划分的处理。

档次profile、层tier和级别level

档次、层和级别指定了对比特流的限制,从而限制了解码比特流需要的能力

  1. 档次主要规定编码器可采用哪些编码工具或者算法。VVC中主要有6个档次,分别是main 10\main 10 still picture\main 4:4:10\main 4:4:4 10 still picture\multilayer main 10\multilayer main 10 4:4:4
  2. 两个层main tier\high tier
  3. 级别则指根据解码端的负载和存储空间情况对关键参数加以限制。13个级别

这篇关于【视频编码\VVC】编码结构基础知识的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/765852

相关文章

Python如何实现读取csv文件时忽略文件的编码格式

《Python如何实现读取csv文件时忽略文件的编码格式》我们再日常读取csv文件的时候经常会发现csv文件的格式有多种,所以这篇文章为大家介绍了Python如何实现读取csv文件时忽略文件的编码格式... 目录1、背景介绍2、库的安装3、核心代码4、完整代码1、背景介绍我们再日常读取csv文件的时候经常

mysql通过frm和ibd文件恢复表_mysql5.7根据.frm和.ibd文件恢复表结构和数据

《mysql通过frm和ibd文件恢复表_mysql5.7根据.frm和.ibd文件恢复表结构和数据》文章主要介绍了如何从.frm和.ibd文件恢复MySQLInnoDB表结构和数据,需要的朋友可以参... 目录一、恢复表结构二、恢复表数据补充方法一、恢复表结构(从 .frm 文件)方法 1:使用 mysq

Python中顺序结构和循环结构示例代码

《Python中顺序结构和循环结构示例代码》:本文主要介绍Python中的条件语句和循环语句,条件语句用于根据条件执行不同的代码块,循环语句用于重复执行一段代码,文章还详细说明了range函数的使... 目录一、条件语句(1)条件语句的定义(2)条件语句的语法(a)单分支 if(b)双分支 if-else(

使用Navicat工具比对两个数据库所有表结构的差异案例详解

《使用Navicat工具比对两个数据库所有表结构的差异案例详解》:本文主要介绍如何使用Navicat工具对比两个数据库test_old和test_new,并生成相应的DDLSQL语句,以便将te... 目录概要案例一、如图两个数据库test_old和test_new进行比较:二、开始比较总结概要公司存在多

Java如何获取视频文件的视频时长

《Java如何获取视频文件的视频时长》文章介绍了如何使用Java获取视频文件的视频时长,包括导入maven依赖和代码案例,同时,也讨论了在运行过程中遇到的SLF4J加载问题,并给出了解决方案... 目录Java获取视频文件的视频时长1、导入maven依赖2、代码案例3、SLF4J: Failed to lo

Python实现多路视频多窗口播放功能

《Python实现多路视频多窗口播放功能》这篇文章主要为大家详细介绍了Python实现多路视频多窗口播放功能的相关知识,文中的示例代码讲解详细,有需要的小伙伴可以跟随小编一起学习一下... 目录一、python实现多路视频播放功能二、代码实现三、打包代码实现总结一、python实现多路视频播放功能服务端开

Python实现视频转换为音频的方法详解

《Python实现视频转换为音频的方法详解》这篇文章主要为大家详细Python如何将视频转换为音频并将音频文件保存到特定文件夹下,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. python需求的任务2. Python代码的实现3. 代码修改的位置4. 运行结果5. 注意事项

Python视频处理库VidGear使用小结

《Python视频处理库VidGear使用小结》VidGear是一个高性能的Python视频处理库,本文主要介绍了Python视频处理库VidGear使用小结,文中通过示例代码介绍的非常详细,对大家的... 目录一、VidGear的安装二、VidGear的主要功能三、VidGear的使用示例四、VidGea

Java中switch-case结构的使用方法举例详解

《Java中switch-case结构的使用方法举例详解》:本文主要介绍Java中switch-case结构使用的相关资料,switch-case结构是Java中处理多个分支条件的一种有效方式,它... 目录前言一、switch-case结构的基本语法二、使用示例三、注意事项四、总结前言对于Java初学者

结构体和联合体的区别及说明

《结构体和联合体的区别及说明》文章主要介绍了C语言中的结构体和联合体,结构体是一种自定义的复合数据类型,可以包含多个成员,每个成员可以是不同的数据类型,联合体是一种特殊的数据结构,可以在内存中共享同一... 目录结构体和联合体的区别1. 结构体(Struct)2. 联合体(Union)3. 联合体与结构体的