У многих из нас есть «кладбище» аудиозаписей: интервью, лекции, длинные совещания. Когда мой архив перевалил за сотню часов, я понял, что пора что-то менять. Облачные сервисы либо кусаются по цене, либо выдают «кашу» без нормальной пунктуации и разделения спикеров.
В этой статье я расскажу, как собрал локальный конвейер на базе WhisperX, почему 40 ГБ оперативной памяти важнее мощной видеокарты и как метод «вайб-кодинга» помог мне превратить одиночный скрипт в модульное приложение с пакетной обработкой.
Почему не ванильный Whisper?
Оригинальный Whisper от OpenAI хорош, но для моих задач у него было три фатальных недостатка:
Галлюцинации: на длинных паузах модель может начать повторять одну и ту же фразу.
Таймкоды: точность меток на уровне предложений — это ок для субтитров, но плохо для навигации по интервью.
Скорость на 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 и гарантирует «безопасную» загрузку моделей.
Как выглядит обновленный пайплайн:
Установка в один клик: использую менеджер зависимостей uv. Через install.bat система сама выкачивает Python 3.13 и изолирует окружение — никакой ручной настройки путей.
Drag-and-Drop 2.0: файлы закидываются пачками, их можно сортировать за иконку «☰» прямо в очереди.
Детальная индикация: прогресс-бар теперь не просто ползет, а честно пишет фазу: «Загрузка модели», «Транскрибация», «Align» или «Diarization».
Массовые действия: появились кнопки «Выделить готовые» или «Удалить обработанные из очереди», чтобы быстро чистить список после ночного прогона.
Система пресетов и новые модели
Скрытый текст

По сравнению с оригинальным проектом я полностью переработал систему выбора моделей. Теперь они сгруппированы в три логических блока, чтобы сбалансировать скорость, точность и потребление ресурсов:
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 позволяют решать продуктовые задачи невероятно быстро. Вы можете не быть экспертом в «кишках» библиотек, но с правильным инструментом и четким пониманием процесса автоматизация сотен часов аудио становится делом нескольких вечеров.
