FFmpeg入门详解之20:视频编码原理简介

news/2024/5/1 10:22:53/文章来源:https://blog.csdn.net/teachermei/article/details/126971474

视频为何需要压缩?

   原因:未经压缩的数字视频的数据量巨大

● 存储困难

    ○ 一G只能存储几秒钟的未压缩数字视频。

● 传输困难

    ○ 1兆的带宽传输一秒的数字电视视频需要大约4分钟。

 

主要压缩了什么东西?

    原始视频压缩的目的是去除冗余信息,可以去除的冗余包括:

  • 空间冗余:图像相邻像素之间有较强的相关性

  • 时间冗余:视频序列的相邻图像之间内容相似

  • 编码冗余:不同像素值出现的概率不同

  • 视觉冗余:人的视觉系统对某些细节不敏感

  • 知识冗余:规律性的结构可由先验知识和背景知识得到

数据压缩是怎么分类的?

  • 无损压缩(Lossless):

    压缩前、解压缩后图像完全一致X=X',压缩比低(2:1~3:1)。典型格式例如:Winzip,JPEG-LS。

  • 有损压缩(Lossy):

    压缩前解压缩后图像不一致X≠X',压缩比高(10:1~20:1),利用人的视觉系统的特性。典型格式例如:MPEG-2,H.264/AVC,AVS。

数据压缩分类

  ● 无损压缩(Lossless)

      ○ 压缩前解压缩后图像完全一致X=X'

      ○ 压缩比低(2:1~3:1)

      ○ 例如:Winzip,JPEG-LS

  ● 有损压缩(Lossy)

      ○ 压缩前解压缩后图像不一致X≠X'

      ○ 压缩比高(10:1~20:1)

      ○ 利用人的视觉系统的特性

      ○ 例如:MPEG-2,H.264/AVC,AVS

视频编码

定义:通过特定的压缩技术,将某个视频格式的文件转换成另一种视频格式。

视频数据在时域空域层面都有极强的相关性,这也表示有大量的时域冗余信息和空域冗余信息,压缩技术就是去掉数据中的冗余信息。

(1)去除时域冗余信息

  • 运动补偿:通过先前的局部图像来预测、补偿当前的局部图像,可有效减少帧序列冗余信息。

  • 运动表示:不同区域的图像使用不同的运动矢量来描述运动信息,运动矢量通过熵编码进行压缩(熵编码在编码过程中不会丢失信息)。

  • 运动估计:从视频序列中抽取运动信息。

通用的压缩标准使用基于块的运动估计和运动补偿。

(2)去除空域冗余信息

  • 变换编码:将空域信号变换到另一正交矢量空间,使其相关性下降,数据冗余度减小。

  • 量化编码:对变换编码产生的变换系数进行量化,控制编码器的输出位率。

  • 熵编码: 对变换、量化后得到的系数和运动信息,进行进一步的无损压缩。

什么是“编解码器”?

  • 编码器(Encoder):压缩信号的设备或程序;

  • 解码器(Decoder):解压缩信号的设备或程序;

  • 编解码器(Codec):编解码器对。

编解码的技术流程和原理

1编码器中的关键技术

  •     预测

  •     变换

  •     量化

  •     熵编码

2编解码中的关键流程

视频压缩编码技术可分为两大类

视频压缩编码技术可分为两大类:无损压缩有损压缩

(1)无损压缩

无损压缩也称为可逆编码,重构后的数据与原数据完全相同,适用于磁盘文件的压缩等。

主要采用熵编码方式,包括香农编码、哈夫曼编码和算术编码等。

<1>香农编码

    香农编码采用信源符号的累计概率分布函数来分配码字,效率不高,实用性不大,但对其他编码方法有很好的理论指导意义。

<2>哈夫曼编码

    哈夫曼编码完全依据出现概率来构造异字头的平均长度最短的码字。

    基本方法为:先对图像数据扫描一遍,计算出各种像素出现的概率,按概率的大小指定不同长度的唯一码字,由此得到一张该图像的霍夫曼码表。

    编码后的图像数据记录的是每个像素的码字,而码字与实际像素值的对应关系记录在码表中。

<3>算术编码

    算术编码是用符号的概率和编码间隔两个基本参数来描述的,在给定符号集和符号概率的情况下,算术编码可以给出接近最优的编码结果。

    使用算术编码的压缩算法通常先要对输入符号的概率进行估计,然后再编码,估计越准,编码结果就越接近最优的结果。

(2)有损压缩

有损压缩也称为不可逆编码,重构后的数据与原数据有差异,适用于任何允许有失真的场景,例如视频会议、可视电话、视频广播、视频监控等。

编码方式包括预测编码、变换编码、量化编码、混合编码等。

视频编码的意义

原始视频数据存储空间大,一个 1080P 的 7 s 视频需要 710 MB

原始视频数据传输占用带宽大,10 Mbps 的带宽传输上述 7 s 视频需要 11 分钟

而经过 H.264 编码压缩之后,视频大小只有大约7Mb ,10 Mbps 的带宽仅仅需要 800 ms ,可以满足实时传输的需求,所以从视频采集传感器采集来的原始视频势必要经过视频编码。

视频编码的基本原理

那为什么巨大的原始视频可以编码成很小的视频呢?这其中的技术是什么呢?

核心思想就是去除冗余信息

  • 空间冗余:图像相邻像素之间有较强的相关性

  • 时间冗余:视频序列的相邻图像之间内容相似

  • 编码冗余:不同像素值出现的概率不同

  • 视觉冗余:人的视觉系统对某些细节不敏感

  • 知识冗余:规律性的结构可由先验知识和背景知识得到

    视频本质上讲是一系列图片连续快速的播放,最简单的压缩方式就是对每一帧图片进行压缩,例如比较古老的 MJPEG 编码就是这种编码方式,这种编码方式只有帧内编码,利用空间上的取样预测来编码。形象的比喻就是把每帧都作为一张图片,采用 JPEG 的编码格式对图片进行压缩,这种编码只考虑了一张图片内的冗余信息压缩,

形象的比喻就是把每帧都作为一张图片,采用 JPEG 的编码格式对图片进行压缩,这种编码只考虑了一张图片内的冗余信息压缩,如图 1,绿色的部分就是当前待编码的区域,灰色就是尚未编码的区域,绿色区域可以根据已经编码的部分进行预测(绿色的左边,下边,左下等)。

        但是帧和帧之间因为时间的相关性,后续开发出了一些比较高级的编码器可以采用帧间编码,简单点说就是通过搜索算法选定了帧上的某些区域,然后通过计算当前帧和前后参考帧的向量差进行编码的一种形式,通过下面两个图 2 连续帧我们可以看到,滑雪的同学是向前位移的,但实际上是雪景在向后位移,P 帧通过参考帧(I 或其他 P 帧)就可以进行编码了,编码之后的大小非常小,压缩比非常高。

编码标准

定义:为保证编码的正确性,编码要规范化、标准化,所以就有了编码标准。

研制视频编码标准的有两大正式组织:ISO/IEC(国际标准化组织)ITU-T(国际电信联盟通信标准部)

  • ISO/IEC 制定的编码标准有:MPEG-1、MPEG-2、MPEG-4、MPEG-7、MPEG-21 和 MPEG-H 等。

  • ITU-T 制定的编码标准有:H.261、H.262、H.263、H.264 和 H.265 等。

    MPEG-x 和 H.26x 标准的视频编码都是采用有损压缩的混合编码方式,主要区别在于处理图像的分辨率、预测精度、搜索范围、量化步长等参数的不同,所以其应用场合也不同。

主流的视频编码标准:

  • MPEG-2

  • MPEG-4 Simple Profile

  • H.264/AVC/H.265/HEVC

  • AVS

  • VP8/VP9

标准化组织:

  • ITU:International Telecommunications Union

  • ISO:International Standards Organization

MPEG-x 系列:

(1)MPEG-1

MPEG-1 共 5 部分。

第 2 部分视频编码方案,规定了逐行扫描视频的编码方案。

第 3 部分音频编码方案,将音频流的压缩分为 3 层并依次增大压缩比,广为流传的 MP3(MPEG-1 Layer 3)就是按照此部分编码方案压缩之后的文件格式。

(2)MPEG-2

MPEG-2 共 11 个部分,在 MPEG-1 的基础上提高了码率和质量。

第 2 部分视频编码方案,规定了隔行扫描视频的编码方案,是和 ITU-T 共同开发的,ITU-T 称其为 H.262。

第 3 部分音频编码方案,延续了 MPEG-1 的 3 层压缩方案,压缩后文件格式仍未 MP3,但在压缩算法上有所改进。

第 7 部分首次提出 AAC(MPEG Advanced Audio Coding)编码,目的以更小的容量和更好的音质取代 MP3 格式。

(3)MPEG-4

MPEG-4 共 27 个部分,更加注重多媒体系统的交互性和灵活性。

第 3 部分音频编码方案,优化了 AAC 编码算法,并在推出后逐渐取代 MP3,比如和视频封装在一起的音频优先考虑 AAC 格式,但就民用而言大部分还是使用 MP3 格式。

第 10 部分提出 AVC(Advanced Video Coding)编码,是和 ITU-T 共同开发的,ITU-T 称其为 H.264。

第 14 部分提出了 MP4 格式封装,官方文件后缀名是 ".mp4",还有其他的以 mp4 为基础进行的扩展或缩水版本的格式,包括:M4V, 3GP, F4V 等。

(4)MPEG-7

MPEG-7 不同于 MPEG-1、MPEG-2、MPEG-4,它不是音视频压缩标准。

MPEG-7 被称为 "多媒体内容描述接口",目的就是产生一种描述多媒体信息的标准,并将该描述与所描述的内容相联系,以实现快速有效的检索。

(5)MPEG-12

MPEG-12 其实就是一些关键技术的集成,通过这种集成环境对全球数字媒体资源进行管理,实现内容描述、创建、发布、使用、识别、收费管理、版权保护等功能。

(6)MPEG-H

MPEG-H 包含了 1 个数字容器标准、1 个视频压缩标准、1 个音频压缩标准和 2 个一致性测试标准。

其中视频压缩标准为高效率视频编码(HEVC),和 ITU-T 联合开发,相比 H.264/MPEG-4 AVC 数据压缩率增加了 1 倍。

H.26x 系列:

(1)H.261

H.261 是第一个实用的数字视频编码标准,使用了混合编码框架,包括了基于运动补偿的帧间预测,基于离散余弦变换的空域变换编码,量化,zig-zag 扫描和熵编码。

H.261 的设计相当成功,之后的视频编码国际标准基本上都是基于 H.261 的设计框架,包括 MPEG-1,MPEG-2/H.262,H.263,甚至 H.264。

(2)H.262

H.262 由 MPEG-1 扩充而来,支持隔行扫描,在技术内容上和 MPEG-2 视频标准一致,DVD 就是采用了该技术。

(3)H.263

H.263 是一种用于视频会议的低码率视频编码标准,在 H.261 基础上发展而来。

与 H.261 相比采用了半象素的运动补偿,并增加了 4 种有效的压缩编码模式,在低码率下能够提供比 H.261 更好的图像效果。

H.263 于 1995 年推出第一版,后续在 1998 年和 2000 年还推出了第二版 H.263+、第三版 H.263++ 。

(4)H.264

H.264 又称为 MPEG-4 第 10 部分,即 MPEG-4 AVC,它是一种面向块,基于运动补偿的视频编码标准。

于 2003 年正式发布,现在已经成为高精度视频录制、压缩和发布的最常用格式之一。

H.264 可以在低码率情况下提供高质量的视频图像,相比 H.263 可节省 50% 的码率。

相比 H.263,H.264 不需设置较多的编码选项,降低了编码的复杂度。

H.264 可以根据不同的环境使用不同的传输和播放速率,并且提供了丰富的错误处理工具,可以很好的控制或消除丢包和误码。

H.264 性能的改进是以增加复杂性为代价而获得的,H.264 编码的计算复杂度大约相当于 H.263 的 3 倍,解码复杂度大约相当于 H.263 的 2 倍。

H.264 协议中定义了三种帧,分别为 I 帧、P 帧以及 B 帧

<1>I 帧

I帧即帧内编码帧、关键帧,可以理解为一帧画面的完整保留,解码时只需要本帧数据就可以完成,不需要参考其他画面,数据量比较大。

<2>P 帧

P帧即前向预测编码帧,记录当前帧跟上一关键帧(或P帧)的差别,解码时依赖之前缓存的画面,叠加上本帧定义的差别,才能生成最终画面,数据量较 I 帧小很多。

<3>B 帧

B帧即双向预测编码帧,记录当前帧跟前后帧的差别,解码时依赖前面的I帧(或P帧)和后面的P帧,数据量比I帧和P帧小很多。

数据压缩比大约为: I帧:P帧:B帧 = 7:20:50,可见 P 帧和 B 帧极大的节省了数据量,节省出来的空间可以用来多保存一些 I 帧,以实现在相同码率下,提供更好的画质。

(5)H.265

H.265 即高效视频编码(High Efficiency Video Coding ,简称 HEVC),于 2013 年正式推出。

H.265 编码架构和 H.264 相似,主要也包含,帧内预测、帧间预测、转换、量化、去区块滤波器、熵编码等模块。

H.265 编码架构整体被分为编码单位、预测单位和转换单位。

H.265 在 H.264 的基础之上,使用先进的技术用以改善码流、编码质量、延时和算法复杂度之间的关系,达到最优化设置。

在码率减少 51-74% 的情况下,H.265 编码视频的质量还能与 H.264 编码视频近似甚至更好。

H.265 可以在有限带宽下传输更高质量的网络视频,智能手机、平板机等移动设备将能直接在线播放 1080p 的全高清视频,让网络视频跟上了显示屏 “高分辨率化” 的脚步。

H.264编码介绍

IPB帧

I帧:帧内编码帧(intra picture),采用帧内压缩去掉空间冗余信息。

P帧:前向预测编码帧(predictive-frame),通过将图像序列中前面已经编码帧的时间冗余信息来压缩传输数据量的编码图像。参考前面的I帧或者P帧。

B帧:双向预测内插编码帧(bi-directional interpolated prediction frame),既考虑源图像序列前面的已编码帧,又顾及源图像序列后面的已编码帧之间的冗余信息,来压缩传输数据量的编码图像,也称为双向编码帧。参考前面一个的I帧或者P帧及其后面的一个P帧。 

PTS和DTS

    DTS(Decoding Time Stamp)是标识读入内存中bit流在什么时候开始送入解码器中进行解码。也就是解码顺序的时间戳。

    PTS(Presentation Time Stamp)用于度量解码后的视频帧什么时候被显示出来。在没有B帧的情况下,DTS和PTS的输出顺序是一样的,一旦存在B帧,PTS和DTS则会不同。也就是显示顺序的时间戳。

GOP

    即Group of picture(图像组),指两个I帧之间的距离,Reference(参考周期)指两个P帧之间的距离。

    一个I帧所占用的字节数大于一个P帧,一个P帧所占用的字节数大于一个B帧。所以在码率不变的前提下,GOP值越大,P、B帧的数量会越多,平均每个I、P、B帧所占用的字节数就越多,也就更容易获取较好的图像质量;Reference越大,B帧的数量越多,同理也更容易获得较好的图像质量。

简而言之:

字节大小:I > P > B

解码顺序:I -> P -> B

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

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

相关文章

结构体的理解

结构体前言结构体&#xff1f;定义变量如何赋初值&#xff1f;结构体的访问结构体的嵌套使用注意事项结构体的大小内存对齐默认对齐数的修改为什么存在内存对齐&#xff1f;结构体传参位段什么是位段&#xff1f;位段的内存分配深入剖析位段“存”数据位段的“取”位段的跨平台…

Idea工具中,使用Mapper对象有红线

背景&#xff1a; IDEA开发工具&#xff0c;springboot mybatis项目 &#xff08;这个是不需要改的&#xff0c;也不算是问题&#xff0c;因为项目并不会报错&#xff0c;只是作者好奇找了下问题&#xff0c;并记录一下&#xff09; 问题描述 mapper对象在service层有红线&a…

8 位卷王!总结 1135 页 Java 核心面试手册,硬钢 BATJ 一线大厂面试官

又到了金九银十求职季&#xff01; HR 开始拼业绩&#xff0c;招聘网站也开始释放出大量岗位&#xff0c;转行跳槽、毕业求职的人都开始行动起来&#xff01; 此时&#xff0c;对于大多数程序员来说&#xff0c;最大的目标就是&#xff1a;进大厂&#xff01; 大厂为什么这么…

ArcGIS Map Sdk for unity使用

本文主要讨论离线模式。 目录 1.底图tpk文件制作 2.3D图层slpk文件制作 3.导入使用 1.底图tpk文件制作 软件&#xff1a;91卫图助手 Arcgis Pro 操作步骤&#xff1a; 打开91卫图助手&#xff0c;更换底图为高德影像/腾讯影像。(百度影像的地理投影格式有自身加密&#xff…

剖析容器运行时

特别说明&#xff1a;一部分转载自大佬文章&#xff1a;https://blog.csdn.net/weixin_39246554/article/details/120926174&#xff08;不得不说大佬总结的真好啊&#xff01;&#xff01;&#xff01;&#xff09; 剩下的听老王公开课总结。 k8s官网关于运行时的说明&#x…

Typora Mac版本安装Pandoc导出文件为word格式(windows可通用)

我们在用Typora时导出的格式常常为PDF格式&#xff0c;但是如果我们要将文件导出为word格式的时候却需要安装插件PanDoc&#xff0c;我目前使用的是Mac版本的Typora&#xff0c;给大家分享一下如何安装Pandoc以及导出word格式文件。 1.根据Typora中的说明进入GitHub下载Pandoc…

Maven安装配置

Maven安装配置一、下载 apache-maven-3.6.1Maven官网:https://maven.apache.org/download.cgi(或)直接下载maven-3.8.6:https://dlcdn.apache.org/maven/maven-3/3.8.6/binaries/apache-maven-3.8.6-bin.zip解压到当前文件夹二、配置 maven 环境变量右键此电脑 - 属性 - 高级…

MySQL学习——执行计划

MySQL中可以通过explain关键字模拟优化器执行SQL语句,从而知道MySQL是如何处理SQL语句的,这将有利我们做代码的优化。 1、MySQL查询执行过程客户端向MySQL服务器发送一条查询请求 服务器首先检查查询缓存,若缓存中存在,则立刻返回存储在缓存中的结果。否则进入下一阶段 服务…

扫码挪车小程序源码专业版上线了

1 、做挪车码之前&#xff0c;先说一些我个人的观点&#xff0c;大家一起探讨学习交流。 2 、挪车码已经是普遍已久的项目&#xff0c;其核心主要在于解决了车主的隐私问题。 3 、观察过目前市面上所有的挪车码系统&#xff0c; 公司也购买了一套测试了完整流程&#xff0c;盈…

【图像分割】基于matlab萤火虫算法图像分割【含Matlab源码 2136期】

一、获取代码方式 获取代码方式1: 完整代码已上传我的资源:【图像分割】基于matlab萤火虫算法图像分割【含Matlab源码 2136期】 点击上面蓝色字体,直接付费下载,即可。 获取代码方式2: 付费专栏图像处理(Matlab) 备注: 点击上面蓝色字体付费专栏图像处理(Matlab),…

parted分区步骤

parted分区步骤概述 通常我们用的比较多的一般都是fdisk工具来进行分区,但是现在由于磁盘越来越廉价,而且磁盘空间越来越大;而fdisk工具他对分区是有大小限制的,它只能划分小于2T的磁盘。但是现在的磁盘空间很多都已经是远远大于2T了,甚至达到2.5T和3T,那要怎么办能,有两…

路径规划总结(一)

第三讲 路径规划 ps:排版有一些问题&#xff0c;懒得改了&#xff0c;见Github 一、导航规划简介 导航规划&#xff1a;在给定环境的全局或局部知识以及一个或者一系列目标位置的条件下&#xff0c;使机器人能够根据知识和传感器感知信息高效可靠地到达目标位置。 导航规划类…

告别传统FTP!该了解一下替代FTP的新产品了

在某些情况下&#xff0c;需要从服务器上传&#xff08;或下载&#xff09;文件。多年来&#xff0c;最流行的文件传输方法是文件传输协议&#xff08;FTP)。FTP的一大优点是它支持断点续传。FTP收获了方便性&#xff0c;却在安全性上有所欠缺。FTP未加密&#xff0c;这意味着格…

Cache-Augmented Inbatch Importance Resampling for Training Recommender Retriever

目录概符号说明启发本文方法BIR (inbatch importance resampling)XIR (Cache-Augmented Resampling)Chen J., Lian D., Li Y., Wang B., Zheng K. and Chen E. Cache-augmented inbatch importance resampling for training recommender retriever. In Advances in Neural Info…

一条sql了解MYSQL的架构设计

1 前言 对于一个服务端开发来说 MYSQL 可能是他使用最熟悉的数据库工具&#xff0c;然而&#xff0c;大部分的Java工程师对MySQL的了解和掌握程度&#xff0c;大致就停留在这么一个阶段:它可以建库、建表、建索引&#xff0c;然后就是对里面的数据进行增删改查&#xff0c;语句…

MacOS/OSX docker修改已运行容器参数的方法

比如我们刚刚docker run了一个容器,然后里面已经配置了一些信息,装了一些东西,然后我发现我忘记了挂载一个文件夹,怎么修改他们呢? 第一个方法: export容器为镜像再import这个镜像 第二个方法: 把现有的容器提交成镜像,然后重新运行. 以上两种方法都相当于你把一台电…

配置服务器入栈

配置服务器入栈 上回传送门 书接上回 登录我们的服务器管理页面 点击入站列表->点击号 配置如下 注意&#xff1a; 协议是vless 域名是cloudflare上我们设置的二级域名 公钥文件路径就是我们SHH工具上root 文件夹下cret 文件夹下面的证书 公钥名就是我们的证书路径 密钥…

Spring Cloud Alibaba现在还值不值学 ?

6年前面试最常问的并且可以顺利拿到高薪的技能是 Dubbo &#xff0c;2年前面试&#xff0c;只要你简历上有 Spring Cloud 项目的相关经验&#xff0c;肯定会打动面试官&#xff0c;现在呢&#xff1f;恐怕简历上有Dubbo和简单的Spring Cloud技术和经验是无法让面试官高看你的。…

Eureka注册中心以及Ribbon负载均衡

Eureka注册中心 远程调用的问题 1、服务消费者改如何获取服务提供者的地址消息&#xff1f; 2、如果服务提供者有多个&#xff0c;消费者如何进行选择&#xff1f; 3、 消费者如何得知服务提供者的健康状态&#xff1f; Eureka的作用 服务每隔30s给Eureka发送心跳&#xff0c;…

一个技术创业者的自白:三条关于 “选择” 的建议

本文作者 Wyze CTO 刘天强。内容源自「声网开发者创业讲堂第一期」的演讲分享。创业方向:兴趣 VS 趋势 大家在创业的时候首先要选择的是 “做什么”?如何平衡个人特长、兴趣以及风口是创业者面临的难题。我在第一次创业的时候,做了一家主打图像识别 API 的公司 Orbeus,这家…