私密 · 本机运行 · Apple Neural Engine

你的 Mac 播放什么,
就配上实时字幕。

视频、通话、播客:一边播放一边转写,绘制成始终置顶的浮层。不上传,不录制,不写入磁盘。

14 天退款,不问缘由

一次性 $9,包含日后所有更新 · macOS 14.2 或更高版本 · Apple Silicon
字幕无限量,想用多久用多久。不用买时长,不用注册账号,不用订阅。

切换 app,字幕还在:浮层位于所有窗口之上,并且让点击穿透过去。

点一下窗口就能把它切到前面。按住 拖动字幕就能挪动它们,和在 app 里一样。

把指针移到字幕上,字幕会在指针底下化开。按住 可以把最近几块重新叠回来。这两件事在这里的表现和 app 里完全一样。

你的 Mac 上,任何 app 都有实时字幕

Subtitles 能给你的 Mac 播放的任何音频配上字幕,因为它捕获的是 app 本身,而不是去对接某一项服务。无论你是聋人或听障者、在用第二语言听,还是只是待在一个吵闹的地方工作,有三种情况会一再出现。

01

会议和通话

ZoomGoogle MeetTeamsSlack 哈德尔通话、浏览器标签页里的通话:说到底都只是从某个 app 里出来的音频,所以全都能配上字幕。是不是第二语言都一样,只要口音陌生、有人的麦克风不好,或者两个人同时开口,它立刻就值回票价:读一个只听到一半的词,比开口再问一遍快,而且不用打断任何人。

02

一边干活,一边不跟丢

音频不会等人。你切到备忘录、编辑器或者浏览器窗口的那一刻,就开始跟丢对话了。浮层始终在所有窗口之上,而且点击穿透,所以你在它前面干活时它就待在原地。你可以记笔记、查东西,同时还跟得上别人在说什么。像 Granola 这样的记事工具是在事后把会议写成纪要;而这一半的事,必须在会议还开着的时候完成。

03

视频、播客和讲座

一个没有字幕的视频,或者自动字幕烂到不如没有。一档播客,用的是你还在学的语言。一节录播或者直播的课、一场访谈、一部对白很轻的电影。字幕会出现在正在播放它的那个窗口上方,字号由你定,支持九种语言,语种自动帮你认出来。

这三种情况有一个共同点:一场会议、一通电话、一段私人录音,都不关服务器的事。这些音频都不会被上传,因为根本没必要:模型就跑在你的 Mac 上。

围绕三个约束造出来的

实时音频没法暂停,没法重来,也不该被送出你的机器。这里的一切都是从这一点推出来的。

没有东西离开这台 Mac

它在本地离线运行:没有网络请求,没有账号,没有遥测。音频从 process tap 直接进入识别器,然后被丢弃。唯一下载过的东西只有模型本身,而且只下一次。

用 Neural Engine,不用 CPU

实时率约 0.15:每一秒算力转写六秒语音。同一个模型放在 CPU 上,实测慢了大约 100×,根本跟不上实时的音频流。

任何 app,一次一个

在菜单栏里选一个音源,它就会捕获那个 app 以及它派生的每一个辅助进程。浏览器和 Electron app 之所以也能用,靠的正是这一点:它们的音频从来不来自主进程。

音乐不会变成歌词

识别器前面有一个人声检测器,伴奏永远到不了它那里。没有它,音乐会把模型的上下文塞满,音乐之后的头几个词就丢了。

换人说话就换一块字幕

可以选择在换人说话时另起一块字幕,就像遇到停顿时那样。默认关闭:它需要在第一个模型旁边再跑一个模型。

九种语言

默认模型会自己判断语种。英语另外还有七个专用 checkpoint,从 160 ms 起,在延迟和准确率之间取舍。

浮层不会挡你的路

一样东西压在所有窗口上面,只有在它从不变成你要绕开的那样东西时才成立。它不接收点击,会在你指的位置化开,还能把你刚才移开视线的那一行还给你。

指哪儿,哪儿就是个洞

把指针靠近字幕块,它就会在指针底下淡开,于是你正在读的句子永远不会盖住你正在写的句子。淡掉多少、这个洞能铺多宽,都由你定。想让它保持不透明,按住

按住 ⌥ 找回你漏掉的

字幕块像电视字幕那样一页页翻:填满、清空、重新开始,所以你一移开视线,那一行就没了。按住 ,最近结束的几块会重新叠到正在进行的那一块上面,最多三十块,更早的可以往回滚。松开手,它们又都不在了。什么都不会被写到任何地方。

浮层本身就是预览

在菜单里按 , 打开设置:一块字幕填满几行才清空、它有多实、指针底下的淡开能铺多远、 能回溯多久。每一个滑块都会在你拖动的同时作用到浮层上,所以这些东西是看着调的,而不是挑一个数字。

工作原理

一个只负责复制的实时音频线程,一个从不转写的可移植内核,还有一个跑在它该跑的地方的模型。

  1. 1

    Core Audio 的 process tap

    48 kHz 立体声,每 10.7 ms 一次回调。实时线程把数据复制进一个无锁环形缓冲区,别的什么都不做。

  2. 2

    重采样与门限

    在工作线程上降到 16 kHz 单声道,跳过静音,并在语音之前多回放大约一秒,这样没有哪个词是冷启动开头的。

  3. 3

    在 Neural Engine 上跑 Parakeet

    这是流式模型,不是 30 秒窗口的那种:区别就在于字幕是跟着音频走,还是晚好几秒才到。

  4. 4

    浮层

    三行一屏,像电视字幕那样清空再重来,在最后一次出现文字的四秒后淡出,而不是在音频停下之后。

从环形缓冲区到模型边界之间的所有东西,都是可移植的 Rust,而且刻意不做转写:它只负责递出音频帧。process tap 和浮层是仅有的两个 Mac 专属部分。

14 天退款,不问缘由。

没有什么要审,也没有什么要关掉

你之所以能把它对着一场工作通话用,是因为它不是一项服务。没有服务器,没有账号,没有转写文本,所以没有东西要发出去,中间也没有别人。源码是公开的,所以这些都不用你凭信任接受。

  • 没有机器人加入通话。它抓的是你的 Mac 本来就在播放的声音,所以参与者列表里不会多出什么,也没人会被告知有东西在跑。这一类产品大多是派一个所有人都看得见的参与者进去,而不少公司干脆就不允许这么做。
  • 不录制,也不写入磁盘。声音从 tap 进到识别器,当场就被丢掉。字幕在屏幕上,然后就没了; 叫回来的那几块只存在内存里,直到你退出 app,之后没有任何文件可找,你的 Mac 上没有,别处也没有。
  • 麦克风从不打开。它只听得到你的 Mac 播放的声音。这是一个实打实的限制,也正因如此,你说的话没有任何去处。
  • 没有账号,没有遥测,没有联网。没有要登录的地方,也不会把使用情况报到任何地方。模型只下载一次,大约 633 MB,此后再没有一次网络请求要发:把 Wi-Fi 拔了,它照样出字幕。
  • 没有可供训练的东西。根本不存在一份可以被发出去的转写文本,所以没有训练开关要找,没有默认值要核对,也没有需要写进数据协议里的受托处理方。这是否符合你们自己的规定由你判断,但这里没有第三方要审。
  • 唯一的例外是购买这一步。Gumroad 负责收款,会看到你的邮箱,就像任何一家店那样,并在 app 更新时给你发信。app 本身这两样都不会问你要。

选语言,而不是选模型

语言是第一个决定某个模型能不能用的因素,所以它是菜单的第一层。在同一个语言包里切换是即时的;跨语言包切换会去取另一个包,同时保留你已经有的那个。

下到一半改主意,它会取消并立刻开始下新的。以后再切回来,它会接着下,而不是从头开始。

它住在菜单栏里

没有 Dock 图标,也没有窗口要管理。图标本身就说明了它在做什么:正在听是靛蓝色,正在下载模型是蓝色,流水线开始跟不上是黄色,永远不会是红色,因为红色代表正在录制,而这里什么都不会被写到任何地方。开关都留在菜单里,在菜单里按 , 会打开一个设置窗口,里面是这些开关背后的旋钮。

S
暂停与继续
按住
让浮层可以拖动;平时它是点击穿透的
按住
把最近几块字幕叠回正在进行的那一块上面;往回滚可以看更早的
,
设置,从打开的菜单进入:每块几行、不透明度、指针底下的淡开、 能回溯多远
菜单栏
模型、音源、文字大小、浮层位置、权限状态

那 Apple 的实时字幕呢?

macOS 自带字幕功能,免费,每台 Apple Silicon Mac 上都有,在系统设置 › 辅助功能 › 实时字幕里。如果它够用,那就用它。下面这些是它不再够用的地方;想看长版本的话,还有一份逐行对比

  • 九种语言,自动认出来。Apple 的实时字幕并不是在每种语言、每个国家或地区都能用。这里的默认模型会自己判断语种,菜单栏里可以在语言之间切换。
  • 模型由你挑。七个英语 checkpoint,从 160 ms 起在延迟和准确率之间取舍,另外还有一个多语言的。Apple 给你的是字幕,不是一个可以拧的旋钮。
  • 浮层是点击穿透的。Apple 的那个是一扇要你去移动和缩放的窗口。这一个完全不接收点击,所以你可以直接穿过它工作。真想挪它的时候,按住 就行。
  • 你指到哪儿,它就在哪儿让开。字幕块会在指针底下淡开,让你读到下面的内容,淡多少、铺多宽由你设定。Apple 的那个是一扇不透明的窗口,你只能把它挪到别处去。
  • 一个 app,或者全部 app。把它对准正在通话的那个标签页,机器上其余的部分就保持安静。Apple 的默认转写所有 app 的音频。
  • 音乐不会变成歌词。识别器前面有一个人声检测器,伴奏永远到不了它那里。
  • 换人说话就换一块字幕。可选,默认关闭,系统自带的那个没有对应的东西。

下载之前值得知道的几件事

  • 首次启动要等上几分钟。模型大约 633 MB,首次运行时自己下载。菜单栏里能看到进度。
  • macOS 会请求录制系统音频的权限。跳过那个请求,之后每一份采样都会变成数字静音,而且任何地方都不会报错,所以 app 在菜单里保留了一项权限检查,而不是假装自己知道。安装包经过签名和公证,所以你给出的答案能挺过每一次更新。
  • 唱歌也算说话。人声检测器分不出两者的区别,所以带人声的音乐会以歌词的形式出现。
  • 换人说话是事后才认出来的。说话人分离按固定节奏给出结果,所以新说话人的一两个词可能落在上一块字幕上,然后那块字幕才清空。
  • 只用一块屏幕。浮层显示在主显示器上。
  • 试过的模型会留在磁盘上。在这八个之间来回切换正是你找到合适那个的方式,而每一个你试过的都会被留下。设置里有一个按钮,会删掉没有在用的那些,永远不会动正在用的那个。

大家最先问的问题

它支持 Zoom、Teams 和 Google Meet 吗?
可以。它捕获的是某个 app 播放的音频,而不是去对接某一项服务,所以 Zoom 窗口、Slack 哈德尔通话、浏览器标签页里的通话,配字幕的方式都一样。浏览器和 Electron app 也包括在内:它会一并捕获这些程序派生的辅助进程,它们的音频其实就出自那里。
一直浮着的东西不会碍事吗?
它完全不接收点击,所以你可以直接穿过它工作;它还会在指针底下淡开,让你读到它下面的内容。淡掉多少、能铺多远、字幕块有多实、能容纳几行,全都是可以设定的。想让它保持不透明并把它拖到别处,按住 ;你把它放在哪儿,它就记住哪儿。
它会给我自己的声音配字幕吗?
不会。它只听你的 Mac 播放的声音,从不碰麦克风。在通话里,这意味着你读到的是别人说的话,不是你自己的。
它需要联网吗?
只需要一次,首次运行时下载模型,大约 633 MB。之后它完全离线运行,不发出任何网络请求。
我能保存或导出转写文本吗?
不能,这是有意为之。没有任何东西会写入磁盘:字幕在屏幕上出现,然后就没了。在 app 运行期间按住 能把最近几块字幕叫回来,那是用来补上你刚才没看到的那一行的,不是用来留存记录的。如果你需要一份对话记录,这个工具不合适。
需要 IT 部门批准吗?
这里没有什么供应商需要批准:没有账号,没有服务器,没有离开 Mac 的转写文本,也没有以参与者身份进入通话的东西,所以会议里没有任何人被任何东西录下。它就是一台机器上的一个已签名、已公证的 app,模型下载完那一次之后,它再不会发出任何网络请求。这是否符合你们自己的规定由你判断,但这里没有第三方夹在中间要审。
它支持耳机或 AirPods 吗?
可以。它捕获的是 app 产生的音频,而不是从扬声器里出来的声音,所以你用什么设备听都没有区别。
它会拖慢我的 Mac 吗?
转写跑在 Neural Engine 上而不是 CPU 上,实时率约 0.15,也就是每一秒算力可以处理六秒语音。同一个模型放在 CPU 上,实测慢了大约 100×,根本跟不上。
它能在哪些 Mac 上运行?
Apple Silicon,macOS 14.2 或更高版本。这个版本下限来自 Core Audio 的 process tap,整个程序都建立在这个 API 之上。
它是订阅制吗?
不是。一次性 $9,包含日后所有更新,不用注册账号,也不用买时长。如果它不适合你,14 天内可以退款。
我能看到源代码吗?
可以。它以 FSL-1.1-ALv2 发布,每个版本在两年后转为 Apache 2.0。想读代码或者自己编译,都在 github.com/daformat/subtitles

给任何声音配上字幕,而音频不去任何地方。

14 天退款,不问缘由

一次性 $9,包含日后所有更新 · macOS 14.2 或更高版本 · Apple Silicon
无限量实时字幕,只要这台 Mac 还在你手上。不用买时长,不用注册账号,不用订阅。