
Earshot 推出 Mac 端本地实时转录工具,可区分不同说话人
来源标题:Show HN: Earshot – live, on-device transcription of any app on your Mac
Earshot 上线 Mac 版,可对任意应用的声音进行本地转录,支持通话结束后生成或实时显示两种模式,并在 Neural Engine 上区分不同说话人。音频全程不离开 Mac,无需云端或机器人入会。需 macOS 26 及以上和 Apple 芯片。
以下正文由 AI 翻译自 Hacker News 最新(原文版权归原站所有),可能存在偏差,重要内容请以原文为准。
下载 Mac 版 Earshot · 需要 macOS 26 或更高版本、Apple 芯片 Windows 版 Earshot:x64 · Arm64 · Windows 10 或 11,仅支持通话结束后转写(详见说明) 在 Mac 上对任意 App 进行设备端转写,可实时进行,也可在通话结束后进行,并且能区分每一个声音。
从菜单栏选择一个 App(Teams、Zoom、Chrome、Discord……),它播放的所有声音都会被转写,既可以在通话结束后转写,也可以在说话的同时实时转写。不经过云端,也没有机器人加入通话:音频始终不会离开这台 Mac。
一键操作。菜单栏会列出当前正在播放声音的 App,点击其中一个即可开始。
通话结束后转写,或实时转写。默认情况下,通话期间只保存声音:不运行模型,因此 Mac 保持低温,通话结束后才写出转写文本。排队等待转写的任务也会在另一段录音进行时暂缓。在菜单中切换到「实时」,即可在通话前或通话中看到文字随说话实时出现:通话中途切换会保持同一个会话,而未能实时转写的部分会在结束时从音频中补写。
区分每一个声音。通话结束后,Earshot 会在神经网络引擎上判断谁在什么时候说话。如果能识别到 Teams 中的名字,就会为对应的发言行标注这些名字;否则标注为「Speaker 1」「Speaker 2」……点击某个名字,即可在整个会话中重命名该说话人;给两个说话人起相同的名字即可将它们合并。
每次通话后生成摘要。转写文本写好后,Apple 的设备端模型(Apple Intelligence)会用通话所用的语言写一份简短摘要:内容是什么、关键要点、做出的决定以及谁负责什么。摘要显示在转写文本上方,并作为 Summary.txt 保存在其旁边。「Summarize again」会重写摘要;可在「设置」中关闭此功能。较长的课程会分块读取,然后再合并笔记。
文件也可以。 「Transcribe a file…」(或将文件拖放到资料库)可处理 macOS 能打开的任何音频或视频文件:语音备忘录、在其他地方录制的会议。每个文件都会像通话一样被转写,包括声音区分。
只针对该 App。Earshot 截取的是 App 自身的音频输出,因此通知、音乐或你自己的麦克风都不会进入转写文本,除非你主动要求。即使 Mac 处于静音状态也能工作。
实时文字。每句话说完后片刻,对应的行就会出现,正在进行的句子会逐字写出。向上滚动时视图会停留在原处,直到你跳回实时位置。
如果你愿意,也可以包含你自己的声音。勾选「Include my microphone」,你说的话就会以你的名字被转写,即使你在对方说话时插话也一样。使用扬声器时,麦克风也会拾取到通话声音:Earshot 会从中剔除 App 的声音(回声消除),而不是将其静音,因此回声不会被重复转写,你的插话也不会丢失。
如果你愿意,还可以开启实时字幕。一键即可开启或关闭:在转写窗口中点击「Stop」旁边的「Subtitles」,或在通话前勾选菜单中的复选框。一个小巧的半透明窗口会显示最近说过的两行内容,如果 Earshot 知道说话人是谁,还会显示其名字。可将它拖到任意位置,并可直接在窗口中调整文字大小。提供两种引擎:Fast,即 Apple 的设备端识别(无需下载,一次一种语言);或 High,即运行在 MLX 上的 Kyutai STT 1B(法语和英语混合,延迟约半秒,仅在点击「Install」时才下载 2.4 GB)。
谁说了什么。在 Microsoft Teams 中,名字来自 Teams 自己的实时字幕,通过辅助功能 API 读取。Earshot 可以为你开启字幕。
按日历事件归档。每个会话以其所属日历事件的名称保存,然后是日期。通话结束时录音停止,但如果事件结束前有休息时间,录音不会停止。
英语或法语。界面跟随系统语言,也可以在「设置」中选择。转写支持这两种语言,或自动检测。通话结束后,会针对每一段语音(一个声音,最长 15 秒)检测语言,因此一门在法语和英语之间来回切换的课程,每句话都会保留其被说出时的语言。实时模式下,检测按语音块进行(最长 25 秒):当说话人在同一块内切换语言时,转写文本会保留该块的主要语言,而另一种语言的句子会以翻译形式出现,而非逐字记录。High 实时字幕会按实际所说的语言跟随这两种语言。
不会丢失内容。声音会随到随写,因此强制退出、崩溃或 Mac 在通话中途关机,最多只会丢失最后不到一秒的内容:Earshot 会在下次启动时恢复该会话。
导出。每个会话文件夹都包含 Transcript.txt 和 Audio.m4a。可从资料库导出 Markdown 和字幕(.srt),任何会话都可以从其音频重新转写。
可与你的文档一起搜索。开启「Index transcripts with doc-indexer」后,Earshot 会在每次转写完成后自动运行 doc-indexer-macos,这样你的通话和课程就能与其他文件一起被搜索。它会等到没有通话在录音、也没有转写正在进行时才运行,并以后台优先级运行:Mac 保持低温。每个会话都是一个纯文本文件,因此索引器能完整找到每一门课程。
工作原理
组件 所用技术 按 App 捕获 对所有 App 音频进程(包括辅助进程)使用 Core Audio 进程截取(CATapDescription,macOS 14.2+) 转写 使用 Metal 的 whisper.cpp。音频在停顿处切分,跳过静音,以免 Whisper 产生幻觉。通话结束后,Silero 的语音活动模型(Core ML,通过 FluidAudio)只保留有人说话的部分,因此麦克风中的呼吸声、打字声和房间噪声不会变成编造的行。每一段对应一个声音,并各自获得自己的语言 声音 FluidAudio 的离线说话人分离(Core ML 中的 pyannote 分割和说话人嵌入,运行在神经网络引擎上)。每个声音取其各轮发言中出现次数最多的 Teams 名字 说话人姓名 Teams 的「实时字幕」面板,通过 AXUIElement 读取,并与会话一起保存,以便通话结束后为声音命名 摘要 Apple 的 Foundation Models 框架(Apple Intelligence 背后的设备端模型) 日历 EventKit 实时字幕
(原文较长,此处译出前 6000 字,完整内容请点「打开原文」。)
正文由 探How 从来源站点 RSS 同步,内容未经改写;遇到排版缺失或需要图片、视频时请以原文为准。