Install
openclaw skills install huo15-openclaw-asrConverts audio/video to MP3, transcribes speech to verbatim text and meeting notes, parses .tty terminal recordings to text, then formats structured output for OpenClaw (龙虾) to classify and judge. Use when the user mentions speech recognition, ASR, transcription, 录音转文字, 纪要, MP3, ffmpeg, Whisper, WhisperX, speaker diarization, 说话人分离, audio/video to text, or .tty files.
openclaw skills install huo15-openclaw-asr本 skill 指导将音视频或 .tty 转为可用文本,生成原文与纪要,并以固定结构交给 OpenClaw(龙虾) 做类型与内容判断。
mp3、wav、m4a、aac、flac、ogg、mp4、mkv、webm、mov 等常见音视频,或扩展名为 .tty 的文件。识别输入类型
取得原文
--model base)或从 .tty 提取的可读文本,尽量保留说话人切换线索(若模型支持说话人分离则标注 说话人 A/B)。转写质量判断(仅 Whisper 本地转写时必做)
base 转写后,按 转写质量判断与模型升级建议 自检;问题多则提示用户改用 small / medium 重跑,通过前不写定稿纪要;问题少再进入下一步。.tty 文本路径不做 Whisper 质检,直接进入纪要。生成纪要
交给龙虾判断
可选:保存文件(下载文件夹)
.tty 等路径:完成原文、纪要、交付块之后。询问用户是否保存,以及保存格式(Markdown 或 Word);若同意,按 保存文件(下载文件夹) 写入。优先使用 ffmpeg(需已安装并在 PATH 中)。
ffmpeg -y -i "INPUT" -vn -acodec libmp3lame -q:a 2 "OUTPUT.mp3"
INPUT:任意 ffmpeg 可读音视频路径。-vn:去掉视频轨,只保留音频。libmp3lame 不可用,可改用:-acodec aac -b:a 192k "OUTPUT.m4a",并在后续转写步骤中改用该中间文件(仍按本 skill 的「原文 + 纪要 + 龙虾块」交付)。按环境选择其一(默认优先本地,避免泄露):
| 方式 | 说明 |
|---|---|
| Whisper 系 CLI | 如 whisper、faster-whisper 等,对 OUTPUT.mp3 跑转写,保存为 txt/srt/vtt。 |
| WhisperX | 在 Whisper 类转写之上做 词级对齐与可选 说话人分离(diarization);见 WhisperX(说话人分离)。 |
| 云端 ASR | 若用户明确要求或本地不可用,使用用户指定的 API;须注意隐私与合规。 |
pip install openai-whisper 会安装 PyTorch 等依赖,磁盘占用常见为数百 MB 量级,CUDA 版可达约 1GB+(随平台与是否 GPU 版变化);Whisper 包本身相对较小。--model 单独下载权重:本 skill 默认 base(体积常见为 约百 MB 量级,以官方缓存为准);tiny 约 72MB 级;turbo 约 1.5GB 量级,下载与加载都更重,弱配置上易 OOM 或极慢。在中文区域设置的 Windows 上,直接运行 whisper --help 或转写时,Python 可能用 GBK 写 stdout,触发 UnicodeEncodeError: 'gbk' codec ...。在同一 PowerShell 会话内先设置再调用 Whisper:
$env:PYTHONIOENCODING = "utf-8"
whisper --help
转写示例(会话内已设好 PYTHONIOENCODING);默认模型为 base:
whisper "OUTPUT.mp3" --model base --language Chinese
--model base 做首次转写,再进入 转写质量判断与模型升级建议。当用户需要 分说话人 的原文(如会议多角色),可选用 WhisperX(Python 库,非 openai-whisper 自带 CLI)。
安装
pip install whisperx
仍依赖 PyTorch 等,整体磁盘与首次下载体积与 Whisper 路线同量级,且对齐 / diarization 会再拉取额外权重。
中文对齐(ZH)
whisperx.load_align_model(language_code="zh", ...) 时,会自动下载中文 forced alignment 所用模型(首次需联网与足够磁盘);无需手动另选「ZH 对齐包」路径,但要在 notes_for_openclaw 中注明是否已首次拉取成功。Diarization(说话人分离)与 HuggingFace
huggingface-cli login 或环境变量 HF_TOKEN),否则无法拉取门控模型。use_auth_token=False 传给 API(或通过环境变量/封装参数,以当前 WhisperX 版本文档为准)。注意:部分模型在无 token 时不可用或行为异常,若采用此方式,须在交付备注中写明「未使用 HF 门控模型 / 可能降级」。pyannote/speaker-diarization-3.1(或同类 pyannote 门控模型):必须先在 HuggingFace 网站对该模型访问条款点击同意,再在本地配置 token 后下载权重;否则拉取会失败。启用 WhisperX 且带 diarization 时,原文中应显式标注说话人分段(如 SPEAKER_00 / 说话人 A 等与用户对齐的命名);后续仍执行 转写质量判断与模型升级建议(针对合并可读文本与分段合理性),再走纪要、交付块与可选落盘。
在 openai-whisper 默认 base 模型产出原文后,agent 必须对照下列质量指标做一次快速审查(结合音频时长与领域常识,不必过度纠结单次口误)。若已按建议改用 small / medium 重跑,则对最后一次转写结果重复本审查。
| 指标 | 说明(出现则计为问题) |
|---|---|
| 错译 / 同音错字成片 | 专有名词、数字、单位、人名地名等明显不合理或与音频常识不符 |
| 乱码与异常符号 | 不可读片段、大量无意义符号、编码异常痕迹 |
| 无意义重复 | 同一短语/句子异常堆叠,疑似解码或切片错误 |
| 句意断裂 | 大量不成句碎片、缺主谓宾导致无法理解叙述脉络 |
| 语言/段落错配 | 明显中英混排错误、段落顺序颠倒、长时间静音被填成幻觉句(若可判断) |
分支:
small → medium(资源允许再考虑 large / turbo)。重跑后再次做本表自检。.tty 纯文本路径不适用 Whisper 模型升级;若文本来自终端抽取且噪声大,在 notes_for_openclaw 中说明即可。
转写要求:
在取得原文、且 Whisper 路径已通过 转写质量判断与模型升级建议(或 .tty 等无需 Whisper 质检)之后,由当前 agent 基于原文生成纪要(不得编造未出现的信息)。模板见下节。
.tty(终端录屏 / 会话日志).tty 并非单一国际标准格式,可能是纯文本、script/typescript 文本、或 ttyrec 类二进制。按顺序处理:
探测
file(Linux/macOS)或读取文件头若干字节判断是否为文本。sed/脚本剥离 \x1b[...m)。script 会话
Script started on / Script done on 等典型标记,可保留命令与输出;纪要中总结执行了哪些命令、关键输出、错误信息。二进制 ttyrec
ttyplay / termplay / ttyrec 配套工具,或小型解析脚本将帧解码为文本流,再整理为原文。strings 提取可打印片段,并在交付块中 诚实标注「部分为 strings 抽取,可能不完整」。纪要
与音视频相同:基于提取出的文本生成纪要,并进入 OpenClaw 交付块。
## 纪要
### 主题(一句话)
[用一句话概括]
### 要点
- [要点 1]
- [要点 2]
### 行动项(若有)
- [ ] 负责人/角色未明则写「待确认」— [事项] — 截止时间未明则写「待定」
### 风险与待澄清
- [若有]
agent 可根据内容给出 1–3 个候选类型 与简短理由;最终类型以龙虾判断为准。
示例维度(可按项目扩展):
| 代码 | 含义(示例) |
|---|---|
meeting | 会议/讨论 |
interview | 访谈/面试 |
lecture | 课程/演讲 |
support | 客服/技术支持 |
terminal_session | 终端操作/排障录屏 |
personal | 个人备忘/闲聊 |
other | 其他(需在理由中说明) |
完成转写与纪要后,必须附加以下结构化块(便于龙虾解析与路由):
---OPENCLAW_ASR_DELIVERY---
version: 1
source_kind: audio_video | tty
source_path: "<原始文件路径或用户提供的标识>"
intermediate_mp3: "<若适用,MP3 路径;tty 则填 null>"
language_guess: "<如 zh | en | mixed | unknown>"
type_candidates:
- code: "<meeting|interview|...>"
confidence: <0.0-1.0>
reason: "<一句理由>"
verbatim_text: |
<原文全文,或说明见附件路径>
summary_markdown: |
<纪要全文,使用上文「纪要模板」>
notes_for_openclaw: |
<给龙虾的备注:不确定性、敏感提示、需人工复核的点等>
---END_OPENCLAW_ASR_DELIVERY---
说明:
verbatim_text 过长时,可写 见: <path>,但需在 notes_for_openclaw 说明编码与换行是否保留。在已完成原文 + 纪要 + 交付块的组装后:Whisper 路径须已通过 转写质量判断与模型升级建议;.tty 等路径无 Whisper 质检要求。随后:
%USERPROFILE%\Downloads(资源管理器中显示为「下载」)。~/Downloads。~/Downloads(若不存在可先创建或改用用户指定路径并说明)。文件命名(避免文件名非法字符,不要使用冒号):
ASR_转写_YYYY-MM-DD_HHmmss.md
示例:ASR_转写_2026-05-07_143052.md。日期与时间取保存时刻的本地时间。
文件内容须按顺序包含以下三部分(可用二级标题分隔):
---OPENCLAW_ASR_DELIVERY--- … ---END_OPENCLAW_ASR_DELIVERY---,与对话中交付给龙虾的块一致)。使用 huo15-openclaw-office-doc 技能(位于 skills/huo15-openclaw-office-doc/)将纪要部分生成为格式规范的 。docx 文件。
依赖安装(如未安装):
pip install python-docx reportlab pygments
如果系统有多个 Python 版本(如 MSYS2 Python 与官方 Python 并存),请确认
pip安装的目标 Python 与执行脚本的 Python 保持一致。可通过python -c "import sys; print(sys.executable)"确认。
文件命名:
ASR_纪要_YYYY-MM-DD_HHmmss.docx
示例:ASR_纪要_2026-05-07_143052.docx。
操作步骤:
$env:TEMP\meeting_summary_<timestamp>.md)。注意:内容为执行本 skill 时已生成的 summary_markdown 字段,不含交付块。create-word-doc.py 生成 Word:python <workspace>/skills/huo15-openclaw-office-doc/scripts/create-word-doc.py `
--output "<下载目录>\ASR_纪要_YYYY-MM-DD_HHmmss.docx" `
--title "会议纪要 - YYYY-MM-DD" `
--content @"<临时 markdown 文件路径>" `
--doc-format 会议纪要 `
--company-name "会议纪要" `
--no-title-block
<workspace>为本 skill 所在 OpenClaw 工作区根目录(即~/.openclaw/workspace-hanser)。因本机环境python指向 MSYS2 的 Python,需要显式使用官方 Python 路径:D:\Users\Grunray\AppData\Local\Programs\Python\Python313\python.exe(可通过python -c "import sys; print(sys.executable)"确认正确的路径)。
参数说明:
| 参数 | 值 | 说明 |
|---|---|---|
--output | 下载目录下的 。docx 路径 | 输出文件 |
--title | 会议纪要 - YYYY-MM-DD | 文档标题 |
--content @<path> | @ 开头表示读取文件 | 纪要正文(Markdown 格式) |
--doc-format 会议纪要 | 指定为会议纪要规范 | 自动匹配页眉/正文样式 |
--company-name 会议纪要 | 占位公司名 | 避免因缺公司信息报错 |
--no-title-block | 不额外渲染标题块 | 标题已在正文中 |
注意:当前使用占位公司名「会议纪要」,header 区域可能显示占位名称。如希望定制公司信息,可使用
--company-name "<公司名>"和--logo-path "<LOGO路径>",或参照 office-doc 技能的本地公司信息工作流配置持久化信息。
PYTHONIOENCODING=utf-8(或等价方式),避免 GBK 编码崩溃。base 转写,并已按质量指标完成判断;问题多时已建议 small / medium 重跑。use_auth_token=False 尝试 等实际情况,且原文已带说话人分段标注。.tty 已按文本 / script / ttyrec 路径处理,不确定处已标注。OPENCLAW_ASR_DELIVERY 块供龙虾判断。.tty 等路径在完成交付块后)已询问是否保存,以及保存格式(Markdown 或 Word)。
ASR_转写_YYYY-MM-DD_HHmmss.md,含 原文 + 纪要 + 交付块。huo15-openclaw-office-doc 技能的 create-word-doc.py 生成 。docx 文件到 下载 文件夹(仅含纪要部分)。.tty 辅助:见 scripts/README.md