走进音视频的世界——音频封装格式
音频封装格式一般由:多媒体信息+音频流+封面流+歌词流组成。有些音乐会包含封面和歌词,则对应有封面流、歌词流。多媒体信息包括:标题、艺术家、专辑、作曲、音乐风格、日期、码率、时长、声道布局、采样率、音频编码器等。而音频封装包括:mp3、m4a、ogg、amr、wma、aac、wav、flac、ape等。前面两篇文章介绍过相关概念走进:音视频世界——音视频的基本概念、走进音视频世界——视频封装格式。
音频封装格式一般由:多媒体信息+音频流+封面流+歌词流组成。有些音乐会包含封面和歌词,则对应有封面流、歌词流。多媒体信息包括:标题、艺术家、专辑、作曲、音乐风格、日期、码率、时长、声道布局、采样率、音频编码器等。而音频封装包括:mp3、m4a、ogg、amr、wma、aac、wav、flac、ape等。前面两篇文章介绍过相关概念:走进音视频的世界——音视频基本概念、走进音视频世界——视频封装格式。音频格式如下图所示:
以下面问题为出发点,揭开音频封装格式的面纱:
① 音乐封面如何获取?
② 音乐歌词如何获取与显示?
③ 有损格式与无损格式有什么区别?
④ 不同封装格式有什么联系,又有什么区别?
先从FFprobe检测到的音频metadata说起,如下图1所示:
从上图可以看出,前半部分是title标题、artist艺术家、album专辑、album_artist艺术家专辑、composer作曲者、genre音乐风格式;中间部分是lyrics歌词,每句歌词前面有对应的时间戳;后半部分是两个流,第0编号的流是音频轨,包含:音频编码器、采样率、声道布局、码率,第1编号的流是封面,其实是一帧图像,包含:图像编码器、像素格式、分辨率。接下来根据上面提出的问题进行展开分析。
1、获取音乐的封面
音乐封面保存在视频图像流中,先解析出图像编码器、像素格式、分辨率等参数,然后根据编码器去寻找对应的解码器,并打开解码器,对图像编码压缩数据进行解码,最终解码出来的图像就是封面了。
2、音乐歌词的获取与显示
上面有提及,每句歌词前面有显示的时间戳,以音频时钟为基准,歌词时间戳同步于音频时间戳。也就是根据音频时间戳来同步解析歌词,然后把歌词回调到应用层渲染显示。另外一个问题,当前歌词什么时候该消失呢?歌词没有具体的显示时长,等待下一个歌词的到来,把当前歌词覆盖。
3、有损格式与无损格式的区别
(1) 无损音乐格式
无损音乐格式有ape、wav、flac三种,其中ape、flac都是基于wav进行压缩。而wav是微软专门为Windows开发的一种标准数字音频文件,文件扩展名wav,是WaveForm的缩写,文件大小计算公式:size=(采样率*量化位数*声道/8)/时间(秒)。一般采样率是44100Hz,量化位数为16位,声道数为2(即立体声道),1分钟的音频占用存储空间约为10M。
在Windows环境下,大多数媒体文件都是按照资源互换文件格式(Resource Interchange File Format)来储存信息的,简称为RIFF格式。构成RIFF的基本单位成为块(Chunk),每个RIFF文件由若干块组成,wav基本结构如下表所示:
RIFF块 |
文件格式类型“WAVE” |
fmt块 |
fact 块(压缩编码格式要含有该块) |
data块 |
表1—wav基本结构
每个块由块标识、长度、数据组成,如下代码段:
struct chunk {
u32 id; //块标识
u32 size; //块大小
u8 data[size]; //块内容
};
其中fmt块由声道数、采样率、码率、块对齐、量化位数五个参数组成,如下表所示:
Num Channels | 2 Bytes | 小端存储 |
SampleRate | 4 Bytes | 小端存储 |
ByteRate | 4 Bytes | 小端存储 |
Block Align | 2 Bytes | 小端存储 |
BitsPerSample | 2 Bytes | 小端存储 |
表2—WaveForm的format参数
(2) 有损音乐格式
有损音乐格式包括:mp3、m4a、ogg、amr、wma、aac等。目前最为流行的是mp3(MPEG-1 audio layer3),有着mp3的下一代之称的是aac(Advance Audio Coding)。有损格式压缩率比无损的高,文件占用存储空间小,但是声音还原度不如无损格式。我们下载音乐时,碰到高品质或者无损音质的音乐,通常要VIP会员或按需收费,因为越高品质越接近原声。而无损音乐从理论上能够100%保留声音细节,100%还原原声。无损音质英文简称为SQ(Super Quality,超音质)。关于无损格式与有损格式对比如下表所示:
常见格式 | 是否有损 | 优点 | 缺点 |
mp3、m4a、ogg、amr、wma、aac | 有损 | 音质相对差 | 占用空间小 |
wav、ape、flac | 无损 | 音质相对好 | 占用空间大 |
表3—有损与无损格式对比
4、不同封装格式的联系与区别
封装格式共同点是基本结构是相同的,都是由多媒体信息+音频流+封面流+歌词流组成。区别是不同封装格式,采用编码方式不一样,压缩率不一样,音频流子结构不一样。下面是不同封装格式的多方位对比,如表4所示:
格式 |
发布者 |
年份 |
编码器 |
是否有损 |
描述 |
wav |
微软 |
1991 |
pcm |
无损 |
波形文件,直接存储声音波形 |
ape |
Matthew |
2000 |
ape |
无损 |
压缩率约为55%,比flac高 |
flac |
Josh Coalson |
2000 |
flac |
无损 |
抗损坏,快速定位,可用于流媒体 |
mp3 |
MPEG-1 |
1992 |
mp3 |
有损 |
压缩比1:10甚至1:12,占有存储空间小,有版权 |
aac |
MPEG-2 |
1997 |
aac |
有损 |
支持多声道,更高解析度,更高压缩率 |
m4a |
MPEG-4 |
1998 |
aac |
有损 |
MPEG-4的扩展名,由ipod采用m4a变得流行 |
ogg |
Xiph.org |
不详 |
vobis |
有损 |
全称OGGVobis,支持多声道,支持流式播放 |
amr |
欧盟通信 |
不详 |
amr_nb/amr_wb |
有损 |
自适应多码率,占用存储空间特别小 |
wma |
微软 |
1999 |
wma |
有损 |
支持证书加密,主要应用于VOIP视频通话 |
表4—不同封装格式对比
更多推荐
所有评论(0)