Files
main_backend/cpv3/modules/media/schemas.py
T
2026-02-03 02:15:07 +03:00

151 lines
3.3 KiB
Python

from __future__ import annotations
from datetime import datetime
from typing import Literal
from uuid import UUID
from pydantic import ConfigDict
from cpv3.common.schemas import Schema
ArtifactTypeEnum = Literal[
"TRANSCRIPTION_JSON",
"SILENCE_REMOVED_VIDEO",
"THUMBNAIL",
"AUDIO_PROXY",
"RENDERED_VIDEO",
]
class MediaFileRead(Schema):
id: UUID
owner_id: UUID
project_id: UUID | None
duration_seconds: float
frame_rate: float | None
width: int | None
height: int | None
probe_json: dict | None
notes: str | None
meta: dict | None
is_deleted: bool
is_active: bool
created_at: datetime
updated_at: datetime
class MediaFileCreate(Schema):
project_id: UUID | None = None
duration_seconds: float
frame_rate: float | None = None
width: int | None = None
height: int | None = None
probe_json: dict | None = None
notes: str | None = None
meta: dict | None = None
class MediaFileUpdate(Schema):
notes: str | None = None
meta: dict | None = None
is_deleted: bool | None = None
class ArtifactMediaFileRead(Schema):
id: UUID
project_id: UUID | None
file_id: UUID | None
media_file_id: UUID
artifact_type: ArtifactTypeEnum
is_deleted: bool
is_active: bool
created_at: datetime
updated_at: datetime
class ArtifactMediaFileCreate(Schema):
project_id: UUID | None = None
file_id: UUID | None = None
media_file_id: UUID
artifact_type: ArtifactTypeEnum
class ArtifactMediaFileUpdate(Schema):
is_deleted: bool | None = None
class DispositionSchema(Schema):
model_config = ConfigDict(extra="allow")
default: int | None = None
class StreamSchema(Schema):
model_config = ConfigDict(extra="allow")
index: int | None = None
codec_name: str | None = None
codec_long_name: str | None = None
profile: str | None = None
codec_type: str | None = None
codec_tag_string: str | None = None
codec_tag: str | None = None
width: int | None = None
height: int | None = None
id: str | None = None
r_frame_rate: str | None = None
avg_frame_rate: str | None = None
time_base: str | None = None
start_pts: int | None = None
start_time: str | None = None
duration_ts: int | None = None
duration: str | None = None
bit_rate: str | None = None
nb_frames: str | None = None
extradata_size: int | None = None
disposition: DispositionSchema | None = None
tags: dict[str, str] | None = None
class FormatSchema(Schema):
model_config = ConfigDict(extra="allow")
filename: str | None = None
nb_streams: int | None = None
format_name: str | None = None
format_long_name: str | None = None
start_time: str | None = None
duration: str | None = None
size: str | None = None
bit_rate: str | None = None
probe_score: int | None = None
tags: dict[str, str] | None = None
class MediaProbeSchema(Schema):
model_config = ConfigDict(extra="allow")
streams: list[StreamSchema] = []
format: FormatSchema | None = None
class MediaSilencerParams(Schema):
file_path: str
folder: str = ""
min_silence_duration_ms: int = 200
silence_threshold_db: int = 16
padding_ms: int = 100
class MediaConverterParams(Schema):
file_path: str
folder: str = ""