Транскрибация аудио в текст бесплатно и без облаков: почему мне не хватило одной модели. gigaam.. gigaam. macOS.. gigaam. macOS. Parakeet.. gigaam. macOS. Parakeet. whisper.. gigaam. macOS. Parakeet. whisper. аудио в текст.. gigaam. macOS. Parakeet. whisper. аудио в текст. видео в текст.. gigaam. macOS. Parakeet. whisper. аудио в текст. видео в текст. распознавание речи.. gigaam. macOS. Parakeet. whisper. аудио в текст. видео в текст. распознавание речи. расшифровка аудио.. gigaam. macOS. Parakeet. whisper. аудио в текст. видео в текст. распознавание речи. расшифровка аудио. расшифровка встреч.. gigaam. macOS. Parakeet. whisper. аудио в текст. видео в текст. распознавание речи. расшифровка аудио. расшифровка встреч. транскрибация.
Транскрибация аудио в текст бесплатно и без облаков: почему мне не хватило одной модели - 1

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

Так началась история Рекордера. Сначала я собирался купить готовое приложение. Потом стал сравнивать Whisper, Parakeet и GigaAM. В итоге проверил 32 конфигурации распознавания и собрал каскад из двух моделей: одна даёт основу текста, другая исправляет неточности. На моих датасетах это исправило каждую пятую ошибку (WER упал с 27,0% до 21,7%). 

Из экспериментов получилось бесплатное приложение для Mac, которое записывает встречи и переводит аудио и видео в текст локально. Расскажу, как выбирал модели, что измерял и какие очевидные решения не сработали. В статье есть промт для агента, чтобы собрать все самому.

Почему я искал только локальную транскрибацию

Стандартное решение: набрать в поиске «транскрибация встречи» и выбрать сервис. Проблем с количеством вариантов нет. Проблема в том, чтобы понять, чем они отличаются.

Я сразу ограничил поиск локальными приложениями. На моих встречах обсуждают бюджеты, кадровые решения, условия договоров и внутренние проблемы компаний. Не каждую встречу C-level можно отправить во внешний сервис.

Знаю, что многие отдают такие записи Claude или ChatGPT. Но мне некомфортно передавать туда и сами разговоры и голоса участников. Поэтому, требование было простым: аудио и расшифровка должны оставаться только на моем ноутбуке.

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

Список знакомых моделей внутри разных программ действительно повторяется. Whisper используют MacWhisper, Buzz и SuperWhisper. Handy поддерживает не только Whisper, но и Parakeet.

Вообще, я собирался просто купить SuperWhisper Pro. Помню цену около 85 долларов за год, но оплата не прошла. Возможно, если бы покупка удалась, на этом я бы и успокоился. А так, пришлось разбираться что к чему.

Начал с Whisper, это база. Он выдавал понятный текст, но заметно ошибался на моих русскоязычных встречах и работал медленно. Для некоторых задач такого качества достаточно. Мне хотелось лучше.

Что есть на Хабре

Задачу локального распознавания здесь решали не раз. Мне пригодились статьи:

После чтения Хабра и Deep Research с Claude, Gemini и ChatGPT основными кандидатами для меня стали Whisper в версиях large-v2, large-v3 и turbo, Parakeet TDT v3 и GigaAM-v3. Позже, для чистоты эксперимента, добавил Breeze-ASR, Qwen3-ASR и другие модели.

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

На него пришлось отвечать самому и это заняло существенно больше времени чем код.

Сначала я выбирал модель на глаз

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

  • GigaAM хорошо слышит обычную русскую речь. Мне нравится пунктуация. Но на терминах, названиях продуктов и ИТ-сленге начинались проблемы. Текст выглядел связным, а понять суть разговора не всегда было возможно.

  • Parakeet существенно лучше слышал термины и англоязычный сленг. Итоговый текст выглядел хуже, модель мультиязычная и не заточена под русский язык как GigaAM, но по его тексту почти всегда можно было восстановить смысл.

Обе модели работали быстро.

  • Whisper показался очень внимательным к некоторым деталям. Иногда он сохранял то, что пропускал Parakeet и GigaAM. Но работал медленнее, а в некоторых местах дописывал фразы, которых на записи не было. Разброс по качеству у него был большой. Результат не выглядел стабильным, но иногда он поражал.

Это были впечатления от анализа моих расшифровок (архив из 36 часов встреч).

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

Какое-то время меня это устраивало. Потом захотелось улучшить качество, и стало понятно: дальше без измерений я буду просто выбирать текст, который больше нравится. Нужны метрики!

Как я собирал данные для сравнения ASR

Транскрибация аудио в текст бесплатно и без облаков: почему мне не хватило одной модели - 2

Самой долгой частью оказалась разметка. Запустить модель легко. Проверить, что именно она пропустила, заменила или придумала, гораздо дольше.

Я собрал четыре набора. 

Набор

Что записано

Длительность

Слова / термины

Бизнес-встречи

Выбрал 82 фрагмента рабочих встреч, где модели расходятся сильнее всего. И добавил столько же случайных фрагментов.

Около 24 минут

1 870 / ~5%

ИТ-речь

Специально подготовленный текст с плотными ИТ-терминами

Около 24 минут

1 679 / ~41%

Кормушка

Рассказ про умную кормушку для кота, прочитанный двумя голосами. Что-то среднее между первыми двумя датасетами. Аналог текста из статьи @egorsokolov

Около 24 минут

2 391 / ~14%

Синтетика

200 фраз с терминами с Хабра, озвученных Silero TTS. Посмотреть насколько этот метод показывает реальность

Около 26 минут

2 831 / ~14%

Получилось около 1 часа 38 минут звука с эталонным текстом и 8,7 тысячи слов. Отдельно был архив из 185 записей общей длительностью 36 часов на котором я смотрел результат после проверки гипотез на размеченной выборке. Полного эталона у него нет и нет полной разметки для подсчета WER. В архиве примерно 230 000 слов.

У набора встреч есть важная особенность: я отбирал трудные места. В 40 фрагментах модель была не уверена в результате, ещё в 42 текст выглядел странно для LLM. После чего добавил туда 82 случайных фрагмента для баланса.

Синтетику проверял отдельно. Хотел проверить, можно ли озвучивать тесты с нужными терминами и насколько этот метод подойдет для анализа.

Как считал ошибки и скорость

Основной показатель WER, считает замены, пропуски и лишние слова относительно эталона. Чем ниже значение, тем лучше. Перед сравнением я приводил текст к нижнему регистру, заменял «ё» на «е» и убирал пунктуацию. «Клод» вместо Claude считался ошибкой. Пунктуацию эта проверка вообще не оценивала.

Звук подавался кусками до 20 секунд, с разрезами по паузам. Для Whisper использовал Silero VAD, чтобы отделять речь от тишины. Замеры проводил на Intel Core i9 без ускорения на видеокарте.

Whisper, GigaAM и Parakeet на русской речи

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

Модель

Встречи, WER

IT-речь, WER

Кормушка, WER

Всего, WER

GigaAM-v3 e2e

14,8%

52,9%

16,3%

27,0%

Parakeet TDT 0.6B v3

24,6%

40,0%

13,9%

24,6%

Whisper large-v2

30,1%

39,0%

11,5%

24,8%

Whisper large-v3

27,1%

59,8%

11,6%

30,3%

Whisper large-v3-turbo

28,7%

66,5%

11,1%

32,5%

Whisper medium

39,4%

43,9%

13,5%

29,6%

Breeze-ASR-25

35,4%

43,4%

9,6%

26,7%

Qwen3-ASR 1.7B

30,1%

48,6%

14,7%

29,0%

NVIDIA Canary 1B v2

31,9%

47,4%

16,4%

29,9%

GigaAM Multilingual 600M

21,1%

58,4%

22,2%

32,9%

Здесь Whisper запущен с явно заданным русским языком без текстового промта, Breeze с промптом. Меньшее значение WER – лучше.

Главное наблюдение: у каждой модели есть свои преимущества и недостатки.

На фрагментах встреч точнее GigaAM. На IT-речи впереди Whisper large-v2 и Parakeet. В среднем, Parakeet действительно лучше. На начитанном рассказе лучшее значение у Breeze, что совпадает с тестами @egorsokolov.

Whisper large-v2 лучше v3 только на речи с терминами, она точнее их передает. Но на встречах v3 немного точнее. Плотный поток английских терминов v3 слышит искаженно. Вероятная причина в обучении: большую часть данных для v3 разметила сама v2, и смешанная русско-английская речь от этого лучше не стала.

Breeze-ASR-25 – это Whisper large-v2, дообученный на речи, где китайский перемешан с английским. На «Кормушке» у неё лучший результат, в основном за счёт терминов. На живых встречах Breeze ошибается и хуже почти всех моделей. 

Со сжатыми моделями картина была спокойнее. У GigaAM Q8 и F32 результаты почти совпали. У Parakeet на встречах получилось 24,6% для F32, 25,5% для Q8 и 25,7% для Q6_K. Разница небольшая, но она есть. Это я не включал в таблицу, как и разные промты, они не сильно влияют на результат.

В тестах были ещё russian whisper fine-tune модели, но все они давали на моих датасетах результаты хуже чем у исходных моделей, из таблицы тоже убраны.

Синтетика отличалась по метрикам от живой речи: у Parakeet WER 16,8%, у GigaAM 22,8%. Там были видны перекосы, поэтому, я исключил ее из рассмотрения и оценок.

Почему одного WER недостаточно

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

WER не знает, какое слово важно для разговора. Замена названия системы и замена слова «ну» дают по одной ошибке. Но для человека последствия разные. Без названия или термина иногда нельзя понять суть разговора.

Транскрибация аудио в текст бесплатно и без облаков: почему мне не хватило одной модели - 3

Есть и обратная ситуация. Модель написала «эластик» вместо Elastic. Для строгого сравнения это ошибка. Для читателя, который знает продукт, смысл может сохраниться.

Я хотел отделить ошибки написания от случаев, когда модель действительно исказила слово. Поэтому добавил собственную эвристику и назвал её WER по звучанию (WERx).

Она работает с текстом, а не слушает аудио. Латиница переводится в кириллический фонетический ключ, убираются мягкие знаки, пробелы и дефисы. Например, Cloud-MD и «клауд мд» получают одинаковый ключ. Дальше сравнивается близость ключей или их согласных. При этом два обычных русских слова должны совпасть точно: «пропадал» и «пропадает» не становятся одним словом.

Это не универсальная фонетическая метрика и не оценка сохранения смысла. Она нужна для вопроса: сколько ошибок связано с тем, что похожее звучание записали иначе?

Модель

IT-речь: WER

IT-речь: WERx

Точно записанные термины

GigaAM

52,9% ->

40,6%

19%

Parakeet

40,0% ->

30,7%

47%

Whisper large-v2

39,0% ->

30,3%

54%

У GigaAM после такой нормализации показатель заметно улучшился. Часть ошибок действительно была связана с написанием. Но отставание от Parakeet осталось почти в десять процентных пунктов. Значит, одной транслитерацией проблему не исправить.

На встречах результат менялся гораздо меньше: у GigaAM с 14,8% до 14,1%, у Parakeet с 24,6% до 23,6%. Там не такая высокая плотность терминов.

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

Каскад из двух моделей: GigaAM и Parakeet

Транскрибация аудио в текст бесплатно и без облаков: почему мне не хватило одной модели - 4

Мне нравился русский текст GigaAM и то, как Parakeet справлялся с терминами (+ он 4 раза быстрее). Захотелось совместить их результаты.

Я взял расшифровку GigaAM за основу. Parakeet распознавал тот же звук независимо. Затем я выравнивал два текста, находил расхождения и проверял возможные замены.

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

Например, так удавалось заменить «апкид» на AppKit, «Sweeft» на Swift, «Промиус» на Prometheus. Но появлялись и ошибки: «диф» мог превратиться в div, а «клот» в Cloud вместо Claude. Похожее звучание ещё не означает правильную замену.

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

Правило замены

IT-речь, WER

Встречи, WER

Только GigaAM

52,9%

14,8%

Латиница, похожесть от 0,3

41,0%

14,5%

Латиница, похожесть от 0,4

41,9%

14,5%

Латиница, похожесть от 0,5

43,4%

14,5%

Латиница, похожесть от 0,7

49,1%

14,6%

Похожесть от 0,5, без требования латиницы

43,6%

17,4%

Без ограничения на латиницу результат на встречах ухудшался. Каскад забирал у Parakeet не только полезные термины, но и ошибки в обычных русских словах.

Для дальнейшего разбора я взял вариант с порогом 0,4. Это не универсальный оптимум, но он дает “безопасную” замену. И вот что получилось при пороге 0,4:

Вариант

Встречи, WER

IT-речь, WER

Кормушка, WER

Всего, WER

GigaAM

14,8%

52,9%

16,3%

27,0%

Parakeet

24,6%

40,0%

13,9%

24,6%

GigaAM с исправлениями Parakeet

14,5%

41,9%

12,0%

21,7%

На плотном IT-тексте каскад уступил одному Parakeet. Зато относительно GigaAM он убрал 11 процентных пунктов WER и увеличил долю точно написанных терминов с 19% до 44%.

На встречах сохранилось качество GigaAM. Разницу между 14,8% и 14,5% я бы не считал главным достижением на такой маленькой выборке. Важнее, что исправление терминов не ухудшило общий показатель. На «Кормушке», где обычный рассказ сочетался с техническими словами, каскад оказался лучше обеих моделей по отдельности.

За это пришлось заплатить вторым проходом распознавания. У каскада получился RTF около 0,3 на моём Intel. Для самого распознавания это примерно 18 минут на час аудио.

Почему основой стала GigaAM, а не Parakeet

До каскада я пользовался Parakeet. Поэтому обратный вариант тоже проверил: оставить его текст, а неуверенные слова исправлять через GigaAM. Эта схема не обогнала одну GigaAM.

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

Это не означает, что GigaAM должна быть основой любого распознавания. Для записи с плотным потоком английских терминов один Parakeet оказался лучше этого каскада.

Какая модель лучше исправляет GigaAM

Следующий вопрос: почему исправления должен предлагать именно Parakeet? Может, с этим лучше справится другая модель, даже если её собственная расшифровка хуже?

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

Модель, предлагающая исправления

Встречи, WER

IT-речь, WER

«Кормушка», WER

Всего, WER

Нет, только GigaAM

14,8%

52,9%

16,3%

27,0%

Parakeet

14,8%

42,5%

12,1%

22,0%

Whisper medium

14,4%

41,9%

11,3%

21,4%

Whisper large-v2

15,2%

41,3%

11,6%

21,5%

Breeze-ASR-25 с промптом

16,7%

43,4%

10,2%

22,0%

Whisper large-v3

14,3%

50,1%

11,6%

24,0%

Qwen3-ASR 1.7B

15,2%

45,8%

11,8%

23,0%

Whisper medium дал более низкий WER, чем Parakeet, на всех трёх наборах. Но работал примерно втрое медленнее. Большой Whisper large-v2 немного лучше исправлял IT-текст, зато ухудшал результат на встречах относительно одной GigaAM.

Я остановился на Parakeet, он не победил по точности, но дал хороший баланс качества и скорости: RTF Whisper medium от 0,45 до 0,68 против 0,15–0,23 у Parakeet. Large-v2 и Breeze ещё медленнее, от 0,8 до 1,7.

Заодно стало видно, что хорошая самостоятельная модель и хороший источник исправлений не обязательно одно и то же. Например, Whisper medium в основной таблице заметно проигрывал на встречах, но в роли исправляющего оказался полезен.

Транскрибация аудио в текст бесплатно и без облаков: почему мне не хватило одной модели - 5

Что не сработало

Словарь терминов исправлял знакомые ошибки и создавал новые

Первая идея была очевидной: собрать словарь замен. Модель пишет «клот», я заменяю на Claude. Пишет «кафка», заменяю на Kafka.

Словарь, собранный по коротким IT-записям, улучшил результат на этих же записях на величину от 6 до 13 процентных пунктов. Но на длинной записи, которой не было при составлении словаря, выигрыш составил всего от 0,3 до 0,5 пункта. Исправлять уже известные ошибки оказалось проще, чем новые.

Потом я взял большой словарь из 8 130 терминов и прогнал его по архиву. «Нас» превратилось в NAS 1 246 раз, «нет» в .NET 864 раза. На IT-текстах словарь убрал 94 ошибки, а на встречах добавил 24.

Помог фильтр по частотам слов на Хабре: не делать замену, если кириллическую форму пишут не реже латинской. После очистки количество срабатываний на архиве сократилось с 3 175 до 449. Значит, проблема была не в словаре вообще, а в безусловных заменах без учёта неоднозначности.

Перекрытие аудиофрагментов не улучшило целые записи

Модели получали звук кусками до 20 секунд. У границ кусков ошибок было больше, чем в середине. Казалось логичным добавить перекрытие в две секунды, чтобы модель повторно услышала начало и конец.

На 74 коротких фрагментах WER снизился на 0,4 процентного пункта. На целых записях вырос с 30,8% до 31,3%. Улучшение на коротком тесте не выдержало проверки на длинном.

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

Промпт улучшал один тип речи и портил другой

Я пробовал подсказывать Whisper, как записывать английские термины. У large-v3 на IT-тесте WER снизился с 59,8% до 58,1%. Зато на встречах вырос с 27,1% до 66,7%.

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

Более умная метрика не улучшила каскад

Я обучил метрику, чтобы лучше различать похожие варианты GigaAM и Parakeet. Её собственный показатель AUC вырос с 0,926 до 0,941. WER каскада не улучшился.

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

Попробовал учитывать и уверенность Parakeet. На встречах это убрало 0,2 пункта WER, на IT-речи добавило столько же. Для моего варианта конвейера заметного выигрыша не получилось.

Как я проверял исправления на настоящих встречах

Одного итогового процента мало. Мне нужно было видеть, какие слова меняются и почему. Дальше все пришлось проверить на архиве из 230 000 слов. На это понадобилось около 250 часов работы в фоне.

Папку с расшифровками я сделал git-репозиторием. Каждый шаг обработки сохранялся отдельным коммитом. В diff можно было посмотреть замену вместе с соседними репликами.

Так обнаруживались ошибки, которые за средним WER легко не заметить. VPN превращался в SPN. «Квик» становился Quick. «НПР1» сокращалось до NPR и теряло цифру.

Для рабочего разговора такие изменения могут быть важнее нескольких исправленных обычных слов. Особенно когда речь о названиях систем, идентификаторах и числах. 

Так из экспериментов с моделями получился “Рекордер”

Рекордер использует ту же пару моделей: GigaAM даёт основу, Parakeet исправляет термины. Текст появляется сразу после первого прохода GigaAM, а исправления приходят следом, в фоне.

Рекордер записывает звук приложения и микрофон отдельно. Для системного звука используется ScreenCaptureKit. Без виртуального аудиодрайвера и ботов на встречах. Работает для звонков в Zoom, Яндекс Телемост, Google Meet, Teams и других приложений.

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

Итак, как перевести аудио и видео в текст бесплатно и без смс?

Скачайте Рекордер если у вас Mac со страницы приложения. Приложение принимает mp3, m4a, wav, mp4 и mov. Без ограничений длины записи. Можно расшифровать уже сохранённый звонок или перевести речь из видео в текст, не загружая файл во внешний сервис.

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

Если у вас Windows или Linux или вы хотите самостоятельно повторить результат, то для вас есть промт, с которым это сделает ваш кодовый агент. Пишите в комментах что получилось.

Что получилось и что осталось на следующую статью

Я начинал с попытки сохранить детали рабочих встреч. В итоге больше всего времени потратил на проверку ошибок разных моделей, подбор параметров и разметку данных.

Короткий итог: GigaAM лучше справляется с обычным русским разговором, Parakeet помогает с терминами. Их каскад не стал победителем на каждом тесте. Он оказался хорошим компромиссом для встреч, где смешаны обычная речь, технические обсуждения и англицизмы.

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

Если статья получит отклик, то напишу продолжение.

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

Автор: pahaz

Источник