【视频编码\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

相关文章

Oracle查询表结构建表语句索引等方式

《Oracle查询表结构建表语句索引等方式》使用USER_TAB_COLUMNS查询表结构可避免系统隐藏字段(如LISTUSER的CLOB与VARCHAR2同名字段),这些字段可能为dbms_lob.... 目录oracle查询表结构建表语句索引1.用“USER_TAB_COLUMNS”查询表结构2.用“a

PyQt5 GUI 开发的基础知识

《PyQt5GUI开发的基础知识》Qt是一个跨平台的C++图形用户界面开发框架,支持GUI和非GUI程序开发,本文介绍了使用PyQt5进行界面开发的基础知识,包括创建简单窗口、常用控件、窗口属性设... 目录简介第一个PyQt程序最常用的三个功能模块控件QPushButton(按钮)控件QLable(纯文本

Python使用OpenCV实现获取视频时长的小工具

《Python使用OpenCV实现获取视频时长的小工具》在处理视频数据时,获取视频的时长是一项常见且基础的需求,本文将详细介绍如何使用Python和OpenCV获取视频时长,并对每一行代码进行深入解析... 目录一、代码实现二、代码解析1. 导入 OpenCV 库2. 定义获取视频时长的函数3. 打开视频文

MySQL中的索引结构和分类实战案例详解

《MySQL中的索引结构和分类实战案例详解》本文详解MySQL索引结构与分类,涵盖B树、B+树、哈希及全文索引,分析其原理与优劣势,并结合实战案例探讨创建、管理及优化技巧,助力提升查询性能,感兴趣的朋... 目录一、索引概述1.1 索引的定义与作用1.2 索引的基本原理二、索引结构详解2.1 B树索引2.2

如何使用Maven创建web目录结构

《如何使用Maven创建web目录结构》:本文主要介绍如何使用Maven创建web目录结构的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录创建web工程第一步第二步第三步第四步第五步第六步第七步总结创建web工程第一步js通过Maven骨架创pytho

Python循环结构全面解析

《Python循环结构全面解析》循环中的代码会执行特定的次数,或者是执行到特定条件成立时结束循环,或者是针对某一集合中的所有项目都执行一次,这篇文章给大家介绍Python循环结构解析,感兴趣的朋友跟随... 目录for-in循环while循环循环控制语句break语句continue语句else子句嵌套的循

Python+PyQt5实现文件夹结构映射工具

《Python+PyQt5实现文件夹结构映射工具》在日常工作中,我们经常需要对文件夹结构进行复制和备份,本文将带来一款基于PyQt5开发的文件夹结构映射工具,感兴趣的小伙伴可以跟随小编一起学习一下... 目录概述功能亮点展示效果软件使用步骤代码解析1. 主窗口设计(FolderCopyApp)2. 拖拽路径

基于Go语言实现Base62编码的三种方式以及对比分析

《基于Go语言实现Base62编码的三种方式以及对比分析》Base62编码是一种在字符编码中使用62个字符的编码方式,在计算机科学中,,Go语言是一种静态类型、编译型语言,它由Google开发并开源,... 目录一、标准库现状与解决方案1. 标准库对比表2. 解决方案完整实现代码(含边界处理)二、关键实现细

解决IDEA报错:编码GBK的不可映射字符问题

《解决IDEA报错:编码GBK的不可映射字符问题》:本文主要介绍解决IDEA报错:编码GBK的不可映射字符问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录IDEA报错:编码GBK的不可映射字符终端软件问题描述原因分析解决方案方法1:将命令改为方法2:右下jav

基于Python和MoviePy实现照片管理和视频合成工具

《基于Python和MoviePy实现照片管理和视频合成工具》在这篇博客中,我们将详细剖析一个基于Python的图形界面应用程序,该程序使用wxPython构建用户界面,并结合MoviePy、Pill... 目录引言项目概述代码结构分析1. 导入和依赖2. 主类:PhotoManager初始化方法:__in