这类问题我又碰上了一次。客服坐席的录音是双声道,左声道是客户右声道是坐席,转写前用单声道参数下混,两人同时说话时只能识别出一个人的内容,转写稿里几乎全是坐席的自述。

第一反应是「录音设备增益不同,一个声道明显更轻」,验证下来不成立。

原因不止一个,得分开看。下混把两个独立声道叠成一个,重叠段互相掩盖;转写模型只支持单声道输入;没有先做声道分离就直接转码。

先确认两个声道的音量差异

ffmpeg -i call.wav -af "astats=metadata=1:reset=0" -f null - 2>&1 | Select-String 'RMS level'

然后按声道拆成两个单声道文件分别转写

ffmpeg -i call.wav -filter_complex "[0:a]channelsplit=channel_layout=stereo[l][r]" -map "[l]" left.wav -map "[r]" right.wav

随后分别转写后按时间戳合并

python asr_two_track.py --left left.wav --right right.wav --merge-by-ts --out dialog.json

末了抽查重叠段是否两个说话人都在

python check_overlap.py --in dialog.json --min-overlap 0.3

改完先别撤,确认这几项。重叠段里客户与坐席的话都出现在转写稿中,按时间排序后没有互相覆盖,抽查二十段全部通过。

双声道录音天生带了说话人信息,先拆声道再转写比事后做说话人分离准确得多。同一份配置在测试环境跑通,不代表线上没事,两边的默认值经常不一样。

作者 9823189