from __future__ import annotations import subprocess from pathlib import Path from backend.app.services.processors.audio_processor import AudioProcessor from backend.app.services.processors.base import ProcessedContent class VideoProcessor: def __init__(self, tmp_dir: Path): self.tmp_dir = tmp_dir def process(self, path: Path) -> ProcessedContent: self.tmp_dir.mkdir(parents=True, exist_ok=True) audio_path = self.tmp_dir / f"{path.stem}.wav" try: subprocess.run( [ "ffmpeg", "-y", "-i", str(path), "-vn", "-acodec", "pcm_s16le", "-ar", "16000", "-ac", "1", str(audio_path), ], check=True, capture_output=True, text=True, ) processed = AudioProcessor().process(audio_path) processed.title = f"Transcripcion {path.stem}" processed.processor = "ffmpeg+deepgram" return processed except FileNotFoundError as exc: raise RuntimeError("ffmpeg no esta instalado o no esta disponible en PATH") from exc except subprocess.CalledProcessError as exc: raise RuntimeError(f"No se pudo extraer audio del video: {exc.stderr}") from exc finally: audio_path.unlink(missing_ok=True)