FFmpeg学习总结

152 阅读3分钟

FFmpeg学习总结

1.视频播放器原理

播放一个视频文件的流程如下所示

vidio_principle

MediaInfo显示视频文件的信息

mediaArea_info

2.封装格式

•封装格式的作用

▫ 视频码流和音频码流按照一定的格式存储在一个文件中。

封装格式

• MPEG2-TS格式简介

▫ 不包含文件头。数据大小固定(188Byte)的TS Packet构成。

TS

FLV格式简介

▫ 包含文件头。数据由大小不固定的Tag构成。

TS

3. 视频编码数据

• 视频编码的作用

▫ 将视频像素数据(RGB,YUV等)压缩成为视频码流,从而降低视频的数据量。

• H.264格式简介

▫ 数据由大小不固定的NALU构成

▫ 最常见的情况下,1个NALU存储了1帧画面的压缩编码后的数据。

TS

•H.264压缩方法

▫ 比较复杂。包含了帧内预测、帧间预测、熵编码、环路滤波等环节

▫ 可以将图像数据压缩100倍以上。

下图显示:

  • 红色的帧:I帧,只对当前帧图片进行压缩不依赖其他数据;
  • 蓝色的帧:P帧,图片中红色的线条为运动矢量,需要根据运动矢量进行压缩,只会存储与运动矢量帧不同的地方;
  • 绿色的帧:B帧,根据前后P帧的数据做预测进行编码存储。

TS

4.音频编码数据

• 音频编码的作用

▫ 将音频采样数据(PCM等)压缩成为音频码流,从而降低音频的数据量。

• AAC格式简介

▫ 数据由大小不固定的ADTS构成

TS

5.视频像素数据

•视频像素数据作用

▫ 保存了屏幕上每个像素点的像素值。

• 格式

▫ 常见的像素数据格式有RGB24, RGB32, YUV420P,YUV422P,YUV444P等。压缩编码中一般使用的是YUV格式的像素数据,最为常见的格式为YUV420P。

• 特点

▫ 视频像素数据体积很大,一般情况下1小时高清视频的RGB24格式的数据体积为:360025192010803=559.9GByte。PS:这里假定帧率为25Hz,取样精度8bit。

• YUV格式像素数据查看工具

▫ YUV Player

• RGB格式简介

▫ Red、Green、Blue三种颜色,可以混合成世界上所有的颜色。

▫ 彩色图像中每个点,由R、G、B三个分量组成。

▫ 以RGB24为例,图像像素数据的存储方式如下:

TS

从图中可以看出,RGB24依次存储了每个像素点的R、G、B信息。

PS:BMP文件中存储的就是RGB格式的像素数据。

• YUV格式简介

▫ 相关实验表明,人眼对亮度敏感而对色度不敏感。因而可以将亮度信息和色度信息分离,并对色度信息采用更“狠”一点的压缩方案,从而提高压缩效率。

▫ YUV格式中,Y只包含亮度信息,而UV只包含色度信息。

▫ 以YUV420P为例,图像像素数据的存储方式如图所示。

▫ 从图中可以看出,YUV420P首先存储了整张图像的Y信息,然后存储整张图像的U信息,最后存储了整张图像的V信息。

TS

6.音频采样数据

• 音频采样数据作用

▫ 保存了音频中每个采样点的值。

• 特点

▫ 音频采样数据体积很大,一般情况下一首4分钟的PCM格式的歌曲体积为:4604410022=42.3MBytePS:这里假定采样率为44100Hz,采样精度为16bit。

• PCM格式简介

▫ 单声道的情况下按照顺序存储每个采样点的数据。

▫ 双声道的情况下按照“左右、左右”的顺序存储每个采样点两个声道的数据。