Files
local-transcriber/README.md
T
ddadminandClaude Opus 4.6 b7e6ab634a feat(config): добавлены device-aware дефолты и результаты тестов
- Зачем:
  - тестирование на реальных записях показало, что int8 даёт галлюцинации на длинных файлах, auto-detect языка ошибается — нужны оптимальные дефолты по устройству.
- Что:
  - дефолты: medium float16 (GPU), medium float32 (CPU), language=ru.
  - добавлены DEVICE_DEFAULTS и apply_device_defaults() в config.py.
  - убран preprocessor_config.json из обязательных файлов модели (отсутствует у medium).
  - README обновлён: таблицы скоростей, качества, результаты тестирования compute_type.
- Проверка:
  - uv run pytest — 98 passed, 1 skipped.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-18 21:43:06 +03:00

11 KiB
Raw Blame History

local-transcriber

Локальный CLI для транскрипции аудио и видео через faster-whisper. Принимает файл, распознаёт речь на машине (без внешних API) и создаёт markdown с таймкодами. Результат удобен для последующей обработки ИИ — суммаризация, action items и т.д. Работает с GPU (NVIDIA CUDA, быстро) и CPU (медленнее).

transcribe meeting.mp4
# → meeting-transcript.md

Требования

  • Python ≥ 3.10
  • uv — менеджер пакетов
  • ffmpeg в PATH
  • (Опционально) NVIDIA GPU + установленный драйвер (проверка: nvidia-smi)

Установка

git clone <repo>
cd local-transcriber
uv tool install .

После этого команда transcribe доступна глобально в PATH.

Обновление после git pull:

uv tool install --force .

Модели скачиваются автоматически при первом запуске (~1.5 GB для medium, ~3 GB для large-v3), нужен доступ в интернет (Hugging Face Hub).

Если transcribe: command not found — убедитесь, что директория инструментов uv добавлена в PATH. Выполните uv tool dir --bin чтобы узнать путь, и добавьте его в PATH вашего shell.

Использование

# Простой запуск (medium, русский, автодетект устройства)
transcribe meeting.mp4

# Указать язык
transcribe lecture.mp3 --language en

# Максимальное качество на GPU
transcribe podcast.wav --model large-v3 --compute-type float16

# Сохранить в конкретный файл
transcribe interview.m4a --output result.md

Батч-режим

Обработка нескольких файлов за один вызов — модель загружается один раз:

# Все mp4 в директории
transcribe ./recordings/*.mp4

# Несколько файлов
transcribe meeting1.mp3 meeting2.mp3

# Перезаписать существующие транскрипты
transcribe *.mp4 --force
  • Файлы с существующим транскриптом (*-transcript.md) автоматически пропускаются
  • --force / -f — перезаписать существующие транскрипты
  • В конце выводится итоговая статистика: обработано, пропущено, ошибок
  • При ошибке в одном файле остальные продолжают обрабатываться
  • --output несовместим с несколькими файлами

Конфигурационный файл

Дефолтные параметры можно задать в .transcriber.toml:

language = "ru"
model = "large-v3"
compute_type = "float16"

Порядок поиска:

  1. .transcriber.toml в текущей директории (проектный конфиг)
  2. ~/.config/transcriber/config.toml (глобальный конфиг пользователя)

Приоритет: CLI-аргумент > конфиг > device-aware дефолт > встроенный дефолт.

Дефолты зависят от устройства (если не заданы явно):

Параметр GPU (CUDA) CPU
model medium medium
compute_type float16 float32
language ru ru

Опции CLI

Опция Сокращение По умолчанию Описание
--model -m medium Модель Whisper
--language -l ru Язык (ru, en, auto и др.)
--output -o <файл>-transcript.md Путь к выходному файлу
--device -d auto Устройство (auto, cpu, cuda)
--compute-type float16 (GPU) / float32 (CPU) Тип вычислений
--force -f Перезаписать существующие транскрипты
--verbose -v Подробный вывод

Модели

Модель Размер на диске VRAM (int8) Скорость (GPU) Качество
tiny ~75 MB ~1 GB ★★★★★
base ~140 MB ~1 GB ★★★★ ★★
small ~460 MB ~1.5 GB ★★★ ★★★
medium ~1.5 GB ~2.5 GB ★★ ★★★★
large-v3 ~3 GB ~2.5 GB ★★★★★

Типы квантизации (--compute-type)

Тип Устройство VRAM/RAM Качество Когда использовать
float16 GPU ~4.5-5 GB Отлично По умолчанию для GPU
int8_float16 GPU ~4.7 GB Отлично GPU от 6 GB, альтернатива float16
int8 GPU/CPU Низкое Хорошо, но бывают галлюцинации GPU от 4 GB, CPU
float32 CPU Среднее Отлично По умолчанию для CPU

Важно: int8 на длинных записях может давать галлюцинации (повтор фраз, потеря контента). float16 и float32 значительно стабильнее на записях >20 минут с техническими терминами.

Установка ffmpeg

  • Linux / WSL2: sudo apt install ffmpeg
  • macOS: brew install ffmpeg
  • Windows: winget install ffmpeg

GPU и CUDA

Для работы с GPU необходим установленный NVIDIA драйвер (проверка: nvidia-smi в терминале). Драйвер предоставляет libcuda.so.1, без которого CUDA не работает — его нельзя поставить через pip.

По платформам

  • Linux / WSL2 (x86_64): библиотека cuBLAS ставится автоматически (зависимость nvidia-cublas-cu12 подтягивается при установке). Дополнительных шагов не требуется. На ARM (aarch64) cuBLAS через pip недоступен — нужен системный CUDA toolkit.
  • Windows: нужен системный CUDA toolkit (choco install cuda или winget install -e --id Nvidia.CUDA)

Режимы --device

  • auto (по умолчанию) — выберет GPU если nvidia-smi доступен, иначе CPU
  • cuda — строго GPU, ошибка если недоступен (без silent fallback)
  • cpu — строго CPU

Совместимость GPU

GPU VRAM medium float16 large-v3 float16 Рекомендация
RTX 3060 6 GB medium float16 (дефолт)
RTX 4050 6 GB medium float16
Quadro M3000M 4 GB ⚠️ tight medium float16 или int8

Ожидаемая скорость

Замеры на RTX 3060 Laptop (6 GB) и Intel CPU (WSL2):

Конфигурация 16 мин файл 42 мин файл Отн. скорость
GPU + medium float16 ~35с ~133с ~19x реалтайм
GPU + large-v3 float16 ~90с ~350с ~7x реалтайм
CPU + medium float32 613с (10 мин) ~26 мин* ~1.5x реалтайм
CPU + large-v3 int8 839с (14 мин) ~37 мин* ~1:1 реалтайм

*Оценка на основе пропорции.

Результаты тестирования качества

Тесты проведены на реальных записях рабочих созвонов (русский язык, технические термины: SQL, PostgreSQL, Greenplum, Airflow, ClickHouse, Docker, CDR, GTP, MAP).

Конфигурация Качество (длинная запись, 42 мин) Проблемы
large-v3 int8 GPU Плохо Галлюцинации (фразы ×25), потеря контента
large-v3 float16 GPU Отлично
medium float16 GPU Хорошо Редкие мелкие ляпы в терминах
medium float32 CPU Хорошо Сопоставимо с large-v3 int8, без галлюцинаций
large-v3 int8 CPU Хорошо Без галлюцинаций (на коротких файлах)

Ключевые выводы:

  1. Указание языка (--language ru) критично — auto-detect может ошибиться и выдать мусор
  2. float16/float32 стабильнее int8 — особенно на записях >20 минут
  3. medium + float16 на GPU — лучший баланс скорости и качества для повседневного использования
  4. large-v3 + float16 на GPU — для максимального качества важных записей

Формат выходного файла

# Транскрипт: meeting.mp4

- **Дата транскрипции**: 2026-03-17 14:30:05
- **Модель**: large-v3
- **Язык**: ru (detected)
- **Длительность**: 01:23:45
- **Устройство**: CUDA (NVIDIA GeForce RTX 3060)

---

[00:00:00.00 - 00:00:15.40] Добрый день, коллеги. Сегодня мы обсудим результаты
квартала. Первый вопрос — по метрикам продукта. Как вы видите на слайде, MAU вырос
на двадцать три процента по сравнению с предыдущим кварталом.

[00:00:18.10 - 00:00:25.73] Теперь перейдём к финансовым показателям.

...

Близкие по времени сегменты автоматически объединяются в абзацы (пауза > 2 сек или длительность > 60 сек разделяет абзацы). Таймкоды: MM:SS.ss, для записей длиннее 1 часа — HH:MM:SS.ss.

Поддерживаемые форматы

  • Аудио: mp3, wav, flac, ogg, m4a, wma, aac
  • Видео: mp4, mkv, avi, mov, webm, ts

Формат определяется по расширению, декодирование выполняет ffmpeg.