看不懂的那些视频,我给它们配了个实时双语字幕

Blog #Project#macOS#Swift#AI
阅读时长 Reading time: 10 min read

🔗 GitHub 仓库地址https://github.com/aronnaxlin/SwiftVolcCaption

最近又由自身需求触发造了一个小轮子:SwiftVolcCaption

能干嘛?

说起来很简单:把你电脑正在放的声音抓下来,实时变成「原文 + 译文」两行字幕,浮在屏幕上。

不管声音是从浏览器、播放器还是会议软件里出来的,它都能抓。

实时双语字幕效果

为什么做这个?

这两年由于个人的规划,我的外语视频或音频逐年增加,锻炼听力诚然是一种办法,但是对于现在的我来说,借助字幕无疑能让我更专注于要干的事,而不是开「双线程」。

一开始是看熟肉视频,但是发现认真被汉化过的视频只占一小部分,而且如果不是授权翻译的话,在 B 站看其实也算损害了原创作者的权利。

后来发现了 YouTube 的自动字幕,但是机翻质量加上一个字一个字往出蹦体验几乎全无,还不如只开纯英文字幕(当然,由于海外博主基本上不会去加 CC 字幕,纯英文字幕也是一个字一个字往出蹦)。

再后面有了「沉浸式翻译」、「Kiss Translator」这种浏览器插件/脚本,算是基本解决了问题。

直到我遇见了非浏览器环境 + 直播这一难关。

其实用 Windows 时,我找到了别人的解决方案。一年前想要玩一款名为 Whispers from the Star 的游戏,这款游戏算是全球第一款和 AI 实时互动的游戏,不过游戏本身不是什么问题,最大的问题在于它当时只支持英文,还没有英文字幕和翻译。当时听力水平不太好的我选择了 LiveCaptions-Translator 解决了问题,这款软件基于 Windows 原生实时字幕 + 大模型 API 解决了问题。

本以为就这么过去了,没想到最近我的主要环境来到了 macOS,还要开始上一门外方教授的直播课程。上述的软件依赖的是 Windows 的功能所以并不能在 Mac 上使用。macOS 诚然也提供了实时字幕功能,市面上也确实有几个同类的项目,但都在某个地方卡住了我:

  • 有的用 Apple Intelligence 做翻译引擎,国行根本没这个功能;
  • 有的很久没更新了,所以用不了 AI 翻译,精度不佳;
  • 还有相当一部分——这是最劝退的——要你先装一个叫 BlackHole 的虚拟声卡。而我有一堆蓝牙耳机,之前试过的虚拟声卡没一个省心的,为了字幕把各类音频设备整成一锅粥实在不划算。

所以调研了一番后,我开始了又一次的 Vibe Coding 造轮子:用 macOS 原生 API 音频旁路功能 + 火山引擎同传大模型,做了这个 macOS 原生双语字幕软件 —— SwiftVolcCaption。

长什么样

菜单栏一个小气泡图标,点开就是全部功能。正在识别的时候图标会变成实心的,一眼能看出状态。

菜单栏入口

字幕窗浮在最上层,压得住全屏视频。可以随手拖到你顺眼的位置,拖过之后它会记住,下次打开还在那儿。点它也不会把你正在看的视频切到后台去。

想开想关,⌃⌥S 一下就行,不用去找菜单。

样式这块我花的时间比预想的多。因为字幕这东西,要压在花花绿绿的画面上还能看清,本身就挺挑的——白底上的白字、深色场景里的黑边,都得照顾到。所以字体、字号、颜色、描边、阴影、背景框、宽度、显示几行,基本上都做成了可调,也内置了几套预设,懒得调的时候直接用。

字幕样式设置与实时预览

设置面板顶部有实时预览,底色我特意做成了从黑到白的渐变。只在一种底色上预览,其实是自欺欺人。

哦对,它还可以只抓某一个 App 的声音

这个功能比我一开始以为的重要得多。抓「全部系统声音」的话,微信提示音、后台音乐、系统通知,全都会被翻译成字幕糊在屏幕上。你正看着评测,突然蹦出来一句「你好,在吗」——属实有点惊悚。

按 App 选择音频捕获来源

字幕还能导出成 srt,带时间轴,直接拖进播放器就能用。看完想回头找某一句的时候挺方便的。

有几件事得先说清楚

不是万能的,有些事情你下载之前就该知道,免得装完发现不是那么回事。

  • 软件免费但是服务不免费:识别和翻译是调火山引擎的同声传译服务,按用量计费,你得自己有个账号并开通。火山引擎有试用期,单价也不贵,但挂着不关是会一直扣的,建议去控制台顺手设个用量告警。

  • 声音会交给云端处理:这个我必须讲明白——字幕开着的时候,系统正在播放的音频是要上传到火山引擎服务器做识别的。所以别拿它去处理敏感内容。真要用,也请把「捕获来源」限定到具体那个 App,别开「全部系统声音」,不然你的会议、你的语音消息,都会一起传过去。

  • 语种有限制:源语言和目标语言里必须有一个是中文或英文。英译中、日译中、中译英都行,日译韩不行。

  • 只支持 macOS 14.4 以上:老系统里没有旁录音频的 API,这个没办法。

  • 「实时」性不强:由于火山引擎的模型是上传音频 → 英文字幕和中文字幕一起传回来,所以做不到像系统级实时字幕那样一个字一个字往出蹦。实感上是外方教授说完一句话,字幕正好出来。如果我有意维护的话,后续可能会进一步优化这个实现路径,降低延迟。

感谢

这东西能跑起来,主要是因为站在了几个很好的项目肩膀上。

苹果在 macOS 14.2 加的 CoreAudio Process Tap,是这一切的前提——没有它,就还是只能回去装虚拟声卡。这套 API 的文档写得相当克制(客气的说法),好在 insidegui 的 AudioCap 提供了一份能跑通的示例代码,帮我省下了大量摸黑的时间。

火山引擎的同声传译模型承担了最难的那部分:一条流里同时给出原文和译文,断句和静音检测也都在服务端做好了,客户端几乎不用操心。

swift-protobuf 让协议那层没有变成体力活。

每一个单拿出来都比我这个项目重要得多,我做的只是把它们串起来,补上中间那一段。真诚感谢。

最后

这不是什么大工程,起因真的就是不想再为了看懂一段视频,去改整台电脑的音频设置。

项目基于 MIT 协议开源,代码和使用说明都在 GitHub:

🔗 GitHub 仓库地址https://github.com/aronnaxlin/SwiftVolcCaption

如果它正好戳中了你,欢迎去点个 Star。有 Bug 或者想加什么功能,随时提 Issue。

折腾的快乐,大抵如此。

最后修改 Last modified: 2026年9月5日 5 Sep 2026