COMRAD404 / HOWTO

Как транскрибировать аудио/видео с Whisper

Пошаговая инструкция по транскрибации аудио локальным openai-whisper и через whisper-1 API. Разобраны `ffmpeg`, CLI и Python-пример, форматы, лимит 25 MiB, таймкоды и ограничения для видео.

Понадобится

10–30 минут
  • Python для локального запуска
  • Установленный системный ffmpeg в PATH
  • Аудиофайл или видеофайл с читаемой аудиодорожкой
  • OpenAI API key для варианта через whisper-1 API
  • Файл в поддерживаемом формате; для legacy/whisper-1 размер запроса до 25 MiB

После выполнения этой инструкции вы сможете получить текстовую расшифровку аудио с помощью локального Whisper или через OpenAI whisper-1 API, а также проверить результат по полю text и при необходимости запросить таймкоды.

Практический вердикт: самый воспроизводимый путь — транскрибировать аудиофайл. Для видео есть важная оговорка: локальный Whisper декодирует вход через системный ffmpeg, а API принимает, среди прочего, контейнеры mp4 и webm, но модель whisper-1 на странице модели отмечена как audio input only. Если ваш видеофайл не читается как источник звука, сначала извлеките аудиодорожку отдельным инструментом. Редакционное ограничение: в официальных источниках из этого пакета нет зафиксированной команды извлечения аудио из видео, поэтому ниже описаны только подтверждённые маршруты транскрибации.

Время 10–30 минут, в зависимости от способа и готовности окружения
Сложность Средний
Стоимость Локально: в источниках нет поминутной цены, затраты зависят от вашей машины. Через API: на странице модели whisper-1 указано $0.006 за минуту транскрипции.
Что потребуется Для локального способа: Python, установленный пакет openai-whisper, системный ffmpeg в PATH, аудиофайл. Для API: OpenAI API key, файл в поддерживаемом формате, для legacy/whisper-1 — размер запроса до 25 MiB.
Актуальная версия Локальный Whisper: latest release v20250625 на странице Releases; OpenAI API: модель whisper-1 по документации на 2026-08-17.

Что выбрать: локальный Whisper или whisper-1 API

Вариант Когда подходит Что подтверждено в источниках Ограничения
Локальный openai-whisper Нужна транскрибация на своей машине без обращения к API Установка через pip install -U openai-whisper, зависимость от ffmpeg, CLI и Python-пример, перевод на английский через --task translate с мультиязычными моделями ffmpeg должен быть в PATH; источники здесь не фиксируют точные команды установки ffmpeg для каждой ОС
whisper-1 API Нужен управляемый облачный вызов и JSON-ответ Эндпоинты /v1/audio/transcriptions и /v1/audio/translations, поддерживаемые форматы, цена, проверка через поле text, verbose_json и timestamp_granularities Streaming для whisper-1 не поддерживается; legacy-лимит загрузки 25 MiB; нельзя передавать ссылку вместо файла; доступность зависит от аккаунта и региона

Способ 1. Транскрибировать локально через openai-whisper

  1. Установите ffmpeg и добавьте его в системный PATH.

    Официальный репозиторий Whisper требует, чтобы ffmpeg был доступен в PATH. Это не факультативная зависимость: файл whisper/audio.py декодирует вход через команду ffmpeg.

    Ожидаемый результат: терминал вашей системы видит исполняемый файл ffmpeg, и вы можете перейти к установке Whisper.

  2. Установите пакет Whisper.

    pip install -U openai-whisper

    Именно эту команду README репозитория даёт как официальный путь установки. Альтернативно в README допускается установка из GitHub, но для большинства случаев достаточно варианта через pip.

    Ожидаемый результат: пакет устанавливается без ошибки про отсутствие зависимостей Python.

  3. Запустите официальную CLI-транскрибацию.

    whisper audio.flac audio.mp3 audio.wav --model turbo

    Это официальный пример из README. Модель turbo используется здесь именно для транскрибации. Если вы хотите обработать один файл, оставьте в команде только свой путь к нему.

    Ожидаемый результат: команда стартует без ошибок о том, что whisper или ffmpeg не найдены.

  4. Проверьте результат через Python-скрипт, чтобы увидеть явный текст в консоли.

    import whisper
    
    model = whisper.load_model("turbo")
    result = model.transcribe("audio.mp3")
    print(result["text"])

    Это официальный Python-пример из README. Там же указано, что transcribe() обрабатывает весь файл скользящим окном 30 секунд. Для проверки это удобнее CLI, потому что текст виден сразу в result["text"].

    Ожидаемый результат: вы видите в консоли непустую строку с расшифровкой.

  5. Если нужен перевод речи на английский, повторите запуск с --task translate и выберите мультиязычную модель.

    README прямо уточняет, что для перевода на английский нужно использовать --task translate и одну из моделей tiny, base, small, medium или large, потому что turbo не обучен переводу.

    Ожидаемый результат: вы запускаете перевод без конфликта с ограничением модели turbo.

Что важно знать про видео в локальном режиме

Из источников подтверждено, что локальный пайплайн Whisper декодирует вход через системный ffmpeg. Это означает, что практическая работа с видео зависит от того, может ли ваш ffmpeg прочитать аудиодорожку контейнера. Однако в README из этого пакета зафиксированы именно аудиопримеры, а не отдельная официальная команда для видео. Поэтому для гарантированно воспроизводимого сценария используйте аудиофайл.

Способ 2. Транскрибировать через whisper-1 API

  1. Подготовьте локальный файл в поддерживаемом формате и проверьте размер.

    Для /v1/audio/transcriptions и /v1/audio/translations официально поддерживаются flac, mp3, mp4, mpeg, mpga, m4a, ogg, wav и webm. Для legacy/whisper-1 FAQ фиксирует лимит запроса 25 MiB. Передавать ссылку на аудио вместо файла нельзя.

    Ожидаемый результат: у вас есть локальный файл подходящего формата, который укладывается в лимит.

  2. Если исходник — видео, используйте его только как контейнер с читаемой аудиодорожкой.

    Здесь есть важный нюанс. API принимает mp4 и webm как форматы загрузки, но страница модели whisper-1 одновременно помечает модель как audio input only и video not supported. Практически это означает: проверяйте именно извлекаемость звука из контейнера. Если есть сомнения, сначала подготовьте отдельный аудиофайл.

    Ожидаемый результат: вы не рассчитываете на «понимание видео» как отдельной модальности и работаете со звуковой дорожкой.

  3. Отправьте файл на эндпоинт транскрибации.

    curl https://api.openai.com/v1/audio/transcriptions 
      -H "Authorization: Bearer $OPENAI_API_KEY" 
      -F file="@audio.mp3" 
      -F model="whisper-1"

    Официальная документация указывает эндпоинт /v1/audio/transcriptions и модель whisper-1 для распознавания речи общего назначения.

    Ожидаемый результат: API возвращает JSON-ответ без ошибки загрузки.

  4. Проверьте поле text в ответе.

    Это официальный паттерн верификации результата для Audio API. Если поле text содержит расшифровку и она соответствует записи, базовая транскрибация работает.

    Ожидаемый результат: вы видите непустое значение text.

  5. Если нужны таймкоды, повторите запрос в формате verbose_json.

    В документации для проверки и детализации результата указаны response_format=verbose_json и timestamp_granularities со значениями word или segment. Этот путь удобен, если вы готовите субтитры или хотите привязать текст к времени.

    Ожидаемый результат: помимо текста вы получаете структуру с временными метками в детализации, которую запросили.

Когда использовать эндпоинт перевода

Если нужна не просто транскрибация, а перевод речи на английский, используйте /v1/audio/translations. В источниках из этого пакета прямо указано, что для translations сейчас доступен только whisper-1.

Как проверить, что всё работает

  • Локально через Python: скрипт с result = model.transcribe("audio.mp3") выполняется и печатает непустой result["text"].
  • Через API: ответ от /v1/audio/transcriptions содержит поле text без ошибки загрузки или формата.
  • Для таймкодов: при повторном запросе с response_format=verbose_json в ответе появляются данные для слов или сегментов, если вы запросили timestamp_granularities.
  • Для видеоисточника: транскрипт должен соответствовать именно звуковой дорожке, а не визуальному содержимому ролика. Если результата нет, причина обычно в контейнере или дорожке, а не в «качестве понимания видео».

Если вам нужен самый надёжный контроль качества, сначала проверьте короткий аудиофрагмент локально через Python-пример, а затем переходите к массовой обработке или API.

Частые ошибки и исправления

  • Ошибка: локальный Whisper не стартует из-за ffmpeg.
    Решение: убедитесь, что ffmpeg установлен и доступен в системном PATH. Это требование подтверждено и README, и кодом whisper/audio.py.
  • Ошибка: API отклоняет файл или вы пытаетесь передать ссылку вместо загрузки.
    Решение: используйте локальный файл в одном из официально поддерживаемых форматов. FAQ прямо говорит, что ссылку на аудио передавать нельзя.
  • Ошибка: запрос к whisper-1 не проходит из-за размера файла.
    Решение: для legacy/whisper-1 держите размер загрузки в пределах 25 MiB или разбейте материал на части.
  • Ошибка: вы пытаетесь переводить локально через turbo и получаете неподходящее поведение.
    Решение: для --task translate используйте одну из мультиязычных моделей tiny, base, small, medium или large. README отдельно отмечает, что turbo не обучен переводу.
  • Ошибка: вы ожидаете streaming или полноценную обработку видео как модальности в whisper-1.
    Решение: учитывайте документированное ограничение: streaming для whisper-1 не поддерживается, а страница модели помечает видео как не поддерживаемую модальность. Работайте со звуковой дорожкой.

Безопасность и ограничения

  • Локальный режим: в этой инструкции файл обрабатывается вашим локальным окружением, но работоспособность зависит от корректной установки Python и ffmpeg.
  • API-режим: вы загружаете файл на аудио-эндпоинт OpenAI. Доступность /v1/audio/transcriptions и /v1/audio/translations может зависеть от аккаунта и региона; официальная страница по data controls перечисляет эти сервисы для ряда региональных доменов, но это нужно перепроверять для конкретной учётной записи.
  • Стоимость: для whisper-1 на странице модели указана цена $0.006 за минуту транскрипции. Для локального способа официальные источники из этого пакета не фиксируют тариф, поэтому оценивайте только затраты своей инфраструктуры.
  • Лимиты: для legacy/whisper-1 FAQ фиксирует лимит 25 MiB на запрос. Streaming для whisper-1 не поддерживается.
  • Редакционное ограничение: из-за отсутствия в исходном пакете официальной команды извлечения аудио из видео эта инструкция не описывает конкретный ffmpeg-конвейер для подготовки видеофайлов. Если контейнер не читается, сначала получите отдельный аудиофайл в поддерживаемом формате.

Что делать дальше

Источники

Вопросы и ответы

Можно ли транскрибировать видео напрямую?

Частично. API принимает mp4 и webm как форматы файла, а локальный Whisper декодирует вход через ffmpeg. Но whisper-1 помечен как audio input only, поэтому рассчитывайте на работу со звуковой дорожкой, а не с видео как отдельной модальностью.

Какие форматы поддерживаются в API?

Официально перечислены flac, mp3, mp4, mpeg, mpga, m4a, ogg, wav и webm.

Можно ли получить таймкоды?

Да. Для API используйте response_format=verbose_json и параметр timestamp_granularities со значением word или segment. Для локального примера в этом пакете официально зафиксирована проверка через result["text"].

Поддерживается ли streaming в whisper-1?

Нет. И API Reference, и FAQ указывают, что streaming для whisper-1 не поддерживается.

Сколько стоит транскрибация через OpenAI API?

На странице модели whisper-1 указана цена $0.006 за минуту транскрипции. Для локального способа в этих источниках поминутный тариф не указан.

Шаги

HOW-TO
  1. Выберите способ запуска

    | Решите, нужен ли вам локальный openai-whisper на своей машине или облачный whisper-1 API с JSON-ответом.

  2. Установите ffmpeg

    | Для локального Whisper ffmpeg должен быть установлен и доступен в системном PATH, потому что декодирование входа идёт через него.

  3. Установите пакет openai-whisper

    | Используйте официальный способ установки: pip install -U openai-whisper.

  4. Запустите локальную транскрибацию

    | Выполните CLI-команду whisper audio.flac audio.mp3 audio.wav --model turbo или обработайте один свой аудиофайл.

  5. Проверьте локальный результат через Python

    | Запустите официальный пример с whisper.load_model("turbo") и print(result["text"]) и убедитесь, что текст непустой.

  6. Подготовьте файл для API

    | Используйте локальный файл поддерживаемого формата: flac, mp3, mp4, mpeg, mpga, m4a, ogg, wav или webm; для legacy/whisper-1 держите размер в пределах 25 MiB.

  7. Отправьте файл на /v1/audio/transcriptions

    | Сделайте multipart-запрос с файлом и model=whisper-1 и получите JSON-ответ.

  8. Проверьте text и при необходимости запросите таймкоды

    | Проверьте поле text, а для более детального ответа используйте response_format=verbose_json и timestamp_granularities со значением word или segment.

Источники

SOURCES

Вопросы и ответы

FAQ
Можно ли транскрибировать видео напрямую?

Частично: API принимает mp4 и webm как форматы файла, а локальный Whisper декодирует вход через ffmpeg, но whisper-1 помечен как audio input only. Рассчитывайте на работу со звуковой дорожкой.

Какие форматы поддерживаются в API?

Официально поддерживаются flac, mp3, mp4, mpeg, mpga, m4a, ogg, wav и webm.

Можно ли получить таймкоды?

Да. Для API используйте response_format=verbose_json и timestamp_granularities со значением word или segment.

Поддерживается ли streaming в whisper-1?

Нет. В официальных источниках указано, что streaming для whisper-1 не поддерживается.

Сколько стоит транскрибация через OpenAI API?

На странице модели whisper-1 указана цена $0.006 за минуту транскрипции.

Читайте также

LINKS