285 lines
7.9 KiB
Python
285 lines
7.9 KiB
Python
from enum import Enum
|
|
from typing import Any, Optional
|
|
|
|
from pydantic import BaseModel
|
|
import warnings
|
|
|
|
# 忽略 Pydantic 的特定警告
|
|
warnings.filterwarnings("ignore", category=UserWarning, message="Field name.*shadows an attribute in parent.*")
|
|
|
|
|
|
class VideoConcatMode(str, Enum):
|
|
random = "random"
|
|
sequential = "sequential"
|
|
|
|
|
|
class VideoAspect(str, Enum):
|
|
landscape = "16:9"
|
|
portrait = "9:16"
|
|
square = "1:1"
|
|
|
|
def to_resolution(self):
|
|
if self == VideoAspect.landscape.value:
|
|
return 1920, 1080
|
|
elif self == VideoAspect.portrait.value:
|
|
return 1080, 1920
|
|
elif self == VideoAspect.square.value:
|
|
return 1080, 1080
|
|
return 1080, 1920
|
|
|
|
|
|
class MaterialInfo:
|
|
provider: str = "pexels"
|
|
url: str = ""
|
|
duration: int = 0
|
|
|
|
|
|
# VoiceNames = [
|
|
# # zh-CN
|
|
# "female-zh-CN-XiaoxiaoNeural",
|
|
# "female-zh-CN-XiaoyiNeural",
|
|
# "female-zh-CN-liaoning-XiaobeiNeural",
|
|
# "female-zh-CN-shaanxi-XiaoniNeural",
|
|
#
|
|
# "male-zh-CN-YunjianNeural",
|
|
# "male-zh-CN-YunxiNeural",
|
|
# "male-zh-CN-YunxiaNeural",
|
|
# "male-zh-CN-YunyangNeural",
|
|
#
|
|
# # "female-zh-HK-HiuGaaiNeural",
|
|
# # "female-zh-HK-HiuMaanNeural",
|
|
# # "male-zh-HK-WanLungNeural",
|
|
# #
|
|
# # "female-zh-TW-HsiaoChenNeural",
|
|
# # "female-zh-TW-HsiaoYuNeural",
|
|
# # "male-zh-TW-YunJheNeural",
|
|
#
|
|
# # en-US
|
|
#
|
|
# "female-en-US-AnaNeural",
|
|
# "female-en-US-AriaNeural",
|
|
# "female-en-US-AvaNeural",
|
|
# "female-en-US-EmmaNeural",
|
|
# "female-en-US-JennyNeural",
|
|
# "female-en-US-MichelleNeural",
|
|
#
|
|
# "male-en-US-AndrewNeural",
|
|
# "male-en-US-BrianNeural",
|
|
# "male-en-US-ChristopherNeural",
|
|
# "male-en-US-EricNeural",
|
|
# "male-en-US-GuyNeural",
|
|
# "male-en-US-RogerNeural",
|
|
# "male-en-US-SteffanNeural",
|
|
# ]
|
|
|
|
|
|
class VideoParams(BaseModel):
|
|
"""
|
|
{
|
|
"video_subject": "",
|
|
"video_aspect": "横屏 16:9(西瓜视频)",
|
|
"voice_name": "女生-晓晓",
|
|
"bgm_name": "random",
|
|
"font_name": "STHeitiMedium 黑体-中",
|
|
"text_color": "#FFFFFF",
|
|
"font_size": 60,
|
|
"stroke_color": "#000000",
|
|
"stroke_width": 1.5
|
|
}
|
|
"""
|
|
video_subject: str
|
|
video_script: str = "" # 用于生成视频的脚本
|
|
video_terms: Optional[str | list] = None # 用于生成视频的关键词
|
|
video_aspect: Optional[VideoAspect] = VideoAspect.portrait.value
|
|
video_concat_mode: Optional[VideoConcatMode] = VideoConcatMode.random.value
|
|
video_clip_duration: Optional[int] = 5
|
|
video_count: Optional[int] = 1
|
|
|
|
video_language: Optional[str] = "" # auto detect
|
|
|
|
voice_name: Optional[str] = ""
|
|
voice_volume: Optional[float] = 1.0
|
|
bgm_type: Optional[str] = "random"
|
|
bgm_file: Optional[str] = ""
|
|
bgm_volume: Optional[float] = 0.2
|
|
|
|
subtitle_enabled: Optional[bool] = True
|
|
subtitle_position: Optional[str] = "bottom" # top, bottom, center
|
|
font_name: Optional[str] = "STHeitiMedium.ttc"
|
|
text_fore_color: Optional[str] = "#FFFFFF"
|
|
text_background_color: Optional[str] = "transparent"
|
|
|
|
font_size: int = 60
|
|
stroke_color: Optional[str] = "#000000"
|
|
stroke_width: float = 1.5
|
|
n_threads: Optional[int] = 2
|
|
paragraph_number: Optional[int] = 1
|
|
|
|
|
|
class VideoScriptParams:
|
|
"""
|
|
{
|
|
"video_subject": "春天的花海",
|
|
"video_language": "",
|
|
"paragraph_number": 1
|
|
}
|
|
"""
|
|
video_subject: Optional[str] = "春天的花海"
|
|
video_language: Optional[str] = ""
|
|
paragraph_number: Optional[int] = 1
|
|
|
|
|
|
class VideoTermsParams:
|
|
"""
|
|
{
|
|
"video_subject": "",
|
|
"video_script": "",
|
|
"amount": 5
|
|
}
|
|
"""
|
|
video_subject: Optional[str] = "春天的花海"
|
|
video_script: Optional[str] = "春天的花海,如诗如画般展现在眼前。万物复苏的季节里,大地披上了一袭绚丽多彩的盛装。金黄的迎春、粉嫩的樱花、洁白的梨花、艳丽的郁金香……"
|
|
amount: Optional[int] = 5
|
|
|
|
|
|
class BaseResponse(BaseModel):
|
|
status: int = 200
|
|
message: Optional[str] = 'success'
|
|
data: Any = None
|
|
|
|
|
|
class TaskVideoRequest(VideoParams, BaseModel):
|
|
pass
|
|
|
|
|
|
class TaskQueryRequest(BaseModel):
|
|
pass
|
|
|
|
|
|
class VideoScriptRequest(VideoScriptParams, BaseModel):
|
|
pass
|
|
|
|
|
|
class VideoTermsRequest(VideoTermsParams, BaseModel):
|
|
pass
|
|
|
|
|
|
######################################################################################################
|
|
######################################################################################################
|
|
######################################################################################################
|
|
######################################################################################################
|
|
class TaskResponse(BaseResponse):
|
|
class TaskResponseData(BaseModel):
|
|
task_id: str
|
|
|
|
data: TaskResponseData
|
|
|
|
class Config:
|
|
json_schema_extra = {
|
|
"example": {
|
|
"status": 200,
|
|
"message": "success",
|
|
"data": {
|
|
"task_id": "6c85c8cc-a77a-42b9-bc30-947815aa0558"
|
|
}
|
|
},
|
|
}
|
|
|
|
|
|
class TaskQueryResponse(BaseResponse):
|
|
class Config:
|
|
json_schema_extra = {
|
|
"example": {
|
|
"status": 200,
|
|
"message": "success",
|
|
"data": {
|
|
"state": 1,
|
|
"progress": 100,
|
|
"videos": [
|
|
"http://127.0.0.1:8080/tasks/6c85c8cc-a77a-42b9-bc30-947815aa0558/final-1.mp4"
|
|
],
|
|
"combined_videos": [
|
|
"http://127.0.0.1:8080/tasks/6c85c8cc-a77a-42b9-bc30-947815aa0558/combined-1.mp4"
|
|
]
|
|
}
|
|
},
|
|
}
|
|
|
|
|
|
class TaskDeletionResponse(BaseResponse):
|
|
class Config:
|
|
json_schema_extra = {
|
|
"example": {
|
|
"status": 200,
|
|
"message": "success",
|
|
"data": {
|
|
"state": 1,
|
|
"progress": 100,
|
|
"videos": [
|
|
"http://127.0.0.1:8080/tasks/6c85c8cc-a77a-42b9-bc30-947815aa0558/final-1.mp4"
|
|
],
|
|
"combined_videos": [
|
|
"http://127.0.0.1:8080/tasks/6c85c8cc-a77a-42b9-bc30-947815aa0558/combined-1.mp4"
|
|
]
|
|
}
|
|
},
|
|
}
|
|
|
|
|
|
class VideoScriptResponse(BaseResponse):
|
|
class Config:
|
|
json_schema_extra = {
|
|
"example": {
|
|
"status": 200,
|
|
"message": "success",
|
|
"data": {
|
|
"video_script": "春天的花海,是大自然的一幅美丽画卷。在这个季节里,大地复苏,万物生长,花朵争相绽放,形成了一片五彩斑斓的花海..."
|
|
}
|
|
},
|
|
}
|
|
|
|
|
|
class VideoTermsResponse(BaseResponse):
|
|
class Config:
|
|
json_schema_extra = {
|
|
"example": {
|
|
"status": 200,
|
|
"message": "success",
|
|
"data": {
|
|
"video_terms": ["sky", "tree"]
|
|
}
|
|
},
|
|
}
|
|
|
|
|
|
class BgmRetrieveResponse(BaseResponse):
|
|
class Config:
|
|
json_schema_extra = {
|
|
"example": {
|
|
"status": 200,
|
|
"message": "success",
|
|
"data": {
|
|
"files": [
|
|
{
|
|
"name": "output013.mp3",
|
|
"size": 1891269,
|
|
"file": "/MoneyPrinterTurbo/resource/songs/output013.mp3"
|
|
}
|
|
]
|
|
}
|
|
},
|
|
}
|
|
|
|
|
|
class BgmUploadResponse(BaseResponse):
|
|
class Config:
|
|
json_schema_extra = {
|
|
"example": {
|
|
"status": 200,
|
|
"message": "success",
|
|
"data": {
|
|
"file": "/MoneyPrinterTurbo/resource/songs/example.mp3"
|
|
}
|
|
},
|
|
}
|