Files
2026-04-03 22:18:24 +05:00

69 lines
1.5 KiB
Python

import os
import subprocess
import time
import uuid
from app.config import settings
_model = None
def _get_model():
global _model
if _model is None:
from faster_whisper import WhisperModel
_model = WhisperModel(
settings.whisper_model,
device=settings.whisper_device,
compute_type=settings.whisper_compute_type,
)
return _model
def extract_audio(video_path: str) -> str:
audio_path = os.path.join(
settings.upload_dir, f"{uuid.uuid4().hex}.wav"
)
subprocess.run(
[
"ffmpeg", "-i", video_path,
"-vn", "-acodec", "pcm_s16le",
"-ar", "16000", "-ac", "1",
audio_path, "-y",
],
check=True,
capture_output=True,
)
return audio_path
def transcribe_audio(audio_path: str) -> dict:
model = _get_model()
start_time = time.time()
segments_iter, info = model.transcribe(
audio_path,
beam_size=5,
language=None,
vad_filter=True,
)
segments = []
full_text_parts = []
for segment in segments_iter:
segments.append({
"start": round(segment.start, 2),
"end": round(segment.end, 2),
"text": segment.text.strip(),
})
full_text_parts.append(segment.text.strip())
processing_time = time.time() - start_time
return {
"text": " ".join(full_text_parts),
"segments": segments,
"language": info.language,
"processing_time": round(processing_time, 2),
}