问题出现得很突然,日志倒是留得挺全。手机录的 48kHz 双声道 m4a 直接传给转写接口,返回文本语速明显变快、音调偏高,用 Audacity 手工转成 16k 单声道 wav 后就恢复正常。
刚开始盯着「m4a 容器里 AAC 的采样率字段与实际流不一致」,折腾了半个多小时,排掉了。
把日志和配置对完,能解释这个现象的基本就这几处。接口按 16k 解释采样率但没有重采样,时长被压成三分之一。另一种情况是双声道数据被当单声道交错读取,波形密度翻倍。
少数情况下是ffmpeg 只改容器没加 -ar,采样率原样透传。
第一件事是查真实的采样率与声道数
ffprobe -v error -show_entries stream=sample_rate,channels,codec_name -of csv=p=0 rec.m4a
转成 16k 单声道 pcm wav
ffmpeg -i rec.m4a -ac 1 -ar 16000 -c:a pcm_s16le rec16.wav
校验转换后的流参数
ffprobe -v error -show_entries stream=sample_rate,channels -of csv=p=0 rec16.wav
批量处理整个目录
python resample_dir.py --dir rec --rate 16000 --mono
怎么算真的好了,看的是同一批现象。转写文本的时长与源音频时长相差 2% 以内,语速正常,ffprobe 显示 16000 与单声道,日志里没有格式告警。
这里还有个坑。只改扩展名等于没转,接口读的是容器里的采样率字段,动手前先用 ffprobe 看一眼再说。监控比日志更早给出信号,事后回看经常能提前半小时发现异常。
