| import os |
| from typing import List |
| try: |
| from faster_whisper import WhisperModel |
| except ImportError: |
| WhisperModel = None |
|
|
| |
| try: |
| |
| from ..schemas import SentenceTiming, WordTiming |
| except (ImportError, ValueError): |
| |
| import sys |
| parent_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) |
| if parent_dir not in sys.path: |
| sys.path.append(parent_dir) |
| from schemas import SentenceTiming, WordTiming |
|
|
| def transcribe_video(video_path: str, model_size: str = "base") -> List[SentenceTiming]: |
| """ |
| توليد نص تلقائي للفيديو مع توقيتات الكلمات. |
| """ |
| if WhisperModel is None: |
| raise ImportError("faster-whisper is not installed. Please run 'pip install faster-whisper'") |
|
|
| |
| model = WhisperModel(model_size, device="cpu", compute_type="int8") |
| |
| |
| segments, info = model.transcribe(video_path, beam_size=5, word_timestamps=True) |
| |
| results = [] |
| for segment in segments: |
| words_timing = [] |
| if segment.words: |
| for word in segment.words: |
| words_timing.append(WordTiming( |
| word=word.word.strip(), |
| start=word.start, |
| end=word.end, |
| confidence=word.probability |
| )) |
| |
| results.append(SentenceTiming( |
| text=segment.text.strip(), |
| start=segment.start, |
| end=segment.end, |
| words=words_timing |
| )) |
| |
| return results |