Transcribator — небольшой проект для работы с Deepgram API: распознавание речи (Speech-to-Text) с помощью Python SDK.
StartDG.py— пример транскрибации аудио по URL с помощьюDeepgramClient(модельnova-3, языкen).ListenSteam.py— потоковая (streaming) транскрибация живого аудиопотока (интернет-радио) в реальном времени, с сохранением распознанного текста в файл.TeamsTranscribe.py— GUI-приложение для расшифровки звонков (Microsoft Teams и подобных) в реальном времени: отдельные потоки для микрофона и системного звука, разделение по говорящим (diarization) и экспорт транскрипта. Точка входа; вся логика — в пакетеteams_transcribe/.
- Python 3.10+
- Пакеты
deepgram-sdk,python-dotenv,PyAudioWPatch TeamsTranscribe.pyработает только в Windows: захват системного звука (loopback) реализован через WASAPI средствамиPyAudioWPatch.
Создать и активировать виртуальное окружение:
python -m venv .venv .venv\Scripts\Activate.ps1Установить зависимости:
pip install -r requirements.txtСоздать файл
.envв корне проекта на основе.env.exampleи указать в нём свой API-ключ:DEEPGRAM_API_KEY=ваш_ключ
.venv\Scripts\python.exe StartDG.pyСкрипт скачает пример аудио по URL и выведет полный ответ API, а затем — только текст транскрипта.
.venv\Scripts\python.exe ListenSteam.py
.venv\Scripts\python.exe ListenSteam.py --OutFile Session1Скрипт подключается к живому аудиопотоку (интернет-радио) и распознаёт речь в реальном времени через Deepgram Streaming API. В консоль построчно выводятся промежуточные ([Interim]) и финальные ([ FINAL ]) результаты распознавания, а финальные фразы одновременно сохраняются в текстовый файл (по одной фразе на строку). Остановить прослушивание можно через Ctrl+C.
Имя выходного файла:
Без параметра
--OutFileфайл называется:DeepGram[DD-MM-YYYY]_[HH-MM].txtгде
[DD-MM-YYYY]_[HH-MM]— дата и время запуска скрипта, напримерDeepGram26-08-2026_11-09.txt.С параметром
--OutFile <имя>итоговое имя файла формируется так:- Из переданного
<имя>удаляются все символы, недопустимые в именах файлов Windows (< > : " / \ | ? *, а также управляющие символы). - Результат обрезается до 20 символов (лишнее отбрасывается с правого края, т.е. остаются первые 20 символов).
- К обрезанной строке конкатенируется
[DD-MM-YYYY]_[HH-MM].txt(дата и время запуска).
Например,
--OutFile 'My<>Radio_Session_Name_TooLong'при запуске 26.08.2026 в 11:09 даст файлMyRadio_Session_Name26-08-2026_11-09.txt.- Из переданного
.venv\Scripts\python.exe TeamsTranscribe.pyGUI-приложение для расшифровки звонков (Microsoft Teams, Google Meet, Zoom и аналогов) в реальном времени. Захватывает два аудиопотока одновременно — микрофон и системный звук (WASAPI loopback, т.е. то, что слышно из динамиков: голоса удалённых участников) — и распознаёт их независимо через Deepgram Streaming API (модель nova-3). Системный поток распознаётся с разделением по говорящим (diarization): каждый новый голос появляется в списке «Участники» с автоматическим именем, которое можно переименовать прямо во время разговора. Переименование применяется ко всем репликам этого говорящего в итоговом транскрипте (transcript.txt/transcript.json), даже к уже произнесённым; в окне программы уже показанные строки сохраняют то имя, что было на момент их появления.
В окне приложения задаются:
- Микрофон и Системный звук — устройства захвата (выбираются из списков, обнаруженных
PyAudioWPatch); - Язык распознавания — русский, английский, немецкий или мультиязычный (code-switching);
- Имя сессии (опционально) — префикс для имени папки с результатами;
- Сохранять сырое аудио (WAV) — если отмечено, помимо транскрипта сохраняются и аудиодорожки.
Кнопка «Начать» запускает захват и создаёт папку сессии; кнопка «Стоп» останавливает захват и записывает итоговые файлы транскрипта; кнопка «Заглушить микрофон» временно отключает передачу звука с микрофона в Deepgram (сам захват не останавливается) — повторное нажатие включает микрофон обратно.
Папка сессии и экспортируемые файлы:
Папка создаётся в момент нажатия «Начать» рядом со скриптом, её имя формируется так же, как имя файла у ListenSteam.py (--OutFile): без «Имени сессии» используется DeepGramMeeting, при заданном имени оно очищается от недопустимых в Windows символов и обрезается до 20 символов — итоговое имя папки выглядит как:
DeepGramMeeting[DD-MM-YYYY]_[HH-MM]/
После нажатия «Стоп» в папке сессии появляются:
transcript.txt— реплики всех говорящих (микрофон и участники) в хронологическом порядке, с меткой времени и именем говорящего;transcript.json— те же данные в структурированном виде (говорящий, источник, таймкод, текст);speakers/<Имя>.txt— отдельный файл с репликами каждого говорящего (по имени, присвоенному или переименованному в GUI);mic.wavиsystem.wav— сырые записи микрофона и системного звука, если была включена опция «Сохранять сырое аудио (WAV)».
API-ключ Deepgram не хранится в коде — все три скрипта (StartDG.py, ListenSteam.py и TeamsTranscribe.py) загружают его из переменной окружения DEEPGRAM_API_KEY (через python-dotenv и файл .env). Файл .env добавлен в .gitignore и не должен попадать в систему контроля версий.