Cria novos components
This commit is contained in:
64
video_render/media.py
Normal file
64
video_render/media.py
Normal file
@@ -0,0 +1,64 @@
|
||||
from __future__ import annotations
|
||||
|
||||
import logging
|
||||
import shutil
|
||||
from dataclasses import dataclass
|
||||
from pathlib import Path
|
||||
|
||||
from .config import Settings
|
||||
from .ffmpeg import extract_audio_to_wav
|
||||
from .utils import ensure_workspace, remove_paths, sanitize_filename
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
@dataclass
|
||||
class VideoWorkspace:
|
||||
original_filename: str
|
||||
sanitized_name: str
|
||||
workspace_dir: Path
|
||||
output_dir: Path
|
||||
source_path: Path
|
||||
working_video_path: Path
|
||||
audio_path: Path
|
||||
|
||||
|
||||
class MediaPreparer:
|
||||
def __init__(self, settings: Settings) -> None:
|
||||
self.settings = settings
|
||||
|
||||
def prepare(self, filename: str) -> VideoWorkspace:
|
||||
source_path = self.settings.videos_dir / filename
|
||||
if not source_path.exists():
|
||||
raise FileNotFoundError(f"Arquivo de vídeo não encontrado: {source_path}")
|
||||
|
||||
sanitized_name = sanitize_filename(Path(filename).stem)
|
||||
workspace_dir = ensure_workspace(self.settings.videos_dir, sanitized_name)
|
||||
|
||||
existing_children = list(workspace_dir.iterdir())
|
||||
if existing_children:
|
||||
logger.info("Limpando workspace existente para %s", sanitized_name)
|
||||
remove_paths(existing_children)
|
||||
|
||||
destination_name = f"{sanitized_name}{source_path.suffix.lower()}"
|
||||
working_video_path = workspace_dir / destination_name
|
||||
shutil.copy2(source_path, working_video_path)
|
||||
logger.info("Cópia do vídeo criada em %s", working_video_path)
|
||||
|
||||
output_dir = ensure_workspace(self.settings.outputs_dir, sanitized_name)
|
||||
existing_outputs = list(output_dir.iterdir())
|
||||
if existing_outputs:
|
||||
remove_paths(existing_outputs)
|
||||
|
||||
audio_path = workspace_dir / "audio.wav"
|
||||
extract_audio_to_wav(working_video_path, audio_path)
|
||||
|
||||
return VideoWorkspace(
|
||||
original_filename=filename,
|
||||
sanitized_name=sanitized_name,
|
||||
workspace_dir=workspace_dir,
|
||||
output_dir=output_dir,
|
||||
source_path=source_path,
|
||||
working_video_path=working_video_path,
|
||||
audio_path=audio_path,
|
||||
)
|
||||
Reference in New Issue
Block a user