FFmpeg 编码 MP3 的问题

应用实践 | 📅 2020-09-19 | ffmpeg

遇到的问题

当执行

./ffmpeg -i A.flac A.mp3

FFmpeg 输出如下错误:

Automatic encoder selection failed for output stream #0:1. Default encoder for format mp3 (codec mp3) is probably disabled. Please choose an encoder manually.

简单说就是没有 MP3 的编码器,不能输出 MP3 文件。

检查编码器:

./ffmpeg -codecs |grep mp3

......
 D.AIL. mp3                  MP3 (MPEG audio layer 3) (decoders: mp3float mp3 )
 D.AIL. mp3adu               ADU (Application Data Unit) MP3 (MPEG audio layer 3) (decoders: mp3adufloat mp3adu )
 D.AIL. mp3on4               MP3onMP4 (decoders: mp3on4float mp3on4 )

可见 MP3 格式,只有解码器,没得编码器。

解决

FFmpeg 如需编码 MP3 格式,则需 libmp3lame 支持。

Ubuntu 需要安装: libmp3lame-dev

sudo apt-get install libmp3lame-dev -y

CentOS 需要安装: lame-devel

sudo yum install lame-devel -y

这俩是同一个东西。

然后就可以重新编译 FFmpeg 了,编译有可能遇见:

nasm/yasm not found or too old. Use --disable-x86asm for a crippled build.

加上参数 --disable-x86asm 便是,要注意还增加了 libmp3lame:

./configure --disable-x86asm --enable-libmp3lame
make

此时我们就获得了能输出 MP3 格式文件的 FFmpeg 了。

验证:

./ffmpeg -codecs |grep mp3

......
DEAIL. mp3                  MP3 (MPEG audio layer 3) (decoders: mp3float mp3 ) (encoders: libmp3lame )
 D.AIL. mp3adu               ADU (Application Data Unit) MP3 (MPEG audio layer 3) (decoders: mp3adufloat mp3adu )
 D.AIL. mp3on4               MP3onMP4 (decoders: mp3on4float mp3on4 )

看到 MP3 的编码器了。至此解决 FFmpeg 编码 MP3 的问题。