Python 语音活动检测(VAD):检测语音、去静音、按停顿切分音频

语音活动检测(VAD,Voice Activity Detection)是音频处理的基础一环:从一段录音里找出"哪里有人在说话、哪里是静音/噪声"。它是几乎所有语音流程的第一步——去掉静音省算力、把长录音按停顿切成小段、给下游 ASR 做预处理(包括给 Whisper 喂干净音频以省钱、防它在静音处胡乱"幻觉"出文字)。

FunASR 的 fsmn-vad 是一个工业级、轻量、极快的开源 VAD 模型,3 行 Python 就能用,返回每段语音的起止毫秒。下面全部是真实实测输出。

3 行代码做 VAD

pip install funasr

from funasr import AutoModel

model = AutoModel(model="fsmn-vad", disable_update=True)
segments = model.generate(input="audio.wav")[0]["value"]

print(segments)
# [[610, 5530]]   # 单位:毫秒 —— 语音从 0.61s 到 5.53s,开头 610ms 静音被自动剔除

返回值是 [[start_ms, end_ms], ...] 的列表,每个区间是一段连续语音。上例里一段 5.55s 的录音,开头的 0.61s 静音被自动去掉了。

真实示例:13 秒录音切成 2 段

把两段话中间插 1.5s 停顿拼成一段 13.31s 的录音(模拟真实带停顿的录音),VAD 的真实输出:

语音段起止时长
seg00.61s → 5.45s4.84s
seg17.28s → 13.29s6.01s

VAD 准确切出两段语音、把中间 1.5s 的停顿(5.45s~7.28s)和开头静音都识别为非语音。整段 13.31s 里语音占 82%,剔除了 18% 的静音。这一步在 GPU 上只花了 0.12 秒(约 110× 实时)——VAD 本身极轻,几乎不增加流程开销。

三个实用场景

1. 去静音 / 只保留语音

import soundfile as sf
import numpy as np

audio, sr = sf.read("audio.wav")
segments = model.generate(input="audio.wav")[0]["value"]

# 拼接所有语音段,丢弃静音
speech = np.concatenate([audio[int(s/1000*sr):int(e/1000*sr)] for s, e in segments])
sf.write("speech_only.wav", speech, sr)

2. 按停顿把长录音切成多个文件(便于批量识别)

for i, (s, e) in enumerate(segments):
    chunk = audio[int(s/1000*sr):int(e/1000*sr)]
    sf.write(f"chunk_{i}.wav", chunk, sr)
# chunk_0.wav, chunk_1.wav, ...  每个文件是一段独立语音

3. 给任何 ASR(含 Whisper)做预处理

在跑识别之前先做 VAD,有两个实打实的好处:① 不把静音/噪声送进模型 = 省算力、降成本;② Whisper 在长静音处容易"幻觉"出重复文字,先用 VAD 切掉静音能显著减少幻觉。FunASR 的 ASR 模型(SenseVoice / Paraformer)更是可以直接 vad_model="fsmn-vad" 一行接上,内部自动分段。

from funasr import AutoModel
# ASR 直接挂载 VAD,长音频自动分段识别
asr = AutoModel(model="iic/SenseVoiceSmall", vad_model="fsmn-vad")
result = asr.generate(input="long_audio.wav")

为什么用 fsmn-vad

fsmn-vad(FunASR)
用法3 行 Python,返回毫秒级语音区间
速度实测 13s 音频 0.12s(约 110× 实时)
体量轻量 FSMN 结构,CPU 也能实时跑
生态可独立用,也能一行挂到 FunASR 的 ASR 上自动分段
许可证开源,可商用

如果你已经在用 FunASR 做识别,VAD 是同一套工具、零额外依赖;如果你在用 Whisper 或别的 ASR,也可以把 fsmn-vad 当成独立的预处理器。想看完整的语音流程,可参考 转写超长音频说话人分离

FunASR 全家桶都是开源的——fsmn-vad、工业级 ASR、标点、说话人、情感事件、LLM-ASR,拿来即用。觉得有用就点个 Star 支持一下 👇

⭐ Star FunASR

也欢迎 Star:SenseVoice · Fun-ASR · FunClip

相关文章