当前位置: 首页 > news >正文

h264编码原理

在介绍编码器原理之前首先了解三个制定编码标准的组织:
1.国际电信联盟(ITU-T),这是一个音视频领域非常强的组织,规定了很多标准如h261,h262,h263,h263++。h263++也就是h264的前身。
2.国际标准化组织(ISO),这是一个庞大的官方组织,他们规定了很多标准,如分米,温度等,在ITU-T之后,他们也开始规定编码标准。如MPEG1,MPEG2,MPEG4。
3.GOOGLE,规定了vp8,vp9等。
ITU-T和ISO竞争了多年后,两个机构开始合作,h264/(MPEG4-part10 AVC)就是他们合作的产物。

h264是一系列编码工具的组合,主要包括:
1.帧内压缩
2.帧间压缩
3.环路滤波器,实际上是一个数字低通滤波器,滤除不必要的高频信息。

帧内压缩的过程如下:
数据源–》信源编码器–》视频复合编码器–》传输缓冲编码器–》传输编码器–》h264码流

在这里插入图片描述

什么是信源编码器:
它把一张图片分割成4x4,8x8,16x16等一个个宏块,其中h264最大的宏块是16x16,至于该分割成多大的宏块,是由具体算法决定的。

什么是视频复合编码器:
把一个个宏块,进行记录,分为三部分,第一首先记录宏块的顶层一行,然后记录最左边的一行,最后记录预测。预测有9种方向,如下图。因此可以知道宏块越大,压缩比也就越高。
h265之所比h264压缩比高就是它的预测方向比较多。
在这里插入图片描述
什么是传输缓冲编码器:
信源编码器编码数据放在这里,i和p帧编码后直接出码流,不会缓存,b帧会缓存等待P帧,一个p帧进去,编码里之前缓存的b帧一定都会被刷新出来。
帧内压缩就是对宏块的压缩。丢包为什么会花屏,其实是丢了宏块,解码器解析不到就变成花屏了。

帧间压缩:
帧内压缩就是对宏块的压缩。帧间压缩分为两种,一种是没有运动的宏块,一种是运动的宏块,帧间压缩就是对运动宏块坐标的记录,称为对运动适量的记录。

h264只是规定的码流的结构,码流结构确定了,那么解码器的结构也就确定了,但是编码器的实现可以不同,只要最终编码出的码流结构符合h264就可以了。

之所以引进265是因为,264很难对1080p以上的视频编码,编码出来的视频太大。264编码算法成熟时,人们对视频清晰度还没有那么高的要求,显示器的分辨率普遍还很低。
h265之所以能提升压缩率,根本原因有是因为宏块的大小变大了,最大128x128,而264最大16x16。那么是否宏块的左边和上边加上预测方向就会忽略掉很多细节,编码就会编码的不清晰了呢。需要注意的是h265是聪明的压缩算法,比如它先划分一个64x64的宏块,划分好后发现这个宏块里的像素细节比较多,颜色变化大,那么它就会再划分四个等大小的宏块,也就是32x32,然后再对每个宏块考虑是否还需要再次细分,如果需要每个宏块再划分为4个等大的宏块,这样树形递归下去,直到划分到最小的4x4大小的宏块。这就是h265能有效压缩视频的秘密。如下图:
在这里插入图片描述但是如果只比较I帧的话,还是265稍微大一点点些,因为265采用的树形递归编码方式需要记录额外的信息。因此在I帧265并没有优势,但是它的P帧和B帧会比264的小非常多,比如P帧可能会是264P帧的1/10。
查看264视频宏块的划分可以用雷神的eyeView。
查看264视频宏块的划分可以用Elecard HEVCAnalyzer。
同时265和264还有一个更大的差别,那就是它在264的基础上增加了预测方向,使得对像素的预测更加精准。
H.265:所有尺寸的CU块,亮度有35种预测方向,色度有5种预测方向
H.264:亮度 4x4块9个方向,8x8块9个方向,16x16块4种方向,色度4种方向
在这里插入图片描述
在这里插入图片描述

265和264在码流结构也有不同,264第一帧里有两个分隔符(00 00 00 01),一个是sps,一个是pps,265则有三个分隔符,在最前面加了一个vps。vps是用来保存3D信息的,比如左眼偏光度,右眼偏光度。因此一个裸眼3D视频一定是265编码。

http://www.lryc.cn/news/61306.html

相关文章:

  • 网络工程师经常搞混的路由策略和策略路由,两者到底有啥区别?
  • 高精度气象模拟软件WRF实践技术
  • 总结827
  • 还在发愁项目去哪找?软件测试企业级Web自动化测试实战项目
  • 总结下Spring boot异步执行逻辑的几种方式
  • 【开发日志】2023.04 ZENO----Composite----CompNormalMap
  • 春秋云境:CVE-2022-28525 (文件上传漏洞)
  • 【软件测试二】开发模型和测试模型,BUG概念篇
  • 短视频app开发:如何实现视频直播功能
  • [架构之路-174]-《软考-系统分析师》-5-数据库系统-7-数据仓库技术与数据挖掘技术
  • 销售高品质 FKM EPDM NBR 硅胶 O 形密封圈
  • Linux环境变量:不可或缺的系统组成部分
  • FFmpeg命令行解析
  • 机器学习——为什么逻辑斯特回归(logistic regression)是线性模型
  • 从输入URL到页面展示到底发生了什么
  • Qt connect传参方式及lambda函数传参方式详解
  • 如何在硬盘上恢复已经删除的照片?
  • Unity日记22(携程概念)
  • 01-Linux-磁盘分区与目录配置
  • 连接器信号完整性仿真教程 二
  • 基于深度学习的图片上色(Opencv,Pytorch,CNN)
  • Python爬虫
  • python基础案例题:进制转换、字符串加密的实现、猜拳游戏、多种方法计算π
  • Spring Boot入门与进阶
  • servlet(1)—javaEE
  • 定制 Jenkins 镜像说明
  • 【离散数学】测试五 图论
  • 根据cadence设计图学习硬件知识 day03 了解 一些芯片 和 数据手册下载的地方
  • 计算机组成原理——第五章中央处理器(中)
  • ImageJ 用户手册——第三部分(ImageJ扩展)