大家好,欢迎来到停止重构的频道。

本期我们介绍视频编码格式H264

H264是视频画面最常用的编码格式了,几乎所有的播放器都支持这个编码格式,当然浏览器也不例外。

我们按这样的顺序讨论H264 :

1、  编码格式的作用

2、  I帧、P帧、B帧、GOP

3、  不同使用场景需要关注的点

4、  H264、H265的选择

编码格式的作用

在往期《音视频转码工作原理》中介绍过,一个视频文件实际上是分三层的:封装、编码、基础数据

封装的作用请看往期《封装格式》。

编码的作用是为了压缩数据 ,限制最终文件的大小。

以视频为例,视频是由一帧一帧图像组成的,一帧图像的大小是由基础数据格式决定的,视频的基础数据格式一般为色彩空间模型。

如分辨率为1920*1080,色彩空间模型为YUV420的话 ,那么一帧图像的大小为3MB左右。

如果视频长度为1分钟,每秒25帧的话,理论视频文件的大小为4GB左右。

但是一般视频文件是没有这么大的。因为视频在编码阶段会压缩数据,所以平常几分钟的高清视频也就几百兆。​

编码的过程是由编码格式决定的,每个编码格式对应不同的压缩/解压缩算法,每个编码格式也对应不同的编码器/解码器,如果播放器不支持某个编码格式的话是播放不出来的。

这里顺便一提,一般只有对视频文件大小产生影响的基础参数才会作用在编码阶段,如码率、最大码率等。编码阶段会按这些参数限制文件大小,但同时也可能会产生有损压缩,影响画面质量。

其他基础参数,如分辨率、帧率等,都不是编码阶段处理的,这需要转码程序对原始帧的基础数据进行操作。

如降低帧率的修改,需要转码程序重新计算视频帧的时间戳,并抛弃一些多余的帧数据,当然FFmpeg等框架都提供这些处理接口。

I帧、P帧、B帧、GOP

H264是最常用的视频编码格式,这里的视频指的是图像。H264并不能处理音频数据。

H264的压缩工作原理是比较典型的,它的压缩算法加入了运动补偿、运动补充等概念。

也就是对于相似度较高的一段区间,并不需要记录所有的数据,而是根据前一个图像或前后图像计算出当前图像,这样整个文件的数据将会减少。

具体的压缩算法是不需要搞清楚的,但需要清楚对应的H264特殊概念,I帧、P帧、B帧、GOP

I帧是能独立播放的一帧图像,数据量是最大的。

P帧需要根据前一个I帧或P帧计算所得,数据并不完整,数据量比I帧少,视频中大多数都是P帧。

B帧需要根据前一个和后一个I帧或P帧计算所得,数据最不完整,数据量是最少的。

GOP指的是一组完整的视频帧,如gop设置为25,那么编码器会让每25帧的第一帧必定为I帧 。如果帧率也是25帧,那每秒的第一帧就必定是I帧。

不同使用场景需要关注的点

知道H264这些概念有什么用呢?在某些场景,这些概念起到关键作用。

首先无论是什么场景,都需要关注码率、最大码率的设置

因为码率是影响数据量最直观的参数,它会限制最终数据量的大小,毕竟很多时候,存储空间、网络带宽都是需要考虑的。

码率、分辨率、帧率等相关参数的讲解和具体建议,请参考往期《视频参数》,这里不作展开。

接下来是在线播放的场景 ,I帧、B帧、P帧、GOP这些一般都是不需要特别关心的。

但是如果出现未加载完视频跳转不太流畅等问题的话,则可能是视频的某两个I帧相隔特别远,为了防止这种问题,可以将GOP设置帧率的4-5,保证每4-5秒必有一个I帧。

在直播的场景下,这些概念则需要特别关注。I帧是独立的帧,B帧、P帧的播放实质上都需要依赖I帧,所以流媒体服务器需要设置缓存I帧,这样首屏花屏的问题会得到一定程度缓解。

但还是会出现局部花屏的问题,我们还需要设置GOP,GOP一般设置为帧率的1-2倍,保证每1-2秒必有I帧,这样的话,理论上只有在1-2秒这个间隙中开始拉流才会出现花屏问题。

但是1-2秒的帧大都是相似的,且有又设置了I帧缓存的话,则即使有局部花屏,很多时候也是感觉不出来的。​

直播流一般需要禁止生成B帧,虽然B帧数据量是最小的,但是由于它需要后一个帧数据才能计算出来,所以禁止B帧有利于直播的流畅。

H264、H265的选择

近些年,H265也是有一些热度的,相同的视频H265编码的文件会比H264编码的文件小很多,一些时候甚至接近50%。

所以理论上,在相同带宽的前提下,H265的在线视频、直播流会拥有更高的画质,相同画质的情况下,H265也能更节省带宽/流量。

但这是建立在编码、解码计算量为代价的,也就是说,播放H265视频,会比H264视频更消耗性能

这是H264、H265最大的区别,H265比H264拥有压缩率更高的压缩算法。但同时,也损耗更多的性能,H264、H265的选择,更多是根据实际场景下,容量、带宽对比用户、服务器性能,哪个更为重要的考量。

但比这些更重要的是,H265的普及度并没有想象中高,不是所有浏览器都支持H265的

所以即使基于种种考量选用了H265,但是客户端不支持的话,那也是行不通的。所以H264目前还是比较常用的,毕竟H264编码的视频哪里都能播放,H265则不一定。

总结

本期介绍了最常用的视频编码格式H264,当然,有比H264无损压缩度更高,或者比H264功能更丰富的编码格式,但是普及程度决定了H264更为常用。

【音视频处理】H264/H265详解,为什么H264更常用?相关推荐

  1. 各种音视频编解码学习详解之 编解码学习笔记(十三):容器

    最近在研究音视频编解码这一块儿,看到@bitbit大神写的[各种音视频编解码学习详解]这篇文章,非常感谢,佩服的五体投地.奈何大神这边文章太长,在这里我把它分解成很多小的篇幅,方便阅读.大神博客传送门 ...

  2. 音视频编解码学习详解

    音视频编解码学习详解 目录(?)[+] 编解码学习笔记二codec类型 编解码学习笔记三Mpeg系列Mpeg 1和Mpeg 2 编解码学习笔记四Mpeg系列Mpeg 4 编解码学习笔记五Mpeg系列A ...

  3. 各种音视频编解码学习详解之 编解码学习笔记(三):Mpeg系列——Mpeg 1和Mpeg 2

    最近在研究音视频编解码这一块儿,看到@bitbit大神写的[各种音视频编解码学习详解]这篇文章,非常感谢,佩服的五体投地.奈何大神这边文章太长,在这里我把它分解很多小的篇幅,方便阅读.大神博客传送门: ...

  4. 各种音视频编解码学习详解之 编解码学习笔记(四):Mpeg系列——Mpeg 4

    最近在研究音视频编解码这一块儿,看到@bitbit大神写的[各种音视频编解码学习详解]这篇文章,非常感谢,佩服的五体投地.奈何大神这边文章太长,在这里我把它分解成很多小的篇幅,方便阅读.大神博客传送门 ...

  5. 各种音视频编解码学习详解之 编解码学习笔记(八):Real系列

    最近在研究音视频编解码这一块儿,看到@bitbit大神写的[各种音视频编解码学习详解]这篇文章,非常感谢,佩服的五体投地.奈何大神这边文章太长,在这里我把它分解成很多小的篇幅,方便阅读.大神博客传送门 ...

  6. 各种音视频编解码学习详解之 编解码学习笔记(六):H.26x系列

    最近在研究音视频编解码这一块儿,看到@bitbit大神写的[各种音视频编解码学习详解]这篇文章,非常感谢,佩服的五体投地.奈何大神这边文章太长,在这里我把它分解成很多小的篇幅,方便阅读.大神博客传送门 ...

  7. 各种音视频编解码学习详解之 编解码学习笔记(十):Ogg系列

    最近在研究音视频编解码这一块儿,看到@bitbit大神写的[各种音视频编解码学习详解]这篇文章,非常感谢,佩服的五体投地.奈何大神这边文章太长,在这里我把它分解成很多小的篇幅,方便阅读.大神博客传送门 ...

  8. 各种音视频编解码学习详解 h264 ,mpeg4 ,aac 等所有音视频格式

    编解码学习笔记(一):基本概念 媒体业务是网络的主要业务之间.尤其移动互联网业务的兴起,在运营商和应用开发商中,媒体业务份量极重,其中媒体的编解码服务涉及需求分析.应用开发.释放license收费等等 ...

  9. 各种音视频编解码学习详解 h264 ,mpeg4 ,aac 等所有音视频格式 详解

    http://blog.csdn.net/wishfly/article/details/50187417 编解码学习笔记(一):基本概念 媒体业务是网络的主要业务之间.尤其移动互联网业务的兴起,在运 ...

最新文章

  1. Mysql中大表添加索引的办法
  2. php 两个数组键名比较,php array_intersect_assoc 比较两个数组的键名和键值,并返回交集...
  3. 剑指offer58 二叉树的下一个结点
  4. python新建文件夹口令_Python脚本破解压缩文件口令实例教程(zipfile)
  5. MyBatis3——入门介绍
  6. python仓库管理
  7. 历史经验之QT在WIN32下编译环境配置步骤
  8. 解决TextView中文英文数字混排导致的自动换行问题
  9. 如何在电脑上使用wink一键高清优化短视频画质
  10. Unity:简单易懂小游戏
  11. 医学图像处理——DeepDrr工具CT生成DRR
  12. 车载通信——CAN收发器与CAN控制器
  13. Druid 索引服务的资源精细化调度
  14. 环境质量现状调查与分析
  15. kafka的Topic(三)
  16. 《酒店管理系统》项目总结
  17. MinIO的介绍以及简单的使用
  18. shp转txt获取其坐标点(可批量操作)
  19. 会计台式计算机使用年限,电脑等电子设备,使用年限必须是5年吗?残值 – 手机爱问...
  20. 尚医通_第12章_用户平台首页数据

热门文章

  1. 如何在码云获取token呢?
  2. 结构光之格雷码编码加相移算法详解与实现(多种编码程序)
  3. 特征工程--特征离散化的意义
  4. Java后台+PDF.js 实现pdf分页加载的后端实现
  5. 被裁员?这是上帝为你开了一扇窗,你知道吗?
  6. GB28181/RTSP/Onvif/HikSDK/Ehome协议视频共享平台EasyCVR人脸识别系统助力打造智慧安检系统
  7. 【Linux】Tomcat优化
  8. 多页pdf合并成一个的操作方法
  9. Windows系统通用定时关机命令
  10. 弥漫的烟圈-Abaqus涡环仿真与空气大炮