报错是这么冒出来的。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 常被裁过,上线前先把需要的编码器列表跑一遍再定转码参数。这类问题最好一次改到位,反复小改反而容易把原因搅混。
