FFmpeg & 音视频

学习资料

雷霄骅 大神的 《基于 FFmpeg + SDL 的视频播放器的制作》课程的视频

最近接触了直播后,就一直不懂它的原理。所以,我想去了解它,先从音视频开始。我现在主要的学习的资料和方向是根据 雷霄骅 大神的博客来的。很遗憾的是 ,雷大神已经离开了我们,愿天堂没有疲惫。但是,雷大神的知识和博客将永远帮助着我们这些新手,衷心感谢 雷霄骅 大神。

什么是 FFmpeg 呢?

FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。它包括了目前领先的音/视频编码库libavcodec。 FFmpeg是在Linux下开发出来的,但它可以在包括Windows在内的大多数操作系统中编译。这个项目是由Fabrice Bellard发起的,现在由Michael Niedermayer主持。可以轻易地实现多种视频格式之间的相互转换,例如可以将摄录下的视频avi等转成现在视频网站所采用的flv格式。

音视频封装格式

音视频就是由图像和声音组成。平常,我们看到大多音视频封装格式就有 MP4、RMVB、TS、FLV、AVI等。下面举例。

  • MPEG2-TS 格式:不包含文件头,数据大小固定(188Byte)的TS Packet构成。 如果前面坏了,后面还可以播。
  • FLV格式:包含文件头,数据大小不固定的Tag构成。前面文件头丢了,视频就坏了。

视频编码:

视频编码是将视频像素数据(RGB,YUV等)压缩为视频码流,从而降低视频的数据量。 常见格式就有H.264,MPEG2,VC-1 等,分析工具:Elecard Stream Eye

H.264 格式
  • 1.数据由大小不固定的NALU构成
  • 2.最常见的情况下,1个NALU存储了1帧画面的压缩编码后的数据。
H.264格式图.png
H.264 压缩方法
  • 比较复杂。包含了帧内预测、帧间预测、熵编码、环路滤波等环节构成。
  • 可以将图像数据压缩100倍以上。

音频编码:

音频编码是将音频采样数据(PCM等)压缩成为音频码流,从而降低音频的数据量。常见格式有AAC,MP3,AC-3

AAC 格式
  • 数据有大小不固定的ADTS构成
AAC示例图.png
AAC 压缩方法
  • 比较复杂 略。
  • 可以将音频数据压缩10倍以上。

视频像素数据

视频像素数据作用
  • 保存了屏幕熵每个像素点的像素值。
格式
  • 常见的像素数据格式有RGB24,RGB32,YUV420P,YUV422P,YUV444P等。压缩编码中一般使用的是YUV格式的像素数据,最为常见的格式为YUV420P。
特点
  • 视频像素数据体积很大,一般情况下1小时高清视频的RGB24格式的数据体积为:
  //这里假定帧率为25HZ,取样精度8bit。
  3600*25*1920*1080*3 = 559.9GByte
YUV格式像素数据查看工具
  • YUV Player

YUV 格式

FFmpeg & 音视频_第1张图片
YUV格式介绍.png

Y的信息是 U、V信息的4倍。

音频采样数据

音频采样数据作用
  • 保存了音频中每个采样点的值
特点
  • 音频采样数据体积很大,一般情况下一首4分钟的PCM格式的歌曲体积为:
   // 这里假定采样率为44100Hz,采样精度为16bit.
   4*60*44100*2*2=42.3MByte
音频采样数据查看工具
  • Adobe Audition

PCM 格式

FFmpeg & 音视频_第2张图片
PCM格式介绍.png

你可能感兴趣的:(FFmpeg & 音视频)