先看现象。会议录播是 5.1 声道的 ac3,六个声道里对白基本都在中置,直接送转写接口报 unsupported audio format,转成双声道 wav 后识别出来全是背景音乐和掌声。
这类报错背后常见的原因有几处,逐个排除就行。接口只接受单声道或双声道,六声道文件直接拒。另一种情况是默认下混按等权平均,把对白能量稀释到六个声道里。
少数情况下是ac3 解码后是 48k,接口按 16k 解释导致变调。
不容易想到的是,声道布局标记缺失时 ffmpeg 选错下混矩阵。
动手时先看声道数与布局标记
ffprobe -v error -show_entries stream=channels,channel_layout -of csv=p=0 rec.ac3
只取中置声道并重采样
ffmpeg -i rec.ac3 -af "pan=mono|c0=FC" -ar 16000 center.wav
标准下混做一组对照
ffmpeg -i rec.ac3 -ac 2 -ar 16000 -c:a pcm_s16le mix.wav
末了对比两条轨道的转写结果
python asr_compare.py --a center.wav --b mix.wav
改完先别撤,确认这几项。中置声道的转写文本里对白完整、音乐描述消失,音频时长与源文件一致,接口返回 200 不再提示格式不支持。
会议和影视素材的对白基本都在中置,直接取 FC 比任何下混算法都干净,前提是布局标记没丢。报错文案容易误导,真正的原因往往在相邻那一层的日志里。
