SenseVoiceSmall代码实例:批量处理音频文件的Python脚本

SenseVoiceSmall代码实例:批量处理音频文件的Python脚本

1. 引言:为什么需要批量处理?

你有没有遇到过这种情况:手头有几十个会议录音、客户访谈或课程音频,想快速转成文字做归档?一个个上传到 WebUI 点击识别,不仅费时,还容易出错。这时候,自动化脚本就是你的救星。

本文要讲的,不是怎么用 Gradio 点点点,而是如何利用SenseVoiceSmall 模型的 Python API,写一个能自动遍历文件夹、批量识别音频、输出带情感和事件标签的文字结果的实用脚本。

我们基于阿里开源的funasr库,结合模型自带的富文本后处理能力,打造一个真正能“干活”的工具。无论你是做内容分析、客户服务质检,还是学术研究,这个脚本能帮你把重复劳动交给机器。

核心价值
学完这篇,你将掌握:

  • 如何在代码中调用 SenseVoiceSmall 模型
  • 如何实现多语言自动识别与情感/事件标注
  • 如何批量处理整个文件夹的音频
  • 输出结构化文本,方便后续分析

2. 环境准备与模型加载

2.1 安装依赖

确保你的环境已经安装了必要的库。如果你使用的是官方镜像,大部分依赖已经就绪,只需确认以下包:

pip install funasr modelscope gradio av
  • funasr:阿里巴巴语音识别工具包,支持 SenseVoiceSmall。
  • av:用于高效音频解码(比 librosa 快很多)。
  • gradio:虽然我们不用 WebUI,但它内部依赖可能被 funasr 调用。

2.2 初始化模型

这是最关键的一步。我们需要加载SenseVoiceSmall模型,并配置好参数,让它能处理长音频、检测情感和声音事件。

from funasr import AutoModel from funasr.utils.postprocess_utils import rich_transcription_postprocess import os # 加载模型 model = AutoModel( model="iic/SenseVoiceSmall", trust_remote_code=True, device="cuda:0", # 使用 GPU 加速,若无 GPU 改为 "cpu" vad_model="fsmn-vad", # 启用语音活动检测 vad_kwargs={"max_single_segment_time": 30000}, # 单段最长 30 秒 )
参数说明:
参数作用
trust_remote_code=True允许加载远程自定义模型代码
device="cuda:0"使用第一块 GPU,提升推理速度
vad_model启用语音分割,避免静音段干扰
max_single_segment_time控制每段语音长度,防止显存溢出

3. 批量处理脚本设计

3.1 核心逻辑拆解

我们要实现的功能是:

  1. 给定一个音频文件夹路径
  2. 遍历所有.wav,.mp3等常见格式
  3. 对每个文件调用模型识别
  4. 将结果保存为同名.txt文件
  5. 支持自动语言识别或指定语言

3.2 完整脚本实现

import os from funasr import AutoModel from funasr.utils.postprocess_utils import rich_transcription_postprocess # 初始化模型(只加载一次,复用) model = AutoModel( model="iic/SenseVoiceSmall", trust_remote_code=True, device="cuda:0", vad_model="fsmn-vad", vad_kwargs={"max_single_segment_time": 30000}, ) def batch_transcribe_folder( input_dir: str, output_dir: str, language: str = "auto", # 可选: zh, en, yue, ja, ko use_itn: bool = True, ): """ 批量转录音频文件夹 Args: input_dir: 音频文件夹路径 output_dir: 输出文本文件夹路径 language: 语言设置,"auto" 表示自动识别 use_itn: 是否启用文本正规化(如数字转汉字) """ # 创建输出目录 os.makedirs(output_dir, exist_ok=True) # 支持的音频格式 audio_exts = {".wav", ".mp3", ".flac", ".m4a", ".ogg"} # 遍历文件夹 for filename in os.listdir(input_dir): file_path = os.path.join(input_dir, filename) # 跳过非文件和非音频 if not os.path.isfile(file_path): continue _, ext = os.path.splitext(filename.lower()) if ext not in audio_exts: print(f"跳过非音频文件: {filename}") continue print(f"正在处理: {filename} ...") try: # 调用模型识别 res = model.generate( input=file_path, cache={}, language=language, use_itn=use_itn, batch_size_s=60, merge_vad=True, merge_length_s=15, ) if len(res) == 0: result_text = "识别失败:未检测到有效语音" else: raw_text = res[0]["text"] # 使用内置后处理清洗富文本标签 clean_text = rich_transcription_postprocess(raw_text) result_text = clean_text # 保存为同名 .txt 文件 txt_filename = os.path.splitext(filename)[0] + ".txt" txt_path = os.path.join(output_dir, txt_filename) with open(txt_path, "w", encoding="utf-8") as f: f.write(result_text) print(f"✅ 已保存结果: {txt_path}") except Exception as e: print(f"❌ 处理 {filename} 时出错: {str(e)}") with open(os.path.join(output_dir, "error.log"), "a", encoding="utf-8") as f: f.write(f"{filename}: {str(e)}\n") # 使用示例 if __name__ == "__main__": batch_transcribe_folder( input_dir="./audios", # 替换为你的音频文件夹 output_dir="./transcripts", # 输出文件夹 language="auto", # 自动识别语言 )

4. 脚本功能详解

4.1 富文本后处理:让标签更易读

SenseVoice 的原始输出会包含类似<|HAPPY|><|BGM|>这样的标签。直接看有点乱,所以我们用rich_transcription_postprocess做清洗。

比如:

原始输出: "<|zh|><|HAPPY|>今天天气真好!<|LAUGHTER|>哈哈哈<|en|><|SAD|>I'm feeling blue..." 清洗后: "[开心] 今天天气真好![笑声] 哈哈哈 [悲伤] I'm feeling blue..."

这个函数会自动转换语言码、情感和事件标签,输出人类可读的格式,非常适合后续分析。

4.2 多语言自动识别

通过设置language="auto",模型会自动判断每段语音的语言。这对于混合语种的对话特别有用,比如中英夹杂的会议记录。

如果你确定全是中文,可以设为language="zh",提升一点准确率。

4.3 错误处理与日志记录

脚本中加入了异常捕获机制。如果某个音频损坏或格式不支持,不会导致整个任务中断,而是记录错误并继续处理下一个文件。

同时生成error.log,方便事后排查问题。


5. 实际使用建议

5.1 推荐的音频格式

虽然模型支持多种格式,但为了稳定性和效率,建议:

  • 采样率:16kHz(模型训练数据主流)
  • 声道数:单声道(节省资源)
  • 编码:PCM WAV 或 MP3(兼容性好)

你可以用ffmpeg提前批量转换:

# 批量转为 16k 单声道 wav for file in *.mp3; do ffmpeg -i "$file" -ar 16000 -ac 1 "${file%.mp3}.wav" done

5.2 性能优化技巧

场景建议
显存有限减小batch_size_s(如设为 30)
长音频多启用merge_vad=True,合并短句
追求速度使用 GPU,避免 CPU 推理
多任务并发启动多个进程分摊文件夹

5.3 输出结果的应用场景

生成的文本可以直接用于:

  • 情绪趋势分析:统计一段对话中“开心”、“愤怒”出现频率
  • 关键事件定位:查找掌声、笑声时间点,用于视频剪辑
  • 内容摘要:结合大模型对转录文本做总结
  • 客服质检:自动检测服务态度是否友好

6. 总结:从手动到自动的跃迁

6.1 你学到了什么?

通过这篇文章,你应该已经掌握了:

  • 如何用 Python 调用SenseVoiceSmall模型进行语音识别
  • 如何实现批量处理,摆脱逐个上传的低效操作
  • 如何利用富文本后处理提取情感和声音事件
  • 一套可直接运行的脚本,拿来就能用

这不仅仅是一个技术实现,更是工作方式的升级——把重复劳动交给代码,让你专注更有价值的分析和决策。

6.2 下一步可以做什么?

  • 把脚本封装成命令行工具(用argparse
  • 添加时间戳输出,支持字幕生成
  • 结合 Whisper 或 Paraformer 做对比评测
  • 将结果导入数据库,做可视化看板

自动化的声音理解,才刚刚开始。


获取更多AI镜像

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1192149.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

幽冥大陆(一百08)门禁局域网http白名单二次识别—东方仙盟练气期

在线比对识别用途&#xff1a;设备识别后推送数据到平台地址&#xff0c;识别判断后返回信息到设备进行开门和提示在线接口可脱离整个局域网单独在运行&#xff0c;有配置工具可直接切换比对模式和配置在线比对地址。可以理解为此接口为一套单独的协议请求方式http post设备请求…

拯救者Y7000 BIOS终极解锁指南:新手也能掌握的完整教程

拯救者Y7000 BIOS终极解锁指南&#xff1a;新手也能掌握的完整教程 【免费下载链接】LEGION_Y7000Series_Insyde_Advanced_Settings_Tools 支持一键修改 Insyde BIOS 隐藏选项的小工具&#xff0c;例如关闭CFG LOCK、修改DVMT等等 项目地址: https://gitcode.com/gh_mirrors/…

GPEN在家庭相册数字化中的实际应用案例

GPEN在家庭相册数字化中的实际应用案例 你是否也翻过家里的老相册&#xff1f;泛黄的照片、模糊的面容、斑驳的痕迹&#xff0c;每一张都承载着一段回忆&#xff0c;却因为岁月的侵蚀而变得难以辨认。我们想留住那些笑脸&#xff0c;想看清祖辈年轻时的模样&#xff0c;但传统…

老年陪伴机器人语音模块:基于SenseVoiceSmall的情感响应

老年陪伴机器人语音模块&#xff1a;基于SenseVoiceSmall的情感响应 随着老龄化社会的加速到来&#xff0c;如何提升老年人的生活质量成为社会关注的重点。在众多智能化解决方案中&#xff0c;老年陪伴机器人正逐渐从概念走向现实。而其中最关键的一环——语音交互系统&#x…

浏览器资源嗅探终极指南:解锁网页媒体下载完整教程

浏览器资源嗅探终极指南&#xff1a;解锁网页媒体下载完整教程 【免费下载链接】cat-catch 猫抓 chrome资源嗅探扩展 项目地址: https://gitcode.com/GitHub_Trending/ca/cat-catch 还在为无法保存心仪的视频内容而烦恼吗&#xff1f;面对复杂的流媒体协议和加密内容&am…

Speech Seaco Paraformer模型体积分析:参数量与加载时间关系研究

Speech Seaco Paraformer模型体积分析&#xff1a;参数量与加载时间关系研究 1. 研究背景与目标 语音识别技术近年来在工业界和学术界都取得了显著进展&#xff0c;尤其是基于Transformer架构的模型如Paraformer&#xff0c;在中文语音识别任务中表现突出。Speech Seaco Para…

模型加载缓慢?麦橘超然缓存预热优化实战教程

模型加载缓慢&#xff1f;麦橘超然缓存预热优化实战教程 1. 麦橘超然&#xff1a;Flux 离线图像生成控制台简介 你是不是也遇到过这种情况&#xff1a;满怀期待地启动 AI 绘画项目&#xff0c;结果卡在模型加载环节&#xff0c;等了三分钟还没反应&#xff1f;显存不够、加载…

终极字体合并工具:轻松解决魔兽世界字体兼容性问题

终极字体合并工具&#xff1a;轻松解决魔兽世界字体兼容性问题 【免费下载链接】Warcraft-Font-Merger Warcraft Font Merger&#xff0c;魔兽世界字体合并/补全工具。 项目地址: https://gitcode.com/gh_mirrors/wa/Warcraft-Font-Merger 还在为魔兽世界中文显示不全而…

GalTransl终极指南:轻松实现Galgame智能汉化的完整方案

GalTransl终极指南&#xff1a;轻松实现Galgame智能汉化的完整方案 【免费下载链接】GalTransl 支持GPT-3.5/GPT-4/Newbing/Sakura等大语言模型的Galgame自动化翻译解决方案 Automated translation solution for visual novels supporting GPT-3.5/GPT-4/Newbing/Sakura 项目…

猫抓Cat-Catch:解锁网络资源捕获的专业级解决方案

猫抓Cat-Catch&#xff1a;解锁网络资源捕获的专业级解决方案 【免费下载链接】cat-catch 猫抓 chrome资源嗅探扩展 项目地址: https://gitcode.com/GitHub_Trending/ca/cat-catch 还在为无法高效获取在线视频资源而困扰&#xff1f;猫抓Cat-Catch作为一款功能强大的浏览…

BiliTools:跨平台B站资源下载神器,解锁超清视频与无损音频

BiliTools&#xff1a;跨平台B站资源下载神器&#xff0c;解锁超清视频与无损音频 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱&#xff0c;支持视频、音乐、番剧、课程下载……持续更新 项目地址: https://gitcode.com/GitHub_Tren…

AI视频总结神器:3分钟快速掌握B站海量知识的高效方法

AI视频总结神器&#xff1a;3分钟快速掌握B站海量知识的高效方法 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱&#xff0c;支持视频、音乐、番剧、课程下载……持续更新 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliT…

Blender智能重拓扑插件QRemeshify完全操作指南

Blender智能重拓扑插件QRemeshify完全操作指南 【免费下载链接】QRemeshify A Blender extension for an easy-to-use remesher that outputs good-quality quad topology 项目地址: https://gitcode.com/gh_mirrors/qr/QRemeshify 还在为复杂的3D网格优化而苦恼吗&…

ms-swift性能优化技巧:提升训练速度的几个关键设置

ms-swift性能优化技巧&#xff1a;提升训练速度的几个关键设置 在大模型微调实践中&#xff0c;训练速度直接决定了迭代效率和资源成本。ms-swift作为魔搭社区推出的轻量级微调框架&#xff0c;不仅支持600文本模型和300多模态模型&#xff0c;更通过一系列底层优化技术显著提…

fft npainting lama模型训练数据来源:泛化能力影响因素

fft npainting lama模型训练数据来源&#xff1a;泛化能力影响因素 1. 引言&#xff1a;图像修复技术的现实需求与挑战 在数字图像处理领域&#xff0c;图像修复&#xff08;Inpainting&#xff09;是一项极具实用价值的技术。无论是去除照片中的水印、移除干扰物体&#xff…

万物识别-中文-通用领域垃圾分类系统:智能回收站部署实战

万物识别-中文-通用领域垃圾分类系统&#xff1a;智能回收站部署实战 你有没有想过&#xff0c;一个垃圾桶也能“看懂”你手里的垃圾是什么&#xff1f;不是科幻&#xff0c;而是现实。借助阿里开源的万物识别模型&#xff0c;我们今天要动手搭建一套中文通用领域的智能垃圾分…

用Unsloth微调Phi模型,小显存也能跑大模型

用Unsloth微调Phi模型&#xff0c;小显存也能跑大模型 1. 引言&#xff1a;为什么选择Unsloth做高效微调&#xff1f; 你是不是也遇到过这样的问题&#xff1a;想微调一个7B甚至更大的语言模型&#xff0c;但显存不够、训练太慢、成本太高&#xff1f;传统方法动辄需要A100级…

OpCore Simplify:让黑苹果安装变得前所未有的简单

OpCore Simplify&#xff1a;让黑苹果安装变得前所未有的简单 【免费下载链接】OpCore-Simplify A tool designed to simplify the creation of OpenCore EFI 项目地址: https://gitcode.com/GitHub_Trending/op/OpCore-Simplify 还在为复杂的OpenCore配置而头疼吗&…

Fun-ASR实战:如何高效转写课程与访谈内容

Fun-ASR实战&#xff1a;如何高效转写课程与访谈内容 在教育、媒体、科研和企业服务等领域&#xff0c;大量的知识传递依赖于口头交流——无论是线上课程讲解、专家访谈对话&#xff0c;还是内部培训会议。这些音频内容蕴含着宝贵的信息&#xff0c;但若无法快速转化为可编辑、…

QtScrcpy画质终极优化:从入门到4K超清的完整指南

QtScrcpy画质终极优化&#xff1a;从入门到4K超清的完整指南 【免费下载链接】QtScrcpy Android实时投屏软件&#xff0c;此应用程序提供USB(或通过TCP/IP)连接的Android设备的显示和控制。它不需要任何root访问权限 项目地址: https://gitcode.com/barry-ran/QtScrcpy …