音频文件基础
在音频文件的录制和处理中,有几个关键属性对于确保音频质量和兼容性至关重要。本文会介绍音频文件的几个重要概念,并且与 java 中的 ffmpeg 组件提供的方法关联起来
# 音频通道数 grabber.getAudioChannels()
描述:表示音频流中的声道数,例如单声道(1)或立体声(2)
重要性:声道数直接影响音频的播放效果。单声道只有一个音频通道,而立体声有两个音频通道,可以提供更丰富的音效体验
# 音频编解码器 grabber.getAudioCodec()
描述:指定用于编码音频数据的编解码器,例如 AAC、MP3、WAV 等
重要性:编解码器的选择影响音频文件的大小、质量和兼容性。不同的编解码器有不同的压缩算法和效率,选择合适的编解码器可以平衡文件大小和音质
# 采样率 grabber.getSampleRate()
描述:字面意思,表示每秒采集的音频样本数,单位通常是 Hz(赫兹)
外界的声音都是模拟信号,在数字设备中 A/D 转化成为了由0、1表示的数字信号后被储存下来。数字信号都是离散的,所以采样率是指一秒钟采样的次数,采样率越高,还原的声音也就越真实。由于人耳听觉范围是 20Hz~20kHz,根据香农采样定理(也叫奈奎斯特采样定理),理论上来说采样率大于 40kHz 的音频格式都可以称之为无损格式
重要性:采样率越高,音频的保真度越高,但文件大小也会增加。常见的采样率有 44.1 kHz(CD 质量)、48 kHz(数字音频标准)等
# 位深度
若要尽可能精确地还原声音,只有高采样率是不够的。描述一个采样点,横轴(时间)代表采样率,纵轴(幅度)代表位深度
16bit 表示用16位(2个字节)来表示对该采样点的电平(通俗点来说和音量大小成正比)进行编码时所能达到的精确程度,也就是把纵轴分为16份描述电平大小,如-3dB和-3.1415926dB的精度差别。同理还有20bit和24bit
16bit 被认为是专业音频领域里面最低的位深度标准,和44.1kHz 的采样率一样,共同作为专业音频和消费产品的标准。位深度也直接关系到信号噪声比的大小,直接影响到所录制信号的整体动态范围
在 FFmpegFrameGrabber 中,位深度(bit depth)并不是直接作为一个单独的属性来设置的,但它可以通过选择不同的像素格式(pixel format)间接影响。位深度指的是每个颜色分量(如红、绿、蓝)所占用的位数,常见的是8位、16位等
# 音频比特率 grabber.getAudioBitrate()
描述:表示每秒传输的音频数据量,单位通常是 kbps(千比特每秒)。在无损无压缩格式中(如.wav),码率=采样率x位深度x声道数
重要性:比特率越高,音频质量越好,但文件大小也会越大。选择合适的比特率可以在音质和文件大小之间取得平衡
在有损压缩中(如 mp3)码率便不等于这个公式了,因为原始信息已经被破坏。码率描述了一秒钟的该音频的信息量,因而声音文件总的大小是码率乘总时长。码率也叫位速,单位是比特率(bps,bit per second)
通常听歌时候的128kbps、320kbps 均为码率,其中 320kbps 是 mp3 格式的最高比特率。但和 44.1kHz 采样率、16bit 位深的 wav 文件比起来(计算一下双声道的码率是44.1x16x2=1411.2kbps),相去甚远。压缩后码率便发生了变化。无损压缩中的码率与音质无关,有损压缩中的码率和音质正相关
# 压缩算法(音频格式)
我们平时的音频存放完比特、音道等信息后,文件就会非常大,如果想方便传输的话是需要将文件压缩的。压缩算法(音频格式)的主要目的是为了减小音频文件的大小,从而节省存储空间和传输带宽
当软件需要读取这些压缩后的音频文件时,需要先解压,才能访问到原始的音频数据,如比特率、声道等信息
我们如果想看某个文件的格式,可以使用 ffmpeg 工具集中的 ffprobe 组件即可:
ffprobe 目标文件
输出内容示例,下面的 stream 就是音频文件的音频流中的各种信息:
注意流是是指多媒体文件中的不同数据类型,一个文件可能有多个流,通常包括视频流、音频流、字幕流等。每个流都有自己的属性,如编解码器、分辨率、比特率等
# 无损压缩
无损压缩指的是在无损格式之间的压缩(转换),无论压缩(转换)成什么格式,音质都是相同的,并且都能还原成最初同样的文件
平时所说的无损均是指无损压缩,没有无损码率的说法。对于各种格式的压缩都是对应着一种算法(或者说编码),播放的时候需要有解码器进行译码,而且不同的解码器也可能会影响解压出来的文件完整性。常见的无损格式有:
- wav:微软公司的一种声音文件格式,是无压缩的最接近真实声音的格式(其次是midi),支持多采样率多量化精度。所有的无损格式本质都是 wav 的压缩,在播放时会转回wav
- flac:Free Lossless Audio Coded,是国际通用格式,特点是压缩比高,编码算法也相当成熟,当 flac 文件受损时依然能正常播放。另外,该格式也是最先得到广泛硬件支持的无损格式
# 有损压缩
有损压缩指的是声音信息在压缩过程中发生了丢失,且所丢失的声音无法用采样率和位数表示出来。但特点就是压缩后的文件变的很小,常在流媒体中使用。常见的有损格式有:
- mp3:模拟人耳听觉研究出的一种复杂算法,被称为心理声学模型。它通过抽取音频中的一些频段来达到提高压缩比,降低码率,减少所占空间,但同时声音的细节如人声的情感、后期的混响等等都已经发生变形。盲听的话也很难较快地分辨出 wav 和 mp3,需要借助设备。mp3 目前是最为普及的声频压缩格式,可以最大程度地保留压缩前的音质
- wma:微软公司力作,特点是在较低比特率下(如64kbps),wma 可以在与 mp3 相同的音质条件下获得更小的体积。并且在超低比特率(如16kbps),wma 音质比 mp3 要好得多
- aac:苹果电脑上的声音文件储存格式