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

视频为何需要压缩?

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

● 存储困难

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

● 传输困难

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

FFmpeg入门详解之20:视频编码原理简介_第1张图片

 

主要压缩了什么东西?

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

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

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

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

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

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

数据压缩是怎么分类的?

  • 无损压缩(Lossless):

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

  • 有损压缩(Lossy):

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

FFmpeg入门详解之20:视频编码原理简介_第2张图片

数据压缩分类

  ● 无损压缩(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编解码中的关键流程

FFmpeg入门详解之20:视频编码原理简介_第3张图片

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

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

(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 帧)就可以进行编码了,编码之后的大小非常小,压缩比非常高。

FFmpeg入门详解之20:视频编码原理简介_第4张图片

FFmpeg入门详解之20:视频编码原理简介_第5张图片

FFmpeg入门详解之20:视频编码原理简介_第6张图片

编码标准

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

研制视频编码标准的有两大正式组织: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

FFmpeg入门详解之20:视频编码原理简介_第7张图片

你可能感兴趣的:(音视频,动画)