# Linux 本地 CLI 会议录音工具:立体声扬声器分离与 AI 摘要
CLI 工具 tapeback 通过 PipeWire/PulseAudio 捕获音频,使用 faster-whisper 转录,通过立体声通道分离发言者,并利用大语言模型生成摘要。最终结果是一个 Markdown 文件,直接保存到你指定的目录——甚至是 Obsidian 知识库。只需一条命令开始录音,按 Ctrl+C 结束即可自动触发处理流程:捕获 → 转录 → 发言者分离 → 摘要生成。
支持 Zoom、Teams、Meet、Discord、Telegram。捕获系统音频,无需任何服务 API。
tapeback start
# 会议进行中
# Ctrl+C → 处理 → Markdown
立体声扬声器分离
架构利用立体声 WAV 文件:左声道为你的麦克风(“你”),右声道为显示器音频源(其他人)。Whisper 分别处理每个声道。Pyannote 发言者分离仅运行在右声道上,标记 Speaker 1、2 等。片段根据 RMS 能量水平分类。
物理声道分离消除了聚类错误:不会混淆相似声音,不会将同一发言者拆分到不同簇。GPU 加速提升速度,CUDA 出错时自动回退到 CPU。
┌─────────────┐ ┌──────────────┐ ┌────────────────────┐
│ 立体声 │ │ Whisper │ │ 声道分类: │
│ WAV 文件 │───▶│ (逐声道) │───▶│ L → "你" │
│ L: 麦克风 │ │ │ │ R → pyannote │
│ R: 显示器 │ │ │ │ 处理他人 │
└─────────────┘ └──────────────┘ └────────────────────┘
可选依赖
基础安装(~320 MB):录音 + 转录。额外组件避免了你不需要的 2 GB PyTorch 臃肿:
| 变体 | 添加功能 | 大小 |
|---------------|---------------------------|---------|
| tapeback | 录音 + Whisper | ~320 MB|
| [llm] | 摘要(Anthropic、OpenAI、Groq 等) | +50 MB |
| [diarize] | pyannote + PyTorch | +2 GB |
| [tray] | 系统托盘 | +1 MB |
优雅降级:没有 pyannote?右声道标记为“其他人”。__init__ 中使用延迟导入。
LLM 集成与回退机制
支持 7 种提供商:Anthropic、OpenAI、Groq、Gemini、DeepSeek、OpenRouter、Qwen。兼容 OpenAI 的使用统一 API 和基础 URL:
_OPENAI_COMPATIBLE_BASE_URLS = {
"groq": "https://api.groq.com/openai/v1",
"gemini": "https://generativelanguage.googleapis.com/v1beta/openai/",
"deepseek": "https://api.deepseek.com",
# ...
}
提供商出错?自动回退到下一个。转录文本始终保存。摘要以 JSON 形式嵌入 Markdown:
## 摘要
快速概述。
### 行动项
- [ ] **你:** 周五前发送报告
- [ ] **Speaker 1:** 审查 PR
### 关键决策
- 选择 PostgreSQL 而非 MongoDB
Arch Linux 打包
AUR 中提供 4 个元包:
tapeback— 核心。tapeback-tray— 托盘。tapeback-llm— LLM 支持。tapeback-diarize— PyTorch + pyannote。
yay 在虚拟环境中处理 pip 依赖。通过 release.sh + PyPI CI(Trusted Publisher)+ AUR 脚本发布。
yay -S tapeback tapeback-diarize tapeback-llm tapeback-tray
配置在 ~/.config/tapeback/.env:
TAPEBACK_VAULT_PATH=~/Documents/obsidian/vault
开发与经验教训
MVP 3 天完成,v0.8.9 两周内搞定(修复 bug、测试)。规范驱动:Markdown 规范带完成标准。代码由 Claude 生成并审查。及早检查 PyPI/AUR 名称——规范化会导致 echo-vault == echovault。
关键要点
- 立体声分离:麦克风(你) vs 显示器(他人)——确定性处理,避免 pyannote 的概率错误。
- 本地处理:faster-whisper + 可选 PyTorch,无需云端。
- 模块化:发言者分离/LLM/托盘的额外组件,平滑回退。
- 集成:Obsidian 兼容 Markdown,带 JSON 摘要(行动项、决策)。
- 安装:
uv tool install tapeback[tray,diarize,llm]或 AUR。
— Editorial Team
暂无评论。