H.265 与 H.264 的主要区别

H.265 与 H.264 的主要区别

  • H.265 与 H.264 的主要区别
    • 各模块技术差异汇总
    • 宏块划分
    • 帧内预测模式
    • 帧间预测模式
    • 去块滤波
    • ALF自适应环路滤波
    • 采样点自适应偏移(Sample Adaptive Offset)滤波
    • 并行化设计
      • Tile
      • Entropy slice
      • Dependent Slice
      • WPP(Wavefront Parallel Processing)
    • 码率控制方法
    • 参考

H.265 与 H.264 的主要区别

H.265 仍然采用混合编解码,编解码结构域 H.264 基本一致。

H.265的框架图:

在这里插入图片描述

主要的不同在于:

  1. H.265新的编码块划分结构:采用CU(Coding Unit)、PU(Prediction Unit)和TU(Transform Unit)的递归结构。
  2. 基本细节:各功能块的内部细节有很多差异。
  3. 并行工具:增加了Tile以及WPP等并行工具集以提高编码速度。
  4. 滤波器:在去块滤波之后增加了SAO(sample adaptive offset)滤波模块。

各模块技术差异汇总

在这里插入图片描述

在这里插入图片描述

宏块划分

在H.265中,将宏块的大小从H.264的16×16扩展到了64×64,以便于高分辨率视频的压缩。

同时,采用了更加灵活的编码结构来提高编码效率,包括编码单元(Coding Unit)、预测单元(Predict Unit)和变换单元(Transform Unit)。

在这里插入图片描述

其中:

  • 编码单元类似于H.264/AVC中的宏块的概念,用于编码的过程。
  • 预测单元是进行预测的基本单元,
  • 变换单元是进行变换和量化的基本单元。

这三个单元的分离,使得变换、预测和编码各个处理环节更加灵活,也有利于各环节的划分更加符合视频图像的纹理特征,有利于各个单元更优化的完成各自的功能。

在这里插入图片描述

RQT是一种自适应的变换技术,这种思想是对H.264/AVC中ABT(AdaptiveBlock-size Transform)技术的延伸和扩展。

对于帧间编码来说,它允许变换块的大小根据运动补偿块的大小进行自适应的调整;对于帧内编码来说,它允许变换块的大小根据帧内预测残差的特性进行自适应的调整。

大块的变换相对于小块的变换,一方面能够提供更好的能量集中效果,并能在量化后保存更多的图像细节,但是另一方面在量化后却会带来更多的振铃效应。

因此,根据当前块信号的特性,自适应的选择变换块大小,如下图所示,可以得到能量集中、细节保留程度以及图像的振铃效应三者最优的折中。

在这里插入图片描述

帧内预测模式

H.265在H.264的预测方向基础上增加了更多的预测方向。

H.264亮度预测:

  • 4x4块:9个方向
  • 8x8块:9个方向
  • 16x16块:4种方向

H.264色度预测:4种方向。

在这里插入图片描述

H.265的亮度预测有35种方向,色度预测有5种方向。

在这里插入图片描述

帧间预测模式

H.265是在H.264基础上增加插值的抽头系数个数,改变抽头系数值以及增加运动矢量预测值的候选个数,以达到减少预测残差的目的。

H.265与H.264一样插值精度都是亮度到1/4,色度到1/8精度,但插值滤波器抽头长度和系数不同。

H.265的增加了运动矢量预测值候选的个数,而H.264预测值只有一个。

去块滤波

H.265的去块滤波与H.264的流程是一致的,做了如下最显著的改变:

  1. 滤波边界: H.264最小到4x4边界滤波;而H.265适应最新的CU、PU和TU划分结构的滤波边缘,最小滤波边界为8x8。
  2. 滤波顺序:H.264先宏块内采用垂直边界,再当前宏块内水平边界;而H.265先整帧的垂直边界,再整帧的水平边界。

ALF自适应环路滤波

ALF在编解码环路内,位于Deblock和SAO之后,用于恢复重建图像以达到重建图像与原始图像之间的均方差(MSE)最小。

ALF的系数是在帧级计算和传输的,可以整帧应用ALF,也可以对于基于块或基于量化树(quadtree)的部分区域进行ALF,如果是基于部分区域的ALF,还必须传递指示区域信息的附加信息。

采样点自适应偏移(Sample Adaptive Offset)滤波

H.265新增采样点自适应偏移(Sample AdaptiveOffset)滤波,就是对去块滤波后的重建像素按照不同的模板进行分类,并对每一种分类像素进行补偿,分类模板分为BO(Band offset)和EO(Edge offset)。

带状补偿将像素值强度等级划分为若干个条带,每个BO内的像素拥有相同的补偿值。进行补偿时根据重构像素点所处的条带,选择相应的带状补偿值进行补偿。

SAO 把有效的YUV取值范围(0-255)平均分为32个band,如下图所示。通过某些算法(可以通过RDO确定)来选择其中连续的4个band进行补偿,当CTB中的sample的Luma/Chroma处于这4个选定的band中时,需要对这个sample进行补偿(把该band相关的offset值加到sample的值上)。

在这里插入图片描述

EO补偿时当前像素点c的相邻像素点包括2个像素,同时规定相邻像素点的位置仅有水平方向(EO_0),竖直方向(EO_1),135°方向(EO_2),45°方向(EO_3)这4种模式,如下图:

在这里插入图片描述

SAO在编解码环路内,位于Deblock之后,通过对重建图像的分类,对每一类图像像素值加减一个偏移,达到减少失真的目的,从而提高压缩率,减少码流。

采用SAO后,平均可以减少2%~6%的码流,而编码器和解码器的性能消耗仅仅增加了约2%。

并行化设计

当前芯片架构已经从单核性能逐渐往多核并行方向发展,因此为了适应并行化程度非常高的芯片实现,HEVC/H.265引入了很多并行运算的优化思路, 主要包括以下几个方面。

Tile

用垂直和水平的边界将图像划分为一些行和列,划分出的矩形区域为一个Tile,每一个Tile包含整数个LCU(Largest Coding Unit),Tile之间可以互相独立,以此实现并行处理。

在这里插入图片描述

Entropy slice

H.264 Slice切分存在的缺点:H.264的熵编码以slice为单位,这可能会造成各个slice之间的编码负担不均衡,有的slice负担重,有的则负担轻。理论上多切分一些slice有助于在多核计算机上提高负载均衡能力。

Entropy Slice允许在一个slice内部再切分成多个Entropy Slices,每个Entropy Slice可以独立的编码和解码,从而提高了编解码器的并行处理能力。

在这里插入图片描述

Dependent Slice

Dependent slice,其解码或编码的起始熵编码CABAC上下文状态是以上一个slice为基础,因此它不能完成数据丢失后的重新同步,该技术可以理解为对原先NALU数据的进一步拆分,可以适合更加灵活的打包方式。

在这里插入图片描述

WPP(Wavefront Parallel Processing)

上一行的第二个LCU处理完毕,即对当前行的第一个LCU的熵编码(CABAC)概率状态参数进行初始化,如图所示。因此,只需要上一行的第二个LCU编解码完毕,即可以开始当前行的编解码,以此提高编解码器的并行处理能力。

在这里插入图片描述

码率控制方法

CBR(Constant Bit Rate)是以恒定比特率方式进行编码,有Motion发生时,由于码率恒定,只能通过增大QP来减少码字大小,图像质量变差,当场景静止时,图像质量又变好,因此图像质量不稳定。这种算法优先考虑码率(带宽)。

这个算法也算是码率控制最难的算法了,因为无法确定何时有motion发生,假设在码率统计窗口的最后一帧发生motion,就会导致该帧size变大,从而导致统计的码率大于预设的码率,也就是说每秒统计一次码率是不合理的,应该是统计一段时间内的平均码率,这样会更合理一些。

VBR(Variable Bit Rate)动态比特率,其码率可以随着图像的复杂程度的不同而变化,因此其编码效率比较高,Motion发生时,马赛克很少。码率控制算法根据图像内容确定使用的比特率,图像内容比较简单则分配较少的码率,图像内容复杂则分配较多的码字,这样既保证了质量,又兼顾带宽限制。这种算法优先考虑图像质量。

参考

  1. https://baike.baidu.com/item/%E9%AB%98%E6%95%88%E7%8E%87%E8%A7%86%E9%A2%91%E7%BC%96%E7%A0%81/22742375?fr=ge_ala#3
  2. https://blog.csdn.net/bvngh3247/article/details/80239593
  3. https://zhuanlan.zhihu.com/p/633413414
  4. https://www.cnblogs.com/qing1991/p/10111847.html
  5. https://zhuanlan.zhihu.com/p/494849282

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/6538.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【C语言】命令行参数

执行程序时,可以从命令行传值给C程序。这些值被称为命令行参数。它们对程序很重要,特别是您想从外部控制程序,而不是在代码内对这些值进行硬编码时,就显得尤为重要了。 命令行参数是使用main()函数参数来处理的,其中&…

双fifo流水线操作——verilog练习与设计

文章目录 一、案例分析二、fifo_ctrl模块设计2.1 波形设计:2.2 代码实现2.2.1 fifo_ctrl2.2.2 顶层文件top_fifo_ctrl(rx和tx模块省略)2.2.3 仿真文件tb_fifo_ctrl 2.3波形仿真 一、案例分析 案例要求:写一个 fifo 控制器&#x…

SPARC VScode EIDE GDB 使用配置

前言 搞了多年的SPARC 最近接触了VSCODE插件感觉好用。想想看不是能方便调试和编译SPARC,决定使用开源的SPARC仿真环境和编译器来试试。感觉的却不错,借此献给使用SPARC的朋友们。安装 1.找微软官方的下载VSCODE. 2.电机左边的方块形状的图标&#xff0…

【强训笔记】day8

NO.3 思路&#xff1a;相乘除以最大公约数等于最小公倍数。最小公倍数等于gcd&#xff08;a&#xff0c;a%b&#xff09;递归直到b等于0。 代码实现&#xff1a; #include <iostream> using namespace std;int gcd(int a,int b) {if(b0) return a;return gcd(b,a%b); }…

【代码随想录】day48

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 一、198打家劫舍二、213打家劫舍II三、337打家劫舍III 一、198打家劫舍 class Solution { public:int rob(vector<int>& nums) {vector<int> dp(n…

二叉树的迭代遍历 | LeetCode 144. 二叉树的前序遍历、LeetCode 94. 二叉树的中序遍历、LeetCode 145. 二叉树的后序遍历

二叉树的前序遍历&#xff08;迭代法&#xff09; 1、题目 题目链接&#xff1a;144. 二叉树的前序遍历 给你二叉树的根节点 root &#xff0c;返回它节点值的 前序 遍历。 示例 1&#xff1a; 输入&#xff1a;root [1,null,2,3] 输出&#xff1a;[1,2,3]示例 2&#x…

JG/T 464-2014 集成材木门窗检测

集成材是指将木材的纤维方向基本平行的板材、小方材等在长度、宽度和厚度方向上集成胶合而成的材料&#xff0c;以集成材为主要受力构件制作的门窗&#xff0c;称为集成材木门窗。 JG/T 464-2014集成材木门窗检测项目 测试项目 测试标准 外观及表面质量 LY/T 1787 GB/T 928…

Android 安装过程三 MSG_ON_SESSION_SEALED、MSG_STREAM_VALIDATE_AND_COMMIT的处理

Android 安装过程一 界面跳转 知道&#xff0c;在InstallInstalling Activity中&#xff0c;PackageInstallerSession对象创建之后&#xff0c;接着会打开它&#xff0c;然后将安装文件进行拷贝&#xff0c;拷贝完成之后&#xff0c;会对Session对象确认。   从Session对象确…

MoE(Mixture of Experts,混合专家模型

MoE(Mixture of Experts,混合专家模型)是一种模型架构,它通过组合多个子模型(即“专家”)来提高模型的预测性能和效率。每个子模型专门处理输入空间的一个子集,而一个门控网络决定每个数据应该由哪个模型进行训练,以减少不同样本类型之间的干扰。这种架构能够在不损失性…

【北京仁爱堂】事出有因,原来是“肝”出现问题,才导致了痉挛性斜颈

痉挛性斜颈是肌张力障碍疾病中的一种&#xff0c;局限于颈部肌肉。由于颈部肌肉间断或持续的不自主的收缩&#xff0c;导致头颈部扭曲、歪斜、姿势异常。一般在30&#xff5e;40岁发病。由于痉挛性斜颈病因不明&#xff0c;西医方面药物及手术的临床疗效不甚理想&#xff0c;而…

初识Vue-组件通信(详解props和emit)

目录 一、组件通信介绍 1.概念 2.作用 3.特点 4.应用 二、组件通信语法 1.Props 1.1.在子组件中声明 props 1.2.在父组件中传递数据 2.Emit 2.1.在子组件中触发事件 2.2.在父组件中监听事件 三、应用实例 1. 购物车组件 2. 表单数据处理 四、总结 一、组件通信介…

std::sort并不支持所有的容器

std::sort并不支持所有的容器&#xff0c;无法对std::list使用std::sort()&#xff0c;但可以使用std::list的方法sort()。 #include <iostream> #include <string> #include <vector> #include <list> #include <algorithm> // std::sortin…

PHP 反序列化

一、PHP 序列化 1、对象的序列化 <?php class people{public $nameGaming;private $NationLiyue;protected $Birthday12/22;public function say(){echo "老板你好呀&#xff0c;我是和记厅的镖师&#xff0c;叫我嘉明就行&#xff0c;要运货吗你&#xff1f;"…

Linux查看某一个程序的安装路径

前提 这一方法的前提条件是&#xff1a;必须是运行着的程序。 方法 这里以查找运行的nginx的安装目录为例。 查看nginx运行进程&#xff0c;查看当前进程的PID&#xff0c;例子中的PID就是7992。 nginps -aux|grep nginx执行ls -l /proc/进程号/exe&#xff0c;然后会打印…

containerd的原理及应用详解(三)

本系列文章简介&#xff1a; 随着容器技术的迅猛发展&#xff0c;容器运行时成为了关注的焦点之一。而容器运行时的核心组件之一就是containerd。containerd是一个高度可扩展的容器运行时&#xff0c;它负责管理容器的生命周期、镜像管理以及资源隔离等核心功能。它是由Docker团…

android zygote进程启动流程

一&#xff0c;启动入口 app_main.cpp int main(int argc, char* const argv[]) {if (!LOG_NDEBUG) {String8 argv_String;for (int i 0; i < argc; i) {argv_String.append("\"");argv_String.append(argv[i]);argv_String.append("\" ")…

锂电池充放电方式曲线

作为一种“化学能-电能”相互转换的能量装置&#xff0c;锂电池在使用过程中必然会进行充电和放电&#xff0c;合理的充放电方式既能减轻锂电池的损伤程度&#xff0c;又能充分发挥锂电池的性能&#xff0c;具有重要的应用价值。 如《GB/T 31484-2015&#xff1a;电动汽车用动…

Server 2022 IIS10 PHP 7.2.33 升级至 PHP 8.3 (8.3.6)

下载最新版本 PHP 8.3 (8.3.6)&#xff0c;因为是 FastCGI 执行方式&#xff0c;选择 Non Thread Safe(非线程安全)。 若有以下提示&#xff1a; The mysqli extension is missing. Please check your PHP configuration. 或者 PHP Fatal error: Uncaught Error: Class &qu…

[C++基础学习-05]----C++函数详解

前言 在学习C的基础阶段&#xff0c;函数是一个非常重要的概念。函数是用来完成特定任务的一段代码&#xff0c;它可以被多次调用&#xff0c;并且可以接受参数和返回值。 正文 01-函数简介 函数的定义&#xff1a; 在C中&#xff0c;函数的定义通常包括函数的返回类…

Agent AI智能体:未来社会中的引领者还是挑战者?

随着Agent AI智能体的智能化水平不断提高&#xff0c;它们在未来社会中将扮演重要角色&#xff0c;并对我们的生活产生深远影响。以下是我对Agent AI智能体的角色、发展路径以及可能带来的挑战的一些看法&#xff1a; 角色与应用领域&#xff1a; 个人助理和虚拟伴侣&#xff…