У меня иногда возникает задача вытащить из песни (мп4 или мп3) текст. Сегодня попробовал
faster-whisper — Python-обёртку над Whisper (модель распознавания речи от OpenAI), работает быстрее оригинала за счёт движка CTranslate2. Многоязычная, русский и украинский распознаёт нормально, языки можно не указывать явно — определяет сама по первым секундам аудио. Форматы на входе — любые (mp4, mp3, wav и т.д.), библиотека сама вытаскивает аудиодорожку через PyAV.
Установка локальноpip install faster-whisperПодтягивает CTranslate2 (движок инференса), tokenizers, huggingface-hub (для скачивания весов моделей) и PyAV.
Сама модель при pip install не скачивается — она подтягивается из Hugging Face Hub при первом запуске в ~/.cache/huggingface/.
Размеры моделейМодель Размер Для чего
tiny ~75 МБ быстрая проверка, что всё работает
base ~150 МБ
small ~500 МБ приемлемый баланс
medium ~1.5 ГБ заметно точнее
large-v3 ~3 ГБ максимум качества
Запуск скриптаДальше нужно запустить скрипт transcribe.py
python transcribe.py video_2026-07-15_09-30-40.mp4 --model mediumПри этом файл с песней video_2026-07-15_09-30-40.mp4 лежит в одной папке со скриптом на пайтоне.
Вот тут и случился главный сюрприз эксперимента. На ноутбуке с Intel Pentium Silver (серия Gemini Lake) скрипт падал сразу при загрузке модели — Python тихо вылетал в командную строку без трейсбека, только код возврата:
echo %errorlevel%
-1073741819Это 0xC0000005 — классическая Windows Access Violation. Причина: CTranslate2 по умолчанию собран с расчётом на инструкции AVX2, а Pentium Silver их не поддерживает — библиотека пытается выполнить то, чего физически нет в процессоре, и падает.
Решение — принудительно откатить CTranslate2 на универсальный набор инструкций:
cmd
setx CT2_FORCE_CPU_ISA GENERICЗаодно всё же понадобился и Visual C++ Redistributable — без него была отдельная нестыковка на этапе импорта ctranslate2. Ставится один раз:
Просмотр ссылок доступен только зарегистрированным пользователям (с обязательной перезагрузкой компьютера).
По итогу всё заработало, но качество транскрибирования на модели tiny совсем отвратительное, на модели medium уже более-менее, но время транскрибирования 4-минутного ролика почти час и при этом большая часть текста потерялась. Скорее всего, потому что
фильтр vad_filter=True принял речь за шум. До модели large-v3 не добрался ибо на её работу потребовались бы часы.
То есть прогон через модель и последующая правка руками это рабочая модель. Всё зависит от артикуляции певца. Я игрался с песней на украинском Олега Гаврилюка "Моя медаль - моє життя". Там на слух местами трудно распознать что поёт.
Разделение на вокал и инструментал здесь тоже бессмысленно ибо оно не влияет на качество артикуляции певца.Теперь про временные затраты. Понятно, что для локального распознавания нужен компьютер с хорошей дискретной видеокартой NVIDIA или хотя бы с процессором, который поддерживает AVX2.
AVX2 (Advanced Vector Extensions 2) — набор расширенных инструкций для процессоров x86, добавленный Intel начиная с архитектуры Haswell (2013 год).
Pentium Silver (линейка Gemini Lake, Intel) — это бюджетный/энергоэффективный сегмент, урезанный по возможностям специально ради низкого энергопотребления и цены. AVX2 там физически отсутствует в кремнии — не отключён программно, а не реализован на уровне транзисторов. Когда скомпилированная библиотека пытается выполнить AVX2-инструкцию на процессоре, который её не понимает, происходит Illegal Instruction / Access Violation — то самое 0xC0000005. Это не программная ошибка в привычном смысле, а низкоуровневый крэш на уровне CPU.
Альтернативой может быть облачное решение.
Альтернативный вариант: облако (Google Colab)Google Colab — бесплатный сервис для запуска Python-кода в браузере на серверах Google, с доступом к GPU. Ничего ставить локально не нужно, каждая сессия — чистая виртуалка (значит, pip install делается заново при каждом новом подключении).
Шаги:
1. перейти в браузере
Просмотр ссылок доступен только зарегистрированным пользователям → New notebook
2. Включить GPU: Runtime → Change runtime type → T4 GPU
3. Установка:
!pip install faster-whisper -q4. Загрузка видео:
python
from google.colab import files
uploaded = files.upload()5. Транскрипция:
python
from faster_whisper import WhisperModel
model = WhisperModel("medium", device="cuda", compute_type="float16")
segments, info = model.transcribe("video.mp4", vad_filter=True)
full_text = []
with open("output.srt", "w", encoding="utf-8") as f_srt:
for i, seg in enumerate(segments, start=1):
text = seg.text.strip()
full_text.append(text)
f_srt.write(f"{i}\n{seg.start} --> {seg.end}\n{text}\n\n")
with open("output.txt", "w", encoding="utf-8") as f_txt:
f_txt.write(" ".join(full_text))6. Скачивание результата:
python
files.download("output.txt")
files.download("output.srt")А что для смартфонов?Для телефона есть приложения позволяющие превращать голосовые сообщения в текст. Для iOS есть
платное приложение AIKO -
Просмотр ссылок доступен только зарегистрированным пользователям Для Android приложение Scrib -
Просмотр ссылок доступен только зарегистрированным пользователям Оба используют открытые модели Whisper.