После рабочих встреч часто остаются записи. В моем случае это записи Яндекс Телемоста.
Запись есть, но пользоваться ей не всегда удобно. Если нужно что‑то вспомнить, приходится открывать видео, перематывать, искать нужный кусок, переслушивать. Если нужно передать встречу другому человеку, одного видео обычно мало.
У меня часто бывает такой сценарий: нужно передать программисту контекст по задаче. Можно скинуть запись встречи и написать: «посмотри, пожалуйста». Но человеку придется самому смотреть видео, искать важные места, понимать, где обсуждение, где решение, где задача.
Мне хотелось получить более удобный вариант: вместе с записью отправлять текстовый итог встречи.
Идея была простая: загрузить видео встречи и получить транскрипт, протокол и DOCX, который можно отправить дальше.
Первую рабочую версию получилось собрать через Codex примерно за 30 минут.
С чего началось
Началось все прямо в Codex.
Я не писал подробное ТЗ и не готовил сложный промт. Просто спросил, можем ли мы создать транскрибатор для Яндекс Телемоста.
Codex предложил несколько вариантов:
обрабатывать готовую запись встречи;
делать live‑транскрибацию через системный звук;
делать бота, который подключается к встрече.
Для первой версии я выбрал обработку готовой записи.
Телемост уже сохраняет встречу в видеофайл. Значит, можно скачать запись, загрузить ее в приложение и обработать после созвона.
Дальше я уточнил, какие внешние сервисы понадобятся и сколько это может стоить.
По стоимости подошел локальный Whisper. Он работает на компьютере, поэтому за минуты аудио платить не нужно. Из внешних сервисов остается только GPT API, который получает уже готовый текст и формирует протокол.
Что хотел получить
Мне нужно было локальное приложение, которое открывается в браузере.
Пользователь выбирает видео или аудио, выбирает модель Whisper, запускает обработку и получает три файла:
transcript.txt— полный текст встречи;meeting_report.md— протокол в Markdown;meeting_report.docx— Word‑файл, который можно открыть, поправить руками и отправить дальше.
DOCX был важен сразу. Протокол встречи обычно не хочется хранить только в сыром тексте. Его нужно открыть, быстро посмотреть, при необходимости отредактировать и отправить другому человеку.
Как устроена обработка
Обработка получилась такой:
видео ↓извлечение аудио через ffmpeg ↓транскрибация через faster-whisper ↓текст с таймкодами ↓формирование протокола через GPT ↓TXT / Markdown / DOCX
Видео целиком для распознавания не используется. Сначала из него извлекается аудио через ffmpeg.
Распознавание речи делается локально через faster-whisper.
В первой версии добавил две модели:
small— быстрее;medium— дольше, но должна лучше справляться со сложной речью.
Для первого теста использовал small.
GPT подключается после транскрибации. В него отправляется текст встречи. По этому тексту формируется протокол: краткое резюме, договоренности, задачи, вопросы для уточнения и риски.
Как появилась первая версия
После выбора подхода я уточнил интерфейс и общую логику приложения.
Страница должна была быть простой: загрузка файла, выбор модели, кнопка запуска, текущий статус и ссылки на результаты.
Codex начал генерировать приложение. Через некоторое время получилась локальная страница с основными функциями.
Приложение умело принимать видео или аудио, извлекать аудио, запускать локальную транскрибацию, формировать протокол, сохранять результат и отдавать ссылки на скачивание файлов.
Для первого прогона этого хватало: загрузить файл, дождаться обработки и скачать результат.

Первый прогон
Для теста я взял запись Телемоста в формате webm.
Размер файла был около 50 МБ.
Запустил обработку на модели small.
Полная обработка заняла 6 минут.
После завершения приложение выдало:
transcript.txt;meeting_report.md;meeting_report.docx.
Скорость зависит от длительности записи, выбранной модели и железа. Размер файла сам по себе не главный показатель, потому что распознается не видео, а извлеченное аудио.
Что получилось в протоколе
Протокол мне понравился.
Транскрипция на small получилась достаточно качественной для рабочего созвона. GPT выделил суть встречи, задачи, вопросы для уточнения и риски.
На тестовой записи обсуждалась разработка регламентного задания. В протокол попали темы про заполнение регистра сведений, период отбора документов, проверку типа реквизита и процедуру в общем модуле.
По задачам, где в разговоре не назывались ответственный и срок, в документе осталось не указан.
Для рабочего черновика это удобно. Можно открыть DOCX, быстро пройтись по тексту и поправить детали руками.

Что поправил после первого теста
Первая версия уже обрабатывала файл и выдавала результат.
После первого прогона я заметил два момента.
Первое — не было таймера обработки. Хотелось видеть, сколько заняла конкретная запись.
Второе — Word‑файл выглядел криво. Файл создавался, но как протокол его было неудобно читать.
Я попросил Codex исправить эти два замечания.
После правки в интерфейсе появилось время обработки, а DOCX стал аккуратнее. Его уже можно было использовать как черновик протокола.
На этом этапе у меня была версия для себя: можно было запустить приложение, загрузить запись, получить транскрипт и протокол.
Потом решил сделать версию для других
После первого рабочего варианта я решил, что приложение можно попробовать отдать другим людям.
Тут задача была уже не в самом транскрибаторе. Он работал.
Нужно было привести запуск к нормальному виду.
Когда запускаешь у себя, можно потерпеть bat‑файлы, консоль, ручной запуск из папки проекта. Когда отдаешь программу другому человеку, это уже мешает. Лучше, чтобы человек распаковал архив, запустил установку и дальше пользовался ярлыком на рабочем столе.
Поэтому следующим этапом была упаковка.
Нужно было сделать архив для передачи, установку с окном прогресса, ярлык на рабочем столе, запуск без командной строки и понятное сообщение при ошибке.
Сначала с ярлыками были проблемы. Они создавались, но не работали. При установке через bat ярлык тоже почему‑то не появлялся.
Причина была в цепочке запуска: ярлык запускал wscript, дальше шел скрытый vbs, потом bat, потом Python.
Эту схему упростили: ярлык стал запускать приложение напрямую через pythonw.exe и launcher.py.

Если сервер уже открыт, повторный запуск просто открывает страницу в браузере.
Установщик тоже поправили. Вместо командной строки пользователь видит окно установки с прогрессом. После установки на рабочем столе появляется ярлык Telemost Transcriber.
Добавил выбор провайдера для протокола
Еще один отдельный этап — выбор GPT‑провайдера.
В первой версии протокол формировался через OpenAI. Для себя этого было достаточно. Но если отдавать приложение другим людям, лучше дать выбор.
Добавил три варианта:
OpenAI;
DeepSeek;
YandexGPT.
Whisper при этом остается локальным. Провайдер нужен только для формирования протокола по готовому транскрипту.
В интерфейсе это сделано компактно: в обычном состоянии видно текущий провайдер и модель. По кнопке открываются настройки, где можно выбрать провайдера, модель и указать ключ.
Для YandexGPT дополнительно указывается ID каталога.
Ключи хранятся отдельно для каждого провайдера, чтобы можно было один раз настроить несколько вариантов и потом переключаться между ними.
Для OpenAI и DeepSeek добавил обновление списка моделей. Для YandexGPT оставил фиксированный список.
На этом этапе еще поймался баг с кодировкой. При запуске под оберткой, которая перехватывает вывод, сервер мог падать из‑за кириллицы в стартовом сообщении. Вывод перевели в UTF-8.

Что получилось по итогу
Текущая версия — это локальное Windows‑приложение в архиве.
В нем есть загрузка видео и аудио, локальная транскрибация через Whisper, генерация протокола через выбранного GPT‑провайдера, выгрузка TXT/MD/DOCX, история задач, таймер обработки и установщик с ярлыком на рабочем столе.
Для моего сценария этого хватает. После встречи я могу передать программисту видео и текстовый итог: протокол, задачи и вопросы для уточнения.
Так проще войти в контекст. Сначала можно открыть протокол и понять, о чем была встреча. К видео можно вернуться при необходимости.
Архив для установки
Архив с текущей версией приложения я выложил отдельно. Код в GitHub Releases.
API‑ключи в архив не входят. Ключ выбранного GPT‑провайдера нужно указать самостоятельно после установки.
Внутри zip‑архив для Windows.
Порядок установки:
Распаковать архив;
Запустить установщик;
Дождаться завершения;
Запустить приложение через ярлык
Telemost Transcriber.
Для формирования протокола нужно указать API‑ключ одного из провайдеров: OpenAI, DeepSeek или YandexGPT.
Распознавание речи работает локально через Whisper.
Ключи в архив не вшиты. API‑ключ нужно указать самостоятельно после установки.
Ограничения текущей версии
OpenAI я проверил на своем ключе. DeepSeek и YandexGPT добавлены через OpenAI‑совместимый API, но полный прогон с ними требует реальные ключи этих провайдеров.
Сейчас нет разделения по спикерам, автоматического скачивания записей из Телемоста и полноценной очереди задач.
Скорость зависит от длительности записи, модели Whisper и железа. Тестовый файл около 50 МБ обработался за 6 минут на small, но длинная встреча может обрабатываться заметно дольше.
Приложение сейчас рассчитано на локальное использование. Это не многопользовательский сервис.
Что можно добавить дальше
Первое — разделение по спикерам.
Сейчас транскрипт идет общим текстом. Для части встреч этого хватает, но иногда важно понимать, кто именно говорил.
Второе — шаблоны протоколов.
Для технической встречи, планерки, клиентского созвона и разбора задачи нужны разные структуры.
Третье — обработка длинных встреч частями.
Для больших записей можно сначала обрабатывать куски транскрипта, а потом собирать общий итог.
Четвертое — экспорт в другие системы.
Например, в Google Docs, Notion, CRM, таск‑трекер или просто в чат.
Итог
Получилась небольшая локальная программа для обработки записей встреч.
Первая рабочая версия появилась примерно за 30 минут. Потом я довел ее до варианта, который можно отдать другим людям: добавил установщик, ярлык на рабочем столе, нормальный запуск и выбор GPT‑провайдера.
Для моих задач этого достаточно: после встречи можно получить транскрипт, протокол, список задач и вопросы для уточнения. Дальше это можно отправить программисту вместе с записью или вместо нее, если видео смотреть необязательно.
