| from faster_whisper import WhisperModel |
| from .config import MODEL_SIZE, TEMP_DIR |
| from .ffmpeg import extract_audio |
| import os |
|
|
| model = None |
|
|
| os.makedirs(TEMP_DIR, exist_ok=True) |
|
|
|
|
| def get_model(): |
| global model |
|
|
| if model is None: |
| model = WhisperModel( |
| MODEL_SIZE, |
| device="cpu", |
| compute_type="int8" |
| ) |
|
|
| return model |
|
|
|
|
| def transcribe_video(video): |
|
|
| audio = f"{TEMP_DIR}/audio.wav" |
| extract_audio(video, audio) |
|
|
| segments, _ = get_model().transcribe( |
| audio, |
| word_timestamps=True |
| ) |
|
|
| words = [] |
|
|
| for seg in segments: |
| for w in seg.words: |
| words.append({ |
| "start": w.start, |
| "end": w.end, |
| "text": w.word.strip() |
| }) |
|
|
| return words |
|
|