「实时」排除掉了什么
关于 Mac 上的语音转文字,不管叫转写、听写还是字幕,写出来的东西大多是在讲文件:你丢进去一段录音,等一会儿,拿到一份文字稿或者一条字幕轨。那条路比这个页面上的任何东西都准,因为一个能看到整句、甚至看到下一句的模型,永远赢过一个一个词往下定的模型。
它在会议正在进行时也同样帮不上忙。实时字幕拿那份准确率,换的是开会时唯一要紧的一件事:字要在还来得及读的时候到。如果你手上是一段录音,时间也充裕,那就到此为止,拿去跑文件转写,结果会更好。下面写的一切,都是为「声音正在发生」这种情况准备的。
六条路,最便宜的在前
- app 自带的字幕。免费。Zoom、Teams、Google Meet、Slack huddle 和 YouTube 都自带字幕,一分钱不要,覆盖的语言还比 macOS 多。它们到自己窗口的边缘就停住,其中几个需要主持人或管理员先允许,而且谁在中途甩过来一个视频,它们一个都帮不上。但还是先试这一条:够用的时候,它是免费的。
- Apple 的实时字幕。免费,系统自带。在 Apple silicon 的 Mac 上,系统设置 ▸ 辅助功能 ▸ 实时字幕。它是跨 app 配字幕,而不是只管一个 app,这个形态是对的。Apple 自己的文档写着:并非所有语言、国家或地区都可用。它一次只给一种语言配字幕,而且那个窗口会把你点向它挡住的东西的点击拦下来。完整的对比另有一页。
- 浏览器自带的实时字幕。免费,只管一个浏览器。Chrome 和基于 Chromium 的浏览器可以给标签页里播放的音频配字幕,在本机完成,开关就在它们自己的设置里。给标签页里的视频用是真的好,但对这个浏览器之外的一切都无能为力。
- 云端字幕服务。订阅制。这一类能覆盖本地模型够不到的语言,也是唯一会附上说话人标注和事后可搜索转写文本的一类。代价是音频要离开你的 Mac 才到得了那里,而对很多上班的人来说,这句话说完,讨论就结束了,它不是什么细节。
- 你自己驱动的本地语音模型。免费,但要动手。Whisper 和它的各种衍生版本都能在 Mac 上跑,也有做得不错的开源前端。但要让它实时出字幕、覆盖每一个 app、还以一层你干活时能顺手读的浮层呈现,那就是一个项目,不是下载一下就完事。下面讲的音频管路,正是其中大半的难处。
- 实时字幕 app。一次性付费。也就是 Subtitles:一层位于所有窗口之上的浮层,听的是 Mac 正在播放的声音,转写在 Neural Engine 上完成,十六种语言,除非你保存一份文字记录,否则不往硬盘上写任何东西。只有上面那四个免费答案都走不通了才值得,在那之前不值得。
Mac 是怎么捕获自己发出的声音的
麦克风好办:macOS 一直有这个 API,申请权限也是家常便饭。难的是系统音频,因为在 Mac 的大部分历史里,一个 app 根本没有正经办法听到另一个 app 在播什么。这件事有三个年代,而一个工具属于哪个年代,基本上就说明了你需要知道的大部分事情。
-
1
虚拟音频设备
你装一个假装自己是一对扬声器的驱动,把 Mac 的输出设成它,再当作麦克风把声音读回来。这办法管用,代价是你真正的扬声器从此没声,除非你再搭一个把信号分出去的设备。那些配着六张截图的教程,就是这个年代的产物。
-
2
为了拿到声音,去录屏
后来的 macOS 允许一个 app 在录屏的同时拿到系统音频。不用装驱动了,但你为了让它听见,得授予它看你屏幕的权利,而且 macOS 会用一个录制指示灯提醒屋里所有人。
-
3
Core Audio 的 process tap,macOS 14.2
一个 app 请 Core Audio 接入另一个进程的音频,或者全部进程的音频,直接拿到声音。不装驱动,不改路由,你的音箱照常出声,而你要授予的是录制音频的权限,不是录屏权限。Subtitles 之所以是现在这个样子,全部原因就在这里。
它还解释了那唯一一条绕不过去的要求。process tap 是 macOS 14.2 才有的,而且只在 Apple silicon 上,所以 14.2 就是这里的下限,Intel 的 Mac 抬不到这个高度。如果你用的是 Intel,上面前三条路就是你的全部选项。
给你的 Mac 配上字幕,三步搞定
-
1
安装,然后给那一个权限
macOS 会在首次运行时申请录制系统音频的权限。错过那个弹窗,每一段音频都会是静音,而且哪里都不会报错,这是唯一一个值得提前知道的失败。安装指南里讲了怎么用十秒钟看出来。
-
2
听全部,或者只听一个 app
全部系统音频是默认值,什么都不用设。要只听某一个 app,菜单里点一下就行,而且会把那个 app 的辅助进程一并带上,这正是浏览器标签页里的通话能像原生 app 一样出字幕的原因。
-
3
把浮层放在你想要的位置
按住 ⇧ 拖动;你把它放在哪儿,它就记住哪儿。它不拦截点击,所以你可以直接穿过它干活,指针指过去它会化开,而不是挪开。首页上的演示在你的浏览器里就是这个样子,买之前就能试。
14 天内无理由退款。
实时在准确率上的代价
这个识别器是流式模型,不是那种要等满三十秒窗口的,这就是「字幕跟着声音走」和「字幕等事情过去了才到」的区别。它在 Neural Engine 上大约以七分之一的实时速度跑,所以 Mac 并不吃力,风扇还是原来的样子。
从 macOS 26 起,Apple 向开发者提供了自家的语音识别器,而且很快。这里跑的不是它,原因和它好不好无关:它需要 macOS 26,而这个 app 从 14.2 就能跑,因为 process tap 就是在 14.2 来的,真正要紧的下限是音频那一头,不是模型那一头。为了把一个好模型换成另一个好模型而把下限抬高两个大版本,会把所有还停在 14 或 15 的 Mac 都关在门外。哪天 Apple 的模型下放到 tap 能跑的版本上,要改的就是这一段。
英语有七个模型可选,不是一个,它们在两件不可能同时拉满的事之间取舍:最快的那个大约落后说话人 160 ms 就开始出字,最慢的更准,也更靠后。其余语言都用同一个多语言模型。这种取舍,才是「到底准不准」这个问题的老实答案,也是这个页面不去声称自己能在一个谁都没跑过的基准里赢过谁的原因。
这个页面上的每一个工具,都还是会在同样的地方出错:人名、行话、缩写、两个人同时说话,以及一条糟糕的连接上语速飞快的口语。实时字幕把这些变得可读的次数,多到值得拥有,但没有可靠到能当成一份转写文本。
关于给 Mac 配字幕的问题
- 在 Mac 上怎么给系统音频配字幕?
- 从 macOS 14.2 起,一个 app 可以通过 Core Audio 直接接入另一个进程的音频,所以它需要你给的只是录制音频的权限。在那之前,你得装一个虚拟音频设备,再把输出绕过去,所以老一些的教程里全是截图。
- 还需要 BlackHole 或者别的回环驱动吗?
- 这件事上不用了。什么都不改路由,输出设备不变,字幕跑着的时候你的音箱照常出声。如果你在 macOS 13 或更早的版本上,或者用的是 Intel Mac,回环驱动仍然是答案。
- 实时字幕能有转写文件那么准吗?
- 不能,实时的都不能。文件转写工具会先看完整句,再决定第一个词是什么;实时的必须在说话人还在说的时候就落笔。如果你手上是录音,又不赶时间,那就去转写文件。
- 浏览器标签页里能用吗?
- 可以。它捕获的是一个 app 以及这个 app 派生出的每一个辅助进程,所以标签页里的通话或视频和原生 app 配字幕的方式完全一样。这也覆盖了 Electron 应用,它们的音频从来不是从顶着它们名字的那个进程里出来的。
- Subtitles 会给我自己的声音配字幕吗?
- 默认不会。它听的是你的 Mac 播放的声音,在通话里也就是除你以外的所有人。在“声音来源”里选了麦克风,就反过来了:它改为给身边的人说话配字幕,你也包括在内;macOS 只在你第一次选中麦克风时才请求权限。
- 延迟有多大?
- 最快的英语模型大约落后说话人 160 ms 开始出字;更准的那几个会更靠后一些。这是一个可调的范围,不是固定值,你想要哪一端,取决于你是在跟一场对话,还是在读一堂课。
- 我能把转写文本保存下来吗?
- 可以,只要你要。有了一分钟以上的语音之后,声音停下时,或者在安静得够久、字幕被清空之前,字幕块会提出把它们保存下来;菜单里的“存储文字记录…”则随时都能保存。格式可以是纯文本、Markdown 或 SRT;除此之外什么都不写进硬盘。在那之前,按住 ⌥ 可以把字幕调回来翻看或搜索。如果你事后需要笔记或者摘要,那你要的是会议纪要工具,不是这个。
- 为什么不用 Apple 自己的语音识别?
- 因为它需要 macOS 26,而 Subtitles 从 14.2 就能跑。Apple 的识别器很快,也在本机上跑,但决定因素都不是这些:process tap 是 14.2 来的,那就是下限,为了换个模型把下限抬到 26,会把所有还停在 14 或 15 的 Mac 都关在门外。Parakeet 从 14.2 起就在 Neural Engine 上以流式跑,实时字幕要的正是这个。