先看现象。用 funasr 1.1.4 加载 paraformer-zh 转写 50 分钟客服录音,AutoModel 直接 generate 报错 input too long,把音频截到 5 分钟能过,整段就失败。

把日志和配置对完,能解释这个现象的基本就这几处。paraformer 单次输入有 30 秒左右的上限。还有一种是没有启用 fsmn-vad 做前置切分。

还有一种情况,采样率与模型训练的 16k 不一致。

另外,batch_size_s 设置过大把多段拼进一个 batch。

先确认输入音频的采样率

ffprobe -v error -show_entries stream=sample_rate,channels -of csv=p=0 call.wav

再往下在 AutoModel 里同时挂 VAD 模型

python -c "from funasr import AutoModel;m=AutoModel(model='paraformer-zh',vad_model='fsmn-vad',punc_model='ct-punc');print(m.generate(input='call.wav',batch_size_s=300)[0]['text'][:80])"

接着把 batch_size_s 降到 60 减少单批峰值

python -c "from funasr import AutoModel;m=AutoModel(model='paraformer-zh',vad_model='fsmn-vad');r=m.generate(input='call.wav',batch_size_s=60);print(len(r[0]['sentence_info']))"

等前面都确认过,再用带时间戳的输出核对切分是否丢句

python -c "import json;d=json.load(open('asr.json'));print(d['text'][:50], len(d['timestamp']))"

这台环境是别人交接的,不少默认值被动过,只能一项项核。

恢复的判定其实很直接。整段 50 分钟音频一次跑完,返回带句级时间戳的结果,抽查开头与结尾各 20 句均无缺失,不再报输入过长。

提醒一点。长音频不是靠调大上限解决的,VAD 前置切分既绕开长度限制又顺带得到停顿点,是这类中文模型的常规配置。拖得越久,排查成本越高,因为现场状态会被后续操作覆盖。

作者 9823189