FFMPEG之视频编解码基础学习笔记

时间:2022-12-26 09:21:26

一、基本概念

1、muxer/demuxer:muxer是合并,将视频文件、音频文件和字幕文件合并为某一个视频格式。如,可将a.avi, a.mp3, a.srt用muxer合并为mkv格式的视频文件。demuxer是拆分这些文件的。

2、container:指包含数据的文件。容器的类型决定了信息存放的位置。例如AVI,QuickTime。

3、stream:指一串以时间顺序来串联的数据元素。container中常有多种流,例如音频流,视频流。

4、frame:流中的数据元素。帧就是影像动画中最小单位的单幅影像画面,相当于电影胶片上的每一格镜头。 帧由逐行扫描而得。在隔行扫描中,一帧数据由两场(顶场和低场)组成。

5、packet:一段数据,它包含了一段可以被解码成方便我们最后在应用程序中操作的原始帧的数据。

6、DTS:decoding time stamp 解码时间戳。

7、PTS:presentation time stamp 显示时间戳。

8、GOP:Group Of Pictures。

9、I帧(Intra-Frame,帧内图像),P帧(Predicted-Frame,预测图像),B帧(Bidirectional-Prediction,插补图像):

简单地说,I帧是关键帧,属于帧内压缩。就是和AVI的压缩是一样的。 P是向前搜索的意思。B是双向搜索。他们都是基于I帧来压缩数据。

  • I帧表示关键帧,你可以理解为这一帧画面的完整保留;解码时只需要本帧数据就可以完成(因为包含完整画面)
  • P帧表示的是这一帧跟之前的一个关键帧(或P帧)的差别,解码时需要用之前缓存的画面叠加上本帧定义的差别,生成最终画面。(也就是差别帧,P帧没有完整画面数据,只有与前一帧的画面差别的数据)
  • B帧是双向差别帧,也就是B帧记录的是本帧与前后帧的差别(具体比较复杂,有4种情况),换言之,要解码B帧,不仅要取得之前的缓存画面,还要解码之后的画面,通过前后画面的与本帧数据的叠加取得最终的画面。B帧压缩率高,但是解码时CPU会比较累。

10、码率:数据传输时单位时间内传输的数据位数。一般单位是kbps即千比特每秒。码率提高可以提高画面的精度,使画面更加清晰。

11、帧率:每秒显示帧数。帧率提高可以提高画面的流畅度。

12、RGB:R红色,G绿色,B蓝色。

13、YUV:“Y”表示明亮度(Luminance或Luma),也就是灰阶值;而“U”和“V” 表示的则是色度(Chrominance或Chroma),作用是描述影像色彩及饱和度,用于指定像素的颜色。“亮度”是透过RGB输入信号来建立的,方法是将RGB信号的特定部分叠加到一起。“色度”则定义了颜色的两个方面:色调与饱和度,U和V的比值决定色调,而FFMPEG之视频编解码基础学习笔记代表颜色的饱和度

     Y = 0.299R + 0.587G + 0.114B     U = 0.493 (B – Y)     V = 0.877 (R – Y)

14、视觉冗余:人类视觉系统对于图像场的任何变化,并不是都能感知的。例如,对于图像的编码和解码处理时,由于压缩或量化截断引入了噪声而使图像发生了一些变化,如果这些变化不能为视觉所感知,则仍认为图像足够好。事实上人类视觉系统一般的分辨能力约为26灰度等级,而一般图像量化采用28灰度等级,这类冗余我们称为视觉冗余。 通常情况下,人类视觉系统对亮度变化敏感,而对色度的变化相对不敏感;在高亮度区,人眼对亮度变化敏感度下降,对物体边缘敏感,内部区域相对不敏感,对整体结构敏感,而对内部细节相对不敏感。将不敏感信息移除后,人们仍可识别图像。

15、知识冗余:有许多图像的理解与某些基础知识有相当大的相关性。例如,人脸的图像有固定的结构,嘴的上方有鼻子,鼻子的上方有眼睛,鼻子位于正面图像的中线上等等。这类规律性的结构可由先验知识和背景知识得到,我们称此类冗余为知识冗余。

16、运动评估:在预测帧中寻找最佳匹配块的过程。

17、运动补偿:当前块减去最佳匹配块后得到残差块的过程。