这个坑值得记一笔。转写一小时录音时进程内存一路涨到十几 G,最后被系统杀掉,短音频却完全正常。
刚开始盯着「批量处理多个文件,内存没有释放」,折腾了半个多小时,排掉了。
这类报错背后常见的原因有几处,逐个排除就行。整段音频一次性载入内存;模型输出保留了全部中间结果;音频是未压缩格式,体积本来就大。
转成单声道并降采样
ffmpeg -i long.wav -ac 1 -ar 16000 small.wav
接着按静音切分成十分钟左右的片段
python split_audio.py --max-minutes 10 --input small.wav
再往下逐段转写并释放中间结果
python -c "import gc;gc.collect()"
剩下的就是把结果按时间偏移合并
python merge_srt.py --dir parts --out final.srt
同一份数据我导出了两份,一份留底,一份拿来试。
改完先别撤,确认这几项。内存峰值控制在两 G 以内,长音频能完整转写,最终字幕连贯。
容易忽略的是,分段点落在句子中间会切断语义,按静音切分能明显改善首尾识别质量,代价是段数变多。线上能稳定复现的问题都不算难,难的是只在大流量下才出现的那种。