FFmpeg学习总结
1.视频播放器原理
播放一个视频文件的流程如下所示
MediaInfo显示视频文件的信息
2.封装格式
•封装格式的作用
▫ 视频码流和音频码流按照一定的格式存储在一个文件中。
• MPEG2-TS格式简介
▫ 不包含文件头。数据大小固定(188Byte)的TS Packet构成。
FLV格式简介
▫ 包含文件头。数据由大小不固定的Tag构成。
3. 视频编码数据
• 视频编码的作用
▫ 将视频像素数据(RGB,YUV等)压缩成为视频码流,从而降低视频的数据量。
• H.264格式简介
▫ 数据由大小不固定的NALU构成
▫ 最常见的情况下,1个NALU存储了1帧画面的压缩编码后的数据。
•H.264压缩方法
▫ 比较复杂。包含了帧内预测、帧间预测、熵编码、环路滤波等环节
▫ 可以将图像数据压缩100倍以上。
下图显示:
- 红色的帧:I帧,只对当前帧图片进行压缩不依赖其他数据;
- 蓝色的帧:P帧,图片中红色的线条为运动矢量,需要根据运动矢量进行压缩,只会存储与运动矢量帧不同的地方;
- 绿色的帧:B帧,根据前后P帧的数据做预测进行编码存储。
4.音频编码数据
• 音频编码的作用
▫ 将音频采样数据(PCM等)压缩成为音频码流,从而降低音频的数据量。
• AAC格式简介
▫ 数据由大小不固定的ADTS构成
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为例,图像像素数据的存储方式如下:
从图中可以看出,RGB24依次存储了每个像素点的R、G、B信息。
PS:BMP文件中存储的就是RGB格式的像素数据。
• YUV格式简介
▫ 相关实验表明,人眼对亮度敏感而对色度不敏感。因而可以将亮度信息和色度信息分离,并对色度信息采用更“狠”一点的压缩方案,从而提高压缩效率。
▫ YUV格式中,Y只包含亮度信息,而UV只包含色度信息。
▫ 以YUV420P为例,图像像素数据的存储方式如图所示。
▫ 从图中可以看出,YUV420P首先存储了整张图像的Y信息,然后存储整张图像的U信息,最后存储了整张图像的V信息。
6.音频采样数据
• 音频采样数据作用
▫ 保存了音频中每个采样点的值。
• 特点
▫ 音频采样数据体积很大,一般情况下一首4分钟的PCM格式的歌曲体积为:4604410022=42.3MBytePS:这里假定采样率为44100Hz,采样精度为16bit。
• PCM格式简介
▫ 单声道的情况下按照顺序存储每个采样点的数据。
▫ 双声道的情况下按照“左右、左右”的顺序存储每个采样点两个声道的数据。