FFmpeg 是一个开源的多媒体框架,可以处理音视频等多媒体数据。你可以用它对多媒体进行录制、格式转换、流媒体等操作。

FFmpeg 的原作者是法国天才程序员法布里斯·贝拉Fabrice Bellard)。

FFmpeg 包含 ffmpeg 命令行工具,在 macOS 可以使用 Homebrew 安装它:

$ brew install ffmpeg

基本概念

进行音频文件格式转换前,需要搞清楚几个基本概念。

比特率

比特率(bitrate)是衡量数据传输速度的单位,通常以比特每秒(bps, bits per second)或千比特每秒(kbps)来表示。在数字音视频压缩中,比特率很重要,因为它直接影响到文件的大小和质量。

具体到音频,比特率越高,音频的动态范围和细节就越丰富,音质就越好。

网上搜索的音频文件的常见比特率参考范围,如下:

  • 电话通话:16kbps - 32kbps
  • 低质量 mp3:64kbps - 96kbps
  • 标准质量 mp3:128kbps - 160kbps
  • 高质量 mp3:192kbps - 320kbps

CBR 和 VBR

CBR 和 VBR 是数字音频压缩中使用的两种不同的比特率控制模式,它们有各自的适用场景。

CBR 表示恒定比特率(Constant Bitrate),整个文件的比特率是固定的。它的优点在于稳定性、兼容性、简单、低延迟,适用于直播等流媒体传输场景。缺点是不能根据内容调整码率,体积较大。

VBR 表示可变比特率(Variable Bitrate),它的比特率会根据音频内容的复杂性自动调整。比如,在音频的安静部分,比特率会降低,而在复杂或响亮的部分,比特率会增加,以保持音频质量。VBR 编码的文件通常比相同质量 CBR 文件小,所以更适合存储和下载。但 VBR 的解码更复杂,延迟较高,所以不适合直播等流媒体场景。

转换为 mp3 格式

假设你有一个 music.m4a 文件,需要转换为 .mp3 格式。如果你想以 VBR 的方式编码,可以这样写:

$ ffmpeg -i music.m4a -c:a libmp3lame -q:a 8 output.mp3

其中的 -i 选项用于指定输入文件名。

-c:a 选项用于指定音频编码器,此处使用 MP3 编码器 LAME-c:a 选项的别名还有 -codec:a-acodec

-q:a 选项用于指定编码质量,它的数值和编码器相关。具体到 libmp3lame,取值范围是 [0, 9],值越小,质量越高。0-3 质量和原始音频几乎一样,默认的 4 和原始音频也比较接近,6 的质量“尚可接受”。-q:a 选项的别名是 -qscale:a

ffmpeg 选项 比特率范围 kbps
-q:a 0 220-260
-q:a 1 190-250
-q:a 2 170-210
-q:a 3 150-195
-q:a 4 140-185
-q:a 5 120-150
-q:a 6 100-130
-q:a 7 80-120
-q:a 8 70-105
-q:a 9 45-85

如果想编码成 CBR 恒定比特率音频文件,可以这么写:

$ ffmpeg -i music.m4a -c:a libmp3lame -b:a 96k output.mp3

其中的 -b:a 选项用于指定恒定的比特率。例子中的 -b:a 96k 表示音频文件的比特率是 96kbps。可用的选项有:8, 16, 24, 32, 40, 48, 64, 80, 96, 112, 128, 160, 192, 224, 256, 320(需要加后缀 k)。