1
This commit is contained in:
@@ -0,0 +1,46 @@
|
||||
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)
|
||||
Reference in New Issue
Block a user