记录一下那天晚上的排查过程。用 ffmpeg -i in.mp4 -vn -acodec pcm_s16le out.wav 抽音轨,出来还是 2 声道,转写结果把两个说话人合成一段,音量还忽大忽小。
刚开始盯着「左右声道相位相反,直接相加被抵消」,折腾了半个多小时,排掉了。
把日志和配置对完,能解释这个现象的基本就这几处。命令里没加 -ac 1,声道数原样保留。少数情况下是源是 5.1 布局,需要正确的下混矩阵。
还有一种情况,采样率仍是 48k,接口按 16k 处理。
先看源文件的声道和布局
ffprobe -v error -show_entries stream=channels,channel_layout,sample_rate -of json in.mp4
下混成单声道并降到 16k
ffmpeg -y -i in.mp4 -vn -ac 1 -ar 16000 -c:a pcm_s16le out.wav
接着确认输出参数已经变了
ffprobe -v error -show_entries stream=channels,sample_rate,duration -of default=nw=1 out.wav
剩下的就是重新提交转写并对比说话人数量
python asr.py --file out.wav --diarize --out out.json && jq '.speakers | length' out.json
改完先别撤,确认这几项。输出是单声道 16k,时长与源一致,转写结果里能分出两个说话人,音量波动明显收敛。
补一句。抽音轨不等于适配转写,声道和采样率都要显式指定,不然接口会按自己的默认值再处理一遍。监控比日志更早给出信号,事后回看经常能提前半小时发现异常。
