98 lines
2.9 KiB
Python
98 lines
2.9 KiB
Python
from __future__ import annotations
|
|
|
|
from enum import Enum
|
|
|
|
|
|
VIDEO_UPSCALE_CONFIG_KEY = "video_upscale_config"
|
|
VIDEO_UPSCALE_CONFIG_DESCRIPTION = "视频生成超分全局配置"
|
|
VIDEO_UPSCALE_CONFIG_VERSION = 1
|
|
VIDEO_UPSCALE_SOURCE_RETAINED_MARKER = "retained_by_snapshot_config"
|
|
|
|
|
|
class VideoUpscaleProcessorKey(str, Enum):
|
|
LOCAL_FFMPEG_CROP_V1 = "local_ffmpeg_crop_v1"
|
|
VOLC_LARGE_MODEL_V1 = "volc_large_model_v1"
|
|
VOLC_STANDARD_V1 = "volc_standard_v1"
|
|
VOLC_PROFESSIONAL_V1 = "volc_professional_v1"
|
|
|
|
|
|
class VideoUpscaleTaskStatus(str, Enum):
|
|
PENDING = "pending"
|
|
PROCESSING = "processing"
|
|
RETRY_WAITING = "retry_waiting"
|
|
COMPLETED = "completed"
|
|
FAILED = "failed"
|
|
|
|
|
|
class VideoUpscaleStage(str, Enum):
|
|
QUEUED = "upscale_queued"
|
|
SOURCE_READY = "upscale_source_ready"
|
|
LOCAL_PROCESSING = "upscale_local_processing"
|
|
REMOTE_SUBMITTING = "upscale_remote_submitting"
|
|
REMOTE_POLLING = "upscale_remote_polling"
|
|
RESULT_READY = "upscale_result_ready"
|
|
RESULT_DOWNLOADING = "upscale_result_downloading"
|
|
VALIDATING = "upscale_validating"
|
|
GENERATING_COVER = "upscale_generating_cover"
|
|
FINALIZING = "upscale_finalizing"
|
|
RETRY_WAITING = "upscale_retry_waiting"
|
|
COMPLETED = "upscale_completed"
|
|
FAILED = "upscale_failed"
|
|
|
|
|
|
class VideoUpscaleInputSourceType(str, Enum):
|
|
PROVIDER_REMOTE = "provider_remote"
|
|
LOCAL_SIGNED = "local_signed"
|
|
|
|
|
|
class VideoUpscaleProbeStatus(str, Enum):
|
|
NOT_CHECKED = "not_checked"
|
|
SUCCESS = "success"
|
|
FAILED = "failed"
|
|
EXPIRED = "expired"
|
|
UNPARSABLE = "unparsable"
|
|
|
|
|
|
VIDEO_UPSCALE_RESOLUTIONS = ("480p", "720p", "1080p", "2K", "4K")
|
|
VIDEO_UPSCALE_RESOLUTION_SHORT_EDGE = {
|
|
"480p": 480,
|
|
"720p": 720,
|
|
"1080p": 1080,
|
|
"2K": 1440,
|
|
"4K": 2160,
|
|
}
|
|
VIDEO_UPSCALE_RESOLUTION_RANK = {
|
|
resolution: index for index, resolution in enumerate(VIDEO_UPSCALE_RESOLUTIONS, start=1)
|
|
}
|
|
|
|
|
|
def normalize_video_upscale_resolution(value: str | None) -> str:
|
|
text = str(value or "").strip()
|
|
normalized = text.lower()
|
|
aliases = {
|
|
"480p": "480p",
|
|
"720p": "720p",
|
|
"1080p": "1080p",
|
|
"2k": "2K",
|
|
"4k": "4K",
|
|
}
|
|
return aliases.get(normalized, text)
|
|
|
|
|
|
def video_upscale_short_edge_pixels(value: str | None) -> int:
|
|
normalized = normalize_video_upscale_resolution(value)
|
|
try:
|
|
return VIDEO_UPSCALE_RESOLUTION_SHORT_EDGE[normalized]
|
|
except KeyError as exc:
|
|
supported = "、".join(VIDEO_UPSCALE_RESOLUTIONS)
|
|
raise ValueError(f"不支持的视频超分分辨率: {value},仅支持 {supported}") from exc
|
|
|
|
|
|
LOCAL_PROCESSOR_KEYS = {VideoUpscaleProcessorKey.LOCAL_FFMPEG_CROP_V1.value}
|
|
REMOTE_PROCESSOR_KEYS = {
|
|
VideoUpscaleProcessorKey.VOLC_LARGE_MODEL_V1.value,
|
|
VideoUpscaleProcessorKey.VOLC_STANDARD_V1.value,
|
|
VideoUpscaleProcessorKey.VOLC_PROFESSIONAL_V1.value,
|
|
}
|
|
ALL_PROCESSOR_KEYS = LOCAL_PROCESSOR_KEYS | REMOTE_PROCESSOR_KEYS
|