H264基本原理

文章目录

  • 引子 - 为什么要视频压缩
  • I、 P、 B帧
  • GOP图像序列
  • H264编码介绍
  • 其它
    • 为什么视频格式一般为YUV
    • H264 画质级别
  • 参考资料

引子 - 为什么要视频压缩

一张为720x480的图像,用YUV420P的格式来表示, 其大小为: 720 * 480 * 1.5 约等于0.5MB。 如果是25帧, 10分钟的数据量 0.5M * 10 * 60 * 25 = 7500MB 7GB多, 视频编码压缩的目的是降低视频数据大小,方便存储和传输。

I、 P、 B帧

在 H264 协议中定义了三类帧

  • I 帧:自带全部信息的独立帧,无需参考其它图像便可独立进行解码。采用帧内压缩技术。I帧是最完整的画面,所以I帧的压缩率不高,占用的空间最大,解码最快。
  • P 帧:向前参考帧,在压缩时,需要参考前面的I帧或P帧才能进行编码。P帧需要依赖前面的帧,所以P帧压缩率比较高,占用的空间较小,解码较慢。
  • B 帧:双向参考帧,采用帧间压缩技术。B帧需要同时参考前面的帧和后面的帧(I帧或P帧),所以B帧的压缩率它的压缩率最高,占用空间最小,但解码较慢,会有延迟。

简单来说就是,I帧可以立即解析,P帧需要参考前面的帧进行解析,而B帧则必须参考前面的帧和后面的帧才能解析出来。

下面简单介绍IBP帧播放时的情况,参考下图:

在这里插入图片描述

解码顺序是指在解码处理时的顺序,例如当遇到一个B帧时,此时不能马上解码,需要先解码后面的P帧,此时的B帧才可以根据前后两个帧进行解码。而这个P帧是根据前面的I帧进行解码的。而显示顺序是指,在解码后,按照原来组织的图像顺序进行显示。

而B帧在等待解码的过程就会造成短时间的延迟,所以在直播场景下一般都会避免使用B帧。

GOP图像序列

GOP(Group of picture)是指一组由一组图像组成的序列,可以简单理解为就是一组连续的图像,参考下图理解:

在这里插入图片描述

在 H.264 中,图像以GOP序列为单位进行组织。

而一组GOP中的第一个图像叫做 IDR 图像(立即刷新图像), IDR 图像都是 I 帧图像。一般来说,一组GOP中只有一个I帧。而GOP的长度越大,视频压缩效率越高,但视频质量和视频流恢复能力也越差,反之亦然。

在这里插入图片描述

其中,GOP有两种:

  • Closed GOP:对GOP外部的帧是封闭的。一个属于Closed GOP的帧只能参考这个GOP之内的帧。

  • Open GOP:与Closed GOP相反, Open GOP内部的帧可以参考其他GOP中的帧。

一般来说,一个视频中的GOP基本上都是Closed GOP,这种Closed GOP的好处是当解码器解码到 IDR 图像时,立即将参考帧队列清空,将已解码的数据全部输出或抛弃,重新查找参数集,开始一个新的序列。这样,如果前一个序列出现重大错误,在这里可以获得重新同步的机会。IDR 图像之后的图像永远不会使用IDR之前的图像的数据来解码。

H264编码介绍

编码就是为了压缩,而视频压缩一般就是根据冗余信息去做压缩的,一般来说,视频里面的冗余信息包括:空间冗余、时间冗余、视觉冗余、编码冗余。

在这里插入图片描述

  • 空间冗余:图像相邻像素之间有较强的相关性,比如一帧图像划分成多个 16x16 的块之后,相邻的块很多时候都有比较明显的相似性。
  • 时间冗余:视频序列的相邻前后帧图像之间内容相似,比如帧率为 25fps 的视频中前后两帧图像相差只有 40ms,前后两张图像的变化较小,相似性很高。
  • 视觉冗余:我们的眼睛对某些细节不敏感,对图像中高频信息的敏感度小于低频信息的。可以去除图像中的一些高频信息,人眼看起来跟不去除高频信息差别不大(有损压缩)。
  • 编码冗余(信息熵冗余):一幅图像中不同像素出现的概率是不同的。对出现次数比较多的像素,用少的位数来编码。对出现次数比较少的像素,用多的位数来编码,能够减少编码的大小。

对于具体是如何编码的这里就不再过多介绍了,详情可以参考:H264编码原理【转载】

其它

为什么视频格式一般为YUV

视频编码是对一张张图像来进行的。 我们知道彩色图像的格式是 RGB 的, 但RGB 三个颜色是有相关性的。
采用YUV格式, 利用人对图像的感觉的生理特性, 对于亮度信息比较敏感, 而对于色度信息不太敏感, 所以视频编码是将Y分量和UV分量分开来编码的, 并且可以减少UV分量,比如我们之前说的YUV420P 。

H264 画质级别

H.264有四种画质级别,分别是baseline, extended, main, high:

  1. Baseline Profile:基本画质。支持I/P 帧,只支持无交错(Progressive)和CAVLC;
  2. Extended profile:进阶画质。支持I/P/B/SP/SI 帧,只支持无交错(Progressive)和CAVLC;(用的少)
  3. Main profile:主流画质。提供I/P/B 帧,支持无交错(Progressive)和交错(Interlaced),也支持CAVLC 和CABAC 的支持;
  4. High profile:高级画质。在main Profile 的基础上增加了8x8内部预测、自定义量化、 无损视频编码和更多的YUV 格式;

H.264 Baseline profile、Extended profile和Main profile都是针对8位样本数据、4:2:0格式(YUV)的视频序列。在相同配置情况下,High profile(HP)可以比Main profile(MP)降低10%的码率。
根据应用领域的不同,Baseline profile多应用于实时通信领域,Main profile多应用于流媒体领域,High profile则多应用于广电和存储领域。

在这里插入图片描述

参考资料

  1. 视频编码原理
  2. H264 基础原理介绍
    7%B4%E9%A2%84%E6%B5%8B)
  3. H264 基础原理介绍
  4. H264编码原理(帧内压缩技术)

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

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

相关文章

【深度学习与NLP】——注意力机制

1 注意力机制 1.1 学习目标 了解什么是注意力计算规则以及常见的计算规则.了解什么是注意力机制及其作用.掌握注意力机制的实现步骤. 什么是注意力: 我们观察事物时,之所以能够快速判断一种事物(当然允许判断是错误的), 是因为我们大脑能够很快把注意力放在事物最具…

使用Python和Flask构建简单的RESTful API

目录 环境准备 创建Flask应用 运行Flask应用 扩展功能:处理POST请求 注意事项 在Web开发中,RESTful API是一种广泛使用的架构风格,它允许客户端和服务器之间通过HTTP请求进行通信。Python的Flask框架以其轻量级和易于上手的特点&#xf…

XML动态sql查询当前时间之前的信息报错

如图&#xff0c;sql语句在数据库里可以正常运行但是再XML文件不可以正常运行&#xff0c;报错。 原因&#xff1a;在XML中小于号"<"是会被默认认定成文一个标签的开始&#xff0c;所以用小于号就会报错。 解决办法&#xff1a; 1.把表达式反过来改成大于号 2…

linux 源码部署polardb-x 错误汇总

前言 在linux 源码部署polardb-x 遇到不少错误&#xff0c;特在此做个汇总。 问题列表 CN 启动报错 Failed to init new TCP 详细错误如下 Caused by: Failed to init new TCP. XClientPool to my_polarx#267b21d8127.0.0.1:33660 now 0 TCP(0 aging), 0 sessions(0 runni…

MySQL的字符集配置

MySQL的字符集配置 创建database创建表插入数据查看字符集配置查看字符集的比较规则关于字符集的配置总结 创建database create database dbtest1; show databases;use dbtest1;创建表 create table employees(id int,name varchar(15));插入数据 insert into employees valu…

PDF转换器推荐:轻松将图片批量转为PDF

高质量的图片与文档管理已经逐渐成为了我们日常工作中不可或缺的一部分。为了防止图片在传输的过程中被压缩&#xff0c;我经常将他们转换为PDF格式。这次我给你推荐几个我常用的图片转PDF的小工具吧。 1.福昕PDF转换大师 链接一下>>https://www.pdf365.cn/pdf2word/ …

牛客JS题(三十二)Proxy计数器

注释很详细&#xff0c;直接上代码 涉及知识点&#xff1a; Proxy的基础使用set、deleteProperty及deleteProperty用法 题干&#xff1a; 我的答案 <!DOCTYPE html> <html><head><meta charsetutf-8></head><body><script type"t…

【C++】类和对象 ——中

1. 赋值运算符重载 1.1 运算符重载 • 当运算符被⽤于类类型的对象时&#xff0c;C语⾔允许我们通过运算符重载的形式指定新的含义。C规定类类型对象使⽤运算符时&#xff0c;必须转换成调⽤对应运算符重载&#xff0c;若没有对应的运算符重载&#xff0c;则会编译报错。 •…

clion开发stm32f4系列(2)————使用rt-thread提供的libc库时遇到的问题

CMakeList文件配置 问题1 解决方式 问题2&#xff08;在链接过程中&#xff0c;出现重复定义&#xff09; 解决 编译结果(解决ok)

android10 系统定制:增加应用锁功能

实现效果如下,上锁应用在桌面或最近任务打开弹出解锁界面,需要解锁成功才能打开应用。解锁界面可点击返回或Home键关闭,非上锁应用可直接打开。 基本思路:拦截系统应用启动,判断应用是否在锁住状态,弹出解锁Window。解锁完成后再正常启动应用。分为从桌面启动和最近任务…

量化投资策略与技术学习PART2:量化选股之风格轮动

市场上的投资者是有偏好的&#xff0c;有时候偏好于价值股&#xff0c;有时候偏好于成长股&#xff0c;有时偏于大盘&#xff0c;有时又偏于小盘&#xff0c;由于投资者的这种不同的交易行为&#xff0c;形成了市场风格&#xff0c;本节主要研究如何判断市场风格&#xff0c;以…

【C语言】预处理详解(下)

文章目录 前言6. 宏和函数的对比7. #和##7.1 #运算符7.2 ##运算符&#xff08;运用较少&#xff0c;了解即可&#xff09; 8. 命名的约定9. #undef &#xff08;了解即可&#xff09;10. 条件编译&#xff08;重点&#xff09;11. 头文件的包含11.1 头文件被包含的方式&#xf…

House of Rabbit

House of Rabbit 介绍&#xff1a; House of rabbit 是一种伪造堆块的技术&#xff0c;早在 2017 年已经提出&#xff0c;但在最近两个月才在 CTF 比赛中出现。我们一般运用在 fastbin attack 中&#xff0c;因为 unsorted bin 等其它的 bin 有更好的利用手段。 原理&#x…

接口基础知识6:详解http request body(一篇讲完常见请求体)

课程大纲 一、定义 HTTP请求体&#xff08;HTTP Request body&#xff09;&#xff1a;HTTP请求消息的可选部分&#xff0c;仅在请求方法支持且需要发送数据时使用。 POST方法、PUT方法有请求体&#xff0c;GET和HEAD方法没有请求体。 请求头和请求体之间会有一个空行&#…

【C++】面向对象三大特性之—— 继承 | 详解

目录 继承的概念 继承语法格式 继承方式 隐藏 继承下来的成员和父类是不是同一份 隐藏 基类和派生类对象赋值转换 继承中的作用域 派生类的默认成员函数 构造 拷贝构造 赋值重载 析构 继承与友元 继承与静态成员 菱形继承及菱形虚拟继承 多继承 菱形继承 菱形…

探索Linux -- 冯诺依曼体系、初始操作系统、初始进程、fork函数

一、冯诺依曼体系结构 1、概念 冯诺依曼结构也称普林斯顿结构&#xff0c;是一种将程序指令存储器和数据存储器合并在一起的存储器结构。 最早的计算机器仅内含固定用途的程序。若想要改变此机器的程序&#xff0c;就必须更改线路、更改结构甚至重新设计此机器。当然最早的计…

三防平板满足多样化定制为工业领域打造硬件解决方案

在当今工业领域&#xff0c;数字化、智能化的发展趋势日益显著&#xff0c;对于高效、可靠且适应各种复杂环境的硬件设备需求不断增长。三防平板作为一种具有坚固耐用、防水防尘防摔特性的工业级设备&#xff0c;正以其出色的性能和多样化的定制能力&#xff0c;为不同行业的应…

8.7 Day15 匿名用户访问FTP与日志查看

查看配置文件 vsftpd是一个认证文件&#xff0c;意味着ftp是通过vsftpd这个认证文件来对我们输入的用户名和密码进行认证的&#xff0c;那么这个认证文件在哪里呢&#xff1f; 所在位置如下&#xff1a; 查看文件配置内容 默认通过系统来验证&#xff0c;但现在我们欲做一个类…

Flink-DataWorks第二部分:数据集成(第58天)

系列文章目录 数据集成 2.1 概述 2.1.1 离线&#xff08;批量&#xff09;同步简介 2.1.2 实时同步简介 2.1.3 全增量同步任务简介 2.2 支持的数据源及同步方案 2.3 创建和管理数据源 文章目录 系列文章目录前言2. 数据集成2.1 概述2.1.1 离线&#xff08;批量&#xff09;同步…

VulnHub靶场-VulnOS:2

1.环境准备 下载地址&#xff1a;VulnOS: 2 ~ VulnHub 前言&#xff1a;由于我们下载的靶场是vdi文件&#xff0c;而我使用的是虚拟机&#xff0c;我们需要安装VirtualBox将vdi文件转换成虚拟机的vmdk文件vdi转vmdk VirtualBox与VMware硬盘格式转换及使用方法-CSDN博客 虚拟…