До основного вмісту

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 — він виводить проміжні сегменти в міру розпізнавання, і за ним одразу видно, де модель починає "пливти": повторювані фрази або різкі стрибки таймкодів свідчать про проблему з конкретною ділянкою аудіо, а не з налаштуванням моделі.

Чи була стаття корисною?
← Назад до бази знань Поставити питання підтримці