用 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 ★相关文章
- FunASR vs Whisper 实测对比
- SenseVoice 部署指南
- Fun-ASR-Nano 使用指南
- 说话人分离:谁在何时说话
- 情感与语种检测
- 实时流式语音识别
- 命令行转写(文本/JSON/SRT)
- 自托管 OpenAI Whisper API 替代
- 自动生成字幕(SRT / VTT)
- Python 语音转文字教程
- FunASR 跑进 llama.cpp(whisper.cpp 替代)
- FunASR vs faster-whisper(中文/粤语)
- 轻量语音识别(CPU 250MB)
- 自托管替代 Deepgram/AssemblyAI
- 选哪个 FunASR 模型
- 粤语语音识别(SenseVoice 原生粤语)
- 日语语音识别(SenseVoice 转写+标点+情感)
- Python 语音活动检测(VAD)
- 自托管替代 Google/AWS/Azure 云语音 API
- 中文语音识别(普通话)实战
- 标点恢复 Python 实战
- 语音识别带时间戳(字级)