报错是这么冒出来的。Ubuntu 22.04 的 ffmpeg 4.4 精简包,把 wav 转 mp3 时报 Unknown encoder libmp3lame,转 aac 正常,容器里没有编译进这个编码器。

中间走过弯路,把「编码器名字写成 mp3 而不是 libmp3lame」当成主因,改完现象没变。

这类报错背后常见的原因有几处,逐个排除就行。系统包是精简构建,没带 libmp3lame。另一种情况是用了 -c:a copy 但源是 pcm。

还有一种情况,PATH 里还有另一个静态 ffmpeg。

第一件事是看当前支持的编码器

ffmpeg -hide_banner -encoders | grep -i mp3

接着换成内置可用的编码

ffmpeg -i a.wav -c:a aac -b:a 64k a.m4a

或用完整构建转 mp3

ffmpeg -i a.wav -c:a libmp3lame -b:a 64k a.mp3

末了确认输出文件的编码

ffprobe -v error -show_entries stream=codec_name,bit_rate -of csv a.mp3

同事提醒我看一下最近一次发布,时间点确实对得上。

命令输出我都留了记录,免得改完记不清原来的值。

怎么算真的好了,看的是同一批现象。转码成功,ffprobe 显示音频编码与码率符合预期,文件能被播放器正常打开。

这里还有个坑。容器里的 ffmpeg 常被裁过,上线前先把需要的编码器列表跑一遍再定转码参数。这类问题最好一次改到位,反复小改反而容易把原因搅混。

作者 9823189