本地起 qwen2-audio-7b-instruct,用 transformers 4.45 的 processor 处理一段 3 分半的访谈音频,generate 时报 audio input is too long,同一段 40 秒的片段正常。
一开始怀疑是「prompt 里同时塞了长文本挤占了帧预算」,查了一圈,方向不对。
这类报错背后常见的原因有几处,逐个排除就行。模型对单段音频有固定时长上限,约 30 秒。另一种情况是音频被转成 mel 帧后超过上下文预算。
不容易想到的是,采样率 44.1k 未降到 16k,帧数被动翻倍。
先看 processor 给出的音频 token 数
python -c "from transformers import AutoProcessor;p=AutoProcessor.from_pretrained('Qwen/Qwen2-Audio-7B-Instruct');a=p(audio='clip.wav',sampling_rate=16000);print(a['input_features'].shape)"
再往下把长音频切成 30 秒以内的片段分别推理
ffmpeg -i talk.wav -f segment -segment_time 30 -c copy seg_%03d.wav
降低采样率后再确认帧数变化
ffmpeg -i talk.wav -ar 16000 -ac 1 -c:a pcm_s16le talk16k.wav
剩下的就是把分片结果按时间顺序拼成完整文稿
python join_asr.py --dir seg_out/ --out talk.txt
恢复的判定其实很直接。每段音频都能返回文本,拼出的整稿覆盖全部时长,processor 打印的帧数在模型上限之内。
补一句。音频模型的上限按帧算不按秒算,采样率翻倍就等于时长翻倍,切分前统一重采样是最省事的一步。线上能稳定复现的问题都不算难,难的是只在大流量下才出现的那种。
