video-to-text
Pass视频/音频转文字稿。从视频文件中提取音频,用 whisperX 进行语音识别、时间戳对齐和说话人分离,输出带时间戳和说话人标签的文字稿。适用于:直播回放转写、会议录音转文字、播客转录、任何视频/音频转文稿的场景。
Install Skill
Skills are third-party code from public GitHub repositories. SkillHub scans for known malicious patterns but cannot guarantee safety. Review the source code before installing.
Install globally (user-level):
npx skillhub install yfge/video-skills-suite/video-to-textInstall in current project:
npx skillhub install yfge/video-skills-suite/video-to-text --projectSuggested path: ~/.claude/skills/video-to-text/
AI Review
] Well-structured transcription skill with comprehensive workflow, performance reference table, CJK filename edge case handling (symlink workaround), and solid Python script with proper error handling. IQ=82 for clear triggers, multi-step workflow (dependency check → command → monitoring → output format selection), and practical nohup usage for long jobs. DP=80 for clear Chinese-language YAML with explicit use case list. Generality=60 reduced by Chinese-language SKILL.md and specialized dependency requirements (whisperX, HF_TOKEN). TS=76 for correct whisperX API usage; minor gap in HF_TOKEN pre-validation. [
SKILL.md Content
---
name: video-to-text
description: 视频/音频转文字稿。从视频文件中提取音频,用 whisperX 进行语音识别、时间戳对齐和说话人分离,输出带时间戳和说话人标签的文字稿。适用于:直播回放转写、会议录音转文字、播客转录、任何视频/音频转文稿的场景。
---
# Video to Text — 视频/音频转文字稿
## 依赖
- **ffmpeg**: 从视频中提取音频(系统已安装)
- **whisperX**: 语音识别 + 对齐 + 说话人分离(`pip install whisperx`)
- **HF_TOKEN**: 说话人分离需要 HuggingFace token(环境变量 `HF_TOKEN`)
## 快速执行
对于简单的转写任务,直接运行脚本:
```bash
nohup python3 {skillDir}/scripts/transcribe.py /path/to/video.mp4 \
--output-dir /path/to/output \
--output-name transcript \
--diarize \
> /tmp/transcribe.log 2>&1 &
```
**必须用 `nohup` 后台执行**——长音频(>30 min)转写时间可达数十分钟到数小时,exec session 会超时。
## 完整流程
### Step 1: 预处理
1. 确认输入文件存在,获取时长:`ffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 <file>`
2. 若文件名含 CJK 字符,创建 symlink 避免编码问题:`ln -sf "<原路径>" /tmp/input-video.mp4`
3. 脚本会自动判断:音频文件直接转写,视频文件先提取音频为 16kHz mono WAV
### Step 2: 转写
运行 `scripts/transcribe.py`,关键参数:
| 参数 | 默认值 | 说明 |
|------|--------|------|
| `--model` | large-v3 | Whisper 模型,large-v3 最准但最慢 |
| `--language` | zh | 语言代码 |
| `--diarize` | off | 启用说话人分离(需 HF_TOKEN) |
| `--device` | cpu | cpu 或 cuda |
| `--batch-size` | 8 | 批次大小,内存不够可降低 |
### Step 3: 监控进度
长音频转写用 cron watcher 监控:
```bash
# 创建 watcher 脚本
cat > /tmp/watch-transcribe.sh << 'EOF'
if ! kill -0 <PID> 2>/dev/null; then
echo "done $(date)" > /tmp/transcribe-status.txt
fi
EOF
```
或通过 OpenClaw cron 每 5 分钟检查进程状态。
### Step 4: 输出
脚本生成两个文件:
- **`<name>.txt`**: 人类可读文稿,按说话人分段,带 `[MM:SS]` 时间戳
- **`<name>.json`**: 完整 whisperX 输出,含 word-level 时间戳
### 存档
转写完成后,将 `.txt` 文件复制到 `workspace/transcripts/` 目录:
- 命名约定:`<原始文件名>.txt`(如 `直播回放-02月26日.txt`)
## 性能参考
| 音频时长 | 模型 | 设备 | 预计耗时 |
|----------|------|------|----------|
| 30 min | large-v3 | CPU (M-series) | ~15 min |
| 1 hour | large-v3 | CPU (M-series) | ~30 min |
| 2 hours | large-v3 | CPU (M-series) | ~60 min |
## 注意事项
- CJK 文件名在 nohup/shell 中容易乱码,始终用 symlink 或英文路径
- CPU 转写时 CPU 占用 300-400%,避免同时跑其他重负载任务
- whisperX 的 diarization 依赖 pyannote,首次运行需要下载模型(~1GB)
- 如果本地有 Whisper HTTP server(端口 9876),该 skill 不使用它——直接调用 whisperX Python API 更灵活