【Code with SOLO】🎧 LiveCaptioner:实时字幕浮窗工具,支持多语翻译 + 飞书自动归档

摘要

用 TRAE SOLO 从零开发了一款桌面实时字幕浮窗工具 —— LiveCaptioner

:white_check_mark: 基于阿里云 Paraformer 流式语音识别,毫秒级响应
:white_check_mark: 支持中英双语实时翻译,一键切换
:white_check_mark: 字幕自动保存并上传飞书文档,永不丢失

看直播、上网课再也不怕跟不上节奏了!:high_voltage:


背景

日常看英文直播和海外网课时,字幕经常延迟甚至缺失。市面上的工具要么收费贵,要么不能自定义翻译语言,更没法自动归档保存字幕记录。

作为一个经常需要看技术直播和海外课程的人,我想要一个:

  • 轻量 - 不占资源,开箱即用
  • 免费 - 不花冤枉钱
  • 自动归档 - 字幕记录自动保存到云端

实践过程

:package: 任务拆解

把整个项目拆成 5 个核心模块

  1. 音频采集 - 从系统音频流中捕获实时声音
  2. 语音识别 - 接入阿里云 Paraformer 流式语音识别 API
  3. 实时翻译 - 调用翻译 API 将识别内容翻译为中文
  4. 浮窗显示 - 用 Tkinter 制作一个置顶浮窗,带开始/停止/翻译按钮
  5. 自动归档 - 识别结果自动保存到飞书文档

:sparkles: 用了 SOLO 哪些能力

  • 代码生成 - 整个项目的前后端逻辑、UI 组件、API 封装全部由 SOLO 生成
  • 调试验证 - 遇到 API 回调问题时,SOLO 帮我分析 SDK 源码找到静态方法调用错误
  • 文档编写 - README 和社区帖子都由 SOLO 一键生成

:key: 关键实现

:studio_microphone: 语音识别模块 - 使用 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)

:desktop_computer: 浮窗控制 - 添加了开始/停止按钮和翻译切换按钮,完全脱离终端操作

  • :green_circle: 绿色「翻译」按钮 = 已开启翻译
  • :black_circle: 灰色「翻译」按钮 = 已关闭
  • 开启翻译后浮窗分为两栏:原文 + 中文翻译

:wrench: 音频格式处理 - Paraformer 要求 16kHz 采样率的 int16 PCM 格式

audio_int16 = (audio_chunk * 32767).astype(np.int16)
audio_bytes = audio_int16.tobytes()

:warning: 踩过的坑(重点避坑指南)

  1. 模型名称不对 - 一开始用了 qwen3-asr-flashparaformer-v2 都报 ModelNotFound,最后查到正确名称是 paraformer-realtime-v1
  2. 回调竞态条件 - send_audiostop 之后调用会报错,加了 threading.Lock 线程锁保护
  3. 识别结果为 None - is_sentence_end()静态方法需要传入 sentence 参数,一开始当实例方法调用一直返回 None
  4. 英文直播出现乱码字幕 - 加了正则过滤关键词黑名单拦截垃圾识别结果

成果展示

:file_folder: 项目结构

LiveCaption-Pro/
├── main.py              # 🚀 入口文件
├── qwen_asr.py          # 🗣️ Paraformer API 封装
├── transcriber.py       # 🎙️ 音频处理与识别调度
├── subtitle_window.py   # 🖥️ 浮窗 UI
├── feishu_client.py     # 📤 飞书 API 客户端
└── requirements.txt     # 📦 依赖

:person_running: 运行方式

python main.py --qwen-api-key "你的API_KEY"

启动后桌面会出现一个浮窗,点击「开始」即可识别系统音频,点击「翻译」按钮开启中文翻译栏。


:bar_chart: 效果与总结

:rocket: 提效效果

  • 原本看英文直播需要全程高度集中注意力
  • 现在打开工具就能实时看到中文翻译字幕
  • 理解效率提升 300%,再也不怕漏掉关键信息

:robot: SOLO 做了什么

整个项目从构思到可用代码全部由 TRAE SOLO 生成,包括:

  • :white_check_mark: API 对接和错误排查
  • :white_check_mark: UI 组件设计和 bug 修复
  • :white_check_mark: 线程安全处理
  • :white_check_mark: 文档和帖子撰写

:light_bulb: 可复用的方法

这种**「浮窗 + 流式 API」**的模式可以应用到很多实时场景:

  • 实时会议纪要
  • 直播弹幕翻译
  • 视频字幕自动生成
  • 网课实时翻译

核心思路:音频采集 → 流式识别 → 实时展示 → 自动归档,每一层都可以独立替换


觉得有用就点个 :heart: 支持一下吧!欢迎在评论区交流~

1 个赞

摘要

用 TRAE SOLO 从零开发了一款桌面实时字幕浮窗工具 —— LiveCaption Pro

:white_check_mark: 基于阿里云 Paraformer 流式语音识别,毫秒级响应
:white_check_mark: 支持中英双语实时翻译,一键切换
:white_check_mark: 字幕自动保存并上传飞书文档,永不丢失

看直播、上网课再也不怕跟不上节奏了!


背景

日常看英文直播和海外网课时,字幕经常延迟甚至缺失。市面上的工具要么收费贵,要么不能自定义翻译语言,更没法自动归档保存字幕记录。

作为一个经常需要看技术直播和海外课程的人,我想要一个:

  • 轻量 - 不占资源,开箱即用
  • 免费 - 不花冤枉钱
  • 自动归档 - 字幕记录自动保存到云端

实践过程

:package: 任务拆解

把整个项目拆成 5 个核心模块

  1. 音频采集 - 从系统音频流中捕获实时声音
  2. 语音识别 - 接入阿里云 Paraformer 流式语音识别 API
  3. 实时翻译 - 调用翻译 API 将识别内容翻译为中文
  4. 浮窗显示 - 用 Tkinter 制作一个置顶浮窗,带开始/停止/翻译按钮
  5. 自动归档 - 识别结果自动保存到飞书文档

:sparkles: 用了 SOLO 哪些能力

  • 代码生成 - 整个项目的前后端逻辑、UI 组件、API 封装全部由 SOLO 生成
  • 调试验证 - 遇到 API 回调问题时,SOLO 帮我分析 SDK 源码找到静态方法调用错误
  • 文档编写 - README 和社区帖子都由 SOLO 一键生成

:key: 关键实现

:studio_microphone: 语音识别模块 - 使用 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)

:desktop_computer: 浮窗控制 - 添加了开始/停止按钮和翻译切换按钮,完全脱离终端操作

  • :green_circle: 绿色「翻译」按钮 = 已开启翻译
  • :black_circle: 灰色「翻译」按钮 = 已关闭
  • 开启翻译后浮窗分为两栏:原文 + 中文翻译

:wrench: 音频格式处理 - Paraformer 要求 16kHz 采样率的 int16 PCM 格式

audio_int16 = (audio_chunk * 32767).astype(np.int16)
audio_bytes = audio_int16.tobytes()

:warning: 踩过的坑(重点避坑指南)

  1. 模型名称不对 - 一开始用了 qwen3-asr-flashparaformer-v2 都报 ModelNotFound,最后查到正确名称是 paraformer-realtime-v1
  2. 回调竞态条件 - send_audiostop 之后调用会报错,加了 threading.Lock 线程锁保护
  3. 识别结果为 None - is_sentence_end()静态方法需要传入 sentence 参数,一开始当实例方法调用一直返回 None
  4. 英文直播出现乱码字幕 - 加了正则过滤关键词黑名单拦截垃圾识别结果

成果展示

:file_folder: 项目结构

LiveCaption-Pro/
├── main.py              # 🚀 入口文件
├── qwen_asr.py          # 🗣️ Paraformer API 封装
├── transcriber.py       # 🎙️ 音频处理与识别调度
├── subtitle_window.py   # 🖥️ 浮窗 UI
├── feishu_client.py     # 📤 飞书 API 客户端
└── requirements.txt     # 📦 依赖

:person_running: 运行方式

python main.py --qwen-api-key "你的API_KEY"

启动后桌面会出现一个浮窗,点击「开始」即可识别系统音频,点击「翻译」按钮开启中文翻译栏。



效果与总结

:rocket: 提效效果

  • 原本看英文直播需要全程高度集中注意力
  • 现在打开工具就能实时看到中文翻译字幕
  • 理解效率提升 300%,再也不怕漏掉关键信息

:robot: SOLO 做了什么

整个项目从构思到可用代码全部由 TRAE SOLO 生成,包括:

  • :white_check_mark: API 对接和错误排查
  • :white_check_mark: UI 组件设计和 bug 修复
  • :white_check_mark: 线程安全处理
  • :white_check_mark: 文档和帖子撰写

:light_bulb: 可复用的方法

这种**「浮窗 + 流式 API」**的模式可以应用到很多实时场景:

  • 实时会议纪要
  • 直播弹幕翻译
  • 视频字幕自动生成
  • 网课实时翻译

核心思路:音频采集 → 流式识别 → 实时展示 → 自动归档,每一层都可以独立替换


觉得有用就点个 :heart: 支持一下吧!欢迎在评论区交流~

3 个赞

飞书自动归档这功能真方便,不用手动存记录了

2 个赞

感谢评价~ :face_blowing_a_kiss:

1 个赞

非常实用的小工具 已投票支持!!欢迎来一起交流我的嘴替小助手哦

1 个赞

谢谢你的喜欢,已给你的小助手投票啦~

1 个赞

飞书自动归档是直接解析字幕文本还是走的API

已投票,问问是不是可以分享使用?:face_blowing_a_kiss:

连的api哦

可以的,私信我一下~