音视频入门知识学习
- 视频相关
- 视频压缩
- 空间冗余
- 时间冗余
- 视觉冗余
- 信息熵冗余
- 知识冗余
- I帧 P帧 B帧 压缩思路
- I帧
- P帧
- B帧
- H.264
- VCL
- NAL
- NAL(片(宏块))
- 音频概念
- 采样和采样频率
- 采样位数
- 声道
- 码率
- 声音与音频
- 数字音频相关特点
- 时域冗余
- 频域冗余的表现形式
- 听觉冗余
视频相关
1920x1080的屏幕,32位,30帧的fps。一秒钟需要1920108032*30字节,所以需要压缩
视频压缩
压缩的核心思想就是去除冗余信息
空间冗余
空间冗余 == 相邻像素重复:图像内部相邻像素之间存在较强的相关性多造成的冗余
比如一张图片中间的一个位置大小20x20,它的表现肉眼看起来其实是一样的,这种直接取一小块+空间位置代表来描述就行,节省了内存。
看起来非常高端:这就是算法工程师的牛逼之处。
时间冗余
时间冗余 == 帧之间差值:视频图像序列中的不同帧之间的相关性所造成的冗余。
这个最好理解:当前帧图像跟上一帧图像之间只是改变了很小的东西,那么我们只要把改变的东西和位置传递过去,再根据上一帧进行对比处理就可以了。
视觉冗余
视觉冗余 == 人类不敏感的颜色:深红色和浅红色OK,但是红色偏一点橘红色,你分得清楚吗?
视觉冗余:是值人眼不能感知或不铭感的那部分图像信息。
色盲:人类对色度不敏感
亮盲:人类对亮度敏感
信息熵冗余
信息熵冗余 == 熵编码-哈夫曼算法
也称编程冗余,人们用于表达某一信息序所需要的比特数总比理论上标识改信息所需要的最少比特数要大,它们之间的差距就是信息熵冗余,或称编码冗余。
知识冗余
知识冗余 == 人类(头 身体 腿),汽车,房子
指在有些图像中还包含与某些验证知识有关的信息
有些东西是不需要记录的:比如人, 眼睛下面是鼻子再下面的嘴巴
I帧 P帧 B帧 压缩思路
I帧
I帧:帧内编码帧,关键帧,I帧可以看做一个图形经过压缩之后的产物,可以单独解码出一个完整的图形。(压缩率最低)
P帧
P帧:前后预测编码帧,记录了本帧跟之前的一个关键帧(或P帧)的差别,解码时需要用之前缓存的画面加上本帧定义的差别,最终生成画面。
B帧
B帧:双向预测编码帧,记录了本帧与前后帧的差别,解码需要参考前面一个I帧或P帧,同时也需要后面的P帧才能解码一张完整的图像。(参考前后的预测得到的,压缩率最高,但是耗时。)
B帧,拥有I帧和后面P帧的所有东西,但是它自己只记住了中间的圆,想要完全绘制出来必须参考前后的帧。
H.264
H.264 和 MPEG AVC 是同一个东西,不同组织的叫法而已。
H.265 是一种更高效率的编码格式,在H.264的基础上假如了更多的算法,压缩率更高,涉及到一些专利问题和推广问题,目前还是没流行起来。
H.264 分层结构(VCL 与 NAL)
VCL就是被压缩编码后的原始数据,在VCL数据封装到NAL单元中之后,才可以用于传输。
Java开发中:数据->javaBean -> json(序列化或者反序列化)-> http -> TCL
音视频开发中:图片(视频)-> VCL(进行编码压缩) -> NAL(打包) -> http -> TCL
VCL
vcl :video coding layer,视频编码层 : 负责高效的视频内容标识,VCL数据即编码处理的输出,它表示被压缩编码后的数据序列。
NAL
NAL(Network Abstraction Layer,网络提取层):负责以网络所要求的恰当的方式数据进行打包和传送,是传输层。不管是本地播放还是网络播放,都要通过这一层来传输。
NAL(片(宏块))
一帧图片经过H.264编码器之后,NAL单元就是装在着这些片(被编码为一个或多个片slice),
每片包含整数个宏块(至少一个宏块,最多包含整个图像宏块)。
一般H.264编码器的默认输出为:起始码+NALU(Nal单元)。起始码为:0x00000001或者0x000001
一个NALU(PPS, I帧,B帧,P帧)
原始数据经过VCL编码之后再经过NAL打包就变成一个个NALU单元,所有数据流都要经过NAL打包
startcode Nal头信息 aa = 起始码 +RBSP == NALU
排列形式为:aaRBSP aaRBSP aaRBSP aaRBSP
为什么起始码是上面写的这两种?
0x00000001 代表一个NALU里面有好多片
0x000001 代表一个NALU里面一个片就可以搞定
每个NALU 包含起始码与1个字节的Nal Header 与 若干整数字节的负荷数据EBSP构成。
Nal Header:能区分类型,I 、B、P、PPS等数据
NAL类型查表:
使用软件打开上面的h264文件会发现:
从开始位置开始:
起始码:有多个片00 00 00 01 Nal Head:67
SPS 序列参数集(记录有多少I帧、B帧、P帧,帧是如何排列的) 7
0x67 十六进制的写法 67
二进制:0 11 00111
第一组:0代表这个帧可以用,1代表这个帧不可以用
第二组:11代表这个帧很重要
第三组:00111 —> 16进制 7 查表 SPS
后面就是数据了,直到下一个起始码开始就是下一个NALU
pps 图像参数集(图像宽高信息等)8
00 00 00 01 68 ----> 2进制01101000----> 取低五位 00001000 —> 十六进制 0x08
SEI补充信息单元(可以记录坐标信息,人员信息,可以理解是自定义的信息)
00 00 00 01 06
I帧来了
00 00 01 65
不太重要的P帧来了 第二组是:01
00 00 01 45
还有这种:第二组是11
重要的P帧
00 00 00 01 61
B帧
00 00 00 01 01
真正开发中:一般分析:SPS,PPS,I帧
PTS与DTS
DTS表示解码时间戳,在什么时候解码这一帧的数据
PTS表示显示时间戳,在什么时候显示这一帧
在没有B帧的情况下,DTS和PTS的输出顺序是一样的
因为B帧打乱了解码和显示的顺序,所以一旦存在B帧,PTS和DTS就会不同。
解码顺序和播放顺序不是相同的,I帧之间分为一组,叫GOP。
为什么要打乱顺序呢,比如有1234567帧,扫描发现1352765这样排列才是最合适的,因为他们之间的画面关联性最高,压缩率更高,相同的块更多,可以省下更多的描述,所以就这样排列了,但是播放顺序就不是这个编码解码顺序。
要知道一帧的视频分为很多块,有16x16,8x8,等等区间,H.264为什么效率更高,因为它提供了更多种类的块的描述,更加精细化,简单说就是算法更好,压缩率更高。
H.264结构中,一个视频图像编码后的数据叫做一帧,一帧由一个片(slice)或多个片组成,一个片由一个或多个宏块(MB)组成,一个宏块由16x16的YUV数据组成(还有子块),宏块作为H.264编码的基本单位。
音频概念
采样和采样频率
⼀秒钟内采样的次数称为采样频率。采样频率越⾼,越接近原始信号,但是也加⼤了运算处理的复杂度。根据 Nyquist采样定理,要想重建原始信号,采样频率必须⼤于信号中最⾼频率的两倍。⼈能感受到的频率范围为 20HZ–20kHZ, ⼀般⾳乐的采样频率为44.1kHZ, 更⾼的可以是48kHZ和96kHZ,不过⼀般⼈⽤⽿听感觉不出差别 了。语⾳主要是以沟通为主,不需要像⾳乐那样清晰,⽤16k采样的语⾳就称为⾼清语⾳了。现在主流的语⾳采样 频率为16kHz。
采样位数
数字信号是⽤0和1来表示的。采样位数就是采样值⽤多少位0和1来表示,也叫采样精度,⽤的位数越多就越接近 真实声⾳。如⽤8位表示,采样值取值范围就是-128–127,如⽤16位表示,采样值取值范围就是-32768–32767。 现在⼀般都⽤16位采样位数。
声道
声道是指处理的声⾳是单声道还是⽴体声。Android⽀持双声道⽴体声和单声道。CHANNEL_IN_MONO单声道, CHANNEL_IN_STEREO⽴体声。单声道在声⾳处理过程中只有单数据流,⽽⽴体声则需要左、右声道的两个数据 流。显然,⽴体声的效果要好,但相应的数据量要⽐单声道的数据量加倍。
码率
就是⽐特率。⽐特率是指每秒传送的⽐特(bit)数。 ⾳频采集和播放: ⼀般⽤专⻔的芯⽚(通常叫codec芯⽚)采集⾳频,做AD转换,然后把数字信号通过I2S总线(主流⽤I2S总线, 也可以⽤其他总线,⽐如PCM总线)送给CPU处理(也有的会把codec芯⽚与CPU芯⽚集成在⼀块芯⽚中)。当要 播放时CPU会把⾳频数字信号通过I2S总线送给codec芯⽚,然后做DA转换得到模拟信号再播放出来。
声音与音频
声音转成模拟信号,可以把声音认为是一种能量,通过震动,磁电转换,记录刻痕。
声音通过人耳鼓膜,通过震动幅度和震动频率给听觉神经传递反映给大脑。
数字信号:声音能转换产生微弱的电流,有频率有大小等要素,科学家通过一定的算法能转换成类似我们看到的波形具体的事物。
音频信号能进行压缩的依据是音频压缩技术。
音频压缩技术指的是对原始数字音频信号流(PCM编码)运用适当的数字信号处理技术,在不损失有用信息量,或所引入损失可忽略的条件下,降低(压缩)其码率,也称为压缩编码。它必须具有相应的逆变换,称为解压缩或解码。音频信号在通过一个编解码系统后可能引入大量的噪声和一定的失真。
在音频压缩领域,有两种压缩方式,分别是有损压缩和无损压缩。常见到的MP3、WMA、OGG被称为有损压缩,有损压缩顾名思义就是降低音频采样频率与比特率,输出的音频文件会比原文件小。
另一种音频压缩被称为无损压缩,也就是所要说的主题内容。无损压缩能够在100%保存原文件的所有数据的前提下,将音频文件的体积压缩的更小,而将压缩后的音频文件还原后,能够实现与源文件相同的大小、相同的码率。
无损压缩格式有APE、FLAC、WavPack、LPAC、WMALossless、AppleLossless、La、OptimFROG、Shorten,而常见的、主流的无损压缩格式只有APE、FLAC。
数字音频相关特点
数字音频的质量取决于:采样频率和量化位数这两个参数,为了保真在时间变化方向上取样点尽量密,取样频率要高;在幅度取值上尽量细,量化比特率要高,直接的结果就是存储容量及传输信道容量要求的压力
音频信号的传输率=取样频率样本的量化比特数通道数取样频率=441KHz
样本值的量化比特数=16
普通立体声的信号通道数=2
数字信号传输码流大约14Mbit/s
一秒钟的数据量为14Mbit/(8/Byte)
达1764 k byte(字节),等于88200个汉字的数据量
数字音频的出现,是为了满足复制、存储、传输的需求,音频信号的数据量对于进行传输或存储形成巨大的压力
音频信号的压缩是在保证一定声音质量的条件下,尽可能以最小的数据率来表达和传送声音信息
信号压缩过程是对采样、量化后的原始数字音频信号流运用适当的数字信号处理技术进行信号数据的处理,将音频信号中去除对人们感受信息影响可以忽略的成分,仅仅对有用的那部分音频信号进行编排,从而降低了参与编码的数据量。
数字音频信号中包含的对人们感受信息影响可以忽略的成分称为冗余,包括时域冗余、频域冗余和听觉冗余。
时域冗余
1)幅度分布的非均匀性
信号的量化比特分布是针对信号的整个动态范围而设定的,对于小幅度信号而言,大量的比特数据位被闲置。
2)样值间的相关性
声音信号是一个连续表达过程,通过采样之后,相邻的信号具有极强的相似性,信号差值与信号本身相比,数据量要小的多
3)信号周期的相关性
声音信息在整个可闻域的范围内,每个瞬间只有部分频率成分在起作用,即特征频率,这些特征频率会以一定的周期反复出现,周期之间具有相关关系
4)长时自我相关性
声音信息序列的样值、周期相关性,在一个相对较长的时间间隔也会是相对稳定的,这种稳定关系具有很高的相关系数
5)静音
声音信息中的停顿间歇,无论是采样还是量化都会形成冗余,找出停顿间歇并将其样值数据去除,可以减少数据量。
频域冗余的表现形式
1)长时功率谱密度的非均匀性
任何一种声音信息,在相当长的时间间隔内,功率分布在低频部分大于高频部分,功率谱具有明显的非平坦性,对于给定的频段而言,存在相应的冗余
2)语言特有的短时功率谱密度
语音信号在某些频率上会出现峰值,而在另一些频率上出现谷值,这些共振峰频率具有较大的能量,由它们决定了不同的语音特征,整个语言的功率谱以基音频率为基础,形成了向高次谐波递减的结构
听觉冗余
根据分析人耳对信号频率、时间等方面具有有限分辨能力而设计的心理声学模型,将通过听觉领悟信息的复杂过程,包括接受信息,识别判断和理解信号内容等几个层次的心理活动,形成相应的连觉和意境
由此构成声音信息集合中的所以数据,并非对人耳辨别声音的强度、音调、方位都产生作用,形成听觉冗余
由听觉冗余引出了降低数据率,实现更高效率的数字音频传输的可能