闲社服务运行正常AI智能体自动化平台
s

语音转录

技能标识:sensevoice-transcribe

Transcribe audio files (WAV/MP3/M4A/FLAC) to timestamped text using SenseVoice-Small + FSMN-VAD. Supports single-file and batch mode with VAD-anchored per-segment timestamps (~15s granularity). Use when the user wants to transcribe speech/audio, run batch transcription on daylog recordings, or re-transcribe specific dates. Replaces the old whisper-transcribe skill.

作者:admin | 来源记录:ClawHub
登记来源
ClawHub
版本
V 1.0.0
检测标记
后台标记通过
免费
免费获取
0
收藏
来源与检测标记为平台登记信息,并不代表已展示可复核的检测报告。使用前请核对版本、依赖和所需权限,建议先在隔离环境中运行。
概述
安装方式
版本历史

语音转录

SenseVoice 转录

使用 FunASR 的 iic/SenseVoiceSmall 模型,结合 fsmn-vad 进行时间戳锚定,将音频转录为带时间戳的文本。

处理流程

  1. 1. FSMN-VAD 将音频分割为语音片段(30分钟文件约258个片段)
  2. SenseVoice-Small 以 mergevad=True 模式转录完整音频
  3. 原始文本通过 <|zh|> 标签分割 → 经 richtranscription_postprocess() 清洗
  4. 文本片段按比例映射到 VAD 时间戳
  5. 输出:每行 [HH:MM:SS] 文本,约15秒粒度

环境配置

虚拟环境:~/.openclaw/venvs/sensevoice/
Python:3.12
关键包:funasr==1.3.1, modelscope, onnxruntime
模型缓存:~/.cache/modelscope/hub/models/iic/SenseVoiceSmall
VAD缓存:~/.cache/modelscope/hub/models/iic/speechfsmnvad_zh-cn-16k-common-pytorch

首次设置

bash
python3 -m venv ~/.openclaw/venvs/sensevoice
source ~/.openclaw/venvs/sensevoice/bin/activate
pip install funasr modelscope onnxruntime

模型在首次运行时自动下载(~234MB SenseVoice + ~4MB VAD)

使用方法

单个文件

bash
source ~/.openclaw/venvs/sensevoice/bin/activate
python3 -c
from funasr import AutoModel
from funasr.utils.postprocessutils import richtranscription_postprocess
from datetime import datetime, timedelta
import re

wav =

从文件名解析开始时间:TX01MIC01520260308124130orig.wav


m = re.search(r(\d{8})_(\d{6}), wav)
start_dt = datetime.strptime(m.group(1)+m.group(2), %Y%m%d%H%M%S) if m else None

vadmodel = AutoModel(model=fsmn-vad, disableupdate=True)
model = AutoModel(model=iic/SenseVoiceSmall, vad_model=fsmn-vad,
vadkwargs={maxsinglesegmenttime: 30000}, device=cpu)

vadsegs = vadmodel.generate(input=wav)[0].get(value, [])
res = model.generate(input=wav, cache={}, language=zh, use_itn=True,
batchsizes=60, merge_vad=True)

texts = [richtranscriptionpostprocess(s).strip()
for s in re.split(r<\|zh\|>, res[0][text]) if s.strip()]
texts = [s for s in texts if len(s) > 1]

ratio = len(vad_segs) / len(texts) if texts else 1
for i, t in enumerate(texts):
vi = min(int(i * ratio), len(vad_segs)-1)
ts = (startdt + timedelta(milliseconds=vadsegs[vi][0])).strftime(%H:%M:%S) if startdt else f{vadsegs[vi][0]//1000:.0f}s
print(f[{ts}] {t})

批量模式(日志处理)

配套的 scripts/batch_transcribe.py 脚本处理完整的日志流程:

bash
source ~/.openclaw/venvs/sensevoice/bin/activate
cd ~/Documents/dec/daylog

预览模式——查看将要转录的内容

python3 scripts/batch_transcribe.py --dry-run

转录所有新文件

python3 scripts/batch_transcribe.py

重新转录特定日期(删除现有文件后重新运行)

python3 scripts/batch_transcribe.py --force-dates 2026-03-07,2026-03-08

带进度文件和 Discord 通知

python3 scripts/batch_transcribe.py \ --progress-file /tmp/daylog-progress.json \ --discord-webhook https://discord.com/api/webhooks/...

参数说明:

参数说明
--dry-run预览模式,不写入文件
--engine sensevoice\
whisper | 引擎(默认:sensevoice) |
| --force-dates YYYY-MM-DD,... | 删除并重新转录这些日期 |
| --progress-file PATH | 写入 JSON 进度用于监控 |
| --discord-webhook URL | 向 Discord 发送开始/里程碑/完成通知 |

目录结构:

daylog/
├── raw/ # WAV 输入(DJI MIC 3,48kHz/32bit,~247MB/30分钟)
│ ├── TX01MIC00920260308094129orig.wav
│ └── ...
├── transcripts/ # 输出,按日期分组
│ └── 2026-03-08/
│ ├── 000TX01MIC00920260308094129_orig.txt
│ └── ...
└── notes/ # 编译的每日笔记(单独步骤)
└── 2026-03-08.md

行为说明:

  • - 根据文件名中的日期(YYYYMMDD)对 WAV 文件进行分组
  • 按每个日期内的时间戳排序,确保正确的时间顺序
  • 跳过已转录的文件,除非使用 --force-dates
  • 输出文件名带索引(000、001、...)以确保排序顺序
  • 每完成25%进度发送 Discord 里程碑通知

输出格式

[录音开始: 09:41:29]
[09:41:35] 到了,我们下车吧。
[09:41:48] 武康大楼,人好多啊。
[09:42:04] 你帮我在这里拍一张。
...

性能表现(Apple M4,10核CPU)

指标数值
RTF~0.04(25倍实时)
CPU
~1.2核(12%) | | 内存 | ~1.5GB | | 30分钟WAV | ~73秒转录 + ~4秒VAD | | 准确率 | 92%关键词准确率(对比Whisper-medium 23%、turbo 38%) | | 幻觉 | 0(对比Whisper每会话数百次) | | 模型大小 | 234MB(对比Whisper-large-v3-turbo 1.5GB) |

对比旧版Whisper技能

Whisper(旧版)SenseVoice(新版)
模型mlx-whisper-mediumSenseVoice-Small(234MB)
准确率
23-38% | 92% | | 幻觉 | 每会话数百次 | 0 | | 时间戳 | 逐词(~2-4秒) | VAD锚定(~15秒) | | 重复行 | ~23% | <0.2% | | 中文支持 | 弱 | 原生(普通话优化) |

表情符号说明

SenseVoice 会为片段附加情感标签(😊😔😡😮)。这些是模型产物,反映检测到的语音情感,并非音频中的实际表情符号。下游处理(笔记编译)应忽略或去除这些标签。

标签

skill ai

通过对话安装

以下为平台配置的接入选项,并非逐项实测通过。能否安装取决于客户端支持、技能来源和运行环境:

OpenClaw WorkBuddy QClaw Kimi Claude

方式一:安装 SkillHub 和技能

帮我安装 SkillHub 和 sensevoice-transcribe-1776118420 技能

方式二:设置 SkillHub 为优先技能安装源

设置 SkillHub 为我的优先技能安装源,然后帮我安装 sensevoice-transcribe-1776118420 技能

通过命令行安装

skillhub install sensevoice-transcribe-1776118420

下载

⬇ 下载 sensevoice-transcribe v1.0.0(免费)

文件大小: 9.16 KB | 发布时间: 2026-4-15 14:19

v1.0.0 最新 2026-4-15 14:19
Initial release: SenseVoice-Small + FSMN-VAD batch transcription with VAD-anchored timestamps
返回顶部