走进音视频的世界——音频封装格式

 音频封装格式一般由:多媒体信息+音频流+封面流+歌词流组成。有些音乐会包含封面和歌词,则对应有封面流、歌词流。多媒体信息包括:标题、艺术家、专辑、作曲、音乐风格、日期、码率、时长、声道布局、采样率、音频编码器等。而音频封装包括: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—不同封装格式对比

音视频学习和音视频处理项目可参考:https://github.com/xufuji456/FFmpegAndroid

おすすめ

転載: blog.csdn.net/u011686167/article/details/108565360
おすすめ