from pydantic import BaseModel from typing import Optional, List, Literal class CustomAssignment(BaseModel): material_path: str start: float # 音频时间轴起点 end: float # 音频时间轴终点 source_start: float = 0.0 # 源视频截取起点 source_end: Optional[float] = None # 源视频截取终点(可选) class GenerateRequest(BaseModel): text: str voice: str = "zh-CN-YunxiNeural" material_path: str material_paths: Optional[List[str]] = None tts_mode: str = "edgetts" ref_audio_id: Optional[str] = None ref_text: Optional[str] = None language: str = "zh-CN" generated_audio_id: Optional[str] = None # 预生成配音 ID(存在时跳过内联 TTS) title: Optional[str] = None enable_subtitles: bool = True subtitle_style_id: Optional[str] = None title_style_id: Optional[str] = None subtitle_font_size: Optional[int] = None title_font_size: Optional[int] = None title_top_margin: Optional[int] = None subtitle_bottom_margin: Optional[int] = None bgm_id: Optional[str] = None bgm_volume: Optional[float] = 0.2 custom_assignments: Optional[List[CustomAssignment]] = None output_aspect_ratio: Literal["9:16", "16:9"] = "9:16"