Приватно · На устройстве · Apple Neural Engine

Живые субтитры ко всему,
что играет ваш Mac.

Видео, звонки, подкасты: расшифровываются по ходу воспроизведения и рисуются на оверлее поверх всех окон. Ничего не выгружается, ничего не записывается, ничего не пишется на диск.

Возврат в течение 14 дней, без лишних вопросов

Разовые $9, все будущие обновления включены · macOS 14.2 или новее · Apple Silicon
Субтитры без ограничений, сколько угодно долго. Никаких минут для покупки, никакого аккаунта, никакой подписки.

Переключитесь между приложениями, и субтитры останутся: оверлей висит поверх всех окон и пропускает клики.

Кликните по окну, чтобы вывести его вперёд. Удерживайте и тащите субтитры, чтобы их переместить, как в самом приложении.

Наведите указатель на субтитры, и они растворятся под ним. Удержите , чтобы вернуть последние блоки стопкой. И то и другое работает здесь ровно так же, как в приложении.

Живые субтитры для любого приложения на вашем Mac

Subtitles делает субтитры к любому звуку, который может проиграть ваш Mac, потому что перехватывает само приложение, а не встраивается в какой-то один сервис. Глухой вы или слабослышащий, слушаете на втором языке или просто работаете в шумном месте, три ситуации повторяются снова и снова.

01

Встречи и звонки

Zoom, Google Meet, Teams, хадл в Slack, звонок во вкладке браузера: всё это просто звук, который выдаёт приложение, поэтому субтитры получает всё. Родной язык или второй, толк появляется в ту секунду, когда акцент непривычный, у кого-то плохой микрофон или двое говорят разом: прочитать слово, которое вы расслышали наполовину, быстрее, чем переспрашивать, и при этом никого не приходится перебивать.

02

Держать нить, пока вы работаете

Звук не ждёт. В ту секунду, когда вы переключаетесь на заметки, редактор или окно браузера, разговор начинает уходить. Оверлей всегда поверх всех окон и пропускает клики, поэтому он остаётся на месте, пока вы работаете перед ним. Можно вести заметки, что-то смотреть и по-прежнему следить за тем, что говорят. Блокнот вроде Granola описывает встречу потом; это та половина, которая должна случиться, пока встреча ещё идёт.

03

Видео, подкасты и лекции

Видео без субтитров или с автоматическими, которые хуже, чем никакие. Подкаст на языке, который вы ещё учите. Записанная или живая лекция, интервью, фильм с тихими диалогами. Субтитры появляются над тем окном, которое всё это играет, в выбранном вами размере текста, на шестнадцати языках, причём язык определяется за вас.

У всех трёх есть общее: встреча, звонок и личная запись не касаются никакого сервера. Ни один из этих звуков никуда не загружается, потому что и не должен: модель работает на вашем Mac.

Построено вокруг трёх ограничений

Живой звук нельзя поставить на паузу, нельзя прогнать заново и не следует выпускать с вашей машины. Всё здесь вытекает отсюда.

Ничего не покидает Mac

Оно работает локально и офлайн: ни сетевых обращений, ни аккаунтов, ни телеметрии. Звук идёт из перехвата прямо в распознаватель и отбрасывается. Единственное, что вообще скачивается, это сама модель, один раз.

Neural Engine, а не процессор

Примерно 0,15 к реальному времени: шесть секунд речи расшифровываются за секунду вычислений. Та же модель на процессоре оказалась примерно в 100 раз медленнее, чем нужно, чтобы успевать за живым потоком.

Все приложения или только одно

По умолчанию оно слушает всё, что играет ваш Mac, поэтому перед работой ничего настраивать не нужно. Сузьте до одного приложения через строку меню, когда говорят сразу два, и оно снимет это приложение плюс все вспомогательные процессы, которые оно порождает, а именно это и заставляет работать браузеры и приложения на Electron, где звук никогда не идёт из главного процесса.

Музыка не превращается в слова песни

Перед распознавателем работает детектор голоса, поэтому фоновые дорожки до него не доходят. Без него музыка забивает контекст модели, и первые слова после неё теряются.

Новый блок на каждого говорящего

При желании новый субтитр начинается, когда заговорил кто-то другой, ровно как после паузы. По умолчанию выключено: рядом с первой моделью начинает работать вторая.

Шестнадцать языков

Модель по умолчанию сама определяет язык. У английского сверх того семь отдельных чекпоинтов, которые меняют задержку на точность, начиная со 160 мс.

Оверлей не путается под ногами

То, что висит поверх всех окон, работает только если оно никогда не превращается в помеху, которую приходится обходить. Оно не принимает кликов, растворяется там, куда вы указываете, и возвращает строку, от которой вы отвели взгляд.

Просвет там, куда вы указываете

Подведите указатель к блоку, и тот побледнеет под ним, чтобы фраза, которую вы читаете, не закрывала фразу, которую вы пишете. Насколько он уходит и насколько широк просвет, решаете вы. Удержите , чтобы он остался плотным.

Удержите ⌥ ради того, что вы пропустили

Блок листается как эфирные субтитры: он наполняется, очищается и начинает заново, поэтому строка, от которой вы отвели взгляд, пропадает. Удержите , и последние закрытые блоки соберутся стопкой над живым, до тридцати штук, а более ранние можно прокрутить. Отпустите, и их снова нет. Никуда ничего не пишется.

Превью это и есть оверлей

, из меню открывает настройки: сколько строк набирает блок, прежде чем очиститься, насколько он плотный, как далеко распространяется просвет под указателем, насколько назад отматывает . Любой ползунок применяется к оверлею прямо во время перетаскивания, так что вы настраиваете всё это глазами, а не подбором чисел.

Как это работает

Поток реального времени, который умеет только копировать, переносимое ядро, которое ничего не расшифровывает, и модель, работающая там, где ей и место.

  1. 1

    Перехват процесса в Core Audio

    Стерео 48 кГц, обратный вызов каждые 10,7 мс. Поток реального времени копирует данные в кольцевой буфер без блокировок и больше не делает ничего.

  2. 2

    Пересэмплирование и отсечка

    Приведение к моно 16 кГц в рабочем потоке, тишина пропускается, и примерно секунда переигрывается перед речью, чтобы ни одно слово не начиналось с холода.

  3. 3

    Parakeet на Neural Engine

    Потоковая модель, а не модель с окном в 30 секунд: разница между субтитрами, которые идут вровень со звуком, и субтитрами, которые приходят с опозданием на секунды.

  4. 4

    Оверлей

    Страницы по три строки, которые очищаются и начинаются заново, как эфирные субтитры, и гаснут через четыре секунды после последнего нового текста, а не после того, как кончится звук.

Всё от кольцевого буфера до границы с моделью написано на переносимом Rust, который намеренно ничего не расшифровывает: он выдаёт кадры. Перехват и оверлей это единственные части, привязанные к Mac.

Возврат в течение 14 дней, без лишних вопросов.

Проверять нечего, отказываться не от чего

Нацелить это на рабочий звонок можно потому, что это не сервис. Нет ни сервера, ни аккаунта, ни расшифровки, поэтому отправлять нечего и в цепочке никого больше нет. Подробная версия записана. Исходный код опубликован, поэтому ничего из этого не приходится принимать на веру.

  • К звонку не подключается бот. Приложение снимает звук, который ваш Mac и так проигрывает, поэтому в списке участников ничего не появляется и никому ни о чём не сообщают. Большинство сервисов этой категории вместо этого присылает видимого участника, а немало компаний это прямо запрещает.
  • Ничего не записывается и ничего не пишется на диск. Звук идёт из перехвата в распознаватель и тут же отбрасывается. Субтитры побыли на экране, и их нет; блоки, которые возвращает , лежат в памяти до выхода из приложения, и потом не найдётся никакого файла ни на вашем Mac, ни где-либо ещё.
  • Микрофон не открывается никогда. Приложение слышит только то, что играет ваш Mac. Это настоящее ограничение, и по той же причине ничто из сказанного вами никуда не уйдёт.
  • Ни аккаунта, ни телеметрии, ни сети. Входить некуда, и статистика использования никуда не отправляется. Модель скачивается один раз, около 633 МБ, и после этого сетевых вызовов не остаётся: выдерните Wi-Fi, и субтитры продолжат идти.
  • Обучаться не на чем. Расшифровки, которую можно отправить, не существует, поэтому не нужно искать настройку обучения и проверять значение по умолчанию, и некого называть обработчиком в соглашении о данных. Проходит ли это по вашей внутренней политике, решать вам, но третьей стороны, которую надо проверять, тут просто нет.
  • Единственное исключение это покупка. Gumroad принимает платёж и видит вашу почту, как любой магазин, и пишет вам, когда приложение обновляется. Само приложение не спрашивает ни того, ни другого.

Выбирайте язык, а не модель

Язык это первое, что включает модель в список или вычёркивает из него, поэтому он и стоит на верхнем уровне меню. Переключение внутри пакета мгновенное; переход между пакетами скачивает второй и оставляет всё, что у вас уже есть.

Передумали посреди загрузки: она отменяется и новая начинается сразу. Вернётесь к прежней позже, и она продолжится, а не начнётся заново.

Всего шестнадцать: английский, испанский, французский, итальянский, португальский, немецкий, нидерландский, турецкий, русский, арабский, хинди, японский, корейский, вьетнамский, украинский и китайский. Оставьте многоязычную модель, и она сама разберётся, что слышит, или назовите язык, и она перестанет гадать.

Оно живёт в строке меню

Ни иконки в Dock, ни окна, за которым надо следить. Иконка сама говорит, что происходит: индиго во время прослушивания, синий во время загрузки модели, жёлтый, если конвейер начинает отставать, и никогда красный, потому что красный означает запись, а запись не ведётся нигде. Переключатели живут в меню, а , открывает оттуда окно настроек с регуляторами.

S
Пауза и продолжение
Удерживайте
Сделать оверлей перетаскиваемым; в остальное время он пропускает клики
Удерживайте
Собрать последние блоки стопкой над живым; прокрутка для более ранних
,
Настройки из открытого меню: строк в блоке, непрозрачность, просвет под указателем, насколько далеко отматывает
Строка меню
Модель, источник, размер текста, положение оверлея, состояние разрешений

Почему не «Живые субтитры» Apple?

В macOS субтитры встроены, бесплатны и есть на каждом Mac с Apple silicon: Системные настройки, «Универсальный доступ», «Живые субтитры». Если это закрывает ваши задачи, пользуйтесь. А вот места, где мои задачи они закрывать перестали, и есть построчное сравнение, если хотите подробную версию.

  • Шестнадцать языков, определяются за вас. Функция Apple доступна не на каждом языке, не в каждой стране и не в каждом регионе. Модель по умолчанию здесь сама разбирается с языком, а строка меню переключает между ними.
  • Модель выбираете вы. Семь английских чекпоинтов, меняющих задержку на точность, начиная со 160 мс, плюс многоязычный. Apple даёт вам субтитры, но не регулятор.
  • Оверлей пропускает клики насквозь. У Apple это окно, которое двигают и меняют в размерах. Это не принимает кликов вообще, поэтому вы работаете прямо сквозь него. Удержите , когда всё же захотите его подвинуть.
  • Оно уступает место там, куда вы указываете. Блок бледнеет под указателем, и вы читаете то, что под ним, ровно настолько сильно и настолько широко, насколько вы настроили. У Apple это непрозрачное окно, которое вместо этого приходится переносить в другое место.
  • Все сразу или только одно. Оба варианта отталкиваются от всего, что играет на компьютере. Разница в том, что здесь можно сузить выбор до нужного приложения: субтитры идут по звонку, а остальная машина молчит.
  • Музыка не превращается в слова песни. Перед распознавателем работает детектор голоса, поэтому фоновая дорожка до него не доходит.
  • Новый блок на каждого говорящего. По желанию, по умолчанию выключено, и в стандартной функции ничего подобного нет.

О чём стоит знать до загрузки

  • Первый запуск занимает несколько минут. Модель весит около 633 МБ и скачивается сама при первом запуске. Прогресс виден в строке меню.
  • macOS попросит разрешение на запись системного звука. Пропустите этот запрос, и каждый сэмпл будет приходить цифровой тишиной, без единой ошибки где-либо, поэтому приложение держит проверку разрешения в меню, а не делает вид, что всё знает. Загрузка подписана и нотаризована, поэтому ваш ответ переживает любое обновление.
  • Пение считается речью. Детектор голоса не видит разницы, поэтому вокальная музыка проходит дальше как слова песни.
  • Границы реплик выставляются задним числом. Диаризация выдаёт результат с задержкой, поэтому пара слов нового говорящего может успеть попасть в уходящий блок, прежде чем он очистится.
  • Один дисплей. Оверлей работает на главном экране.
  • Опробованные модели остаются на диске. Переключение между восемью моделями и есть способ найти нужную, и каждая, которую вы попробовали, сохраняется. В настройках есть кнопка, которая удаляет неиспользуемые и никогда не трогает текущую.

Вопросы, которые задают первыми

Работает ли это с Zoom, Teams и Google Meet?
Да. Оно перехватывает звук, который проигрывает приложение, а не встраивается в какой-то один сервис, поэтому окно Zoom, хадл в Slack и звонок во вкладке браузера получают субтитры одинаково. Браузеры и приложения на Electron тоже: снимаются вспомогательные процессы, которые они порождают, а звук идёт именно оттуда.
А оверлей не мешает?
Оно не принимает кликов вообще, поэтому вы работаете прямо сквозь него, и оно растворяется под указателем, поэтому вы читаете то, что под ним. Насколько сильно оно бледнеет, как далеко это распространяется, насколько плотный блок и сколько строк он держит, всё это настройки. Удержите , чтобы он остался плотным, и перетащите куда угодно; место запоминается.
Делает ли оно субтитры для моего голоса?
Нет. Оно слышит только то, что играет ваш Mac, и никогда микрофон. На звонке это значит, что вы читаете собеседников, а не себя.
Нужно ли подключение к интернету?
Один раз, чтобы скачать модель при первом запуске, около 633 МБ. После этого оно работает полностью офлайн и не делает сетевых обращений вообще.
Можно сохранить или экспортировать расшифровку?
Нет, и это сделано намеренно. На диск не пишется ничего: субтитры существуют на экране, а потом их нет. Удержание возвращает последние блоки, пока приложение работает, и это нужно, чтобы поймать строку, от которой вы отвели взгляд, а не чтобы вести летопись. Если вам нужна запись разговора, это неподходящий инструмент.
Нужно ли согласование от ИТ-отдела?
Здесь некого согласовывать: ни аккаунта, ни сервера, ни расшифровки, покидающей Mac, и никто не подключается к звонку как участник, поэтому никого на встрече ничто не записывает. Это одно подписанное и нотаризованное приложение на одной машине, и после единственной загрузки модели оно не делает сетевых обращений вовсе. Проходит ли это по вашей внутренней политике, решать вам, но третьей стороны, которую надо проверять, тут просто нет.
Работает ли это с наушниками или AirPods?
Да. Снимается звук, который выдаёт приложение, а не звук, выходящий из динамика, поэтому то, во что вы слушаете, роли не играет.
Замедлит ли оно мой Mac?
Расшифровка идёт на Neural Engine, а не на процессоре, примерно с коэффициентом 0,15 к реальному времени, то есть шесть секунд речи за секунду вычислений. Та же модель на процессоре оказалась примерно в 100 раз медленнее, чем нужно, чтобы вообще успевать.
На каких Mac оно работает?
Apple Silicon, macOS 14.2 или новее. Нижняя граница версии это перехваты процессов Core Audio, тот самый API, на котором всё построено.
Это подписка?
Нет. $9 один раз, все будущие обновления включены, аккаунт создавать не надо и минуты покупать не надо. Если не подойдёт, есть возврат в течение 14 дней.
Можно посмотреть исходный код?
Да. Он опубликован под FSL-1.1-ALv2, которая через два года после каждого выпуска становится Apache 2.0. Почитайте его или соберите приложение сами: github.com/daformat/subtitles.

Субтитры ко всему, и звук никуда не уходит.

Возврат в течение 14 дней, без лишних вопросов

Разовые $9, все будущие обновления включены · macOS 14.2 или новее · Apple Silicon
Живые субтитры без ограничений, пока у вас есть этот Mac. Никаких минут для покупки, никакого аккаунта, никакой подписки.