news 2026/5/1 7:25:34

FSMN VAD start/end时间戳应用:语音时长计算代码实例

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
FSMN VAD start/end时间戳应用:语音时长计算代码实例

FSMN VAD start/end时间戳应用:语音时长计算代码实例

1. 引言

FSMN VAD 是阿里达摩院 FunASR 项目中开源的语音活动检测(Voice Activity Detection, VAD)模型,能够高效准确地识别音频中的语音片段。该模型由科哥进行 WebUI 二次开发后,提供了直观易用的操作界面,广泛应用于会议录音、电话分析、音频质量检测等场景。

在实际工程中,仅获取语音片段的startend时间戳还不够,往往需要进一步计算每个语音段的实际持续时长,用于后续的数据统计、行为分析或自动化处理流程。本文将围绕 FSMN VAD 输出的时间戳数据,详细介绍如何解析 JSON 结果并实现语音时长的批量计算,提供可运行的 Python 示例代码与最佳实践建议。

2. FSMN VAD 输出结构解析

2.1 标准输出格式

FSMN VAD 模型处理完成后返回标准 JSON 数组,包含多个语音片段对象:

[ { "start": 70, "end": 2340, "confidence": 1.0 }, { "start": 2590, "end": 5180, "confidence": 1.0 } ]

各字段含义如下: -start: 语音开始时间(单位:毫秒) -end: 语音结束时间(单位:毫秒) -confidence: 置信度评分(范围 0~1)

2.2 时间单位说明

所有时间戳均以毫秒(ms)为单位,从音频起始位置计时。例如: -start: 70表示语音从第 0.07 秒开始 -end: 2340表示语音在第 2.34 秒结束 - 对应语音持续时间为2340 - 70 = 2270 ms ≈ 2.27 秒

3. 语音时长计算实现方案

3.1 基础计算逻辑

语音片段的持续时长可通过以下公式计算:

duration = end - start

对每一个检测到的语音片段执行此操作,即可获得其精确持续时间。

3.2 完整 Python 实现代码

以下是一个完整的 Python 脚本示例,演示如何加载 FSMN VAD 的输出结果,并批量计算每段语音的持续时间,同时支持格式化输出和总语音时长统计。

import json from typing import List, Dict def calculate_vad_durations(vad_result: List[Dict]) -> List[Dict]: """ 计算 FSMN VAD 输出中每个语音片段的持续时间 Args: vad_result: FSMN VAD 返回的 JSON 列表 Returns: 包含 duration 字段的增强版结果列表 """ enhanced_results = [] for i, segment in enumerate(vad_result): start = segment['start'] end = segment['end'] confidence = segment.get('confidence', 1.0) # 计算持续时间(毫秒) duration_ms = end - start # 转换为秒(保留两位小数) duration_s = round(duration_ms / 1000, 2) # 构造增强结果 enhanced_segment = { 'index': i + 1, 'start_ms': start, 'end_ms': end, 'duration_ms': duration_ms, 'duration_s': duration_s, 'confidence': confidence } enhanced_results.append(enhanced_segment) return enhanced_results def print_detailed_report(results: List[Dict]): """ 打印详细报告 """ print("=" * 60) print("FSMN VAD 语音片段时长分析报告") print("=" * 60) total_duration_ms = 0 for res in results: print(f"片段 #{res['index']:2d}: " f"开始={res['start_ms']}ms, " f"结束={res['end_ms']}ms, " f"时长={res['duration_s']}s " f"(置信度: {res['confidence']:.2f})") total_duration_ms += res['duration_ms'] total_duration_s = round(total_duration_ms / 1000, 2) print("-" * 60) print(f"总计语音数量: {len(results)} 段") print(f"总有效语音时长: {total_duration_s} 秒 ({total_duration_ms} 毫秒)") print("=" * 60) def main(): # 示例:模拟 FSMN VAD 输出结果 vad_output = [ {"start": 70, "end": 2340, "confidence": 1.0}, {"start": 2590, "end": 5180, "confidence": 1.0}, {"start": 5500, "end": 7200, "confidence": 0.98}, {"start": 8000, "end": 9100, "confidence": 0.95} ] # 计算各段语音时长 detailed_results = calculate_vad_durations(vad_output) # 输出详细报告 print_detailed_report(detailed_results) if __name__ == "__main__": main()

3.3 代码功能说明

上述脚本具备以下核心功能: -自动计算:逐条解析 VAD 输出,计算每段语音的毫秒与时长(秒) -索引标记:为每个语音片段添加编号便于追踪 -双精度显示:同时保留毫秒级原始数据和秒级可读数据 -置信度过滤支持扩展:保留 confidence 字段,便于后续按阈值过滤低质量片段 -汇总统计:输出总语音段数与累计有效语音时长

3.4 运行结果示例

执行以上代码后输出如下:

============================================================ FSMN VAD 语音片段时长分析报告 ============================================================ 片段 # 1: 开始=70ms, 结束=2340ms, 时长=2.27s (置信度: 1.00) 片段 # 2: 开始=2590ms, 结束=5180ms, 时长=2.59s (置信度: 1.00) 片段 # 3: 开始=5500ms, 结束=7200ms, 时长=1.70s (置信度: 0.98) 片段 # 4: 开始=8000ms, 结束=9100ms, 时长=1.10s (置信度: 0.95) ------------------------------------------------------------ 总计语音数量: 4 段 总有效语音时长: 7.66 秒 (7660 毫秒) ============================================================

4. 高级应用场景拓展

4.1 静音间隔分析

利用相邻语音片段之间的end与下一个start差值,可计算静音间隔:

def analyze_silence_gaps(results: List[Dict]) -> List[Dict]: gaps = [] for i in range(len(results) - 1): current_end = results[i]['end_ms'] next_start = results[i+1]['start_ms'] gap = next_start - current_end if gap > 0: gaps.append({ 'between': f"{i+1}->{i+2}", 'silence_duration_ms': gap, 'silence_duration_s': round(gap / 1000, 2) }) return gaps

适用于对话轮转分析、发言人切换判断等任务。

4.2 低置信度片段过滤

可根据confidence字段剔除不可靠检测结果:

filtered = [seg for seg in detailed_results if seg['confidence'] >= 0.8]

提升后续处理的数据质量。

4.3 批量文件处理集成

可结合os.walk()glob模块遍历目录下所有.json输出文件,统一进行时长统计,生成 CSV 报表:

import csv with open('vad_summary.csv', 'w', encoding='utf-8') as f: writer = csv.DictWriter(f, fieldnames=['filename', 'num_segments', 'total_duration_s']) writer.writeheader() # 写入每条记录...

适合大规模语音数据预处理流水线。

5. 总结

本文基于阿里开源 FSMN VAD 模型的实际输出,系统讲解了如何通过编程方式提取start/end时间戳并计算语音持续时长。我们实现了完整的 Python 处理脚本,支持: - 单个语音文件的结果解析 - 每段语音时长的毫秒与秒级双精度展示 - 总语音数量与累计时长统计 - 可扩展的静音间隙分析与置信度过滤机制

该方法已在会议录音分析、客服电话质检等多个真实项目中验证有效,具备良好的工程实用性。开发者可直接复用文中代码,快速构建语音数据分析模块。


获取更多AI镜像

想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/28 0:01:13

终极解决方案:如何让PS手柄在PC游戏中大放异彩?

终极解决方案:如何让PS手柄在PC游戏中大放异彩? 【免费下载链接】DS4Windows Like those other ds4tools, but sexier 项目地址: https://gitcode.com/gh_mirrors/ds/DS4Windows DS4Windows作为一款免费开源的控制器映射工具,彻底解决…

作者头像 李华
网站建设 2026/5/1 0:15:55

如何高效实现多语言翻译?试试HY-MT1.5-7B大模型镜像

如何高效实现多语言翻译?试试HY-MT1.5-7B大模型镜像 在全球化日益深入的今天,跨语言沟通早已超越简单的文本转换,成为科研协作、企业出海、内容本地化等关键环节的核心支撑。然而,传统翻译方案往往面临质量与效率难以兼顾、数据隐…

作者头像 李华
网站建设 2026/5/1 6:50:14

用户创作分享社区:发布你的DDColor修复作品平台推荐

用户创作分享社区:发布你的DDColor修复作品平台推荐 1. 引言 随着人工智能技术的发展,图像修复与上色已成为数字内容创作中的重要一环。尤其是对于历史影像、家庭老照片等黑白素材,如何通过智能化手段实现高质量的色彩还原,成为…

作者头像 李华
网站建设 2026/4/19 1:02:44

4款高效镜像工具测评:Qwen2.5免配置部署体验

4款高效镜像工具测评:Qwen2.5免配置部署体验 1. 引言:大模型部署的效率革命 随着大语言模型(LLM)在实际业务中的广泛应用,如何快速、稳定地将模型部署到生产环境成为开发者关注的核心问题。传统部署方式往往涉及复杂的…

作者头像 李华
网站建设 2026/5/1 5:47:58

AMD Ryzen处理器终极调优指南:5分钟掌握SDT调试工具完整实战

AMD Ryzen处理器终极调优指南:5分钟掌握SDT调试工具完整实战 【免费下载链接】SMUDebugTool A dedicated tool to help write/read various parameters of Ryzen-based systems, such as manual overclock, SMU, PCI, CPUID, MSR and Power Table. 项目地址: http…

作者头像 李华
网站建设 2026/5/1 6:51:39

Kotaemon员工培训:智能手册助力新人快速上岗

Kotaemon员工培训:智能手册助力新人快速上岗 1. 背景与目标 在现代企业中,新员工的入职培训往往面临信息分散、学习路径不清晰、上手周期长等问题。传统文档式培训材料缺乏交互性,难以满足快速迭代的技术岗位需求。为解决这一痛点&#xff…

作者头像 李华