django and fastapi apps
This commit is contained in:
128
schema/models/presets.py
Normal file
128
schema/models/presets.py
Normal file
@@ -0,0 +1,128 @@
|
||||
"""
|
||||
TranscodePreset Schema Definition
|
||||
|
||||
Source of truth for preset data model.
|
||||
"""
|
||||
|
||||
from dataclasses import dataclass, field
|
||||
from datetime import datetime
|
||||
from typing import List, Optional
|
||||
from uuid import UUID
|
||||
|
||||
|
||||
@dataclass
|
||||
class TranscodePreset:
|
||||
"""
|
||||
A reusable transcoding configuration (like Handbrake presets).
|
||||
|
||||
Presets can be builtin (shipped with the app) or user-created.
|
||||
"""
|
||||
|
||||
id: UUID
|
||||
name: str
|
||||
description: str = ""
|
||||
is_builtin: bool = False
|
||||
|
||||
# Output container
|
||||
container: str = "mp4" # mp4, mkv, webm, mov, avi
|
||||
|
||||
# Video settings
|
||||
video_codec: str = "libx264"
|
||||
video_bitrate: Optional[str] = None # "2M", "5000k"
|
||||
video_crf: Optional[int] = None # Quality-based (0-51 for x264)
|
||||
video_preset: Optional[str] = None # ultrafast...veryslow
|
||||
resolution: Optional[str] = None # "1920x1080", "1280x720"
|
||||
framerate: Optional[float] = None
|
||||
|
||||
# Audio settings
|
||||
audio_codec: str = "aac"
|
||||
audio_bitrate: Optional[str] = None # "128k", "320k"
|
||||
audio_channels: Optional[int] = None # 2 for stereo
|
||||
audio_samplerate: Optional[int] = None # 44100, 48000
|
||||
|
||||
# Advanced: extra FFmpeg arguments
|
||||
extra_args: List[str] = field(default_factory=list)
|
||||
|
||||
# Timestamps
|
||||
created_at: Optional[datetime] = None
|
||||
updated_at: Optional[datetime] = None
|
||||
|
||||
|
||||
BUILTIN_PRESETS = [
|
||||
{
|
||||
"name": "DaVinci Resolve",
|
||||
"description": "MPEG-4 (xvid) + MP3 - Compatible with DaVinci Resolve Free",
|
||||
"container": "avi",
|
||||
"video_codec": "mpeg4",
|
||||
"video_crf": 5,
|
||||
"audio_codec": "libmp3lame",
|
||||
"audio_bitrate": "320k",
|
||||
"audio_samplerate": 48000,
|
||||
"extra_args": ["-vtag", "xvid", "-pix_fmt", "yuv420p"],
|
||||
},
|
||||
{
|
||||
"name": "Copy (Trim Only)",
|
||||
"description": "Stream copy - No transcoding, fast trimming only",
|
||||
"container": "mp4",
|
||||
"video_codec": "copy",
|
||||
"audio_codec": "copy",
|
||||
},
|
||||
{
|
||||
"name": "Web H.264",
|
||||
"description": "H.264 + AAC - General web playback",
|
||||
"container": "mp4",
|
||||
"video_codec": "libx264",
|
||||
"video_crf": 23,
|
||||
"video_preset": "medium",
|
||||
"audio_codec": "aac",
|
||||
"audio_bitrate": "128k",
|
||||
},
|
||||
{
|
||||
"name": "Web H.265",
|
||||
"description": "HEVC + AAC - Smaller files, modern browsers",
|
||||
"container": "mp4",
|
||||
"video_codec": "libx265",
|
||||
"video_crf": 28,
|
||||
"video_preset": "medium",
|
||||
"audio_codec": "aac",
|
||||
"audio_bitrate": "128k",
|
||||
},
|
||||
{
|
||||
"name": "DNxHR HQ",
|
||||
"description": "DNxHR High Quality - Professional editing",
|
||||
"container": "mov",
|
||||
"video_codec": "dnxhd",
|
||||
"audio_codec": "pcm_s16le",
|
||||
"audio_samplerate": 48000,
|
||||
"extra_args": ["-profile:v", "dnxhr_hq", "-pix_fmt", "yuv422p"],
|
||||
},
|
||||
{
|
||||
"name": "H.264 NVENC",
|
||||
"description": "NVIDIA GPU encoding - Fast H.264",
|
||||
"container": "mp4",
|
||||
"video_codec": "h264_nvenc",
|
||||
"video_bitrate": "10M",
|
||||
"audio_codec": "aac",
|
||||
"audio_bitrate": "192k",
|
||||
"extra_args": ["-preset", "p4", "-rc", "vbr", "-cq", "19"],
|
||||
},
|
||||
{
|
||||
"name": "HEVC NVENC",
|
||||
"description": "NVIDIA GPU encoding - HEVC/H.265",
|
||||
"container": "mp4",
|
||||
"video_codec": "hevc_nvenc",
|
||||
"video_bitrate": "8M",
|
||||
"audio_codec": "aac",
|
||||
"audio_bitrate": "192k",
|
||||
"extra_args": ["-preset", "p4", "-rc", "vbr", "-cq", "23"],
|
||||
},
|
||||
{
|
||||
"name": "Archive ProRes",
|
||||
"description": "Apple ProRes 422 HQ - Archival quality",
|
||||
"container": "mov",
|
||||
"video_codec": "prores_ks",
|
||||
"audio_codec": "pcm_s16le",
|
||||
"audio_samplerate": 48000,
|
||||
"extra_args": ["-profile:v", "3"], # ProRes 422 HQ
|
||||
},
|
||||
]
|
||||
Reference in New Issue
Block a user