Rewind

Jan. 12, 2023
This post was last updated a long time ago and may therefore contain outdated information or opinions I no longer hold.

TL;DR:

The Good

  • 优秀的文字识别和索引能力
  • 接近原生的设计和使用体验,交互细节考虑到位
  • 有效控制了硬盘空间和处理器性能占用

The Bad

  • 暂时只支持英文 已于 2023 1 月底支持中文
  • 电量消耗较高
  • 长期使用性能待观察
  • 定价显著偏高

The Ugly

  • 宣传和沟通存在尬吹和说话不老实的情况

从《黑镜》第一季终章《你的全部历史》(The Entire History of You),到《降临》编剧姜峯楠的雨果奖提名小说《双面真相》(The Truth of Fact, the Truth of Feeling),很多文艺作品里都出现过类似「可回放记忆芯片」的设定:你可以完整地记录下全部视听感官,在日后随时检索回看。

在目前的科技条件下,这样的设定仍然是超现实的。但如果将问题简化为录制操作电脑的全部历史,是不是听起来就实际很多呢?如果你曾经绞尽脑汁回忆过那些一闪而过的网页和对话框内容,或者垂头丧气感叹「时间都去哪了」,也许在当时就想象过:要是能回放过去的屏幕画面就好了。

但问题似乎也不是只靠「大力出奇迹」就能解决的:连续不断地录制屏幕内容,硬盘有没有足够的空间存放?处理器和电池能不能负担得起性能开销?更重要的是,记下了这么多数据,如何快速定位到有用片段而不是大海捞针?隐私有没有保障?

或许正因为这些障碍,此前主要只有监考、企业内控等行业应用会对屏幕内容进行连续录制和分析,并且像在文艺作品里一样,引发了很多隐私和道德担忧。

Rewind 是将这种「无限记忆」普及化的一次新近尝试。

正如其名称「倒带」所喻,Rewind 希望把电脑操作历史做成一个可回溯、可搜索的数据库,并且避免为此消耗过多系统资源。据创始人 Dan Siroker 说,他本人在二十几岁时失聪,三十岁因为助听器改变了生活,因此有愿望制作其他能辅助增强人类能力的工具。

经过几个月的内测,Rewind 在去年 11 月初正式对外公布,并在 12 月中旬开放注册和下载,同时宣布获得了 a16z 千万美元的投资。在 2022 年末的硅谷寒冬中,凭借颇具脑洞的思路和相对成熟的落地效果,这款产品一时也成为热门,引起不少讨论,但其中也不乏争议。

下面,本文将结合使用体验和实现原理,对 Rewind 做介绍和评论。

安装和使用

安装 Rewind 之前,要注意它目前只支持 macOS 12 (Monterey) 或更新版本的系统,并且要求电脑是搭载 Apple silicon Mac

初装过程比较简明顺畅。启动后有一个欢迎向导,向用户介绍工作原理并要求开启录屏、辅助功能和录音权限,然后需要登录账号以便处理订阅付费(注意取消自动续费;关于付费模式的讨论见后文)。

完成之后,Rewind 就默默驻守在菜单栏图标里开始工作了。

人们经常用「像是苹果自己做的」来称赞那些在设计和交互上符合 macOS 规范和习惯的软件;Rewind 可以配得上这个说法。按下默认快捷键 Command-Shift-Space,或者按住 Command Shift 键的同时在触控板上双指滑动,就进入了 Rewind 颇具「果味」的主界面——与经典的「时间机器」界面异曲同工。

这个界面的主体显示的是录制的屏幕画面。底部是一个时间轴,上面依次排列着此前用过的应用图标。(一个比较细心的设计是,Rewind 内置了接近一千个常用网站的图标可以按需显示,这比只显示浏览器图标更加直观。)

使用触控板或鼠标滚轮滚动时间轴,就能查阅不同时间段的屏幕画面。如果需要快速跳转,可以按住 Shift 加快滚动速度;或者点击时间轴上方的日期文本,从弹出的日历对话框中选择要转到的日期。

不过,Rewind 的招牌功能还是藏在界面中间的搜索框里。

在这里输入任何你觉得曾在屏幕上出现过的文本,Rewind 就会帮你从「记忆」的每个角落中搜刮出它的每一处痕迹,然后以时间倒序显示出带有高亮提示的缩略图矩阵——其中往往有那么一两个能让你拍案称奇的偏门发现。

如果结果太多,还可以根据应用程序进一步筛选。例如,你记得曾经就某个话题搜到过一个特别有用的网页,但在茫茫标签页中遗失了,那么只要将搜索范围限定在几个浏览器中,就能更快找到结果。

遗憾的是,Rewind 目前的搜索过滤能力也就到此为止了:既不支持划定精准的日期范围,也不支持多种搜索条件之间的逻辑组合。可以想像,随着录屏内容的积累,日后必然会影响搜索效率。

说到浏览器——对于部分浏览器,Rewind 还支持所谓「深度链接」功能,可以直接从搜索记录页面跳转回原来的网页。(目前支持老牌主流的 Safari Chrome,以及后起但擅长「搞事情」的 Brave Arc。)

即使浏览器不在支持之列,或者录下的是其他类型应用,只要画面中完整地显示出了链接,Rewind 也可以在转文本后识别出来,点击即可访问。

你可能注意到 Rewind 搜索框里的提示语是「搜索任何看到、说到和听到过的内容」。的确,除了录制和搜索屏幕上的文本内容,Rewind 也支持搜索语音。实际上,语音内容的录制和索引正是 Rewind 原班人马上一个创业项目 Scribe 的功能;Rewind 可以认为是在其基础上将录制范围进一步扩大的产物。

为了测试,我背……朗诵了整篇《葛底斯堡演讲》。可以看到,Rewind 虽然没有完全领会亚伯拉罕·林肯的深层含义,但至少大致完整地转写下了林肯演讲的字面意思。考虑到是纯离线转写,这个效果是可以接受的。

需要注意,与屏幕显示内容不同,Rewind 并不会持续录制声音,而只会在线上会议期间自动录制,或者由用户通过菜单栏的录制命令手动开关。考虑到录音对他人隐私的潜在影响,这种设定是合理的,但目前只支持 Zoom 会议的自动检测录制显然过于局限了。

此外,Rewind 录音的来源是非常局限的,只能「听到」系统当前输入设备——一般就是内置麦克风——传来的声音。换句话说,如果想在开会时录下其他参会者的声音,就只能……一直开着扬声器外放,因为只有这样才能让麦克风「听到」。能用是能用,但未免过于狂野。

(如果愿意折腾的话,借助 Loopback 这样的工具,可以把麦克风输入和会议软件的输出拼接成一个虚拟输入设备,从而让 Rewind「听到」更多东西;但那超过了本文的讨论范围。)

最后,考虑到 Rewind 记录信息的范围之广,有几个隐私相关的问题值得记住:

  • 在设置的 Screen 选项卡中,可以选择排除特定应用。Rewind 此后就会「假装看不到」这些应用,创建的录屏不会包含其任何窗口。Rewind 还会默认排除浏览器的隐私模式窗口。不过,Rewind 不能排除系统界面,所以被排除应用的缩略图仍可能「混进」系统多任务切换界面等位置;
  • 如果手头操作的保密要求较高,可以随时通过菜单栏图标暂停录屏;
  • 如果在时间线或搜索节目中看到了什么让自己「大惊失色」的场面,可以按 Delete 键删除当前展示的录屏片段;
  • 通话录音的法规各国各地都有区别,Rewind 的录制活动对于其他参会者是透明的,无论稳妥或得体起见,都最好在使用时予以知会。

技术分析和潜在问题

如开头所说,Rewind 的设计思路本身并不复杂,甚至有点「简单粗暴」:只要先录屏再做文字识别,日后就可以搜个爽;那只要在后台一直录屏一直做文字识别,不就可以一直爽。

但之所以过去没人这么干,肯定不是因为没想到或者做不到,而是难以获得良好的体验,无法将对处理器、硬盘空间和电池的消耗控制在可接受的程度。

Rewind 是怎么做到的呢?

底层技术:他山之石,可以拼盘

Rewind 的核心思路是「站在巨人的肩膀上」。不难注意到 Rewind 的运行条件是比较苛刻的——这一般意味着软件依赖于比较新的功能和接口。事实也是如此:Rewind 重度使用了苹果提供的软硬件条件。

软件上,Rewind 主要通过新版 macOS 提供的 ScreenCaptureKit 实现录屏功能。

与过去的接口相比,ScreenCaptureKit 除了能提供更好的性能和更丰富的编码格式,更重要的是能够向截屏工具提供显示器、应用程序和窗口的具体信息,以便开发者更细致地控制在截屏里包含什么、隐藏什么。Rewind 也正是借此实现了在录屏中排除特定应用程序的隐私保护功能。

(过去也有一些截图工具实现了截出 Photoshop 格式的图片,其中每个窗口对应一个图层;但相关 API 因为比较隐晦而少见使用,也已经被苹果宣布将在未来弃用。)

至于 Rewind 的文字识别功能,则也依赖于原生的 Vision 框架 提供的能力。其中,从界面中识别出链接的功能还利用到了与「实况文本」(Live Text)这一系统功能相同的接口。

唯一的例外是语音转文本。这里,Rewind 不知为何并没有使用 macOS 的原生框架(SFSpeechRecognizer),而是使用了 OpenAI Whisper C++ 移植版。观察内部文件可知,Rewind 内置了一个「基础款」的英语模型(ggml-base.en),用稍高的误差率换取了更快的处理速度。

顺带一提,对于国内用户来说,目前使用 Rewind 的主要障碍大概就是不支持中文。并且由于 Rewind 的部分功能依赖于识别屏幕文本,目前也只能在系统语言设置为英文时正常工作。

好消息是,上面提到的这些框架其实都支持中文。因此,如果官方有意增加支持,其实也不会需要很大功夫,但如果要达到比较好的检索效果,就还得解决分词等中文特有的问题了。

然而,我目前没有看到 Rewind 公布过支持其他语言的计划。从 Rewind 团队在推特上的答复看,除了上线时询问过一次用户希望增加什么语言支持,之后就没有再答复相关问题。因此,短期内看到 Rewind 支持中文的可能性预计不大。

2023-01-28 更新:2023 1 月末发布的 v0.7168 版本已增加中日韩等多国语言支持,但默认关闭,需要在设置中手动开启。根据测试,中文的识别和索引效果不错,只是目前对中文拼音输入法的支持很差,但这也是国外软件初步支持中文时常见的疏忽,一般不难修复。

硬件上,从 Rewind 只支持搭载 Apple silicon 的新型号 Mac 就能看出,它依赖于 M 系列处理器的一些新特性,特别是大小核设计和神经网络引擎。前者可以将一些后台任务分配给能效比更高的小核,节约性能和电量;后者则可以提供更好的图像分析和编解码性能。

存储空间:成效可嘉,尬吹可鄙

存储问题可能是很多人听到「持续录屏」的做法后首先顾虑的。毕竟现在主流 Mac 机型的分辨率至少也是 2K 级别的,很多人还会使用 4K 分辨率的显示器。一直录制 4K 分辨率的视频?想想都很酸爽。

对此,Rewind 的回答是「完全不用担心」。官方宣称可以实现高达 3,750 倍的压缩率,并解释说,他们使用一个含有 1,302 帧、10.5GB 的未压缩录屏进行测试,发现能够压缩到 2.8MB,将其相除,便得到了这个「难以置信」的压缩率。据此,他们估算用户平均每月使用的空间在 14—39GB 左右。

实际使用发现,Rewind 的压缩效率确实不错,官方的估算也算准确,但那是以单显示器为前提的。例如,我的 16 MacBook Pro 绝大多数时候都搭配 4K 显示器使用,在大约一个月的测试期间生成了约 60GB 数据。因此,如果你的空间有限,记得到设置里调整视频的保留期限。

还应当指出,Rewind 对于压缩技术的宣传有一些夸大成分。Rewind 是以每两秒一帧、也就是 0.5fps 的「幻灯片」帧率录屏的,对于实现其功能是足够了,但拿来和人们一般理解的 30fps 以上视频相比,显然是不公平的。

Rewind 还表示通过所谓「商业机密」算法实现了动态压缩比:屏幕内容变化幅度越小,压缩率就越高。但这其实也只是现代编码格式的基本能力,即通过相邻帧之间的相互预测来减少数据量。例如,一个未压缩的 4K 分辨率 10 色深画面有 3840 × 2160 × 10/ 8 = 10.37MB,在双向预测(B-frame)算法下可能被压缩到几 KB——这本身就达到了 Rewind 宣称的比例。

另一个令人好奇的问题是,Rewind 是怎样储存这么多数据的呢?其实,尽管效果看起来挺科幻,但实际做法是比较简单的,甚至有点简陋。

概括而言,Rewind 把所有的录屏和文字识别结果都存储在 ~/Library/Application Support/com.memoryvault.MemoryVault 路径,其结构如下:

.
├── chunks
│   ├── 2022-12-16T01/39/46
│   │   └── chunk
│   ├── 2022-12-16T01/41/26
│   │   └── chunk
│   ├── 2022-12-16T01/41/38
│   │   └── chunk
│   ├── . . .
├── db.sqlite3
├── db.sqlite3-shm
├── db.sqlite3-wal
├── snippets
│   ├── 2023-01-10T15/36/37
│   │   └── snippet
│   ├── 2023-01-10T15/41/48
│   │   └── snippet
│   ├── . . .
└── temp
    ├── 2022-12-16T08/21/45.833
    ├── 2022-12-16T08/21/47.812
    ├── . . .

其中:

  • chunks 目录:存放视频。每段视频(chunk)长度是动态的,一般在二十几秒到四五分钟不等,用户操作越频繁,分段就越细致。视频采用 H.264 编码和 MP4 格式封装。
  • snippets 目录:存放录音。录音文件采用 AAC 格式编码,单声道 16000 Hz 采样率,比特率为 25 KB 每秒。
  • temp 目录:存放 PNG 格式的静态截图。不知为何是全尺寸且没有压缩,与对待视频时的省吃俭用形成鲜明对比。

当然,最关键的文件还是 db.sqlite3 这个 SQLite 格式的数据库,它存放了录屏历史,前台窗口的标题、应用类型和切换时间,从视频和音频中提取的文字信息,以及这些文字在原始的录屏文件中出现的帧数和坐标。

如何评价这种存储结构?我在这方面并不专业,但仍然有一些比较明显的可改进之处。例如,在已经有完整视频的前提下,再额外存储一份全尺寸截图似乎有点多此一举,而且也占用很大空间。此外,目前采用的存储层级是非常扁平的,随着使用时间的积累,chunks 等数据目录下将出现极大数量的子目录,这可能会影响遍历的效率。

事实上,在我的 M1 Max 机型上测试时,使用一个月后,滚动搜索结果就需要比较明显的等待时间,更早的结果大约以十个一批的节奏出现,越往下滚动等待时间越长。考虑到 Rewind 甚至允许用户「永久保存」记录,经年累月以后的性能下降可能就更加明显了。

性能和能耗:运行如忍者,耗电如强盗

另一个常见顾虑是对能耗的影响。如上所述,Rewind 只能在 Apple silicon 机型上运行,目的是利用 M 系列处理器的大小核设计和神经网络单元。官方数据称,对于 M1 系列处理器,通常情况下会使用单核 20—40% 的处理时间。

实测表明,这个数字是准确的,并且 Rewind 会积极调用小核完成任务。不过,处理视频建立索引时会出现一些峰值,最多可以短暂占用两个小核的全部处理时间。

总体而言,Rewind 的性能优化不错,在后台运行基本无感,不会对日常操作产生影响。

但对电池续航的影响就没那么乐观了。对此,一个常用指标是「活动监视器」「能耗」选项卡下的「能耗影响」(Energy Impact)。

(能耗影响是根据处理器占用率、唤醒处理器的频率,以及磁盘写入、GPU 占用和网络活动等因素综合计算的,这些因素在不同型号 Mac 上的计算权重不同,但在同一设备上可以通过与其他程序相互比较作为耗电量的参照。)

Rewind 的这项指标确实高居榜首,在我电脑上的 12 小时平均值常在 700 左右。虽说能耗影响的值不能线性对应到耗电量上,但这种水平的读数毫无疑问意味着有可感知的续航影响;一些用户反馈称 Rewind 减少了二到四成的续航。

(作为参照,以省电著称的 Safari,读数一般在个位数或较小的两位数;比较耗电的 Chrome 浏览器则经常在大几十区间,有时上百以至数百。此外,能耗影响如果持续达到二三十,就会在电池图标下拉菜单中「荣登」高能耗榜单。)

因此,在脱离电源使用 MacBook 时,最好考虑暂时关闭 Rewind。不过官方表示,将会加入在低电量时自动停止转码和索引的功能,值得期待。

2023-01-28 更新:本文发布后,Rewind 陆续通过版本更新优化了一些节能效果。例如,2023 1 月末更新的 v0.7168 在未插入电源时会暂停压缩视频。官方宣称这可以节约 30—60% 的能耗,但未说明测试方法,故本文无法独立验证。

隐私:技术关易破,心理关难逃

从内测之初,就有很多人表示听说 Rewind 工作原理后,第一反应是「不放心」。这是可以理解的:让一个第三方软件从早到晚录制屏幕、识别文字,就有点像在家里装一个全天开启的摄像头,需要对品牌很强的信任才能克服潜在担忧。

这里还有一个插曲:Rewind 的早期版本其实没有做到纯离线运行,而是使用了云服务处理语音转文字(见帮助页面存档)。这在当时引起了一些用户的反感,也与首页上所谓「数据不离本机」的宣传自相矛盾。好在 Rewind 团队还算是听得进外界意见,上线两天后就做出了改变,通过内置 OpenAI Whisper 模型实现了离线转写。

但即使实现了纯离线运行,作为初创公司,Rewind 也没有积累足够的资历和信誉来打消用户的顾虑;他们的宣传和沟通方式一定程度上还起到了相反效果。

例如,Rewind 虽然在帮助文档中专门划分出「隐私」一节,花的笔墨比介绍功能还要多,但其中主要是一些「按抚」性质的营销话术,例如保证录屏信息不会上传(「所以即使我们被发了传票也只能无可奉告耶」),也不会转卖用户数据。真正的披露信息只有公示网络活动的目标域名之类,而这本就该是隐私政策的标准内容。

此外如上文讨论,Rewind 目前生成的视频文件和文本数据库都是明文存储的,只要知道路径就可以直接访问。考虑到持续录屏中很难避免会混入明文密码或其他敏感信息,采用加密存储等方式进一步提高安全性也是一个合理的改进方向。

然而,官方在网站和推特上回答相关问题时,采用了一种颇具误导性的口径,表示只要启用了 macOS 自带的 FileVault 功能,录屏数据就是受加密保护的。但我们知道,FileVault 是一个全盘加密功能,并不能在系统已被攻击的情况下,给特定软件提供额外保护。如果说启用了 FileVault 就算给 Rewind 加密,那桌面上随意一个 Word 文档也能算「加密」了;这显然是非常荒谬的。

Rewind 引发的隐私顾虑可以说是一个提醒:随着软件的能力范围不断扩张,除了技术和性能,隐私和伦理也将成为不可忽视的制约因素(参见最近 AI 行业的一堆案例);开发者需要在设计之初就考虑这些方面的潜在后果,而不是在事后出现问题时再考虑怎样亡羊补牢。

付费模式和可持续性

和大多数起源硅谷、风投支持的产品类似,Rewind 的定价水平颇具第一世界思维:每月 20 美元。

Rewind 团队看来,他们做的是救人于水火的事情,用户很容易就能感到物超所值。为了支撑这种论述,官方甚至专门收集了一个感恩推文集合。但显然,即使欧美市场的用户,也不可能轻易在已经膨胀的订阅列表里,再加上这样一个大件。

在我看来,如果认为 Rewind 定价方式不够合理,那么问题并不在于订阅制、也不在于价格本身,而在于采用了固定价格的订阅制。

  • 从开发成本看,Rewind 的底层技术都来自系统功能或第三方,利用的完全是用户电脑自有的存储空间和运算性能,其产品可以说主要是对现成资源做二次封装所得。提出这点不是要贬低 Rewind 的创新,但确实意味着需要更有力地论述付费点何在。
  • 从对用户的价值看,Rewind 有点类似于备份工具和数据恢复工具,主要起到一种保险的作用,「养兵千日用兵一时」。例如,在我试用的一个月中,真正用上它力量的情况只有两次:一次是找回误关网页输入框中的回复,一次是找回捣鼓半天却忘了执行的终端命令。高兴是很高兴,但是不是值 20 美元的高兴?好像也没有。

因此,这样性质的产品不是说不能循环收费,但采用固定费率就不太匹配,对用户的说服力也不强。

如果换由我站在「奸商」的视角上,一种可能值得考虑的模式是:基本的后台录屏免费,同时根据核心功能,也就是搜索和时间线的使用频次收费。具体衡量标准可以是进行搜索和截图取字操作的次数,也可以是使用时间线界面的时长等。这样,可以吸引更多用户安装使用,也可以让费用更公平地反映给用户带来的实际帮助。

除了付费模式,Rewind 自身的可持续性也是需要考虑的问题。把自己的业务建立在他人提供的技术上总是有风险的;如果 Rewind 依赖的 macOS 接口日后发生重大变化,对于这款软件就会是重大挑战甚至生死攸关。这种技术架构也决定了跨平台的成本是非常高的,不啻于重新开发一次。如官方问答所说,在「可预见的未来」还会专注于 macOS,今年只可能「考虑」是否支持其他系统和移动端;我相信后半句目前就是随口说说。

此外,锚定苹果生态也未必就是安全的:不能忘记苹果一直有暗中观察热门产品,等时机成熟时直接做成内置功能的「癖好」。从用通知中心取代 Growl 到用「随航」取代 AstroPad,这种被坊间称为 sherlock 的做法对于 Mac 平台开发者始终是悬顶利剑。而考虑到 Rewind 与苹果软硬件的绑定程度之深,其功能对信息安全的潜在影响之高,可以说没有谁比苹果自己更适合开发这个功能(即使是一种简化版),更可能说服那些因隐私顾虑犹豫不决的用户放心尝试。

结语

如果用一个词形容 Rewind 给人的感受,那大概就是「潘多拉的盒子」。它一方面提出了一个颇具吸引力的使用场景——「时光倒流」,另一方面又在性能、隐私和商业模式等方面留下了一堆未完成的答卷。这造就了一个让人忍不住想试,真用起来又止不住隐隐担心的奇特应用。

Rewind 的价值不止在于其功能,也在于其思路。很少有哪个软件像 Rewind 这样,做到「调动一切可以调动的资源,团结一切可以团结的力量」:

  • Rewind 充分利用了苹果平台提供的软硬件条件,把持续录屏的成本控制到可以接受的范围内,从而让之前只存在于想象中的效果变成了现实;
  • Rewind 意识到值得被索引和搜索的不仅是文件和数据,探索与电脑交互的过程本身,也可以给用户带来很多价值。此前,只有开发商和广告商会出于分析追踪目的收集使用数据。Rewind 以有意义的方式索引和呈现出这些数据,使其能更好地服务于真正的主人——用户自己;
  • Rewind 证明了「局部次优」的组合如何能产生「整体最优」的效果。如果只是从单个应用中提取数据,显然适配标准接口和协议才是正道。但如果将搜索尺度扩大到整个使用历史,逐一适配就根本不现实了,很土很粗暴的截屏取字反而成为了唯一通吃所有应用的「公分母」,八面玲珑的「通用交换格式」。

总之,Rewind 或许还存在很多问题,或许也不会是「后悔药」的终极形态,但确实是一个处处有巧思、处处用巧劲的有趣作品。无论你的选择如何,相信都能在尝试中有所启发和思考。


如文中所述,Rewind 目前还存在价格高昂、软硬件要求苛刻、暂不支持中文,以及潜在的隐私担忧等诸多问题。因此,在试用 Rewind 期间,我也萌生出一种想法:能不能自己「山寨」一个 Rewind 呢?

Rewind 录制的是视频,这在我看来稍微有点没必要,也不方便处理;不如将其简化为「如何以较高频率定期截图」,仍然可以满足备忘的需求,所得格式也更通用。

经过尝试,我取得了一些成效,已经在上周通过少数派的会员栏目介绍了方案。这里借本文机会,把基本步骤分享出来,供大家批评。

简单来说,这个方案:

  1. 使用 screencapture(1) 获得 PDF 格式的截图;
  2. 制作 LaunchAgent 实现开机自启和循环运行;
  3. 使用 OCRmyPDF 压缩截图体积并识别文字;
  4. 使用 taskpolicy(8) 强制任务运行在小核上。

脚本和安装使用步骤放在 GitHub 上,供有意尝试的朋友取用。如果对这种方案的原理和延伸讨论感兴趣,可以考虑订阅查阅原文,感谢支持 :)

A version of this article appears on Jan. 12, 2023 on SSPAI.