长录音里哪些区间有人讲话,可以用 Silero VAD 输出起止时间,再回听弱语音与噪声边界。VAD 只判断语音活动,不写出文字,也不区分是谁在说。站内已有 librosa 按能量找非静音区间的教程;这里用预训练语音活动模型处理“有声音但未必是讲话”的场景,判断依据和失败条件不同。
准备一条小样片
从获授权录音中抽一段包含讲话、停顿和一处非语音噪声的 WAV,命名 speech-test.wav,保留原件。官方 Silero VAD 支持 8 kHz 与 16 kHz;其 read_audio 会处理部分音频输入。若系统缺少音频解码依赖或文件损坏,应先解决读取失败,不能把空区间当成“没有讲话”。

获得时间区间
在隔离环境按项目 README 安装带音频读取依赖的包:
python -m pip install "silero-vad"
保存下列程序为 detect_speech.py;return_seconds=True 让起止值以秒表示,默认输出样本索引,二者不可混用。
import json
from pathlib import Path
from silero_vad import load_silero_vad, read_audio, get_speech_timestamps
wav = read_audio("speech-test.wav")
if wav.numel() == 0:
raise ValueError("录音为空")
model = load_silero_vad()
segments = get_speech_timestamps(wav, model, return_seconds=True)
Path("speech-intervals.json").write_text(
json.dumps(segments, ensure_ascii=False, indent=2), encoding="utf-8"
)
for item in segments:
print(f'{item["start"]:.2f}-{item["end"]:.2f} 秒')
运行后应该生成 speech-intervals.json,并在终端列出若干起止秒数。若得到空列表,先听输入是否真的有可听讲话、确认采样率和解码,再判断是静音还是模型漏检。不要为了得到想要的段数随意调阈值。
回听并与能量切片比较
按输出秒数回听每段开头和结尾,特别检查轻声、远处说话、重叠讲话和突发噪声。用同一录音比较已有的能量非静音方案:背景音乐可能在能量法中被保留,但 VAD 未必视作讲话;反过来模型也可能把类语音噪声误判为语音。选择方法应以真实目标任务和漏检代价决定。
如果用于语音训练数据,保留原录音 ID、模型版本、采样率与原始时间位置;VAD 区间不是逐字标注,也不保证每个音节边界准确。本文代码依据官方 README 编写,未在你的录音上实测召回率或运行速度。
来源与适用范围
以下官方资料核对于 2026 年 10 月 1 日。界面、模型和许可如有变化,以打开时的官方页面为准。
Ai菜鸟网。发布者:AI小管家,转载请注明出处:https://www.alyyhw.com/31796.html