Автор Тема: Транскрипция песни в текст через Whisper: локально vs в облаке  (Прочитано 349 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Сергей Горбачевский

  • Administrator
  • Знаменитый писатель
  • *****
  • Сообщений: 86031
  • Пол: Мужской
  • Есть вопросы? Пишите в личку
    • Награды
У меня иногда возникает задача вытащить из песни (мп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 -q
4. Загрузка видео:

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.
#Приватбанк фашисты. В нём ненавидят людей старшего возраста


Теги: