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 # WebVTTPython 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-multipartfrom 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 8000Faster-Whisper: ускорение в 4x
pip install faster-whisperfrom 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.