Форум программистов, компьютерный форум, киберфорум
anaschu
Войти
Регистрация
Восстановить пароль

Транскрипция 55-минутного видео через Whisper: WhisperDesktop облажался, спас Google Colab[

Запись от anaschu размещена 01.06.2026 в 17:09
Показов 2509 Комментарии 0
Метки whisper

Понадобилось получить текст из свежезагруженного видео на YouTube. Казалось бы, задача на пять минут. Заняла полтора часа. Делюсь опытом — может кому пригодится последовательность решений.

Контекст



Провели рабочую встречу, записали видео, загрузили на YouTube. Нужно было извлечь из записи планы и идеи в виде текста. Первое что приходит в голову — встроенный транскрипт YouTube.

[IMG]https://i.***********/15Pc3Y7z/sc1-youtube-no-transcript.jpg[/IMG]

YouTube, три точки под видео — пункта «Открыть транскрипцию» нет. Видео загружено несколько часов назад, автоматические субтитры ещё не сгенерированы.

Субтитров нет. Видео свежее — YouTube обрабатывает аудио асинхронно, иногда ждать нужно часами, иногда сутками. Ждать не вариант.

Попытка 1: WhisperDesktop



Скачал WhisperDesktop (GUI для whisper.cpp) и модель ggml-medium.bin (~1.5 ГБ) с HuggingFace. Запустил, указал видеофайл, нажал старт.

Вместо транскрипции получил вот это:

[IMG]https://i.***********/dtvmVSN7/sc2-whisper-desktop-error.jpg[/IMG]

Whisper Desktop Debug Console — бесконечный поток «unFullImpl: failed to generate timestamp token - skipping one second».

Code
1
2
3
4
unFullImpl: failed to generate timestamp token - skipping one second
unFullImpl: failed to generate timestamp token - skipping one second
unFullImpl: failed to generate timestamp token - skipping one second
...
Строчки сыплются, транскрипт пустой. Это известная проблема whisper.cpp с некоторыми конфигурациями GPU через DirectCompute: программа не может сгенерировать временные метки и пропускает каждую секунду по одной.

Лечится: в настройках WhisperDesktop отключить GPU (переключиться на CPU). Минус — на CPU 55-минутное видео будет обрабатываться несколько часов. Решил искать более быстрый вариант.

Попытка 2: Google Colab



Colab даёт бесплатный GPU в браузере без установки чего-либо на машину. Создал новый notebook, три ячейки.

Ячейка 1 — зависимости:
Code
1
2
!pip install openai-whisper
!apt install ffmpeg -y
[IMG]https://i.***********/RV9QZbpJ/sc3-colab-install.jpg[/IMG]

Установка openai-whisper в Colab. Видно что triton качается отдельно, wheel собирается из исходников. Занимает ~3 минуты.

Ячейка 2 — загрузка файла:
Code
1
2
3
from google.colab import files
uploaded = files.upload()  # кнопка появится в выводе ячейки
filename = list(uploaded.keys())[0]
[IMG]https://i.***********/DyFdwYpX/sc4-colab-upload.jpg[/IMG]

Файл «встреча по медицине.mp4» (85 МБ) загружен на сервер Colab — 100% done. Загрузка ~5 минут.

Нюанс: если сессия Colab прерывалась (вышла с предупреждением «Upload widget is only available when the cell has been executed in the current browser session»), достаточно просто перезапустить вторую ячейку. Файл всё равно нужно загружать заново — Colab не хранит загруженные файлы между сессиями.

Ячейка 3 — транскрипция:
Code
1
2
3
4
5
6
import whisper
model = whisper.load_model("medium")
result = model.transcribe(filename, language="ru")
with open("transcript.txt", "w", encoding="utf-8") as f:
    f.write(result["text"])
files.download("transcript.txt")

Процесс: час ожидания



Colab сразу предупреждает:
Code
1
UserWarning: FP16 is not supported on CPU; using FP32 instead
Это означает что бесплатный GPU в этот раз не выделился — работаем на CPU. Обидно, но терпимо.

[IMG]https://i.***********/bN8HwFVb/sc5-colab-running.jpg[/IMG]

Ячейка запущена: модель medium (1.42 ГБ) загружена, транскрипция пошла. Внизу таймер: 4 минуты 31 секунда — это только начало.

Оставляем вкладку открытой. Через 38 минут:

[IMG]https://i.***********/zX5SGP2w/sc6-colab-waiting.jpg[/IMG]

Всё ещё работает. Таймер показывает 22:55 (это время выполнения ячейки). Параллельно Colab выдаёт диалог про несохранённые изменения в notebook — нажимаем «Отмена», это никак не влияет на транскрипцию.

Ещё через ~20 минут — готово:

[IMG]https://i.***********/VL1BkHZB/sc7-colab-done.jpg[/IMG]

В правом верхнем углу — галочка ✓. Ячейка выполнена. Браузер автоматически предложил скачать transcript.txt.

Итоговое время: около часа на 55-минутное видео (примерно 1:1 на CPU). На GPU было бы ~15–20 минут.

Качество результата



Модель medium на русском языке работает хорошо. Типичные проблемы которые встретились:
  • Имена собственные — расшифровывает фонетически или заменяет похожими словами. «АnyLogic» → «Энилоджик», «MBTI» → «М-БТ-И»
  • Технические аббревиатуры — угадывает через раз
  • Слова-паразиты и оговорки — транскрибирует честно, всё подряд
  • Перекрёстный разговор (двое говорят одновременно) — склеивает в кашу, но это ограничение любой ASR-системы

Для извлечения смысла и структурирования идей — вполне достаточно. Для дословного протокола — нужна ручная правка.

Итог: что использовать когда


  • YouTube субтитры — если можете подождать несколько часов/дней и видео публичное
  • WhisperDesktop локально — если есть время (~2–4 часа на CPU) или GPU без проблем с DirectCompute
  • Google Colab — если нужно быстро и не хочется ничего устанавливать. ~1 час на CPU, ~15–20 минут на GPU (если повезёт с выделением)
  • openai-whisper локально через pip — если есть нормальный GPU (RTX 30xx+): whisper video.mp4 --language Russian --model medium. Это будет быстрее всего

Модели по соотношению скорость/качество для русского:
  • small — быстро, заметно хуже на русском
  • medium — оптимально, хорошее качество, ~1 ГБ GPU
  • large-v3 — лучшее качество, но ~3 ГБ GPU и медленнее втрое

Если кто делал это через что-то другое (например, локальный faster-whisper или через API) — пишите как по скорости и качеству, интересно сравнить.
Метки whisper
Размещено в Без категории
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Всего комментариев 0
Комментарии
 
Новые блоги и статьи
[golang] Конкурентный fetcher с ограничением максимального количества одновременных HTTP запросов.
alhaos 10.06.2026
Задача Реализовать конкурентный fetcher с ограничением максимального количества одновременных HTTP запросов. Сигнатура func Fetch(urls string, maxConcurrent int) Result Пример urls :=. . .
[golang] Состояние гонки (race condition)
alhaos 10.06.2026
Состояние гонки (race condition) Состояние гонки (Race Condition) — это ошибка, возникающая при одновременном доступе нескольких горутин к одним и тем же данным без должной синхронизации. При этом. . .
Взрослые отношения, и почему они не получаются
kumehtar 09.06.2026
Когда в детстве ребёнок не получает от родителей чего-то важного, он лишается не просто приятных переживаний, а основы для формирования определённых внутренних качеств и навыков. Если ребёнок не. . .
[golang] Worker Pool
alhaos 09.06.2026
Worker Pool Worker Pool — паттерн конкурентной обработки задач в Go. Суть: фиксированное количество горутин-воркеров читают задачи из общего канала и пишут результаты в общий канал результатов. . . .
[golang] Pipeline
alhaos 08.06.2026
Pipeline Pipeline — паттерн конкурентной обработки данных в Go. Суть: данные проходят через цепочку независимых стадий, каждая из которых работает в своей горутине и общается с соседями через. . .
Свет внутри себя
kumehtar 07.06.2026
Пусть это будет здесь lIs4oanZS9Y
Программа для com-порта
Uhbif79 05.06.2026
Всем привет, давно хотел изучить Qt, начинал, бросал, потом снова начинал. И сейчас вот смог написать свою первую программу. До этого имел опыт программирования микроконтроллеров, писал прошивки на. . .
Транскрипция 55-минутного видео через Whisper: WhisperDesktop облажался, спас Google Colab[
anaschu 01.06.2026
Понадобилось получить текст из свежезагруженного видео на YouTube. Казалось бы, задача на пять минут. Заняла полтора часа. Делюсь опытом — может кому пригодится последовательность решений. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru