先看现象。会议录播是 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 比任何下混算法都干净,前提是布局标记没丢。报错文案容易误导,真正的原因往往在相邻那一层的日志里。

作者 9823189