К основному содержимому

OpenAI Whisper: транскрипция аудио и видео на VPS

AI-агенты на VDS · 19.04.2026 · 4 мин чтения
Иллюстрация к статье «OpenAI Whisper: транскрипция аудио и видео на VPS»

OpenAI Whisper: транскрипция аудио и видео на VPS

OpenAI Whisper — мощная open-source модель распознавания речи, поддерживающая 99 языков включая русский и украинский. Работает полностью локально на VPS без отправки данных в облако.

Установка Whisper

# Требования: Python 3.8+, FFmpeg
apt install -y ffmpeg
pip install openai-whisper

Базовое использование (CLI)

# Транскрипция аудиофайла
whisper audio.mp3 --language Russian --model medium

# Поддерживаемые форматы: mp3, mp4, wav, m4a, webm, ogg
# Модели: tiny (39M), base (74M), small (244M), medium (769M), large (1.5G)

# Вывести в разные форматы
whisper audio.mp3 --output_format txt  # plain text
whisper audio.mp3 --output_format srt  # субтитры
whisper audio.mp3 --output_format vtt  # WebVTT

Python API

import whisper
import json

# Загрузить модель (первый раз скачивается)
model = whisper.load_model("medium")

# Транскрипция
result = model.transcribe("audio.mp3", language="ru", verbose=False)

print(result["text"])

# Получить сегменты с временными метками
for segment in result["segments"]:
    start = round(segment["start"], 2)
    end   = round(segment["end"], 2)
    text  = segment["text"].strip()
    print(f"[{start}s - {end}s] {text}")

REST API сервер на FastAPI

pip install fastapi uvicorn python-multipart
from fastapi import FastAPI, UploadFile, File
import whisper, tempfile, os

app = FastAPI()
model = whisper.load_model("small")

@app.post("/transcribe")
async def transcribe(file: UploadFile = File(...), language: str = "ru"):
    with tempfile.NamedTemporaryFile(delete=False, suffix=".mp3") as tmp:
        content = await file.read()
        tmp.write(content)
        tmp_path = tmp.name
    result = model.transcribe(tmp_path, language=language)
    os.unlink(tmp_path)
    return {"text": result["text"], "segments": result["segments"]}
uvicorn main:app --host 0.0.0.0 --port 8000

Faster-Whisper: ускорение в 4x

pip install faster-whisper
from faster_whisper import WhisperModel

# Загрузить с оптимизацией (float16 для GPU, int8 для CPU)
model = WhisperModel("medium", device="cpu", compute_type="int8")

segments, info = model.transcribe("audio.mp3", language="ru")
for segment in segments:
    print(f"[{segment.start:.2f}s] {segment.text}")
Рекомендации по моделям: Для сервера используйте small (быстро, точно) или medium (лучшее качество). Модель large-v3 — максимальная точность, требует 10 ГБ VRAM.

Частые ошибки

Специфика Whisper в том, что модель не выдаёт явных ошибок на плохом аудио — она уверенно "придумывает" текст там, где не может его разобрать.

RuntimeError: CUDA out of memory при загрузке модели large

Модели large требовательны к видеопамяти. Если сервер не располагает достаточным запасом VRAM, используйте faster-whisper с compute_type="int8" на CPU или выберите модель поменьше — medium в большинстве задач транскрипции речи даёт близкий результат при заметно меньших требованиях.

Галлюцинации и зацикливание на паузах и музыке

На длинных паузах, фоновой музыке или тишине Whisper может начать повторять одну и ту же фразу или "придумывать" текст, которого не было в аудио — это известная особенность модели, а не баг конкретной установки. Снижает риск обрезка тишины перед транскрипцией (например, через ffmpeg с фильтром silenceremove) и использование параметра condition_on_previous_text=False.

Компромисс между скоростью, точностью и требованиями к памяти

Модель Точность Скорость на CPU Требования к памяти
tiny / base Базовая, много ошибок на сложной речи Высокая Минимальные
small Хорошая для большинства задач Средняя Умеренные
medium Высокая Ниже средней Заметные
large-v3 Максимальная Низкая без GPU Существенные, обычно нужен GPU

Когда Whisper не подходит

  • Нужна транскрипция в реальном времени с задержкой в доли секунды — базовый Whisper обрабатывает аудио целиком или крупными кусками, для realtime нужны специализированные потоковые решения.
  • Аудио сильно зашумлено или записано с нескольких говорящих одновременно без разделения каналов — точность распознавания заметно падает вне зависимости от размера модели.
  • Нужна диаризация "кто говорит" из коробки — сам Whisper её не делает, требуется отдельная библиотека поверх транскрипции.
  • Сервер без GPU и без запаса CPU-ядер, а объём аудио большой — обработка растянется настолько, что проще воспользоваться внешним API.

Проверка качества транскрипции

whisper sample.mp3 --model small --language Russian --output_format txt --verbose True

Прогоните короткий контрольный файл с заранее известным текстом и сверьте результат вручную. Обратите внимание на параметр --verbose True — он выводит промежуточные сегменты по мере распознавания, и по нему сразу видно, где модель начинает "плыть": повторяющиеся фразы или резкие скачки таймкодов говорят о проблеме с конкретным участком аудио, а не с настройкой модели.

Статья помогла?
← Назад в базу знаний Задать вопрос поддержке