feat: mvp
This commit is contained in:
68
dubbing/models.py
Normal file
68
dubbing/models.py
Normal file
@@ -0,0 +1,68 @@
|
||||
from enum import Enum
|
||||
from pydantic import BaseModel
|
||||
from pathlib import Path
|
||||
|
||||
|
||||
class Language(str, Enum):
|
||||
RU = "ru"
|
||||
EN = "en"
|
||||
EN_RU = "en_ru" # Chinese -> English -> Russian
|
||||
|
||||
|
||||
class Segment(BaseModel):
|
||||
start: int
|
||||
end: int
|
||||
text: str
|
||||
|
||||
|
||||
class TranslatedSegment(Segment):
|
||||
translated: str
|
||||
|
||||
|
||||
class Translation(BaseModel):
|
||||
id: int
|
||||
translated: str
|
||||
|
||||
|
||||
class TranslationBatch(BaseModel):
|
||||
translations: list[Translation]
|
||||
|
||||
|
||||
class TTSSegment(TranslatedSegment):
|
||||
audio_path: Path
|
||||
audio_duration_ms: float
|
||||
|
||||
|
||||
class ProjectPaths(BaseModel):
|
||||
root: Path
|
||||
source_video: Path
|
||||
source_audio: Path
|
||||
segments_json: Path
|
||||
translated_json: Path
|
||||
tts_dir: Path
|
||||
dubbed_audio: Path
|
||||
result_video: Path
|
||||
|
||||
model_config = {"arbitrary_types_allowed": True}
|
||||
|
||||
@classmethod
|
||||
def from_project(
|
||||
cls, project_dir: Path, language: Language = Language.RU
|
||||
) -> "ProjectPaths":
|
||||
lang = language.value
|
||||
return cls(
|
||||
root=project_dir,
|
||||
source_video=project_dir / "source.mp4",
|
||||
source_audio=project_dir / "source.mp3",
|
||||
segments_json=project_dir / "segments.json",
|
||||
translated_json=project_dir / f"translated_{lang}.json",
|
||||
tts_dir=project_dir / f"tts_{lang}",
|
||||
dubbed_audio=project_dir / f"dubbed_{lang}.mp3",
|
||||
result_video=project_dir / f"result_{lang}.mkv",
|
||||
)
|
||||
|
||||
|
||||
class StepStatus(BaseModel):
|
||||
name: str
|
||||
cached: bool
|
||||
output_exists: bool
|
||||
Reference in New Issue
Block a user