写在前面:想要学好FFmpeg,首先要有一个知识储备,本篇总结了一些基础的音视频FFmpeg入门资料,想要学好音视频首先了解概念,结合视频教程实践学习事半功倍,视频里也发布了一些教程,可以去主页找找,有问题可以随时留言哦!~
一、视频录制原理

视频播放原理


文章福利:以上视频获取点击:学习交流群免费下载,希望可以帮助大家快速掌握FFmpeg,走上音视频开发的黄金之路!
二、视频基础
数字图像表示RGB表示
红光(R)
绿光(G)
蓝光(B)
每个像素用8bit表示RGB方式对于一幅图像,一般使用整数表示方法来进行描述,比如计算一张的 RGB_888图像的大小,可采用如下方式: 1280 * 720,1280×720 * 3 = 2.637 MB,4分钟就达到了15G的容量。 假如是一部90分钟的电影,每秒25帧,则一部电影:2.637MB*90分钟*60秒*25FPS= 347.651GB
数字图像表示YUV格式

用途:主要用于视频信号的压缩、传输和存储,和向后相容老式黑白电视。 其中“Y”表示明亮度(Luminance或Luma),也称灰阶值; “U”和“V”表示的则是色度(Chrominance或Chroma)
作用是描述影像色彩及饱和度,用于指定像素的颜色。
YUV格式:有两大类:planar和packed。
◼ 对于planar的YUV格式,先连续存储所有像素点的Y,紧接着存储所有像素点的U,随后是所有像素点的V。
◼ 对于packed的YUV格式,每个像素点的Y,U,V是连续交*存储的。
◼ Libyuv,Google开源的实现各种YUV与RGB之间相互转换、旋转、缩放的库。
YUV444 packed格式

YUV444 planar格式

YUV存在多种格式,比如YUV420p,YUV420sp等,不同的YUV格式的数据在存储时的排列顺序是不一样的,在开发的过程中必须非常注意,否则画面会显示不正常。比如花屏,绿屏等现象。

YUV 4:4:4采样,每一个Y对应一组UV分量。
YUV 4:2:2采样,每两个Y共用一组UV分量。
YUV 4:2:0采样,每四个Y共用一组UV分量。

更多介绍请点击:
◼ 详解yuv系列
◼ YUV420P/I420 stride 计算方式
◼ 解释 YUV444,YUV422,YUV420中的4,2,0
数字图像表示
相较于RGB,我们可以计算一帧为1280×720的视频帧,用YUV420P的格式来表示,其数据量的大小如下: 4 2 -> 1 + 0.5 = 1.5
1280 * 720 * 1 + 1280 * 720 * 0.5 = 1.318MB 如果fps(1秒的视频帧数目)是25,按照一般电影的长度90分钟来计算, 那么这部电影用YUV420P的数据格式来表示的话,其数据量的大小就是: 1.318MB * 25fps * 90min * 60s = 173.76GB


我的硬盘存不下这么多片???
数字图像格式转换,以H264直播为例:

视频的主要概念
视频码率:kb/s,是指视频文件在单位时间内使用的数据流量,也叫码流率。码率越大,说明单位时间内取样率越大,数据流精度就越高。
视频帧率:fps,通常说一个视频的25帧,指的就是这个视频帧率,即1秒中会显示25帧。帧率越高,给人的视觉就越流畅。
视频分辨率:分辨率就是我们常说的640x480分辨率、1920x1080分辨率,分辨率影响视频图像的大小。
IPB帧的概念
I 帧(Intra coded frames):I帧不需要参考其他画面而生成,解码时仅靠自己就重构完整图像;
➢ I帧图像采用帧内编码方式;
➢ I帧所占数据的信息量比较大;
➢ I帧图像是周期性出现在图像序列中的,出现频率可由编码器选择;
➢ I帧是P帧和B帧的参考帧(其质量直接影响到同组中以后各帧的质量);
➢ I帧是帧组GOP的基础帧(第一帧),在一组中只有一个I帧;
➢ I帧不需要考虑运动矢量;
P 帧(Predicted frames):根据本帧与相邻的前一帧(I帧或P帧)的不 同点来压缩本帧数据,同时利用了空间和时间上的相关性。
➢ P帧属于前向预测的帧间编码。它需要参考前面最靠近它的I帧或P帧 来解码。 (多个参考帧的时候,遇到过11个参考帧)
B 帧(Bi-directional predicted frames):B 帧图像采用双向时间预测, 可以大大提高压缩倍数。

更具体的内容在H264相关的课程再具体讲解。比如I帧间隔,B帧数量的设置等
常用视频压缩算法:
MPEG2 MPEG阵营
H264 MPEG阵营
H265 MPEG阵营
AVS 中国阵营
VP8 Google阵营
VP9 Google阵营
三、音频基础
数字声音的表示
现实中我们听到的声音是连续波的,但是在
计算机中只能通过采样来复原波形。

假设常用的采样频率44100,采样深度 16bit,2通道(声道),采集4分钟的数据44100*16*2*4*60= 338688000bit338688000/8/1024/1024 = 40M字节,没有经过压缩的音频数据我们叫 PCM数据
音频主要概念
采样频率:每秒钟采样的点的个数。常用的采样频率有:
22000(22kHz):无线广播。
44100(44.1kHz):CD音质。
48000(48kHz):数字电视,DVD。
96000(96kHz):蓝光,高清DVD。
192000(192kHz):蓝光,高清DVD。
采样精度(采样深度):每个“样本点”的大小
常用的大小为8bit, 16bit,24bit。
通道数:单声道,双声道,四声道,5.1声道。
音频主要概念
比特率:每秒传输的bit数,单位为:bps(Bit Per Second)。 间接衡量声音质量的一个标准。 没有压缩的音频数据的比特率 = 采样频率 * 采样精度 * 通道数。
码率: 压缩后的音频数据的比特率。常见的码率:
96kbps:FM质量
128-160kbps:一般质量音频。
192kbps:CD质量。
256-320Kbps:高质量音频
码率越大,压缩效率越低,音质越好,压缩后数据越大。
码率 = 音频文件大小/时长
帧:音频的帧的概念没有视频帧那么清晰,几乎所有视频编码格式都可以简单的认为一帧就是编码后的一张图像。
帧长:
(1)可以指每帧采样数播放的时间, mp3 48k, 1152个采样点,每帧则为
24ms;aac则是每帧是1024个采样点。 攒够一帧的数据才送去做编码
(2)也可以指压缩后每帧的数据长度。所以讲到帧的时候要注意他适用
的场合。 每帧持续时间(秒) = 每帧采样点数 / 采样频率(HZ)
交错模式:数字音频信号存储的方式。数据以连续帧的方式存放,即首先记录帧1的左声道样本和右声道样本,再开始帧2的记录...

非交错模式:首先记录的是一个周期内所有帧的左声道样本,再记录所有右声道样本

常用音频编码:MP3,AAC ,AC3和EAC3 杜比公司的方案
四、封装格式基础
封装格式概念:
封装格式(也叫容器)就是将已经编码压缩好的视频流、音频流及字幕按照一定的方案放到一个文件中,便于播放软件播放。 一般来说,视频文件的后缀名就是它的封装格式。封装的格式不一样,后缀名也就不一样。
比如:同样的陷可以做成饺子也可以做成包子。对于视频也是一个道理, 同样的音视频流可以用不同容器来承载。


这里的压缩算法:
视频Video:使用了H264/AVC压缩算法
音频Audio:使用了AAC压缩算法
封装则使用MP4封装格式
常见的封装格式:
AVI、MKV、MPE、MPG、MPEG 、MP4、WMV、MOV、3GP 、M2V、M1V、M4V、OGM 、RM、RMS、RMM、RMVB、IFO 、SWF、FLV、F4V、 ASF、PMF、XMB、DIVX、PART、DAT、VOB、M2TS、TS、PS
H264+AAC封装为FLV或MP4是最为流行的模式
五、音视频同步基础
音视频同步概念
DTS(Decoding Time Stamp):即解码时间戳,这个时间戳的意义在于告诉播放器该在什么时候解码这一帧的数据。
PTS(Presentation Time Stamp):即显示时间戳,这个时间戳用来告诉播放器该在什么时候显示这一帧的数据,当视频流中没有 B 帧时,通常 DTS 和 PTS 的顺序是一致的。但存在B帧的时候两者的顺序就不一致了。
音视频同步方式
Audio Master:同步视频到音频
Video Master:同步音频到视频
External Clock Master:同步音频和视频到外部时
钟
一般情况下 Audio Master > External Clock Master > Video Master
六、开源项目


七、常用工具
