CapsWriter Offline 是一个客户端-服务端架构的离线语音识别工具。支持麦克风实时录入和音视频文件转录,无需网络。
┌──────────────┐ WebSocket ┌──────────────┐
│ Client │ ◄──────────────► │ Server │
│ (录音/快捷键) │ AudioMessage │ (ASR 推理) │
│ Python 3.11 │ RecognitionMsg │ Python 3.11 │
└──────────────┘ └──────────────┘
- 服务端: 纯 CPU ONNX/GGUF 推理,支持 4 种 ASR 引擎
- 客户端: 麦克风录音、快捷键监听、文件转录、热词替换、LLM 后处理
- 通信: WebSocket + JSON,音频为 base64 float32 16kHz mono PCM
| 架构 | 平台 | 状态 |
|---|---|---|
| x86_64 (amd64) | Intel/AMD Linux | ✅ 完整支持 |
| aarch64 (arm64) | 飞腾/鲲鹏/树莓派 Linux | ✅ 完整支持 |
setup.sh 通过 uname -m 自动识别 CPU 架构,选择对应的离线安装包。
- 操作系统: Ubuntu 20.04+ / Kylin V10 / Debian 11+
- Python: 3.11(项目自带离线安装包,无需预装)
- RAM: 4GB+(SenseVoice 约需 2GB)
- 磁盘: 1GB+(SenseVoice 模型 452MB + Python 环境约 600MB)
- 系统依赖: ffmpeg、portaudio、libsndfile(
setup.sh自动安装)
cd CapsWriter-Offline-v2.6
# x86_64 在线部署
bash setup.sh
# ARM64 / x86_64 完全离线部署(所有安装包已就绪)
bash setup.sh --offline --bootstrap
# 跳过系统级依赖(如已有 root 权限安装过)
bash setup.sh --offline --bootstrap --skip-systemsetup.sh 自动执行 7 步:检查 Python → 安装系统依赖 → 创建虚拟环境 → 安装 Python 包 → 验证关键模块 → 验证模型文件 → 准备启动脚本。
bash start_server.sh # 终端 1 — 启动 ASR 服务端
bash start_client.sh # 终端 2 — 启动客户端(麦克风模式)将音视频文件转为 SRT 字幕和 TXT 文本,支持批量处理。
# 转录单个文件
bash start_client.sh demo.mp3
# 批量转录
bash start_client.sh file1.mp3 file2.wav file3.flac| 文件 | 内容 | 默认 |
|---|---|---|
<文件名>.srt |
SRT 字幕,时间轴精确到句 | ✅ |
<文件名>.txt |
按标点分行的纯文本 | ✅ |
<文件名>.json |
字级时间戳 | ✅ |
<文件名>.merge.txt |
未切分的整段文本 | ❌ |
支持格式: mp3, wav, mp4, mkv, flv, avi, mov 等(需 ffmpeg)。
- 编辑生成的
.txt文件(改错字、调分行) - 将修改后的
.txt拖拽到客户端(或作为参数传入) - 客户端会利用
.json中的字级时间戳与修改后的文本重新对齐,生成新的.srt
编辑 config_server.py 切换引擎:
class ServerConfig:
model_type = 'sensevoice' # 可选: 'sensevoice', 'fun_asr_nano', 'qwen_asr', 'paraformer'| 引擎 | model_type |
准确率 | CPU 速度 | 内存 | 自带标点 | 模型大小 |
|---|---|---|---|---|---|---|
| Qwen3-ASR 1.7B | qwen_asr |
★★★★★ | ~4× | ~4GB | ✅ | ~2.7GB |
| Fun-ASR-Nano | fun_asr_nano |
★★★★☆ | ~3× | ~3GB | ✅ | ~1.5GB |
| SenseVoice Small | sensevoice |
★★★☆☆ | 基线 | ~2GB | ✅ | 452MB |
| Paraformer | paraformer |
★★★☆☆ | ~1× | ~1.5GB | ❌ | ~1.0GB |
推荐: 默认
sensevoice可用即用,追求准确率用qwen_asr,平衡用fun_asr_nano。
模型发布页: https://github.com/HaujetZhao/CapsWriter-Offline/releases/tag/models
下载后放入 models/<引擎名>/ 目录,修改 config_server.py 的 model_type 后重启服务端。
现有模型状态:
| 模型 | 当前状态 |
|---|---|
| SenseVoice Small | |
| Qwen3-ASR 1.7B | |
| Fun-ASR-Nano | |
| ForceAligner |
编辑 config_client.py:
# 快捷键
shortcuts = [
{'key': 'f7', 'type': 'keyboard', 'suppress': True, 'hold_mode': True, 'enabled': True}, # 按住说话
{'key': 'f8', 'type': 'keyboard', 'suppress': True, 'hold_mode': False, 'enabled': True}, # 切换模式
]
# 文件转录
file_seg_duration = 60 # 分段长度(秒),越大内存占用越高
file_seg_overlap = 4 # 分段重叠(秒),避免切分点丢字
file_save_srt = True # 生成 SRT 字幕
file_save_txt = True # 生成 TXT 文本
file_save_json = True # 生成 JSON 时间戳
# 通用
language = 'auto' # 识别语言: 'auto' / 'chinese' / 'english'
paste = True # 粘贴模式(推荐开启)
enable_tray = False # Linux 关闭托盘图标Linux 下快捷键: 支持 F7(按住说话)/ F8(单击切换)。鼠标侧键在 ARM64 平台可能不可用,默认禁用。 Wayland 用户: pynput 需要 X11 环境。请切换到 Xorg 会话登录,或在
config_client.py中禁用键盘快捷键监听。
CapsWriter-Offline-v2.6/
├── config_client.py # 客户端配置
├── config_server.py # 服务端配置(引擎选择)
├── setup.sh # ★ 多架构一键部署脚本
├── start_server.sh / start_client.sh
├── hot.txt / hot-rule.txt # 客户端热词(音素 RAG + 正则)
├── hot-server.txt # 服务端热词
│
├── deps/ / deps-arm64/ # Python wheel 离线源
├── sysdeps/ / sysdeps-arm64/ # 系统 .deb 离线包
├── cpython-*-x86_64*.tar.gz # x86_64 Python 运行时(离线引导用)
├── cpython-*-aarch64*.tar.gz # ARM64 Python 运行时(离线引导用)
├── uv-*.tar.gz # uv 包管理器(离线引导用)
│
├── models/ # ASR 模型文件
│ ├── SenseVoice-Small/ # 452MB — 默认引擎
│ ├── Fun-ASR-Nano/ # 模型下载链接 →
│ ├── Qwen3-ASR/ # 模型下载链接 →
│ └── ...
│
├── core/ # 源码
├── LLM/ # LLM 角色配置
└── docs/ # 文档
Q: bash setup.sh 报 "虚拟环境不存在" 或 Python 模块找不到?
# 重新运行完整部署
bash setup.sh --offline --bootstrapQ: ModuleNotFoundError: No module named 'typer' / 'rich' / 'srt'?
Python 依赖安装不完整。运行以下命令补装:
source .venv/bin/activate
pip install -r requirements.txt或离线安装:
source .venv/bin/activate
pip install --no-index --find-links=deps/ -r requirements.txtQ: runtime/python/bin/python3.11 报 "可执行文件格式错误"?
runtime/ 中的 Python 是 arm64 架构,无法在 x86_64 上运行:
rm -rf runtime/
bash setup.sh --bootstrap # 从正确的 cpython 归档重新解压Q: 转录准确率很差(尤其是歌曲/音乐)?
可能原因及解决方案:
- 模型太小: 默认 SenseVoice Small 对复杂音频效果有限,考虑切换到 Qwen3-ASR(
config_server.py中设置model_type = 'qwen_asr') - 音乐/歌曲: ASR 模型训练数据是语音,不是唱歌。推荐使用人声分离工具(如 UVR 或 Demucs)先将人声从乐器中分离,再转录
- 音频质量: 128kbps MP3 压缩损失较多细节,优先使用原始 WAV/FLAC
Q: 纯语音内容准确率也不高?
- 确认音频为 16kHz 采样率单声道(ffmpeg 会自动转换)
- 确认
config_server.py中model_type设置正确 - 查看
logs/server_latest.log确认模型正常加载,无错误输出 - 尝试切换
language配置:'chinese'/'english'(默认'auto'会自动检测)
Q: 端口 6016 冲突?
ss -tlnp | grep 6016 # 查看占用进程
kill <PID> # 结束冲突进程Q: pynput 无法捕获按键 (Wayland)?
echo $XDG_SESSION_TYPE # 查看会话类型
# x11 → 正常工作
# wayland → 切换到 Xorg 登录,或在 config_client.py 中禁用快捷键监听Q: FFmpeg 未找到?
# 在线安装
sudo apt install ffmpeg -y
# 离线安装(sysdeps/ 中已包含)
sudo dpkg -i sysdeps/ffmpeg_*.deb 2>/dev/null # x86_64
sudo dpkg -i sysdeps-arm64/ffmpeg_*.deb 2>/dev/null # ARM64
sudo apt install -f -y# 将整个项目目录复制到目标机,然后:
cd CapsWriter-Offline-v2.6
sudo dpkg -i sysdeps/*.deb 2>/dev/null; sudo apt install -f -y
bash setup.sh --offline --bootstrap
bash start_server.sh # 终端 1
bash start_client.sh # 终端 2cd CapsWriter-Offline-v2.6
sudo dpkg -i sysdeps-arm64/*.deb 2>/dev/null; sudo apt install -f -y
bash setup.sh --offline --bootstrap
bash start_server.sh # 终端 1
bash start_client.sh # 终端 2# 启用用户级 systemd 服务
systemctl --user enable capswriter-server capswriter-client
sudo loginctl enable-linger $USER- Ubuntu 离线部署教程 — 详细的部署步骤和离线包制作方法
- windows系统文件转录功能如何使用
- 模型下载的若干问题
本项目基于 HaujetZhao/CapsWriter-Offline 进行 Linux 平台适配。原始项目: https://github.com/HaujetZhao/CapsWriter-Offline
如果觉得好用,欢迎点个 Star 或者打赏支持:
