用 FunASR 转写超长音频:1 小时录音也能一次搞定
转写一段 1 小时的播客、讲座或会议录音,用 Whisper 会很痛苦:它一次只处理 30 秒,你得自己把音频切片、逐片识别、再把结果拼起来,还要处理切片边界把词切断的问题。
FunASR 不用这么麻烦。它内置 VAD(语音端点检测),一次 generate() 调用就能吃下任意时长的音频——自动切句、批量解码、拼回完整文本,你一行切片代码都不用写。
安装
pip install -U funasr modelscope
完整代码(可直接运行)
from funasr import AutoModel
model = AutoModel(
model="iic/SenseVoiceSmall", # or "paraformer-zh"
vad_model="fsmn-vad", # built-in voice activity detection
vad_kwargs={"max_single_segment_time": 30000},
)
# One call on a full 1-hour file - VAD segments and batches it internally.
res = model.generate(
input="podcast_1hour.wav",
batch_size_s=300, # dynamic batching of VAD segments (throughput)
)
print(res[0]["text"])
实测:13 分钟音频 4.3 秒转完
long clip: 791s = 13.2 min
transcribed 791s in 4.3s -> RTFx=186
output chars: 2104 # full transcript, head to tail
我们把一段 13.2 分钟(791 秒)的录音丢进单次 generate(),4.3 秒就转写完毕(186x 实时),输出完整覆盖从开头到结尾。换成 1 小时的文件,做法完全一样——不用改一行代码。
为什么能处理任意时长
- VAD 自动切句:
fsmn-vad先把长音频按停顿切成一句句语音段,max_single_segment_time控制单段最长时长。 - 动态批处理:
batch_size_s=300把多段语音按总时长打包成批,一次性高吞吐解码。 - 内存可控:因为是分段处理,显存占用与文件总长无关,1 小时和 1 分钟占用相近。
进阶
- 加
punc_model="ct-punc"自动补标点; - 加
spk_model="cam++"得到说话人分离(谁在什么时候说); - 用
SenseVoiceSmall可同时拿到语种与情感;追求最快可看 速度对比。
典型场景
- 播客 / 有声书:整集一次转写、生成文稿。
- 会议 / 讲座 / 庭审:长录音批量转文字 + 存档检索。
- 客服通话:整通录音转写做质检与挖掘。
FunASR 是通义实验室开源的工业级语音识别工具包,长音频、流式、多语种全覆盖。
在 GitHub 上 Star FunASR ★