Локальное веб-приложение для транскрибации аудио на русском языке. Работает полностью офлайн после первоначальной загрузки модели. Никакие данные не отправляются на внешние серверы.
Используемая модель: GigaAM v2 от SberDevices — одна из лучших open-source моделей для распознавания русской речи.
- Возможности
- Системные требования
- Установка
- Запуск
- Использование
- Настройки
- Пунктуация
- GPU-ускорение
- Форматы вывода
- Переменные окружения
- Структура проекта
- API-эндпоинты
- Возможные проблемы
- FAQ
- Транскрибация аудио на русском языке с высокой точностью
- Поддержка аудиоформатов: MP3, WAV, M4A, OGG, FLAC, OPUS
- Поддержка видеоформатов: MP4, MKV, AVI, MOV, WEBM, TS, M2TS — аудиодорожка извлекается автоматически
- До 10 файлов за раз, до 500 МБ каждый
- Выбор модели: v2 CTC (быстрее) или v2 RNNT (точнее)
- Три формата вывода: TXT, SRT (субтитры с тайм-кодами), JSON
- VAD-сплит — умная нарезка по паузам через Silero VAD, не режет слова
- Опциональная расстановка пунктуации через deepmultilingualpunctuation
- GPU-ускорение через CUDA — в 5–15× быстрее CPU (если есть NVIDIA GPU)
- Декодирование аудио без промежуточных файлов — ffmpeg пишет прямо в RAM, экономит дисковое пространство
- Инлайн-просмотр результатов, копирование и скачивание
- Полностью локальный инференс — данные не покидают компьютер
- Тёмный минималистичный интерфейс
| Компонент | Минимум | Рекомендуется |
|---|---|---|
| Python | 3.11 | 3.11 или 3.12 |
| RAM | 4 ГБ | 8 ГБ |
| Диск | 2 ГБ свободно | 5 ГБ |
| CPU | любой x86-64 | 4+ ядра |
| GPU | не нужен | NVIDIA с CUDA 12.x, от 4 ГБ VRAM |
| OS | Windows 10, macOS 12, Ubuntu 20.04 | — |
Важно: Python 3.13 и 3.14 не поддерживаются — часть ML-зависимостей не имеет совместимых wheel-пакетов.
winget install Python.Python.3.11Проверьте:
py -3.11 --version
# Python 3.11.xwinget install Gyan.FFmpegПосле установки закройте и откройте PowerShell заново, затем проверьте:
ffmpeg -versionЕсли winget недоступен — скачайте вручную с gyan.dev/ffmpeg/builds, распакуйте в C:\ffmpeg и добавьте C:\ffmpeg\bin в PATH.
git clone https://github.com/ВАШ_ЛОГИН/gigaam-transcriber.git
cd gigaam-transcriberpy -3.11 -m venv .venv
.venv\Scripts\activateБез GPU (CPU-only):
pip install torch torchaudio --index-url https://download.pytorch.org/whl/cpuС NVIDIA GPU — сначала узнайте версию CUDA командой nvidia-smi (строка CUDA Version), затем:
# CUDA 12.4 (рекомендуется если драйвер поддерживает CUDA 12.x)
pip install torch torchaudio --index-url https://download.pytorch.org/whl/cu124
# CUDA 12.1
pip install torch torchaudio --index-url https://download.pytorch.org/whl/cu121
# CUDA 11.8
pip install torch torchaudio --index-url https://download.pytorch.org/whl/cu118Драйвер всегда обратно совместим со старыми версиями CUDA, поэтому
cu124подходит для любого драйвера с поддержкой CUDA 12.x и выше.
pip install -r requirements.txtДля автоматической расстановки запятых и точек установите отдельную модель (~450 МБ):
pip install deepmultilingualpunctuationПосле установки в настройках появится переключатель «Расставить пунктуацию».
copy .env.example .env/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"brew install python@3.11 ffmpeggit clone https://github.com/ВАШ_ЛОГИН/gigaam-transcriber.git
cd gigaam-transcriber
python3.11 -m venv .venv
source .venv/bin/activatepip install torch torchaudio
pip install -r requirements.txtcp .env.example .envsudo apt update
sudo apt install -y python3.11 python3.11-venv python3-pip ffmpeg gitgit clone https://github.com/ВАШ_ЛОГИН/gigaam-transcriber.git
cd gigaam-transcriber
python3.11 -m venv .venv
source .venv/bin/activateCPU-only:
pip install torch torchaudio --index-url https://download.pytorch.org/whl/cpu
pip install -r requirements.txtС NVIDIA GPU:
pip install torch torchaudio --index-url https://download.pytorch.org/whl/cu124
pip install -r requirements.txtcp .env.example .env# Windows
.venv\Scripts\activate
# macOS / Linux
source .venv/bin/activateuvicorn backend.main:app --host localhost --port 8000 --reloadОткройте браузер: http://localhost:8000
Флаг
--reloadперезапускает сервер при изменении файлов. Для продакшена уберите его и используйте--workers 1.
При первом открытии нажмите «Скачать и установить модель». Модель (~900 МБ) загрузится один раз и сохранится в ~/.cache/gigaam. При следующих запусках загрузка из кэша происходит автоматически.
Можно выбрать вариант модели до загрузки:
- v2 CTC — быстрее, меньше VRAM, рекомендуется для большинства задач
- v2 RNNT — чуть точнее, особенно на сложных записях, немного медленнее
Оба варианта загружаются независимо и хранятся в кэше. Уже скачанные отмечены бейджем ✓ кэш.
Перетащите файлы в зону загрузки или нажмите для выбора. Поддерживаются аудио и видео:
mp3 wav m4a ogg flac opus mp4 mkv avi mov webm ts m2ts
Ограничения: до 10 файлов, до 500 МБ каждый.
После завершения каждый файл показывается карточкой с кнопками копирования и скачивания. Текст можно развернуть прямо на странице.
| Параметр | Описание |
|---|---|
| Модель | v2 CTC или v2 RNNT. Смена модели перезапускает воркеры (несколько секунд) |
| Формат вывода | .txt — сплошной текст; .srt — субтитры с тайм-кодами; .json — структурированные данные |
| Размер чанка | На сколько секунд нарезать аудио. 5–20 с. Меньше = точнее на паузах |
| VAD-сплит | Умная нарезка по паузам через Silero VAD. Рекомендуется |
| Пунктуация | Расстановка запятых и точек после транскрибации. Требует отдельной установки |
| Устройство | CPU или CUDA. Отображается только если PyTorch обнаружил совместимую NVIDIA GPU |
GigaAM транскрибирует речь без знаков препинания. Для их расстановки используется отдельная модель deepmultilingualpunctuation на базе XLM-RoBERTa, поддерживающая русский язык.
Установка:
pip install deepmultilingualpunctuationПосле установки (~450 МБ) в панели настроек появится переключатель «Расставить пунктуацию». Модель загружается при первом использовании и затем кэшируется.
Без пунктуации:
привет меня зовут иван я работаю программистом уже пять лет
С пунктуацией:
Привет, меня зовут Иван. Я работаю программистом уже пять лет.
Инференс на GPU ускоряет транскрибацию в 5–15× по сравнению с CPU.
Требования:
- NVIDIA GPU с поддержкой CUDA (GTX 1060 и новее)
- Минимум 4 ГБ VRAM (рекомендуется 6+ ГБ для v2 RNNT)
- Установленный PyTorch с CUDA (см. раздел Установка)
Проверить что GPU доступен:
python -c "import torch; print(torch.cuda.is_available(), torch.cuda.get_device_name(0))"
# True NVIDIA GeForce RTX 3070Если команда выводит True — в UI появится переключатель CPU / CUDA в разделе «Устройство». При False — PyTorch установлен без CUDA, нужно переустановить с нужным индексом (см. Шаг 5 установки Windows).
Определить нужный индекс CUDA:
nvidia-smi
# Строка: CUDA Version: 12.x → используйте cu124
# Строка: CUDA Version: 11.x → используйте cu118Сплошной текст, фрагменты объединены пробелами.
Привет, это тестовая транскрибация аудиофайла.
Субтитры с временны́ми метками. Совместим с большинством видеоплееров.
1
00:00:00,000 --> 00:00:05,120
Привет, это тестовая транскрибация
2
00:00:05,120 --> 00:00:10,340
аудиофайла с помощью модели GigaAM.Структурированные данные для дальнейшей обработки.
{
"filename": "audio.mp3",
"chunks": [
{ "index": 0, "start": 0.0, "end": 5.12, "text": "Привет, это тестовая транскрибация" },
{ "index": 1, "start": 5.12, "end": 10.34, "text": "аудиофайла с помощью модели GigaAM." }
],
"full_text": "Привет, это тестовая транскрибация аудиофайла с помощью модели GigaAM."
}Файл .env в корне проекта (создаётся из .env.example):
# Количество параллельных воркеров для инференса
# При нехватке RAM или VRAM уменьшите до 1
MAX_WORKERS=2
# Вариант модели GigaAM по умолчанию
# v2_ctc — быстрее (рекомендуется)
# v2_rnnt — точнее, медленнее
GIGAAM_MODEL=v2_ctc
# Папка для временных файлов и результатов
TMP_DIR=./tmpgigaam-transcriber/
├── backend/
│ ├── main.py # FastAPI приложение, lifespan, CORS, статика
│ ├── api/
│ │ ├── routes.py # Все API-эндпоинты (/api/*)
│ │ └── schemas.py # Pydantic-модели запросов и ответов
│ ├── core/
│ │ ├── model.py # Загрузка GigaAM, воркеры, кэш, переключение вариантов
│ │ ├── audio.py # Декодирование в RAM, VAD-сплит, нарезка чанков
│ │ ├── punctuation.py # Опциональная расстановка пунктуации
│ │ └── formatter.py # Сборка TXT / SRT / JSON из результатов
│ └── task_manager.py # In-memory хранилище задач с TTL-очисткой
├── frontend/
│ ├── index.html # Единственная HTML-страница (SPA)
│ ├── css/
│ │ └── style.css # Дизайн-система, тёмная тема
│ └── js/
│ ├── api.js # Все fetch-вызовы к бэкенду
│ ├── ui.js # DOM-рендер, тосты, прогресс, карточки
│ └── app.js # Инициализация, роутинг экранов, опрос задач
├── tmp/ # Временные файлы (создаётся автоматически)
├── .env # Конфигурация (создать из .env.example)
├── .env.example # Шаблон конфигурации
├── requirements.txt # Python-зависимости
└── README.md
| Метод | Путь | Описание |
|---|---|---|
GET |
/api/system/info |
CUDA доступность, GPU, доступные варианты модели |
GET |
/api/model/status |
Статус модели, текущий вариант, кэшированные варианты |
POST |
/api/model/download |
Запустить загрузку/инициализацию модели |
POST |
/api/model/switch |
Переключить вариант модели (перезапускает воркеры) |
GET |
/api/model/download-progress |
Прогресс загрузки в процентах и МБ |
POST |
/api/transcribe |
Загрузить файлы и запустить транскрибацию |
GET |
/api/task/{id}/status |
Статус задачи + результаты после завершения |
DELETE |
/api/task/{id} |
Отменить задачу |
GET |
/api/task/{id}/download |
Скачать файл результата |
RuntimeError: Couldn't find ffprobe or avprobe
Установите ffmpeg и убедитесь что он доступен в PATH (ffmpeg -version). После установки перезапустите терминал.
ValueError: Too long wav file, use 'transcribe_longform' method.
VAD-сплит создал фрагмент длиннее 25 секунд (нет пауз в записи). Решение: отключите VAD-сплит в настройках — фиксированная нарезка всегда соблюдает лимит 15 секунд.
RuntimeError: [WinError 8] Недостаточно памяти
Каждый воркер загружает свою копию модели (~1.5 ГБ RAM или VRAM). Уменьшите количество воркеров в .env:
MAX_WORKERS=1- В UI убедитесь что выбрано CUDA, а не CPU
- Проверьте что PyTorch действительно видит GPU:
python -c "import torch; print(torch.cuda.is_available())" - Если
False— переустановите PyTorch с нужным CUDA-индексом (см. раздел GPU-ускорение)
ERROR: gigaam 0.1.0 requires torch<=2.5.1
Это предупреждение, не ошибка установки. gigaam указал консервативный верхний предел версии, но работает с torch 2.6+. Установка завершается успешно.
Это предупреждение, не ошибка. Silero VAD не смог загрузиться, и приложение автоматически переключилось на фиксированную нарезку. Транскрибация продолжится корректно.
- Убедитесь что виртуальное окружение активировано (в начале строки
(.venv)) - Запускайте команду из корня проекта
- Проверьте что порт 8000 не занят:
# Windows
netstat -ano | findstr :8000
# macOS / Linux
lsof -i :8000При необходимости смените порт:
uvicorn backend.main:app --host localhost --port 8001 --reloadFutureWarning: You are using torch.load with weights_only=False
Предупреждение от PyTorch, не ошибка. Модель загружается корректно. Исчезнет когда SberDevices обновят формат весов.
Q: Работает ли приложение без интернета? A: Да, после первой загрузки модели всё работает полностью офлайн. Для пунктуации модель тоже загружается один раз и кэшируется.
Q: Какой язык поддерживается? A: GigaAM обучена на русском языке. Пунктуатор поддерживает ещё несколько языков, но интерфейс и транскрибация ориентированы на русский.
Q: Насколько точна транскрибация? A: GigaAM v2 показывает WER около 4–7% на чистой речи. Качество снижается при сильном шуме, акценте или нескольких говорящих одновременно.
Q: В чём разница между v2 CTC и v2 RNNT? A: CTC — архитектура с условной независимостью выходов, работает быстрее. RNNT — авторегрессионная модель, лучше учитывает контекст, чуть точнее на сложных записях, медленнее примерно в 1.5–2×. Для большинства задач CTC достаточно.
Q: Сколько времени занимает транскрибация? A: На CPU — примерно 1–2 минуты на каждую минуту аудио. На GPU (CUDA) — в 5–15× быстрее.
Q: Зачем нужна установка deepmultilingualpunctuation отдельно?
A: Это дополнительная NLP-модель (~450 МБ). Многим пользователям пунктуация не нужна или они добавляют её вручную, поэтому она не включена в основные зависимости.
Q: Результаты сохраняются между сессиями?
A: Нет. Результаты хранятся в ./tmp и удаляются через 1 час. Скачайте нужные файлы сразу после обработки.
Q: Можно ли транскрибировать видео? A: Да. Перетащите видеофайл (MP4, MKV, AVI, MOV, WEBM, TS) — аудиодорожка извлекается через ffmpeg автоматически. Видеофайлы отображаются с жёлтой иконкой.
Q: Почему Python 3.13+ не поддерживается?
A: Пакет sentencepiece (зависимость GigaAM) не имеет pre-built wheel для Python 3.13+ и требует ручной сборки. Используйте Python 3.11 или 3.12.
MIT License. Используйте свободно, в том числе в коммерческих проектах.
Модель GigaAM распространяется под лицензией MIT от SberDevices.