У многих из нас есть «кладбище» аудиозаписей: интервью, лекции, длинные совещания. Когда мой архив перевалил за сотню часов, я понял, что пора что-то менять. Облачные сервисы либо кусаются по цене, либо выдают «кашу» без нормальной пунктуации и разделения спикеров.

В этой статье я расскажу, как собрал локальный конвейер на базе WhisperX, почему 40 ГБ оперативной памяти важнее мощной видеокарты и как метод «вайб-кодинга» помог мне превратить одиночный скрипт в модульное приложение с пакетной обработкой.

Почему не ванильный Whisper?

Оригинальный Whisper от OpenAI хорош, но для моих задач у него было три фатальных недостатка:

  1. Галлюцинации: на длинных паузах модель может начать повторять одну и ту же фразу.

  2. Таймкоды: точность меток на уровне предложений — это ок для субтитров, но плохо для навигации по интервью.

  3. Скорость на CPU: стандартная реализация крайне неэффективна без CUDA.

WhisperX решает это через связку технологий:

  • CTranslate2: движок, который позволяет запускать модели Whisper в разы быстрее на обычных процессорах.

  • VAD (Voice Activity Detection): сначала ищем голос, потом кормим фрагменты модели. Это убирает галлюцинации в тишине.

  • Phoneme Alignment: выравнивание текста по звуку с точностью до слова через модели Wav2Vec2.

Железо и реальные цифры

Мой сетап: Laptop Ryzen 5 5500U (6 ядер / 12 потоков), 40 ГБ RAM.

Чтобы было понятно, во что вы ввязываетесь при работе на CPU, вот сухие цифры для моделей семейства large:

Параметр

Показатель

Соотношение время/запись

~2:1 (для large-v3) или ~1:1 (для turbo-версий)

Загрузка CPU

60–80% (можно параллельно сидеть в браузере)

Потребление RAM

~25 ГБ (модель + кэш + системные нужды)

Температура

85–90°C (прогонял сутками, без троттлинга)

Загрузка процессора не упирается в 100% из-за специфики распараллеливания CTranslate2 и накладных расходов Python (привет, GIL), но это даже в плюс — ноутбук не превращается в кирпич на время работы.

От скрипта к модульной архитектуре

Скрытый текст
Главный экран приложения
Главный экран приложения

Изначально я оттолкнулся от проекта win-gui-whisperx, про который узнал из практического гайда на Хабре. Это была простая обертка над одним файлом, но для серьезной работы она не годилась.

Сейчас проект перерос в модульное приложение: логика транскрибации, менеджер очередей и GUI на Gradio разнесены по разным модулям (core.py, app.py, main_window.py). Это позволило внедрить систему Runtime Bootstrap, которая сама лечит проблемы совместимости PyTorch 2.6+ на Windows и гарантирует «безопасную» загрузку моделей.

Как выглядит обновленный пайплайн:

  1. Установка в один клик: использую менеджер зависимостей uv. Через install.bat система сама выкачивает Python 3.13 и изолирует окружение — никакой ручной настройки путей.

  2. Drag-and-Drop 2.0: файлы закидываются пачками, их можно сортировать за иконку «☰» прямо в очереди.

  3. Детальная индикация: прогресс-бар теперь не просто ползет, а честно пишет фазу: «Загрузка модели», «Транскрибация», «Align» или «Diarization».

  4. Массовые действия: появились кнопки «Выделить готовые» или «Удалить обработанные из очереди», чтобы быстро чистить список после ночного прогона.

Система пресетов и новые модели

Скрытый текст
Выбор модели
Выбор модели

По сравнению с оригинальным проектом я полностью переработал систему выбора моделей. Теперь они сгруппированы в три логических блока, чтобы сбалансировать скорость, точность и потребление ресурсов:

  • Standard (базовые): от крошечной tiny для тестов до medium и оптимизированной Russian Lite (small).

  • Distilled (скоростные): флагман здесь — Distil-Whisper Large v3.5. Идеально, если нужно быстро «перемолоть» английское интервью или созвон.

  • Large (максимальное качество):

    • Whisper Large v3 Turbo: мой фаворит и рекомендуемый выбор. Точность как у Large, но скорость на CPU значительно выше.

    • Russian Expert: специализированная модель для русского языка. Тонко чувствует падежи и сложные имена.

Все модели работают через CTranslate2, что дает ускорение в 2–4 раза по сравнению с оригиналом. На процессорах автоматически используется int8, что и позволяет не «убивать» ноутбук расчетами.

Инженерная часть и Google Antigravity

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

Здесь помог вайбкодинг через Google Antigravity (аналог Cursor на базе Gemini 3.0). Нейронка понимает контекст всего проекта, что позволило быстро отрефакторить монолитный скрипт в модульную структуру и написать автотесты для динамической очереди.

Грабли и фиксы

Без проблем не обошлось. Первый запуск на большой очереди просто «замерз» через 10 минут. Оказалось — конфликт Intel MKL и OpenMP. Решение пришлось зашивать в конфиг:

# Фикс для предотвращения замерзания процесса на CPU
os.environ["KMP_DUPLICATE_LIB_OK"] = "TRUE"
os.environ["OMP_NUM_THREADS"] = str(multiprocessing.cpu_count())

Итог

На выходе я получаю не просто субтитры, а чистый файл _formatted.txt без технических меток, готовый к чтению. Ноутбук на Ryzen 5500U с 40 ГБ RAM стал надежной станцией, которая методично пережевывает архив, пока я сплю.

Если вам нужно разгрести свои записи — берите, пользуйтесь и дорабатывайте

P.S. Главный инсайт: современные LLM позволяют решать продуктовые задачи невероятно быстро. Вы можете не быть экспертом в «кишках» библиотек, но с правильным инструментом и четким пониманием процесса автоматизация сотен часов аудио становится делом нескольких вечеров.