摘要
用 TRAE SOLO 从零开发了一款桌面实时字幕浮窗工具 —— LiveCaptioner
基于阿里云 Paraformer 流式语音识别,毫秒级响应
支持中英双语实时翻译,一键切换
字幕自动保存并上传飞书文档,永不丢失
看直播、上网课再也不怕跟不上节奏了!![]()
背景
日常看英文直播和海外网课时,字幕经常延迟甚至缺失。市面上的工具要么收费贵,要么不能自定义翻译语言,更没法自动归档保存字幕记录。
作为一个经常需要看技术直播和海外课程的人,我想要一个:
- 轻量 - 不占资源,开箱即用
- 免费 - 不花冤枉钱
- 自动归档 - 字幕记录自动保存到云端
实践过程
任务拆解
把整个项目拆成 5 个核心模块:
- 音频采集 - 从系统音频流中捕获实时声音
- 语音识别 - 接入阿里云 Paraformer 流式语音识别 API
- 实时翻译 - 调用翻译 API 将识别内容翻译为中文
- 浮窗显示 - 用 Tkinter 制作一个置顶浮窗,带开始/停止/翻译按钮
- 自动归档 - 识别结果自动保存到飞书文档
用了 SOLO 哪些能力
- 代码生成 - 整个项目的前后端逻辑、UI 组件、API 封装全部由 SOLO 生成
- 调试验证 - 遇到 API 回调问题时,SOLO 帮我分析 SDK 源码找到静态方法调用错误
- 文档编写 - README 和社区帖子都由 SOLO 一键生成
关键实现
语音识别模块 - 使用 DashScope SDK 的 Recognition 类建立 WebSocket 长连接,分块发送 PCM 音频数据:
from dashscope.audio.asr import Recognition, RecognitionCallback, RecognitionResult
class QwenASR:
def send_audio(self, audio_bytes: bytes) -> bool:
return self._recognition.send_audio_frame(audio_bytes)
浮窗控制 - 添加了开始/停止按钮和翻译切换按钮,完全脱离终端操作:
绿色「翻译」按钮 = 已开启翻译
灰色「翻译」按钮 = 已关闭- 开启翻译后浮窗分为两栏:原文 + 中文翻译
音频格式处理 - Paraformer 要求 16kHz 采样率的 int16 PCM 格式:
audio_int16 = (audio_chunk * 32767).astype(np.int16)
audio_bytes = audio_int16.tobytes()
踩过的坑(重点避坑指南)
- 模型名称不对 - 一开始用了
qwen3-asr-flash和paraformer-v2都报ModelNotFound,最后查到正确名称是paraformer-realtime-v1 - 回调竞态条件 -
send_audio在stop之后调用会报错,加了threading.Lock线程锁保护 - 识别结果为 None -
is_sentence_end()是静态方法需要传入 sentence 参数,一开始当实例方法调用一直返回 None - 英文直播出现乱码字幕 - 加了正则过滤和关键词黑名单拦截垃圾识别结果
成果展示
项目结构
LiveCaption-Pro/
├── main.py # 🚀 入口文件
├── qwen_asr.py # 🗣️ Paraformer API 封装
├── transcriber.py # 🎙️ 音频处理与识别调度
├── subtitle_window.py # 🖥️ 浮窗 UI
├── feishu_client.py # 📤 飞书 API 客户端
└── requirements.txt # 📦 依赖
运行方式
python main.py --qwen-api-key "你的API_KEY"
启动后桌面会出现一个浮窗,点击「开始」即可识别系统音频,点击「翻译」按钮开启中文翻译栏。
效果与总结
提效效果
- 原本看英文直播需要全程高度集中注意力
- 现在打开工具就能实时看到中文翻译字幕
- 理解效率提升 300%,再也不怕漏掉关键信息
SOLO 做了什么
整个项目从构思到可用代码全部由 TRAE SOLO 生成,包括:
API 对接和错误排查
UI 组件设计和 bug 修复
线程安全处理
文档和帖子撰写
可复用的方法
这种**「浮窗 + 流式 API」**的模式可以应用到很多实时场景:
- 实时会议纪要
- 直播弹幕翻译
- 视频字幕自动生成
- 网课实时翻译
核心思路:音频采集 → 流式识别 → 实时展示 → 自动归档,每一层都可以独立替换。
觉得有用就点个
支持一下吧!欢迎在评论区交流~

