h264/h265编解码专题讲解

一、编码器和解码器的架构讲解

1、编码层次:

一般来说,对于像h264、h265编解码器,一般会采用块级编码,也就是预先将一幅图像切割为多个像素块,一次对块内的部分或者所有的像素进行预测和编码;所以对编码器来说,就需要定义编码层次结构,这样编码的过程是逐层深入、依次进行:

  • 1、编码单元(coding unit , 简称CU),编码的基本单元,通常是取块block
  • 2、切片(slice): 由多个编码单元组成的部分图像,通常在空间上是连续的,切片定义了编码单元的可参考位置,从而将错误限制在一整幅图像内的部分范围内。

超低延迟的介绍:揭开音视频编解码超低延迟的神秘"面纱"!-CSDN博客

  • 3、帧/图像(frame/picture):由多个切片组成的一幅完整的图像。
  • 4、图像组(group of pictures,简称GOP):由多个帧/图像组成的部分视频序列,通常在时间上是连续的。
  • 5、序列(sequeence): 表示整个完整的视频

2、视频数据冗余和预测:

视频中存在大量的冗余,而视频编码本质上就是要消除这些冗余,从而实现对视频数据的压缩。一般我们经常听到的两种冗余:

  • 1、空间冗余:是静态图像中最为主要的一类数据冗余,比如说,一幅图像中如果存在较大的平缓区域,则意味着该区域中不同的像素的亮度、色度等都是非常接近的,在空间上存在很强的相关性,相互之间可以认为平滑过渡的,不会发生剧烈突变,这种就叫做空间冗余
  • 2、时间冗余: 他是视频序列中常见的一类数据冗余。在视频序列中,相邻帧往往具有类似的场景和物体,其中运动物体具有类似的大小和形状,仅仅是在图像中的位置发生了改变,可以认为后一帧中的物体是前一帧中物体发生位移,这种就叫做时间冗余

为了降低冗余,可以利用相关像素对当前像素进行预测,再对预测残差(预测值与实际值之差)进行编码和传输。那一般预测技术有哪些,一般有:

  • 1、帧内预测:他是利用空间上的相关性,由已经解码的相邻像素来预测当前块的像素,从而来有效的消除块间冗余
  • 2、帧间预测:他是利用时间上的相关性,将邻近参考帧中与当前块最相似的块做预测块,并计算预测块与当前块在空间位置上的相对偏移量,作为运动矢量。

帧间预测和帧内预测的优势对比:

使用帧内预测的I帧可以进行独立编解码,不受其他帧的影响,I帧可以作为P帧和B帧的参考帧。但是采用帧内预测的I帧压缩效率比较低,所占的数据信息量比较大。而P帧和B帧采用帧间预测,具有很大的压缩比,能够很大提高压缩率。同时,P帧可以作为其后P帧的参考帧,或者作为其前后B帧的参考帧,所以P帧可能会造成误差的扩散,往往通过周期插入I帧来阻止误差积累。

3、混合编码框架:

首先何为混合编码?‘是对同一帧数据使用帧内编码和帧间编码多个编码策略

当前视频编码的通用处理流程依次是:

  • 1、预测
  • 2、变化
  • 3、量化
  • 4、熵编码

并且每个流程都是以块作为处理单元,编码的过程如下:

  • 1、从原始帧中读入一个原始图像块
  • 2、选择帧内或者帧间预测,并基于重建帧进行预测,从而得到预测图像块
  • 3、将原始图像块和预测图像块相减,得到变换前的残差数据块
  • 4、对变换前的残差数据块进行变换,量化后,可以得到量能更为集中的系数数据块
  • 5、系数数据块一方面会和预测模式一起经过熵编码,得到压缩后的码流;另外一方面会经过反量化、反变换,得到变换后的残差数据块。
  • 6、将变换后的残差数据块与预测图像块相加,就可以得到重建图像块。
  • 7、基于块的视频编码形成的重构图像会出现方块效应,可以通过环路滤波去消除方块效应。
  • 8、重建图像块在编码器端作为参考图像,提供给帧内和帧间预测,帧内预测一般采用未经过环路滤波的数据,帧间预测一般采用经过环路滤波的数据

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

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

【Qt】QLCDNumber和QProgressBar

目录 QLCDNumber 倒计时小程序 相关属性 QProgressBar 进度条小程序 相关设置 QLCDNumber QLCDNumber是Qt框架中用于显示数字或计数值的小部件。通常用于显示整数值,例如时钟、计时器、计数器等 常用属性 属性说明intValueQLCDNumber显示的初始值(int类型)va…

会话存储、本地存储,路由导航守卫、web会话跟踪、JWT生成token、axios请求拦截、响应拦截

1、会话存储、本地存储 前端浏览器中存储用户信息,会话存储、本地存储、cookie 会话存储(sessionStorage):会话期间存储,关闭浏览器后,数据就会销毁 sessionStorage.setItem("account",resp.d…

x-cmd AI | x mistral - Mistral AI 的命令行实现

目录 简介首次用户子命令help && TLDR 简介 mistral 模块是 Mistral 大模型的命令行客户端工具,由 x-cmd 驱动,主要使用 posix shell, awk 和 curl 来实现。 首次用户 在终端运行 eval "$(curl https://get.x-cmd.com)" 即可完成 x…

7月24日JavaSE学习笔记

序列化版本控制 序列化:将内存对象转换成序列(流)的过程 反序列化:将对象序列读入程序,转换成对象的方式;反序列化的对象是一个新的对象。 serialVersionUID 是一个类的序列化版本号 private static fin…

架构设计面试经验总结

文章收录在网站:http://hardyfish.top/ 文章收录在网站:http://hardyfish.top/ 文章收录在网站:http://hardyfish.top/ 文章收录在网站:http://hardyfish.top/ 学习架构设计知识的思路总结为以下几点: 想要学习架构…

抖音广告投放定向技巧大揭秘:精准触达,引爆流量新高度!

抖音作为头部平台,汇聚了海量用户与无限商机。对于企业而言,如何在抖音这片蓝海中精准投放广告,实现品牌曝光与销售转化,成为了一门必修课。今天,就让抖音广告代运营 www.zoboo.cn 一起揭开抖音广告投放定向技巧的神秘…

PYTHON学习笔记(八、字符串及的使用)

目录 1、字符串 1.1、字符串的常用操作 1.2、格式化字符串 1.2.1、占位符格式化字符串 1.2.2、f-string格式化字符串 1.2.3、str.format( )格式化字符串 1.3、数据的验证 1.4、正则表达式 1.5.1元字符 1.5.2限定符 1.5.3其他字符 1.5.4re模块 1、字符串 1.1、字符…

【HarmonyOS】应用推送使用个推SDK如何实现?

【HarmonyOS】应用推送使用个推SDK如何实现? 前言 个推和极光都是市面上很成熟的推送第三方SDK了。今天讲讲个推SDK在鸿蒙中如何集成使用。 存在即合理,三方SDK推送给我们带来了极大的好处,首先在服务器后台处理一套API就可搞定&#xff0…

Android 去掉顶部默认导航栏 修改状态栏背景颜色

在 Android 新建项目后,存在顶部的默认导航栏,我们可以通过下面方式去掉;同时,也可以修改状态栏的背景颜色(状态栏:顶部显示时间、电池电量那一栏) 一、去掉顶部默认导航栏 1. 方式一&#xff…

CC-Link转Profinet协议网关功能与配置详解

怎么样才能把CC-Link和Profinet网络连接起来呢?这几天有几个朋友问到了这个问题,作者在这里统一为大家详细说明一下。其实有一个设备可以很轻松地解决这个问题,名为JM-PN-CCLK,下面是详细介绍。 一,产品主要功能 1、捷米特JM-P…

PostgreSQL使用(四)——数据查询

说明:对于一门SQL语言,数据查询是我们非常常用的,也是SQL语言中非常大的一块。本文介绍PostgreSQL使用中的数据查询,如有一张表,内容如下: 简单查询 --- 1.查询某张表的全部数据 select * from tb_student…

【数据结构】手把手教你单链表(c语言)(附源码)

🌟🌟作者主页:ephemerals__ 🌟🌟所属专栏:数据结构 目录 前言 1.单链表的概念与结构 2.单链表的结构定义 3.单链表的实现 3.1 单链表的方法声明 3.2 单链表方法实现 3.2.1 打印链表 3.2.2 创建新…

DB2 SQL Error: SQLCODE=-302, SQLSTATE=22001, SQLERRMC=null

文章目录 一、报错内容二、原因三、DB2中的VARCHAR(100)类型能存储多少汉字? 一、报错内容 Cause: com.ibm.db2.jcc.am.mo: DB2 SQL Error: SQLCODE-302, SQLSTATE22001, SQLERRMCnull, DRIVER3.58.82 ; DB2 SQL Error: SQLCODE-302, SQLSTATE22001, SQLERRMCnull,…

Redis 7.x 系列【26】集群模式动态扩容、动态缩容

有道无术,术尚可求,有术无道,止于术。 本系列Redis 版本 7.2.5 源码地址:https://gitee.com/pearl-organization/study-redis-demo 文章目录 1. 动态扩容1.1 安装、启动1.2 加入新节点1.3 分配哈希槽1.4 加入从节点 2. 缩容2.1 删…

文献解读-群体测序-第二十三期|《一项前瞻性队列研究中膀胱癌的驱动和乘客DNA甲基化非侵入诊断和监测》

关键词:群体测序;基因测序;变异检测; 文献简介 标题(英文):Non-invasive diagnosis and surveillance of bladder cancer with driver and passenger DNA methylation in a prospective cohort…

Ryujinx(Switch模拟器) v1.1.1361 汉化版

Ryujinx 是一款免费、开源的 Nintendo Switch 模拟器,它可以在电脑上模拟 Nintendo Switch 游戏机的运行环境,让玩家们能够在 PC 上畅玩 Switch 游戏。Ryujinx 支持大部分 Nintendo Switch 游戏,包括 The Legend of Zelda: Breath of the Wil…

生成式AI的双重路径:Chat与Agent的融合与竞争

文章目录 每日一句正能量前言整体介绍对话系统(Chat)自主代理(Agent)结论 技术对比技术差异优势与劣势技术挑战结论 未来展望发展趋势Chat与Agent的前景社会和经济影响结论 后记 每日一句正能量 在避风的港湾里,找不到…

【Qt 】JSON 数据格式详解

文章目录 1. JSON 有什么作用?2. JSON 的特点3. JSON 的两种数据格式3.1 JSON 数组3.2 JSON 对象 4. Qt 中如何使用 JSON 呢?4.1 QJsonObject4.2 QJsonArray4.3 QJsonValue4.4 QJsonDocument 5. 构建 JSON 字符串6. 解析 JSON 字符串 1. JSON 有什么作用? &#x…

四、单线程多路IO复用+多线程业务工作池

文章目录 一、前言1 编译方法 二、单线程多路IO复用多线程业务工作池结构三、重写Client_Context类四、编写Server类 一、前言 我们以及讲完单线程多路IO复用 以及任务调度与执行的C线程池,接下来我们就给他结合起来。 由于项目变大,尝试解耦项目&#…

谷粒商城实战笔记-66-商品服务-API-品牌管理-JSR303数据校验

文章目录 一,引入JSR 303依赖二,接口参数启用校验功能三,给字段添加校验注解NotBlank 和 NotNull 的区别NotBlankNotNull比较 四,BindingResult获取校验结果五,自定义错误消息六,其他校验规则 在Web应用程序…