音视频学习之音频基础知识

一、音频处理流程

5-1 音视频处理流程[00_05_16][20201126-100812].png

5-1 音视频处理流程[00_09_20][20201126-101058].png

二、 声音的三要素

音调:音频的快慢
频率越快音调越高

5-3 声音的三要素[00_04_05][20201126-102030].png

音量:振动的幅度
幅度越大音量越大

5-3 声音的三要素[00_03_09][20201126-101921] (2).png

音色:谐波

image.png

三、音频原始数据的格式

1、PCM

纯音频数据

2、WAV

在纯音频数据上加了个头,也可以是音频压缩数据

image.png

image.png

这么大的码流显然是无法在网络上传输的,因此需要对音频数据进行压缩。


image.png

image.png

四、FFmpeg音频采集

linux开发环境下

1、通过命令方式

ffmpeg -f asla -i :0 out.wav
ffplay out.wav

2、通过API方式

(待补充...)

五、音频压缩

1、消除冗余信息(有损压缩)

消除人听觉范围外的音频信号,即采集到是20Hz以下,20000Hz以上的音频信号。

1、频域遮蔽效应

通过傅里叶变换、小波变换,将时域信息转换成频域信息。在较强的遮蔽源附近的声音都会被遮蔽掉,因此在遮蔽源附近的声音可以滤去。


image.png

2、时域遮蔽

声音分贝高的会屏蔽掉时间范围内声音分贝低的声音。

image.png

通过以上两个原理来提取有效的音频信息,滤除掉冗余,以达到有损压缩的目的

2、无损压缩

.7z .rar .gz

熵编码

1、哈夫曼编码

用很小的0 1 字符串代替很长的字符,频率越高编码越短,频率越低编码越长。


image.png
2、算术编码

通过二进制的小数来代替编码。

3、香农编码

六、音频的编码过程

image.png

七、常见的音频编码器

image.png
image.png

image.png

image.png

image.png

image.png

image.png

ADTS格式:相当于在每帧ACC数据都有一个ADTS头,在处理AAC数据需要主要这个ADTS头,或者播放AAC数据时无法播放,可能就是因为没加ADTS头
(了解一下ADTS的结构,在FFmpeg中有对应的API接口,可直接调用进行编码)
image.png

ADTS结构每bit的描述(上图的翻译)
A 12 同步字的0xFFF,所有位必须是1
B 1 MPEG版本:0为MPEG- 4,1为MPEG-2
C 2 层:总是0
D 1 保护缺失,警告,如果没有CRC设置为1,如果有CRC设置为0
E 2 配置文件,MPEG-4音频对象类型减1
F 4 MPEG-4采样频率指数(禁止为15)
G 1 私有流,编码时设置为0,译码时忽略
H 3 MPEG-4通道配置(在0的情况下,通道配置通过inband发送PCE)
I 1 原创性,编码时设为0,解码时忽略
J 1 home,编码时设置为0,译码时忽略
K1 版权流,编码时设置为0,解码时忽略
L1 版权开始,编码时设置为0,解码时忽略
M13帧长度,这个值必须包括7或9个字节的头长度:
FrameLength =(ProtectionAbsent == 1 ?7: 9) +尺寸(AACFrame)
O 11 缓冲器饱满度
P 2 在ADTS帧减去1的AAC帧数(RDBs),为了最大的兼容性总是使用1个AAC帧/ADTS框架
Q 16 如果没有保护, CRC为0

(上图的E 音频对象类型,常见如下)


image.png

image.png

八、通过ffmpeg生成AAC文件

ffmpeg -i xxx.mp4 -vn -c:a libfdk_aac -ar 44100 -channels 2 -profile:a acc_he_v2 xxx.acc

参数含义:
-vn video no 过滤掉视频
-c:a libfdk_aac 代表使用音频编码系audio 使用libfdk_aac库进行编码(fdk_aac是目前最好的AAC编解码器)
-ar 44100 代表音频采样率
-profile:a acc_he_v2 设置音频输出参数

播放文件

ffplay xxx.acc

你可能感兴趣的:(音视频学习之音频基础知识)