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

news2024/12/27 20:10:32

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

本期我们介绍视频编码格式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更为常用。

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

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

相关文章

4:File类与IO流

文章目录 File类1:引入:2:对文件进行操作3:对目录/文件夹进行操作 IO流1:引入:2:字符输入 / 出流FileReader 与 FileWriter3:用try - catch - finally 处理异常4:几个常见…

易趋受邀出席CIAS 2023中国数智汽车峰会

2023年5月18日-19日,由中国电子商会、中国汽车信息化推进产业联盟、信息侠联合主办,上海市交通工程协会、 浙江省数字经济联合会联合支持的CIAS 2023第二届中国数智汽车峰会在杭州千岛湖顺利召开。易趋受邀出席此次会议,并发表了主题演讲。 &…

软件架构: 一切皆有代价

软件架构必须随着业务发展而演进,否则就会成为业务的阻碍。但架构本身在发展过程中很容易逐渐腐化,堆积大量技术债务,因此在软件发展过程中始终保持架构愿景非常重要。原文: Software architecture — Paying the Price for Neglecting it 在…

数组的玩法比我以为的要多

数组是最基本的数据结构,关于数组的面试题也屡见不鲜,本文罗列了一些常见的面试题,仅供参考。目前有以下18道题目。 数组求和 求数组的最大值和最小值 求数组的最大值和次大值 求数组中出现次数超过一半的元素 求数组中元素的最短距离 求…

2023.05.28 homework

求三角形最长的边的长度 1)任意两边之和大于第三边; 2)任意两边之差小于第三边; 已知最短边13cm,其他两边肯定都等于大于13cm,两边只差肯定要小于13cm;简单推导就是枚举呗。 13cm 14cm 33cm&a…

web --- javascript(01)-- 介绍、变量和数据类型

JavaScript w3c:三层分离 结构层:HTML 表示层:CSS 行为层:JavaScript 介绍 (1)作用: 数据校验网页特效数据交互服务器端编程(NodeJS) (2)javas…

【PS小贴士】PS项目交货(CNS0/VL02N)-和销售订单交货(VL01N/VL02N)的区别点

目前一家公司在进行企业信息化建设,作为PS顾问有幸参与到其中。真是做的项目越来越多,经历的人越来越多,每个项目的感触也不同。不论是方案,还是项目上一起努力的小组成员、以及项目组顾问。哈哈哈哈哈哈哈哈...... 同样&#xf…

Linux 系统上的库文件生成与使用

1.库文件 库是一组预先编译好的方法的集合。Linux系统存储的库的位置一般在:/lib 和 /usr/lib。 在 64 位的系统上有些库也可能被存储在/usr/lib64 下。库的头文件一般会被存储在 /usr/include 下或其子目录下。 库有两种,一种是静态库,其…

分享几个国内免费可用的ChatGPT镜像【无需梯子】

文章目录 1.什么是ChatGPT2.ChatGPT的基础技术3.ChatGPT工作原理4.ChatGPT应用场景5.ChatGPT局限性6.ChatGPT的未来发展7.国内免费ChatGPT镜像写在最后 ChatGPT国内能用吗:ChatGPT在国内是无法使用的。你肯定要问我怎样才能体验到ChatGPT的神奇魔力呢?文…

【Spring】— 映射文件

映射文件 映射文件是MyBatis框架中十分重要的文件。在映射文件中&#xff0c;<mapper>元素是映射文件的根元素&#xff0c;其他元素都是它的子元素。映射文件中的主要元素如下所示。 <mapper><!--映射查询语句&#xff0c;可自定义参数&#xff0c;返回结果集…

Python日期带时区转换工具类总结

文章目录 1.背景2. 遇到的坑3. 一些小案例3.1 当前日期、日期时间、UTC日期时间3.2 昨天、昨天UTC日期、昨天现在这个时间点的时间戳3.3 日期转时间戳3.4 时间戳转日期3.5 日期加减、小时的加减 4. 总结5. 完整的编码 1.背景 最近项目是国际项目&#xff0c;所以需要经常需要用…

docker 解析DNS失败

问题现象&#xff1a; 我之前在docker里部署的容器&#xff0c;今天突然访问不了了&#xff0c;一开始我以为是容器的问题&#xff0c;将容器restart&#xff0c;销毁重建&#xff0c;都没有解决。 最后准备重启docker service&#xff0c;在重启之前&#xff0c;看了一眼dock…

接口自动化测试,从常规到动态再到全局断言,Postman让你居家必备!

目录 引言&#xff1a; 常规断言 动态参数断言 全局断言 总结 引言&#xff1a; Postman是一款非常流行的API接口测试工具&#xff0c;它以其易用性和强大的功能得到了广泛的应用。其中Postman断言功能是我们进行接口自动化测试时非常关键的一个环节。在接口测试中&#…

【正则入门】

语法 . &#xff08;点&#xff09; 匹配除换行符&#xff08;\n、\r&#xff09;之外的任何单个字符&#xff0c;相等于 [^\n\r]。 [\s\S] 匹配所有。\s 是匹配所有空白符&#xff0c;包括换行&#xff0c;\S 非空白符&#xff0c;不包括换行。 \d [0-9] \D 非数字&#xff1…

CISCN2023-Crypto

CISCN2023-Crypto 基于国密SM2算法的密钥分发可信度量Sign_in_passwdBB84badkey1 基于国密SM2算法的密钥分发 非预期&#xff0c;直接search能找到明文 curl -d "nameha&schoolhznu&phone110" http://123.56.244.196:30817/api/logincurl -d "id984ae…

【线程池】实现多线程并发定时任务

文章目录 一、为什么需要配置多线程定时任务二、单线程定时任务三、多线程定时任务 一、为什么需要配置多线程定时任务 springboot中通过注解 Scheduled 注解的方法都是一个定时执行的任务, 默认都是单线程的,就算是多个定时任务也是在同一个单线程(scheduled-1)中运行, 如果其…

离线版Gerber查看器+PCB/PCBA检测神器新功能!

一、CAM离线版——华秋CAM│专业Gerber查看器 公司电脑不能连接网络&#xff1f;不慌&#xff0c;我们完全离线且无需账号登录&#xff01; 磁盘空间不够拒绝下载&#xff1f;别怕 &#xff0c;我们安装包仅20M可随便分享&#xff01; 不会使用CAM350导入Gerber&#xff1f;没事…

APP开发死亡潮来临 小程序是否会取而代之?

移动互联网的发展&#xff0c; APP开发行业也迎来了它的大时代。据有关数据显示&#xff0c;2017年上半年国内新增的 App数量达到了创纪录的449万款&#xff0c;用户使用时长超过了200亿分钟。移动互联网已成为名副其实的“流量”产业&#xff0c;也因此诞生出一大批 APP开发公…

PostgreSQL 基础(一)-- 新手教程

PostgreSQL 12 官网 github 世界上最先进的开源关系数据库 1、新手入门 1.1 安装 当然&#xff0c;在使用PostgreSQL之前&#xff0c;你需要安装它。PostgreSQL可能已经安装在您的站点上&#xff0c;或者因为它包含在您的操作系统发行版中&#xff0c;或者因为系统管理员已…

【了不起的芯片 - 读书笔记】CPU 的制作流程 ( 晶圆制作 | 光刻机光刻流程 | 蚀刻过程 | 涂层过程 | 重复上述步骤若干次 | 芯片封装 )

文章目录 一、晶圆制作二、光刻机光刻流程三、蚀刻过程四、涂层过程五、重复上述步骤若干次六、芯片封装 一、晶圆制作 晶圆制作是半导体芯片制造的关键过程&#xff0c;它涉及将硅晶片&#xff08;或其他半导体材料&#xff09;转化为可以用于集成电路制造的基础材料。下面是晶…