mirror of
https://github.com/Hommy-master/capcut-mate.git
synced 2026-08-30 17:48:47 +08:00
基础代码上库。
This commit is contained in:
@@ -0,0 +1,3 @@
|
||||
*.pyc
|
||||
.venv
|
||||
./dist
|
||||
+40
@@ -0,0 +1,40 @@
|
||||
FROM python:3.11-slim
|
||||
|
||||
# 使用pip安装uv
|
||||
RUN pip install --no-cache-dir uv
|
||||
|
||||
# 验证uv安装
|
||||
RUN uv --version
|
||||
|
||||
# 设置工作目录
|
||||
WORKDIR /app
|
||||
|
||||
# 创建非root用户并提前配置缓存目录
|
||||
RUN addgroup --system --gid 1001 appgroup && \
|
||||
adduser --system --uid 1001 --gid 1001 --home /home/appuser appuser && \
|
||||
# 创建uv缓存目录并设置权限
|
||||
mkdir -p /home/appuser/.cache/uv && \
|
||||
chown -R appuser:appgroup /home/appuser/.cache
|
||||
|
||||
# 从CI构建的dist目录复制所有文件
|
||||
COPY dist/ .
|
||||
|
||||
# 安装依赖(仍使用root用户确保权限)
|
||||
RUN uv sync && \
|
||||
chown -R appuser:appgroup /app
|
||||
|
||||
# 切换到非root用户
|
||||
USER appuser
|
||||
|
||||
# 暴露应用端口
|
||||
EXPOSE 60000
|
||||
|
||||
# 设置环境变量,指定uv缓存目录和用户主目录
|
||||
ENV PYTHONDONTWRITEBYTECODE=1 \
|
||||
PYTHONUNBUFFERED=1 \
|
||||
PATH="/app/.venv/bin:$PATH" \
|
||||
HOME="/home/appuser" \
|
||||
UV_CACHE_DIR="/home/appuser/.cache/uv"
|
||||
|
||||
# 启动命令
|
||||
CMD ["uv", "run", "main.py", "--workers", "4"]
|
||||
@@ -1,2 +1,53 @@
|
||||
# capcut-mate
|
||||
剪映小助手,生成剪映草稿
|
||||
# CapCut Mate API
|
||||
|
||||
## 项目简介
|
||||
CapCut Mate API 是一个基于 FastAPI 构建的剪映小助手
|
||||
|
||||
## 功能特点
|
||||
- 用户管理:创建、查询、更新和删除用户
|
||||
- 数据验证:使用 Pydantic 进行请求数据验证
|
||||
- 安全认证:密码加密存储
|
||||
- RESTful API 设计:符合标准的 API 设计规范
|
||||
- 自动生成文档:FastAPI 自动生成交互式 API 文档
|
||||
|
||||
## 技术栈
|
||||
- Python 3.11+
|
||||
- FastAPI:高性能的 Web 框架
|
||||
- Pydantic:数据验证和模型定义
|
||||
- Passlib:密码加密
|
||||
- Uvicorn:ASGI 服务器
|
||||
- uv:Python 包管理器和项目管理工具
|
||||
|
||||
## 快速开始
|
||||
|
||||
### 前提条件
|
||||
- Python 3.11
|
||||
- uv:Python 包管理器和项目管理工具
|
||||
安装方法:
|
||||
- windows
|
||||
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
|
||||
- linux
|
||||
sh -c "$(curl -LsSf https://astral.sh/uv/install.sh)"
|
||||
|
||||
### 安装步骤
|
||||
1. 克隆项目
|
||||
```bash
|
||||
git clone git@github.com:Hommy-master/capcut-mate.git
|
||||
cd capcut-mate
|
||||
```
|
||||
|
||||
2. 安装依赖
|
||||
```bash
|
||||
# 安装依赖
|
||||
uv sync
|
||||
```
|
||||
|
||||
3. 启动服务器
|
||||
```bash
|
||||
uv run main.py
|
||||
```
|
||||
|
||||
4. 容器部署
|
||||
```bash
|
||||
docker pull gogoshine/capcut-mate:latest
|
||||
```
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
# 项目常量定义
|
||||
import os
|
||||
|
||||
|
||||
# 确保路径使用正确的操作系统分隔符
|
||||
DRAFT_DIR = os.path.join(os.path.dirname(__file__), "output", "draft")
|
||||
DRAFT_URL = "https://capcut.jcaigc.cn/draft"
|
||||
@@ -0,0 +1,26 @@
|
||||
services:
|
||||
capcut-mate:
|
||||
image: gogoshine/capcut-mate:latest
|
||||
#image: gogoshine/capcut-mate:sha-190a61f
|
||||
ports:
|
||||
- "60000:60000" # 将主机的 60000 端口映射到容器内部的 60000 端口
|
||||
volumes:
|
||||
- /opt/1panel/apps/openresty/openresty/www/sites/cm.jcaigc.cn/index/output:/app/output # 挂载配置文件目录
|
||||
- /etc/localtime:/etc/localtime:ro # 挂载主机时区
|
||||
- /etc/timezone:/etc/timezone:ro # 挂载时区名称(可选)
|
||||
extra_hosts: # 用于容器内访问主机的服务
|
||||
- "host.docker.internal:10.0.16.6"
|
||||
dns:
|
||||
- 8.8.8.8 # Google 主 DNS
|
||||
- 8.8.4.4 # Google 备用 DNS
|
||||
# - 1.1.1.1 # Cloudflare DNS (备选)
|
||||
environment:
|
||||
# 生成资源的下载地址
|
||||
- URL=https://assets.jcaigc.cn
|
||||
mem_limit: 1G # 内存限制
|
||||
memswap_limit: 2G # 总内存(物理内存 + Swap)限制
|
||||
cpus: '1.6' # CPU使用率限制为150%,即容器最多可以使用1.5个完整的CPU核心
|
||||
oom_score_adj: -500 # 调整 OOM 杀手优先级
|
||||
restart: unless-stopped # 除非手动停止,否则总是重启容器
|
||||
container_name: capcut-mate # 这里指容器名称,非必需,不指定时,名称为:<项目名称>-<服务名称>-<序号>
|
||||
#entrypoint: ["/bin/sh", "-c", "sleep 10000"]
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,63 @@
|
||||
from fastapi import FastAPI
|
||||
from src.router import v1_router
|
||||
from src.utils.logger import logger
|
||||
from src import middlewares
|
||||
from fastapi.exceptions import RequestValidationError
|
||||
from fastapi.responses import JSONResponse
|
||||
from fastapi import Request, status
|
||||
from src.constants.errcode import ErrCode
|
||||
|
||||
|
||||
# 0. 创建 FastAPI 应用
|
||||
app = FastAPI(title="CapCut Mate API", version="1.0")
|
||||
|
||||
# 1. 注册路由
|
||||
app.include_router(v1_router, prefix="/openapi", tags=["capcut-mate"])
|
||||
|
||||
# 2. 添加中间件
|
||||
app.middleware("http")(middlewares.prepare_middleware)
|
||||
|
||||
# 3. 异常处理:参数校验错误
|
||||
@app.exception_handler(RequestValidationError)
|
||||
async def validation_exception_handler(request: Request, exc: RequestValidationError) -> JSONResponse:
|
||||
"""自定义参数校验错误处理器"""
|
||||
# 1. 拼接完整错误信息
|
||||
error_messages = []
|
||||
for error in exc.errors():
|
||||
field = ".".join(str(loc) for loc in error["loc"])
|
||||
error_type = error["type"]
|
||||
error_msg = error["msg"]
|
||||
# 组合字段+错误类型+详情信息
|
||||
error_messages.append(f"{field} ({error_type}): {error_msg}")
|
||||
|
||||
# 2. 构建统一响应结构
|
||||
full_message = "; ".join(error_messages) # 用分号分隔多个错误
|
||||
return JSONResponse(
|
||||
status_code=status.HTTP_200_OK,
|
||||
content=ErrCode.PARAM_VALIDATION_FAILED.as_dict(full_message)
|
||||
)
|
||||
|
||||
# 异常处理:其它异常
|
||||
@app.exception_handler(Exception)
|
||||
async def handle_errors(request, exc):
|
||||
return JSONResponse(
|
||||
status_code=status.HTTP_200_OK,
|
||||
content=ErrCode.INTERNAL_SERVER_ERROR.as_dict()
|
||||
)
|
||||
|
||||
# 4. 打印所有路由
|
||||
for r in app.routes:
|
||||
# 1. 取 HTTP 方法列表
|
||||
methods = getattr(r, "methods", None) or [getattr(r, "method", "WS")]
|
||||
# 2. 取路径
|
||||
path = r.path
|
||||
# 3. 取函数名
|
||||
name = r.name
|
||||
logger.info("Route: %s %s -> %s", ",".join(sorted(methods)), path, name)
|
||||
|
||||
logger.info("CapCut Mate API")
|
||||
|
||||
# 5. 启动
|
||||
if __name__ == "__main__":
|
||||
import uvicorn
|
||||
uvicorn.run(app, host="0.0.0.0", port=60000, log_config=None, log_level="info")
|
||||
@@ -0,0 +1,17 @@
|
||||
[project]
|
||||
name = "capcut-mate"
|
||||
version = "1.0.0"
|
||||
description = "CapCut Mate API Service"
|
||||
authors = [
|
||||
{ name = "Hommy", email = "taohongmin51@gmail.com" }
|
||||
]
|
||||
requires-python = ">=3.11"
|
||||
|
||||
dependencies = [
|
||||
"email-validator>=2.2.0",
|
||||
"fastapi>=0.100.0",
|
||||
"pymediainfo>=7.0.1",
|
||||
"requests>=2.32.5",
|
||||
"uiautomation>=2.0.29",
|
||||
"uvicorn[standard]>=0.35.0",
|
||||
]
|
||||
@@ -0,0 +1,2 @@
|
||||
|
||||
# 空文件,标识src为Python包
|
||||
@@ -0,0 +1 @@
|
||||
# 基本常量定义
|
||||
@@ -0,0 +1,25 @@
|
||||
from enum import Enum
|
||||
|
||||
class ErrCode(Enum):
|
||||
"""错误码枚举类(符合Python 3.4+标准)"""
|
||||
# ===== 基础错误码 (1000-1999) =====
|
||||
SUCCESS = (0, "操作成功")
|
||||
PARAM_VALIDATION_FAILED = (1001, "参数校验失败")
|
||||
RESOURCE_NOT_FOUND = (1002, "资源不存在")
|
||||
PERMISSION_DENIED = (1003, "权限不足")
|
||||
AUTHENTICATION_FAILED = (1004, "认证失败")
|
||||
|
||||
# ===== 业务错误码 (2000-2999) =====
|
||||
DRAFT_CREATE_FAILED = (2001, "草稿创建失败")
|
||||
|
||||
# ===== 系统错误码 (9000-9999) =====
|
||||
INTERNAL_SERVER_ERROR = (9998, "系统内部错误")
|
||||
UNKNOWN_ERROR = (9999, "未知异常")
|
||||
|
||||
def __init__(self, code: int, message: str):
|
||||
self.code = code
|
||||
self.message = message
|
||||
|
||||
def as_dict(self, detail: str = None) -> dict:
|
||||
"""转换为API响应格式"""
|
||||
return {"code": self.code, "message": self.message + f"({detail})"} if detail else {"code": self.code, "message": self.message}
|
||||
@@ -0,0 +1,4 @@
|
||||
# 中间件实现
|
||||
from .prepare import prepare_middleware
|
||||
|
||||
__all__ = ["prepare_middleware"]
|
||||
@@ -0,0 +1,15 @@
|
||||
# 环境初始化中间件
|
||||
from fastapi import Request
|
||||
import config
|
||||
import os
|
||||
from datetime import datetime
|
||||
|
||||
|
||||
# 请求前的准备工作,如:创建草稿目录
|
||||
async def prepare_middleware(request: Request, call_next):
|
||||
# 递归创建目录,如果目录存在,就直接跳过创建
|
||||
os.makedirs(config.DRAFT_DIR, exist_ok=True)
|
||||
|
||||
# 继续处理请求
|
||||
response = await call_next(request)
|
||||
return response
|
||||
@@ -0,0 +1,277 @@
|
||||
import warnings
|
||||
import sys
|
||||
|
||||
from .local_materials import CropSettings, VideoMaterial, AudioMaterial
|
||||
from .keyframe import KeyframeProperty
|
||||
|
||||
from .time_util import Timerange
|
||||
from .audio_segment import AudioSegment
|
||||
from .video_segment import VideoSegment, StickerSegment, ClipSettings
|
||||
from .effect_segment import EffectSegment, FilterSegment
|
||||
from .text_segment import TextSegment, TextStyle, TextBorder, TextBackground, TextShadow
|
||||
|
||||
from .metadata import FontType
|
||||
from .metadata import MaskType
|
||||
from .metadata import TransitionType, FilterType
|
||||
from .metadata import IntroType, OutroType, GroupAnimationType
|
||||
from .metadata import TextIntro, TextOutro, TextLoopAnim
|
||||
from .metadata import AudioSceneEffectType
|
||||
from .metadata import VideoSceneEffectType, VideoCharacterEffectType
|
||||
|
||||
from .track import TrackType
|
||||
from .template_mode import ShrinkMode, ExtendMode
|
||||
from .script_file import ScriptFile
|
||||
from .draft_folder import DraftFolder
|
||||
|
||||
# 仅在Windows系统下导入jianying_controller
|
||||
ISWIN = (sys.platform == 'win32')
|
||||
if ISWIN:
|
||||
from .jianying_controller import JianyingController, ExportResolution, ExportFramerate
|
||||
|
||||
from .time_util import SEC, tim, trange
|
||||
|
||||
|
||||
def _deprecated_class_warning(old_name: str, new_name: str):
|
||||
warnings.warn(
|
||||
f"{old_name} is deprecated and will be removed in a future version. "
|
||||
f"Use {new_name} instead.",
|
||||
DeprecationWarning,
|
||||
stacklevel=3
|
||||
)
|
||||
|
||||
# 保持向后兼容
|
||||
class Script_file:
|
||||
"""Deprecated: Use ScriptFile instead."""
|
||||
def __new__(cls, *args, **kwargs):
|
||||
_deprecated_class_warning("Script_file", "ScriptFile")
|
||||
return ScriptFile(*args, **kwargs)
|
||||
|
||||
class Draft_folder:
|
||||
"""Deprecated: Use DraftFolder instead."""
|
||||
def __new__(cls, *args, **kwargs):
|
||||
_deprecated_class_warning("Draft_folder", "DraftFolder")
|
||||
return DraftFolder(*args, **kwargs)
|
||||
|
||||
class Shrink_mode:
|
||||
"""Deprecated: Use ShrinkMode instead."""
|
||||
def __new__(cls, *args, **kwargs):
|
||||
_deprecated_class_warning("Shrink_mode", "ShrinkMode")
|
||||
return ShrinkMode(*args, **kwargs)
|
||||
|
||||
class Extend_mode:
|
||||
"""Deprecated: Use ExtendMode instead."""
|
||||
def __new__(cls, *args, **kwargs):
|
||||
_deprecated_class_warning("Extend_mode", "ExtendMode")
|
||||
return ExtendMode(*args, **kwargs)
|
||||
|
||||
class Clip_settings:
|
||||
"""Deprecated: Use ClipSettings instead."""
|
||||
def __new__(cls, *args, **kwargs):
|
||||
_deprecated_class_warning("Clip_settings", "ClipSettings")
|
||||
return ClipSettings(*args, **kwargs)
|
||||
|
||||
class Text_style:
|
||||
"""Deprecated: Use TextStyle instead."""
|
||||
def __new__(cls, *args, **kwargs):
|
||||
_deprecated_class_warning("Text_style", "TextStyle")
|
||||
return TextStyle(*args, **kwargs)
|
||||
|
||||
class Text_border:
|
||||
"""Deprecated: Use TextBorder instead."""
|
||||
def __new__(cls, *args, **kwargs):
|
||||
_deprecated_class_warning("Text_border", "TextBorder")
|
||||
return TextBorder(*args, **kwargs)
|
||||
|
||||
class Text_background:
|
||||
"""Deprecated: Use TextBackground instead."""
|
||||
def __new__(cls, *args, **kwargs):
|
||||
_deprecated_class_warning("Text_background", "TextBackground")
|
||||
return TextBackground(*args, **kwargs)
|
||||
|
||||
class Text_segment:
|
||||
"""Deprecated: Use TextSegment instead."""
|
||||
def __new__(cls, *args, **kwargs):
|
||||
_deprecated_class_warning("Text_segment", "TextSegment")
|
||||
return TextSegment(*args, **kwargs)
|
||||
|
||||
class Audio_segment:
|
||||
"""Deprecated: Use AudioSegment instead."""
|
||||
def __new__(cls, *args, **kwargs):
|
||||
_deprecated_class_warning("Audio_segment", "AudioSegment")
|
||||
return AudioSegment(*args, **kwargs)
|
||||
|
||||
class Video_segment:
|
||||
"""Deprecated: Use VideoSegment instead."""
|
||||
def __new__(cls, *args, **kwargs):
|
||||
_deprecated_class_warning("Video_segment", "VideoSegment")
|
||||
return VideoSegment(*args, **kwargs)
|
||||
|
||||
class Sticker_segment:
|
||||
"""Deprecated: Use StickerSegment instead."""
|
||||
def __new__(cls, *args, **kwargs):
|
||||
_deprecated_class_warning("Sticker_segment", "StickerSegment")
|
||||
return StickerSegment(*args, **kwargs)
|
||||
|
||||
class Effect_segment:
|
||||
"""Deprecated: Use EffectSegment instead."""
|
||||
def __new__(cls, *args, **kwargs):
|
||||
_deprecated_class_warning("Effect_segment", "EffectSegment")
|
||||
return EffectSegment(*args, **kwargs)
|
||||
|
||||
class Filter_segment:
|
||||
"""Deprecated: Use FilterSegment instead."""
|
||||
def __new__(cls, *args, **kwargs):
|
||||
_deprecated_class_warning("Filter_segment", "FilterSegment")
|
||||
return FilterSegment(*args, **kwargs)
|
||||
|
||||
class Video_material:
|
||||
"""Deprecated: Use VideoMaterial instead."""
|
||||
def __new__(cls, *args, **kwargs):
|
||||
_deprecated_class_warning("Video_material", "VideoMaterial")
|
||||
return VideoMaterial(*args, **kwargs)
|
||||
|
||||
class Audio_material:
|
||||
"""Deprecated: Use AudioMaterial instead."""
|
||||
def __new__(cls, *args, **kwargs):
|
||||
_deprecated_class_warning("Audio_material", "AudioMaterial")
|
||||
return AudioMaterial(*args, **kwargs)
|
||||
|
||||
class Crop_settings:
|
||||
"""Deprecated: Use CropSettings instead."""
|
||||
def __new__(cls, *args, **kwargs):
|
||||
_deprecated_class_warning("Crop_settings", "CropSettings")
|
||||
return CropSettings(*args, **kwargs)
|
||||
|
||||
# 枚举类的向后兼容 - 使用代理类
|
||||
class _DeprecatedEnum:
|
||||
"""带deprecation警告的枚举代理类"""
|
||||
def __init__(self, original_enum, old_name, new_name):
|
||||
self._enum = original_enum
|
||||
self._old_name = old_name
|
||||
self._new_name = new_name
|
||||
|
||||
def __getattr__(self, name):
|
||||
# 当访问枚举成员时显示警告
|
||||
_deprecated_class_warning(self._old_name, self._new_name)
|
||||
return getattr(self._enum, name)
|
||||
|
||||
def __getitem__(self, name):
|
||||
# 当通过索引访问时显示警告
|
||||
_deprecated_class_warning(self._old_name, self._new_name)
|
||||
return self._enum[name]
|
||||
|
||||
def __repr__(self):
|
||||
return f"<Deprecated {self._old_name} (use {self._new_name} instead)>"
|
||||
|
||||
Track_type = _DeprecatedEnum(TrackType, "Track_type", "TrackType")
|
||||
Font_type = _DeprecatedEnum(FontType, "Font_type", "FontType")
|
||||
Mask_type = _DeprecatedEnum(MaskType, "Mask_type", "MaskType")
|
||||
Filter_type = _DeprecatedEnum(FilterType, "Filter_type", "FilterType")
|
||||
Transition_type = _DeprecatedEnum(TransitionType, "Transition_type", "TransitionType")
|
||||
Intro_type = _DeprecatedEnum(IntroType, "Intro_type", "IntroType")
|
||||
Outro_type = _DeprecatedEnum(OutroType, "Outro_type", "OutroType")
|
||||
Group_animation_type = _DeprecatedEnum(GroupAnimationType, "Group_animation_type", "GroupAnimationType")
|
||||
Text_intro = _DeprecatedEnum(TextIntro, "Text_intro", "TextIntro")
|
||||
Text_outro = _DeprecatedEnum(TextOutro, "Text_outro", "TextOutro")
|
||||
Text_loop_anim = _DeprecatedEnum(TextLoopAnim, "Text_loop_anim", "TextLoopAnim")
|
||||
Audio_scene_effect_type = _DeprecatedEnum(AudioSceneEffectType, "Audio_scene_effect_type", "AudioSceneEffectType")
|
||||
Video_scene_effect_type = _DeprecatedEnum(VideoSceneEffectType, "Video_scene_effect_type", "VideoSceneEffectType")
|
||||
Video_character_effect_type = _DeprecatedEnum(VideoCharacterEffectType, "Video_character_effect_type", "VideoCharacterEffectType")
|
||||
Keyframe_property = _DeprecatedEnum(KeyframeProperty, "Keyframe_property", "KeyframeProperty")
|
||||
|
||||
# 仅在Windows系统下定义jianying_controller相关的向后兼容类
|
||||
if ISWIN:
|
||||
class Jianying_controller:
|
||||
"""Deprecated: Use JianyingController instead."""
|
||||
def __new__(cls, *args, **kwargs):
|
||||
_deprecated_class_warning("Jianying_controller", "JianyingController")
|
||||
return JianyingController(*args, **kwargs)
|
||||
|
||||
Export_resolution = _DeprecatedEnum(ExportResolution, "Export_resolution", "ExportResolution")
|
||||
Export_framerate = _DeprecatedEnum(ExportFramerate, "Export_framerate", "ExportFramerate")
|
||||
|
||||
# 基础__all__列表(所有平台通用)
|
||||
__all__ = [
|
||||
"FontType",
|
||||
"MaskType",
|
||||
"FilterType",
|
||||
"TransitionType",
|
||||
"IntroType",
|
||||
"OutroType",
|
||||
"GroupAnimationType",
|
||||
"TextIntro",
|
||||
"TextOutro",
|
||||
"TextLoopAnim",
|
||||
"AudioSceneEffectType",
|
||||
"VideoSceneEffectType",
|
||||
"VideoCharacterEffectType",
|
||||
"CropSettings",
|
||||
"VideoMaterial",
|
||||
"AudioMaterial",
|
||||
"KeyframeProperty",
|
||||
"Timerange",
|
||||
"AudioSegment",
|
||||
"VideoSegment",
|
||||
"StickerSegment",
|
||||
"ClipSettings",
|
||||
"EffectSegment",
|
||||
"FilterSegment",
|
||||
"TextSegment",
|
||||
"TextStyle",
|
||||
"TextBorder",
|
||||
"TextBackground",
|
||||
"TextShadow",
|
||||
"TrackType",
|
||||
"ShrinkMode",
|
||||
"ExtendMode",
|
||||
"ScriptFile",
|
||||
"DraftFolder",
|
||||
"SEC",
|
||||
"tim",
|
||||
"trange",
|
||||
|
||||
# 向后兼容的snake_case类
|
||||
"Script_file",
|
||||
"Draft_folder",
|
||||
"Shrink_mode",
|
||||
"Extend_mode",
|
||||
"Track_type",
|
||||
"Font_type",
|
||||
"Mask_type",
|
||||
"Filter_type",
|
||||
"Transition_type",
|
||||
"Intro_type",
|
||||
"Outro_type",
|
||||
"Group_animation_type",
|
||||
"Text_intro",
|
||||
"Text_outro",
|
||||
"Text_loop_anim",
|
||||
"Audio_scene_effect_type",
|
||||
"Video_scene_effect_type",
|
||||
"Video_character_effect_type",
|
||||
"Clip_settings",
|
||||
"Text_style",
|
||||
"Text_border",
|
||||
"Text_background",
|
||||
"Text_segment",
|
||||
"Audio_segment",
|
||||
"Video_segment",
|
||||
"Sticker_segment",
|
||||
"Effect_segment",
|
||||
"Filter_segment",
|
||||
"Video_material",
|
||||
"Audio_material",
|
||||
"Crop_settings",
|
||||
"Keyframe_property",
|
||||
]
|
||||
|
||||
# 仅在Windows系统下添加jianying_controller相关的导出
|
||||
if ISWIN:
|
||||
__all__.extend([
|
||||
"JianyingController",
|
||||
"ExportResolution",
|
||||
"ExportFramerate",
|
||||
"Jianying_controller",
|
||||
"Export_resolution",
|
||||
"Export_framerate",
|
||||
])
|
||||
@@ -0,0 +1,140 @@
|
||||
"""定义视频/文本动画相关类"""
|
||||
|
||||
import uuid
|
||||
|
||||
from typing import Union, Optional
|
||||
from typing import Literal, Dict, List, Any
|
||||
|
||||
from .time_util import Timerange
|
||||
|
||||
from .metadata import AnimationMeta
|
||||
from .metadata import IntroType, OutroType, GroupAnimationType
|
||||
from .metadata import TextIntro, TextOutro, TextLoopAnim
|
||||
|
||||
class Animation:
|
||||
"""一个视频/文本动画效果"""
|
||||
|
||||
name: str
|
||||
"""动画名称, 默认取为动画效果的名称"""
|
||||
effect_id: str
|
||||
"""另一种动画id, 由剪映本身提供"""
|
||||
animation_type: str
|
||||
"""动画类型, 在子类中定义"""
|
||||
resource_id: str
|
||||
"""资源id, 由剪映本身提供"""
|
||||
|
||||
start: int
|
||||
"""动画相对此片段开头的偏移, 单位为微秒"""
|
||||
duration: int
|
||||
"""动画持续时间, 单位为微秒"""
|
||||
|
||||
is_video_animation: bool
|
||||
"""是否为视频动画, 在子类中定义"""
|
||||
|
||||
def __init__(self, animation_meta: AnimationMeta, start: int, duration: int):
|
||||
self.name = animation_meta.title
|
||||
self.effect_id = animation_meta.effect_id
|
||||
self.resource_id = animation_meta.resource_id
|
||||
|
||||
self.start = start
|
||||
self.duration = duration
|
||||
|
||||
def export_json(self) -> Dict[str, Any]:
|
||||
return {
|
||||
"anim_adjust_params": None,
|
||||
"platform": "all",
|
||||
"panel": "video" if self.is_video_animation else "",
|
||||
"material_type": "video" if self.is_video_animation else "sticker",
|
||||
|
||||
"name": self.name,
|
||||
"id": self.effect_id,
|
||||
"type": self.animation_type,
|
||||
"resource_id": self.resource_id,
|
||||
|
||||
"start": self.start,
|
||||
"duration": self.duration,
|
||||
# 不导出path和request_id
|
||||
}
|
||||
|
||||
class VideoAnimation(Animation):
|
||||
"""一个视频动画效果"""
|
||||
|
||||
animation_type: Literal["in", "out", "group"]
|
||||
|
||||
def __init__(self, animation_type: Union[IntroType, OutroType, GroupAnimationType],
|
||||
start: int, duration: int):
|
||||
super().__init__(animation_type.value, start, duration)
|
||||
|
||||
if isinstance(animation_type, IntroType):
|
||||
self.animation_type = "in"
|
||||
elif isinstance(animation_type, OutroType):
|
||||
self.animation_type = "out"
|
||||
elif isinstance(animation_type, GroupAnimationType):
|
||||
self.animation_type = "group"
|
||||
|
||||
self.is_video_animation = True
|
||||
|
||||
class Text_animation(Animation):
|
||||
"""一个文本动画效果"""
|
||||
|
||||
animation_type: Literal["in", "out", "loop"]
|
||||
|
||||
def __init__(self, animation_type: Union[TextIntro, TextOutro, TextLoopAnim],
|
||||
start: int, duration: int):
|
||||
super().__init__(animation_type.value, start, duration)
|
||||
|
||||
if isinstance(animation_type, TextIntro):
|
||||
self.animation_type = "in"
|
||||
elif isinstance(animation_type, TextOutro):
|
||||
self.animation_type = "out"
|
||||
elif isinstance(animation_type, TextLoopAnim):
|
||||
self.animation_type = "loop"
|
||||
|
||||
self.is_video_animation = False
|
||||
|
||||
class SegmentAnimations:
|
||||
"""附加于某素材上的一系列动画
|
||||
|
||||
对视频片段:入场、出场或组合动画;对文本片段:入场、出场或循环动画"""
|
||||
|
||||
animation_id: str
|
||||
"""系列动画的全局id, 自动生成"""
|
||||
|
||||
animations: List[Animation]
|
||||
"""动画列表"""
|
||||
|
||||
def __init__(self):
|
||||
self.animation_id = uuid.uuid4().hex
|
||||
self.animations = []
|
||||
|
||||
def get_animation_trange(self, animation_type: Literal["in", "out", "group", "loop"]) -> Optional[Timerange]:
|
||||
"""获取指定类型的动画的时间范围"""
|
||||
for animation in self.animations:
|
||||
if animation.animation_type == animation_type:
|
||||
return Timerange(animation.start, animation.duration)
|
||||
return None
|
||||
|
||||
def add_animation(self, animation: Union[VideoAnimation, Text_animation]) -> None:
|
||||
# 不允许添加超过一个同类型的动画(如两个入场动画)
|
||||
if animation.animation_type in [ani.animation_type for ani in self.animations]:
|
||||
raise ValueError(f"当前片段已存在类型为 '{animation.animation_type}' 的动画")
|
||||
|
||||
if isinstance(animation, VideoAnimation):
|
||||
# 不允许组合动画与出入场动画同时出现
|
||||
if any(ani.animation_type == "group" for ani in self.animations):
|
||||
raise ValueError("当前片段已存在组合动画, 此时不能添加其它动画")
|
||||
if animation.animation_type == "group" and len(self.animations) > 0:
|
||||
raise ValueError("当前片段已存在动画时, 不能添加组合动画")
|
||||
elif isinstance(animation, Text_animation):
|
||||
if any(ani.animation_type == "loop" for ani in self.animations):
|
||||
raise ValueError("当前片段已存在循环动画, 若希望同时使用循环动画和入出场动画, 请先添加出入场动画再添加循环动画")
|
||||
|
||||
self.animations.append(animation)
|
||||
|
||||
def export_json(self) -> Dict[str, Any]:
|
||||
return {
|
||||
"id": self.animation_id,
|
||||
"type": "sticker_animation",
|
||||
"multi_language_current": "none",
|
||||
"animations": [animation.export_json() for animation in self.animations]
|
||||
}
|
||||
@@ -0,0 +1,45 @@
|
||||
"""
|
||||
pyJianYingDraft 的资源管理模块,提供集中管理资源文件的方式,避免硬编码路径
|
||||
"""
|
||||
|
||||
from pathlib import Path
|
||||
|
||||
# 获取当前模块所在目录
|
||||
ASSETS_DIR = Path(__file__).parent
|
||||
|
||||
# 资源文件映射表 - 集中管理所有asset文件名
|
||||
ASSET_FILES = {
|
||||
# 模板文件
|
||||
'DRAFT_CONTENT_TEMPLATE': 'draft_content_template.json',
|
||||
'DRAFT_META_TEMPLATE': 'draft_meta_info.json',
|
||||
}
|
||||
|
||||
def get_asset_path(asset_name: str) -> Path:
|
||||
"""
|
||||
获取指定资源文件的完整路径
|
||||
|
||||
Args:
|
||||
asset_name: 资源名称(ASSET_FILES中的key)
|
||||
|
||||
Returns:
|
||||
Path: 资源文件的完整路径
|
||||
|
||||
Raises:
|
||||
KeyError: 资源名称不存在
|
||||
FileNotFoundError: 文件不存在
|
||||
"""
|
||||
if asset_name not in ASSET_FILES:
|
||||
raise KeyError(f"Asset '{asset_name}' not found. Available assets: {list(ASSET_FILES.keys())}")
|
||||
|
||||
file_path = ASSETS_DIR / ASSET_FILES[asset_name]
|
||||
|
||||
if not file_path.exists():
|
||||
raise FileNotFoundError(f"Asset file '{file_path}' does not exist")
|
||||
|
||||
return file_path
|
||||
|
||||
# 导出主要接口
|
||||
__all__ = [
|
||||
'get_asset_path',
|
||||
'ASSET_FILES'
|
||||
]
|
||||
@@ -0,0 +1,125 @@
|
||||
{
|
||||
"canvas_config": {
|
||||
"height": 1080,
|
||||
"ratio": "original",
|
||||
"width": 1920
|
||||
},
|
||||
"color_space": 0,
|
||||
"config": {
|
||||
"adjust_max_index": 1,
|
||||
"attachment_info": [],
|
||||
"combination_max_index": 1,
|
||||
"export_range": null,
|
||||
"extract_audio_last_index": 1,
|
||||
"lyrics_recognition_id": "",
|
||||
"lyrics_sync": true,
|
||||
"lyrics_taskinfo": [],
|
||||
"maintrack_adsorb": true,
|
||||
"material_save_mode": 0,
|
||||
"multi_language_current": "none",
|
||||
"multi_language_list": [],
|
||||
"multi_language_main": "none",
|
||||
"multi_language_mode": "none",
|
||||
"original_sound_last_index": 1,
|
||||
"record_audio_last_index": 1,
|
||||
"sticker_max_index": 1,
|
||||
"subtitle_keywords_config": null,
|
||||
"subtitle_recognition_id": "",
|
||||
"subtitle_sync": true,
|
||||
"subtitle_taskinfo": [],
|
||||
"system_font_list": [],
|
||||
"video_mute": false,
|
||||
"zoom_info_params": null
|
||||
},
|
||||
"cover": null,
|
||||
"create_time": 0,
|
||||
"duration": 0,
|
||||
"extra_info": null,
|
||||
"fps": 30.0,
|
||||
"free_render_index_mode_on": false,
|
||||
"group_container": null,
|
||||
"id": "91E08AC5-22FB-47e2-9AA0-7DC300FAEA2B",
|
||||
"keyframe_graph_list": [],
|
||||
"keyframes": {
|
||||
"adjusts": [],
|
||||
"audios": [],
|
||||
"effects": [],
|
||||
"filters": [],
|
||||
"handwrites": [],
|
||||
"stickers": [],
|
||||
"texts": [],
|
||||
"videos": []
|
||||
},
|
||||
"last_modified_platform": {
|
||||
"app_id": 3704,
|
||||
"app_source": "lv",
|
||||
"app_version": "5.9.0",
|
||||
"os": "windows"
|
||||
},
|
||||
"platform": {
|
||||
"app_id": 3704,
|
||||
"app_source": "lv",
|
||||
"app_version": "5.9.0",
|
||||
"os": "windows"
|
||||
},
|
||||
"materials": {
|
||||
"ai_translates": [],
|
||||
"audio_balances": [],
|
||||
"audio_effects": [],
|
||||
"audio_fades": [],
|
||||
"audio_track_indexes": [],
|
||||
"audios": [],
|
||||
"beats": [],
|
||||
"canvases": [],
|
||||
"chromas": [],
|
||||
"color_curves": [],
|
||||
"digital_humans": [],
|
||||
"drafts": [],
|
||||
"effects": [],
|
||||
"flowers": [],
|
||||
"green_screens": [],
|
||||
"handwrites": [],
|
||||
"hsl": [],
|
||||
"images": [],
|
||||
"log_color_wheels": [],
|
||||
"loudnesses": [],
|
||||
"manual_deformations": [],
|
||||
"masks": [],
|
||||
"material_animations": [],
|
||||
"material_colors": [],
|
||||
"multi_language_refs": [],
|
||||
"placeholders": [],
|
||||
"plugin_effects": [],
|
||||
"primary_color_wheels": [],
|
||||
"realtime_denoises": [],
|
||||
"shapes": [],
|
||||
"smart_crops": [],
|
||||
"smart_relights": [],
|
||||
"sound_channel_mappings": [],
|
||||
"speeds": [],
|
||||
"stickers": [],
|
||||
"tail_leaders": [],
|
||||
"text_templates": [],
|
||||
"texts": [],
|
||||
"time_marks": [],
|
||||
"transitions": [],
|
||||
"video_effects": [],
|
||||
"video_trackings": [],
|
||||
"videos": [],
|
||||
"vocal_beautifys": [],
|
||||
"vocal_separations": []
|
||||
},
|
||||
"mutable_config": null,
|
||||
"name": "",
|
||||
"new_version": "110.0.0",
|
||||
"relationships": [],
|
||||
"render_index_track_mode_on": false,
|
||||
"retouch_cover": null,
|
||||
"source": "default",
|
||||
"static_cover_image_path": "",
|
||||
"time_marks": null,
|
||||
"tracks": [
|
||||
],
|
||||
"update_time": 0,
|
||||
"version": 360000
|
||||
}
|
||||
@@ -0,0 +1,67 @@
|
||||
{
|
||||
"cloud_package_completed_time": "",
|
||||
"draft_cloud_capcut_purchase_info": "",
|
||||
"draft_cloud_last_action_download": false,
|
||||
"draft_cloud_materials": [],
|
||||
"draft_cloud_purchase_info": "",
|
||||
"draft_cloud_template_id": "",
|
||||
"draft_cloud_tutorial_info": "",
|
||||
"draft_cloud_videocut_purchase_info": "",
|
||||
"draft_cover": "",
|
||||
"draft_deeplink_url": "",
|
||||
"draft_enterprise_info": {
|
||||
"draft_enterprise_extra": "",
|
||||
"draft_enterprise_id": "",
|
||||
"draft_enterprise_name": "",
|
||||
"enterprise_material": []
|
||||
},
|
||||
"draft_fold_path": "",
|
||||
"draft_id": "BC69C7CD-7C5E-4185-B284-AF3E1047A664",
|
||||
"draft_is_ai_packaging_used": false,
|
||||
"draft_is_ai_shorts": false,
|
||||
"draft_is_ai_translate": false,
|
||||
"draft_is_article_video_draft": false,
|
||||
"draft_is_from_deeplink": "false",
|
||||
"draft_is_invisible": false,
|
||||
"draft_materials": [
|
||||
{
|
||||
"type": 0,
|
||||
"value": []
|
||||
},
|
||||
{
|
||||
"type": 1,
|
||||
"value": []
|
||||
},
|
||||
{
|
||||
"type": 2,
|
||||
"value": []
|
||||
},
|
||||
{
|
||||
"type": 3,
|
||||
"value": []
|
||||
},
|
||||
{
|
||||
"type": 6,
|
||||
"value": []
|
||||
},
|
||||
{
|
||||
"type": 7,
|
||||
"value": []
|
||||
},
|
||||
{
|
||||
"type": 8,
|
||||
"value": []
|
||||
}
|
||||
],
|
||||
"draft_materials_copied_info": [],
|
||||
"draft_name": "",
|
||||
"draft_new_version": "",
|
||||
"draft_removable_storage_device": "",
|
||||
"draft_root_path": "",
|
||||
"draft_segment_extra_info": [],
|
||||
"draft_type": "",
|
||||
"tm_draft_cloud_completed": "",
|
||||
"tm_draft_cloud_modified": 0,
|
||||
"tm_draft_removed": 0,
|
||||
"tm_duration": 0
|
||||
}
|
||||
@@ -0,0 +1,227 @@
|
||||
"""定义音频片段及其相关类
|
||||
|
||||
包含淡入淡出效果、音频特效等相关类
|
||||
"""
|
||||
|
||||
import uuid
|
||||
from copy import deepcopy
|
||||
|
||||
from typing import Optional, Literal, Union
|
||||
from typing import Dict, List, Any
|
||||
|
||||
from .time_util import tim, Timerange
|
||||
from .segment import MediaSegment
|
||||
from .local_materials import AudioMaterial
|
||||
from .keyframe import KeyframeProperty, KeyframeList
|
||||
|
||||
from .metadata import EffectParamInstance
|
||||
from .metadata import AudioSceneEffectType, ToneEffectType, SpeechToSongType
|
||||
|
||||
class AudioFade:
|
||||
"""音频淡入淡出效果"""
|
||||
|
||||
fade_id: str
|
||||
"""淡入淡出效果的全局id, 自动生成"""
|
||||
|
||||
in_duration: int
|
||||
"""淡入时长, 单位为微秒"""
|
||||
out_duration: int
|
||||
"""淡出时长, 单位为微秒"""
|
||||
|
||||
def __init__(self, in_duration: int, out_duration: int):
|
||||
"""根据给定的淡入/淡出时长构造一个淡入淡出效果"""
|
||||
|
||||
self.fade_id = uuid.uuid4().hex
|
||||
self.in_duration = in_duration
|
||||
self.out_duration = out_duration
|
||||
|
||||
def export_json(self) -> Dict[str, Any]:
|
||||
return {
|
||||
"id": self.fade_id,
|
||||
"fade_in_duration": self.in_duration,
|
||||
"fade_out_duration": self.out_duration,
|
||||
"fade_type": 0,
|
||||
"type": "audio_fade"
|
||||
}
|
||||
|
||||
class AudioEffect:
|
||||
"""音频特效对象"""
|
||||
|
||||
name: str
|
||||
"""特效名称"""
|
||||
effect_id: str
|
||||
"""特效全局id, 由程序自动生成"""
|
||||
resource_id: str
|
||||
"""资源id, 由剪映本身提供"""
|
||||
|
||||
category_id: Literal["sound_effect", "tone", "speech_to_song"]
|
||||
category_name: Literal["场景音", "音色", "声音成曲"]
|
||||
category_index: Literal[1, 2, 3]
|
||||
|
||||
audio_adjust_params: List[EffectParamInstance]
|
||||
|
||||
def __init__(self, effect_meta: Union[AudioSceneEffectType, ToneEffectType, SpeechToSongType],
|
||||
params: Optional[List[Optional[float]]] = None):
|
||||
"""根据给定的音效元数据及参数列表构造一个音频特效对象, params的范围是0~100"""
|
||||
|
||||
self.name = effect_meta.value.name
|
||||
self.effect_id = uuid.uuid4().hex
|
||||
self.resource_id = effect_meta.value.resource_id
|
||||
self.audio_adjust_params = []
|
||||
|
||||
if isinstance(effect_meta, AudioSceneEffectType):
|
||||
self.category_id = "sound_effect"
|
||||
self.category_name = "场景音"
|
||||
self.category_index = 1
|
||||
elif isinstance(effect_meta, ToneEffectType):
|
||||
self.category_id = "tone"
|
||||
self.category_name = "音色"
|
||||
self.category_index = 2
|
||||
elif isinstance(effect_meta, SpeechToSongType):
|
||||
self.category_id = "speech_to_song"
|
||||
self.category_name = "声音成曲"
|
||||
self.category_index = 3
|
||||
else:
|
||||
raise TypeError("不支持的元数据类型 %s" % type(effect_meta))
|
||||
|
||||
self.audio_adjust_params = effect_meta.value.parse_params(params)
|
||||
|
||||
def export_json(self) -> Dict[str, Any]:
|
||||
return {
|
||||
"audio_adjust_params": [param.export_json() for param in self.audio_adjust_params],
|
||||
"category_id": self.category_id,
|
||||
"category_name": self.category_name,
|
||||
"id": self.effect_id,
|
||||
"is_ugc": False,
|
||||
"name": self.name,
|
||||
"production_path": "",
|
||||
"resource_id": self.resource_id,
|
||||
"speaker_id": "",
|
||||
"sub_type": self.category_index,
|
||||
"time_range": {"duration": 0, "start": 0}, # 似乎并未用到
|
||||
"type": "audio_effect"
|
||||
# 不导出path和constant_material_id
|
||||
}
|
||||
|
||||
class AudioSegment(MediaSegment):
|
||||
"""安放在轨道上的一个音频片段"""
|
||||
|
||||
material_instance: AudioMaterial
|
||||
"""音频素材实例"""
|
||||
|
||||
fade: Optional[AudioFade]
|
||||
"""音频淡入淡出效果, 可能为空
|
||||
|
||||
在放入轨道时自动添加到素材列表中
|
||||
"""
|
||||
|
||||
effects: List[AudioEffect]
|
||||
"""音频特效列表
|
||||
|
||||
在放入轨道时自动添加到素材列表中
|
||||
"""
|
||||
|
||||
def __init__(self, material: Union[AudioMaterial, str], target_timerange: Timerange, *,
|
||||
source_timerange: Optional[Timerange] = None, speed: Optional[float] = None, volume: float = 1.0,
|
||||
change_pitch: bool = False):
|
||||
"""利用给定的音频素材构建一个轨道片段, 并指定其时间信息及播放速度/音量
|
||||
|
||||
Args:
|
||||
material (`AudioMaterial` or `str`): 素材实例或素材路径, 若为路径则自动构造素材实例
|
||||
target_timerange (`Timerange`): 片段在轨道上的目标时间范围
|
||||
source_timerange (`Timerange`, optional): 截取的素材片段的时间范围, 默认从开头根据`speed`截取与`target_timerange`等长的一部分
|
||||
speed (`float`, optional): 播放速度, 默认为1.0. 此项与`source_timerange`同时指定时, 将覆盖`target_timerange`中的时长
|
||||
volume (`float`, optional): 音量, 默认为1.0
|
||||
change_pitch (`bool`, optional): 是否跟随变速改变音调, 默认为否
|
||||
|
||||
Raises:
|
||||
`ValueError`: 指定的或计算出的`source_timerange`超出了素材的时长范围
|
||||
"""
|
||||
if isinstance(material, str):
|
||||
material = AudioMaterial(material)
|
||||
|
||||
if source_timerange is not None and speed is not None:
|
||||
target_timerange = Timerange(target_timerange.start, round(source_timerange.duration / speed))
|
||||
elif source_timerange is not None and speed is None:
|
||||
speed = source_timerange.duration / target_timerange.duration
|
||||
else: # source_timerange is None
|
||||
speed = speed if speed is not None else 1.0
|
||||
source_timerange = Timerange(0, round(target_timerange.duration * speed))
|
||||
|
||||
if source_timerange.end > material.duration:
|
||||
raise ValueError(f"截取的素材时间范围 {source_timerange} 超出了素材时长({material.duration})")
|
||||
|
||||
super().__init__(material.material_id, source_timerange, target_timerange, speed, volume, change_pitch)
|
||||
|
||||
self.material_instance = deepcopy(material)
|
||||
self.fade = None
|
||||
self.effects = []
|
||||
|
||||
def add_effect(self, effect_type: Union[AudioSceneEffectType, ToneEffectType, SpeechToSongType],
|
||||
params: Optional[List[Optional[float]]] = None) -> "AudioSegment":
|
||||
"""为音频片段添加一个作用于整个片段的音频效果, 目前"声音成曲"效果不能自动被剪映所识别
|
||||
|
||||
Args:
|
||||
effect_type (`AudioSceneEffectType` | `ToneEffectType` | `SpeechToSongType`): 音效类型, 一类音效只能添加一个.
|
||||
params (`List[Optional[float]]`, optional): 音效参数列表, 参数列表中未提供或为None的项使用默认值.
|
||||
参数取值范围(0~100)与剪映中一致. 某个特效类型有何参数以及具体参数顺序以枚举类成员的annotation为准.
|
||||
|
||||
Raises:
|
||||
`ValueError`: 试图添加一个已经存在的音效类型、提供的参数数量超过了该音效类型的参数数量, 或参数值超出范围.
|
||||
"""
|
||||
if params is not None and len(params) > len(effect_type.value.params):
|
||||
raise ValueError("为音频效果 %s 传入了过多的参数" % effect_type.value.name)
|
||||
|
||||
effect_inst = AudioEffect(effect_type, params)
|
||||
if effect_inst.category_id in [eff.category_id for eff in self.effects]:
|
||||
raise ValueError("当前音频片段已经有此类型 (%s) 的音效了" % effect_inst.category_name)
|
||||
self.effects.append(effect_inst)
|
||||
self.extra_material_refs.append(effect_inst.effect_id)
|
||||
|
||||
return self
|
||||
|
||||
def add_fade(self, in_duration: Union[str, int], out_duration: Union[str, int]) -> "AudioSegment":
|
||||
"""为音频片段添加淡入淡出效果
|
||||
|
||||
Args:
|
||||
in_duration (`int` or `str`): 音频淡入时长, 单位为微秒, 若为字符串则会调用`tim()`函数进行解析
|
||||
out_duration (`int` or `str`): 音频淡出时长, 单位为微秒, 若为字符串则会调用`tim()`函数进行解析
|
||||
|
||||
Raises:
|
||||
`ValueError`: 当前片段已存在淡入淡出效果
|
||||
"""
|
||||
if self.fade is not None:
|
||||
raise ValueError("当前片段已存在淡入淡出效果")
|
||||
|
||||
if isinstance(in_duration, str): in_duration = tim(in_duration)
|
||||
if isinstance(out_duration, str): out_duration = tim(out_duration)
|
||||
|
||||
self.fade = AudioFade(in_duration, out_duration)
|
||||
self.extra_material_refs.append(self.fade.fade_id)
|
||||
|
||||
return self
|
||||
|
||||
def add_keyframe(self, time_offset: int, volume: float) -> "AudioSegment":
|
||||
"""为音频片段创建一个*控制音量*的关键帧, 并自动加入到关键帧列表中
|
||||
|
||||
Args:
|
||||
time_offset (`int`): 关键帧的时间偏移量, 单位为微秒
|
||||
volume (`float`): 音量在`time_offset`处的值
|
||||
"""
|
||||
_property = KeyframeProperty.volume
|
||||
for kf_list in self.common_keyframes:
|
||||
if kf_list.keyframe_property == _property:
|
||||
kf_list.add_keyframe(time_offset, volume)
|
||||
return self
|
||||
kf_list = KeyframeList(_property)
|
||||
kf_list.add_keyframe(time_offset, volume)
|
||||
self.common_keyframes.append(kf_list)
|
||||
return self
|
||||
|
||||
def export_json(self) -> Dict[str, Any]:
|
||||
json_dict = super().export_json()
|
||||
json_dict.update({
|
||||
"clip": None,
|
||||
"hdr_settings": None
|
||||
})
|
||||
return json_dict
|
||||
@@ -0,0 +1,153 @@
|
||||
"""草稿文件夹管理器"""
|
||||
|
||||
import os
|
||||
import shutil
|
||||
|
||||
from typing import List
|
||||
|
||||
from . import assets
|
||||
from .script_file import ScriptFile
|
||||
|
||||
class DraftFolder:
|
||||
"""管理一个文件夹及其内的一系列草稿"""
|
||||
|
||||
folder_path: str
|
||||
"""根路径"""
|
||||
|
||||
def __init__(self, folder_path: str):
|
||||
"""初始化草稿文件夹管理器
|
||||
|
||||
Args:
|
||||
folder_path (`str`): 包含若干草稿的文件夹, 一般取剪映保存草稿的位置即可
|
||||
|
||||
Raises:
|
||||
`FileNotFoundError`: 路径不存在
|
||||
"""
|
||||
self.folder_path = folder_path
|
||||
|
||||
if not os.path.exists(self.folder_path):
|
||||
raise FileNotFoundError(f"根文件夹 {self.folder_path} 不存在")
|
||||
|
||||
def list_drafts(self) -> List[str]:
|
||||
"""列出文件夹中所有草稿的名称
|
||||
|
||||
注意: 本函数只是如实地列出子文件夹的名称, 并不检查它们是否符合草稿的格式
|
||||
"""
|
||||
return [f for f in os.listdir(self.folder_path) if os.path.isdir(os.path.join(self.folder_path, f))]
|
||||
|
||||
def has_draft(self, draft_name: str) -> bool:
|
||||
"""检查文件夹中是否存在指定名称的草稿
|
||||
|
||||
注意: 本函数只检查文件夹是否存在, 并不检查草稿是否符合剪映的格式
|
||||
|
||||
Args:
|
||||
draft_name (`str`): 草稿名称, 即相应文件夹名称
|
||||
"""
|
||||
return draft_name in self.list_drafts()
|
||||
|
||||
def remove(self, draft_name: str) -> None:
|
||||
"""删除指定名称的草稿
|
||||
|
||||
Args:
|
||||
draft_name (`str`): 草稿名称, 即相应文件夹名称
|
||||
|
||||
Raises:
|
||||
`FileNotFoundError`: 对应的草稿不存在
|
||||
"""
|
||||
draft_path = os.path.join(self.folder_path, draft_name)
|
||||
if not os.path.exists(draft_path):
|
||||
raise FileNotFoundError(f"草稿文件夹 {draft_name} 不存在")
|
||||
|
||||
shutil.rmtree(draft_path)
|
||||
|
||||
def create_draft(self, draft_name: str, width: int, height: int, fps: int = 30, *,
|
||||
allow_replace: bool = False) -> ScriptFile:
|
||||
"""创建一个新草稿并开始编辑, 编辑完成后使用`ScriptFile.save()`保存即可
|
||||
|
||||
Args:
|
||||
draft_name (`str`): 草稿名称, 即相应文件夹名称
|
||||
width (`int`): 视频宽度, 单位为像素
|
||||
height (`int`): 视频高度, 单位为像素
|
||||
fps (`int`, optional): 视频帧率. 默认为30.
|
||||
allow_replace (`bool`, optional): 是否允许覆盖与`draft_name`重名的草稿. 默认为否.
|
||||
|
||||
Raises:
|
||||
`FileExistsError`: 已存在与`draft_name`重名的草稿, 但不允许覆盖.
|
||||
"""
|
||||
draft_path = os.path.join(self.folder_path, draft_name)
|
||||
if os.path.exists(draft_path):
|
||||
if not allow_replace:
|
||||
raise FileExistsError(f"草稿文件夹 {draft_name} 已存在且不允许覆盖")
|
||||
shutil.rmtree(draft_path)
|
||||
|
||||
# 创建草稿文件夹
|
||||
os.makedirs(draft_path)
|
||||
shutil.copy(assets.get_asset_path("DRAFT_META_TEMPLATE"), os.path.join(draft_path, "draft_meta_info.json"))
|
||||
|
||||
# 创建草稿文件
|
||||
script_file = ScriptFile(width, height, fps)
|
||||
script_file.save_path = os.path.join(draft_path, "draft_content.json")
|
||||
|
||||
return script_file
|
||||
|
||||
def inspect_material(self, draft_name: str) -> None:
|
||||
"""输出指定名称草稿中的贴纸素材元数据
|
||||
|
||||
Args:
|
||||
draft_name (`str`): 草稿名称, 即相应文件夹名称
|
||||
|
||||
Raises:
|
||||
`FileNotFoundError`: 对应的草稿不存在
|
||||
"""
|
||||
draft_path = os.path.join(self.folder_path, draft_name)
|
||||
if not os.path.exists(draft_path):
|
||||
raise FileNotFoundError(f"草稿文件夹 {draft_name} 不存在")
|
||||
|
||||
script_file = self.load_template(draft_name)
|
||||
script_file.inspect_material()
|
||||
|
||||
def load_template(self, draft_name: str) -> ScriptFile:
|
||||
"""在文件夹中打开一个草稿作为模板, 并在其上进行编辑
|
||||
|
||||
Args:
|
||||
draft_name (`str`): 草稿名称, 即相应文件夹名称
|
||||
|
||||
Returns:
|
||||
`ScriptFile`: 以模板模式打开的草稿对象
|
||||
|
||||
Raises:
|
||||
`FileNotFoundError`: 对应的草稿不存在
|
||||
"""
|
||||
draft_path = os.path.join(self.folder_path, draft_name)
|
||||
if not os.path.exists(draft_path):
|
||||
raise FileNotFoundError(f"草稿文件夹 {draft_name} 不存在")
|
||||
|
||||
return ScriptFile.load_template(os.path.join(draft_path, "draft_content.json"))
|
||||
|
||||
def duplicate_as_template(self, template_name: str, new_draft_name: str, allow_replace: bool = False) -> ScriptFile:
|
||||
"""复制一份给定的草稿, 并在复制出的新草稿上进行编辑
|
||||
|
||||
Args:
|
||||
template_name (`str`): 原草稿名称
|
||||
new_draft_name (`str`): 新草稿名称
|
||||
allow_replace (`bool`, optional): 是否允许覆盖与`new_draft_name`重名的草稿. 默认为否.
|
||||
|
||||
Returns:
|
||||
`ScriptFile`: 以模板模式打开的**复制后的**草稿对象
|
||||
|
||||
Raises:
|
||||
`FileNotFoundError`: 原始草稿不存在
|
||||
`FileExistsError`: 已存在与`new_draft_name`重名的草稿, 但不允许覆盖.
|
||||
"""
|
||||
template_path = os.path.join(self.folder_path, template_name)
|
||||
new_draft_path = os.path.join(self.folder_path, new_draft_name)
|
||||
if not os.path.exists(template_path):
|
||||
raise FileNotFoundError(f"模板草稿 {template_name} 不存在")
|
||||
if os.path.exists(new_draft_path) and not allow_replace:
|
||||
raise FileExistsError(f"新草稿 {new_draft_name} 已存在且不允许覆盖")
|
||||
|
||||
# 复制草稿文件夹
|
||||
shutil.copytree(template_path, new_draft_path, dirs_exist_ok=allow_replace)
|
||||
|
||||
# 打开草稿
|
||||
return self.load_template(new_draft_name)
|
||||
@@ -0,0 +1,36 @@
|
||||
"""定义特效/滤镜片段类"""
|
||||
|
||||
from typing import Union, Optional, List
|
||||
|
||||
from .time_util import Timerange
|
||||
from .segment import BaseSegment
|
||||
from .video_segment import VideoEffect, Filter
|
||||
|
||||
from .metadata import VideoSceneEffectType, VideoCharacterEffectType, FilterType
|
||||
|
||||
class EffectSegment(BaseSegment):
|
||||
"""放置在独立特效轨道上的特效片段"""
|
||||
|
||||
effect_inst: VideoEffect
|
||||
"""相应的特效素材
|
||||
|
||||
在放入轨道时自动添加到素材列表中
|
||||
"""
|
||||
|
||||
def __init__(self, effect_type: Union[VideoSceneEffectType, VideoCharacterEffectType],
|
||||
target_timerange: Timerange, params: Optional[List[Optional[float]]] = None):
|
||||
self.effect_inst = VideoEffect(effect_type, params, apply_target_type=2) # 作用域为全局
|
||||
super().__init__(self.effect_inst.global_id, target_timerange)
|
||||
|
||||
class FilterSegment(BaseSegment):
|
||||
"""放置在独立滤镜轨道上的滤镜片段"""
|
||||
|
||||
material: Filter
|
||||
"""相应的滤镜素材
|
||||
|
||||
在放入轨道时自动添加到素材列表中
|
||||
"""
|
||||
|
||||
def __init__(self, meta: FilterType, target_timerange: Timerange, intensity: float):
|
||||
self.material = Filter(meta.value, intensity)
|
||||
super().__init__(self.material.global_id, target_timerange)
|
||||
@@ -0,0 +1,23 @@
|
||||
"""自定义异常类"""
|
||||
|
||||
class TrackNotFound(NameError):
|
||||
"""未找到满足条件的轨道"""
|
||||
class AmbiguousTrack(ValueError):
|
||||
"""找到多个满足条件的轨道"""
|
||||
class SegmentOverlap(ValueError):
|
||||
"""新片段与已有的轨道片段重叠"""
|
||||
|
||||
class MaterialNotFound(NameError):
|
||||
"""未找到满足条件的素材"""
|
||||
class AmbiguousMaterial(ValueError):
|
||||
"""找到多个满足条件的素材"""
|
||||
|
||||
class ExtensionFailed(ValueError):
|
||||
"""替换素材时延伸片段失败"""
|
||||
|
||||
class DraftNotFound(NameError):
|
||||
"""未找到草稿"""
|
||||
class AutomationError(Exception):
|
||||
"""自动化操作失败"""
|
||||
class ExportTimeout(Exception):
|
||||
"""导出超时"""
|
||||
@@ -0,0 +1,230 @@
|
||||
"""剪映自动化控制,主要与自动导出有关"""
|
||||
|
||||
import time
|
||||
import shutil
|
||||
import uiautomation as uia
|
||||
|
||||
from enum import Enum
|
||||
from typing import Optional, Literal, Callable
|
||||
|
||||
from . import exceptions
|
||||
from .exceptions import AutomationError
|
||||
|
||||
class ExportResolution(Enum):
|
||||
"""导出分辨率"""
|
||||
RES_8K = "8K"
|
||||
RES_4K = "4K"
|
||||
RES_2K = "2K"
|
||||
RES_1080P = "1080P"
|
||||
RES_720P = "720P"
|
||||
RES_480P = "480P"
|
||||
|
||||
class ExportFramerate(Enum):
|
||||
"""导出帧率"""
|
||||
FR_24 = "24fps"
|
||||
FR_25 = "25fps"
|
||||
FR_30 = "30fps"
|
||||
FR_50 = "50fps"
|
||||
FR_60 = "60fps"
|
||||
|
||||
class ControlFinder:
|
||||
"""控件查找器,封装部分与控件查找相关的逻辑"""
|
||||
|
||||
@staticmethod
|
||||
def desc_matcher(target_desc: str, depth: int = 2, exact: bool = False) -> Callable[[uia.Control, int], bool]:
|
||||
"""根据full_description查找控件的匹配器"""
|
||||
target_desc = target_desc.lower()
|
||||
def matcher(control: uia.Control, _depth: int) -> bool:
|
||||
if _depth != depth:
|
||||
return False
|
||||
full_desc: str = control.GetPropertyValue(30159).lower()
|
||||
return (target_desc == full_desc) if exact else (target_desc in full_desc)
|
||||
return matcher
|
||||
|
||||
@staticmethod
|
||||
def class_name_matcher(class_name: str, depth: int = 1, exact: bool = False) -> Callable[[uia.Control, int], bool]:
|
||||
"""根据ClassName查找控件的匹配器"""
|
||||
class_name = class_name.lower()
|
||||
def matcher(control: uia.Control, _depth: int) -> bool:
|
||||
if _depth != depth:
|
||||
return False
|
||||
curr_class_name: str = control.ClassName.lower()
|
||||
return (class_name == curr_class_name) if exact else (class_name in curr_class_name)
|
||||
return matcher
|
||||
|
||||
class JianyingController:
|
||||
"""剪映控制器"""
|
||||
|
||||
app: uia.WindowControl
|
||||
"""剪映窗口"""
|
||||
app_status: Literal["home", "edit", "pre_export"]
|
||||
|
||||
def __init__(self):
|
||||
"""初始化剪映控制器, 此时剪映应该处于目录页"""
|
||||
self.get_window()
|
||||
|
||||
def export_draft(self, draft_name: str, output_path: Optional[str] = None, *,
|
||||
resolution: Optional[ExportResolution] = None,
|
||||
framerate: Optional[ExportFramerate] = None,
|
||||
timeout: float = 1200) -> None:
|
||||
"""导出指定的剪映草稿, **目前仅支持剪映6及以下版本**
|
||||
|
||||
**注意: 需要确认有导出草稿的权限(不使用VIP功能或已开通VIP), 否则可能陷入死循环**
|
||||
|
||||
Args:
|
||||
draft_name (`str`): 要导出的剪映草稿名称
|
||||
output_path (`str`, optional): 导出路径, 支持指向文件夹或直接指向文件, 不指定则使用剪映默认路径.
|
||||
resolution (`Export_resolution`, optional): 导出分辨率, 默认不改变剪映导出窗口中的设置.
|
||||
framerate (`Export_framerate`, optional): 导出帧率, 默认不改变剪映导出窗口中的设置.
|
||||
timeout (`float`, optional): 导出超时时间(秒), 默认为20分钟.
|
||||
|
||||
Raises:
|
||||
`DraftNotFound`: 未找到指定名称的剪映草稿
|
||||
`AutomationError`: 剪映操作失败
|
||||
"""
|
||||
print(f"开始导出 {draft_name} 至 {output_path}")
|
||||
self.get_window()
|
||||
self.switch_to_home()
|
||||
|
||||
# 点击对应草稿
|
||||
draft_name_text = self.app.TextControl(
|
||||
searchDepth=2,
|
||||
Compare=ControlFinder.desc_matcher(f"HomePageDraftTitle:{draft_name}", exact=True)
|
||||
)
|
||||
if not draft_name_text.Exists(0):
|
||||
raise exceptions.DraftNotFound(f"未找到名为{draft_name}的剪映草稿")
|
||||
draft_btn = draft_name_text.GetParentControl()
|
||||
assert draft_btn is not None
|
||||
draft_btn.Click(simulateMove=False)
|
||||
time.sleep(10)
|
||||
self.get_window()
|
||||
|
||||
# 点击导出按钮
|
||||
export_btn = self.app.TextControl(searchDepth=2, Compare=ControlFinder.desc_matcher("MainWindowTitleBarExportBtn"))
|
||||
if not export_btn.Exists(0):
|
||||
raise AutomationError("未在编辑窗口中找到导出按钮")
|
||||
export_btn.Click(simulateMove=False)
|
||||
time.sleep(10)
|
||||
self.get_window()
|
||||
|
||||
# 获取原始导出路径(带后缀名)
|
||||
export_path_sib = self.app.TextControl(searchDepth=2, Compare=ControlFinder.desc_matcher("ExportPath"))
|
||||
if not export_path_sib.Exists(0):
|
||||
raise AutomationError("未找到导出路径框")
|
||||
export_path_text = export_path_sib.GetSiblingControl(lambda ctrl: True)
|
||||
assert export_path_text is not None
|
||||
export_path = export_path_text.GetPropertyValue(30159)
|
||||
|
||||
# 设置分辨率
|
||||
if resolution is not None:
|
||||
setting_group = self.app.GroupControl(searchDepth=1,
|
||||
Compare=ControlFinder.class_name_matcher("PanelSettingsGroup_QMLTYPE"))
|
||||
if not setting_group.Exists(0):
|
||||
raise AutomationError("未找到导出设置组")
|
||||
resolution_btn = setting_group.TextControl(searchDepth=2, Compare=ControlFinder.desc_matcher("ExportSharpnessInput"))
|
||||
if not resolution_btn.Exists(0.5):
|
||||
raise AutomationError("未找到导出分辨率下拉框")
|
||||
resolution_btn.Click(simulateMove=False)
|
||||
time.sleep(0.5)
|
||||
resolution_item = self.app.TextControl(
|
||||
searchDepth=2, Compare=ControlFinder.desc_matcher(resolution.value)
|
||||
)
|
||||
if not resolution_item.Exists(0.5):
|
||||
raise AutomationError(f"未找到{resolution.value}分辨率选项")
|
||||
resolution_item.Click(simulateMove=False)
|
||||
time.sleep(0.5)
|
||||
|
||||
# 设置帧率
|
||||
if framerate is not None:
|
||||
setting_group = self.app.GroupControl(searchDepth=1,
|
||||
Compare=ControlFinder.class_name_matcher("PanelSettingsGroup_QMLTYPE"))
|
||||
if not setting_group.Exists(0):
|
||||
raise AutomationError("未找到导出设置组")
|
||||
framerate_btn = setting_group.TextControl(searchDepth=2, Compare=ControlFinder.desc_matcher("FrameRateInput"))
|
||||
if not framerate_btn.Exists(0.5):
|
||||
raise AutomationError("未找到导出帧率下拉框")
|
||||
framerate_btn.Click(simulateMove=False)
|
||||
time.sleep(0.5)
|
||||
framerate_item = self.app.TextControl(
|
||||
searchDepth=2, Compare=ControlFinder.desc_matcher(framerate.value)
|
||||
)
|
||||
if not framerate_item.Exists(0.5):
|
||||
raise AutomationError(f"未找到{framerate.value}帧率选项")
|
||||
framerate_item.Click(simulateMove=False)
|
||||
time.sleep(0.5)
|
||||
|
||||
|
||||
# 点击导出
|
||||
export_btn = self.app.TextControl(searchDepth=2, Compare=ControlFinder.desc_matcher("ExportOkBtn", exact=True))
|
||||
if not export_btn.Exists(0):
|
||||
raise AutomationError("未在导出窗口中找到导出按钮")
|
||||
export_btn.Click(simulateMove=False)
|
||||
time.sleep(5)
|
||||
|
||||
# 等待导出完成
|
||||
st = time.time()
|
||||
while True:
|
||||
self.get_window()
|
||||
if self.app_status != "pre_export": continue
|
||||
|
||||
succeed_close_btn = self.app.TextControl(searchDepth=2, Compare=ControlFinder.desc_matcher("ExportSucceedCloseBtn"))
|
||||
if succeed_close_btn.Exists(0):
|
||||
succeed_close_btn.Click(simulateMove=False)
|
||||
break
|
||||
|
||||
if time.time() - st > timeout:
|
||||
raise AutomationError("导出超时, 时限为%d秒" % timeout)
|
||||
|
||||
time.sleep(1)
|
||||
time.sleep(2)
|
||||
|
||||
# 回到目录页
|
||||
self.get_window()
|
||||
self.switch_to_home()
|
||||
time.sleep(2)
|
||||
|
||||
# 复制导出的文件到指定目录
|
||||
if output_path is not None:
|
||||
shutil.move(export_path, output_path)
|
||||
|
||||
print(f"导出 {draft_name} 至 {output_path} 完成")
|
||||
|
||||
def switch_to_home(self) -> None:
|
||||
"""切换到剪映主页"""
|
||||
if self.app_status == "home":
|
||||
return
|
||||
if self.app_status != "edit":
|
||||
raise AutomationError("仅支持从编辑模式切换到主页")
|
||||
close_btn = self.app.GroupControl(searchDepth=1, ClassName="TitleBarButton", foundIndex=3)
|
||||
close_btn.Click(simulateMove=False)
|
||||
time.sleep(2)
|
||||
self.get_window()
|
||||
|
||||
def get_window(self) -> None:
|
||||
"""寻找剪映窗口并置顶"""
|
||||
if hasattr(self, "app") and self.app.Exists(0):
|
||||
self.app.SetTopmost(False)
|
||||
|
||||
self.app = uia.WindowControl(searchDepth=1, Compare=self.__jianying_window_cmp)
|
||||
if not self.app.Exists(0):
|
||||
raise AutomationError("剪映窗口未找到")
|
||||
|
||||
# 寻找可能存在的导出窗口
|
||||
export_window = self.app.WindowControl(searchDepth=1, Name="导出")
|
||||
if export_window.Exists(0):
|
||||
self.app = export_window
|
||||
self.app_status = "pre_export"
|
||||
|
||||
self.app.SetActive()
|
||||
self.app.SetTopmost()
|
||||
|
||||
def __jianying_window_cmp(self, control: uia.WindowControl, depth: int) -> bool:
|
||||
if control.Name != "剪映专业版":
|
||||
return False
|
||||
if "HomePage".lower() in control.ClassName.lower():
|
||||
self.app_status = "home"
|
||||
return True
|
||||
if "MainWindow".lower() in control.ClassName.lower():
|
||||
self.app_status = "edit"
|
||||
return True
|
||||
return False
|
||||
@@ -0,0 +1,94 @@
|
||||
import uuid
|
||||
|
||||
from enum import Enum
|
||||
from typing import Dict, List, Any
|
||||
|
||||
class Keyframe:
|
||||
"""一个关键帧(关键点), 目前只支持线性插值"""
|
||||
|
||||
kf_id: str
|
||||
"""关键帧全局id, 自动生成"""
|
||||
time_offset: int
|
||||
"""相对于素材起始点的时间偏移量"""
|
||||
values: List[float]
|
||||
"""关键帧的值, 似乎一般只有一个元素"""
|
||||
|
||||
def __init__(self, time_offset: int, value: float):
|
||||
"""给定时间偏移量及关键值, 初始化关键帧"""
|
||||
self.kf_id = uuid.uuid4().hex
|
||||
|
||||
self.time_offset = time_offset
|
||||
self.values = [value]
|
||||
|
||||
def export_json(self) -> Dict[str, Any]:
|
||||
return {
|
||||
# 默认值
|
||||
"curveType": "Line",
|
||||
"graphID": "",
|
||||
"left_control": {"x": 0.0, "y": 0.0},
|
||||
"right_control": {"x": 0.0, "y": 0.0},
|
||||
# 自定义属性
|
||||
"id": self.kf_id,
|
||||
"time_offset": self.time_offset,
|
||||
"values": self.values
|
||||
}
|
||||
|
||||
class KeyframeProperty(Enum):
|
||||
"""关键帧所控制的属性类型"""
|
||||
|
||||
position_x = "KFTypePositionX"
|
||||
"""右移为正, 此处的数值应该为`剪映中显示的值` / `草稿宽度`, 也即单位是半个画布宽"""
|
||||
position_y = "KFTypePositionY"
|
||||
"""上移为正, 此处的数值应该为`剪映中显示的值` / `草稿高度`, 也即单位是半个画布高"""
|
||||
rotation = "KFTypeRotation"
|
||||
"""顺时针旋转的**角度**"""
|
||||
|
||||
scale_x = "KFTypeScaleX"
|
||||
"""单独控制X轴缩放比例(1.0为不缩放), 与`uniform_scale`互斥"""
|
||||
scale_y = "KFTypeScaleY"
|
||||
"""单独控制Y轴缩放比例(1.0为不缩放), 与`uniform_scale`互斥"""
|
||||
uniform_scale = "UNIFORM_SCALE"
|
||||
"""同时控制X轴及Y轴缩放比例(1.0为不缩放), 与`scale_x`和`scale_y`互斥"""
|
||||
|
||||
alpha = "KFTypeAlpha"
|
||||
"""不透明度, 1.0为完全不透明, 仅对`VideoSegment`有效"""
|
||||
saturation = "KFTypeSaturation"
|
||||
"""饱和度, 0.0为原始饱和度, 范围为-1.0到1.0, 仅对`VideoSegment`有效"""
|
||||
contrast = "KFTypeContrast"
|
||||
"""对比度, 0.0为原始对比度, 范围为-1.0到1.0, 仅对`VideoSegment`有效"""
|
||||
brightness = "KFTypeBrightness"
|
||||
"""亮度, 0.0为原始亮度, 范围为-1.0到1.0, 仅对`VideoSegment`有效"""
|
||||
|
||||
volume = "KFTypeVolume"
|
||||
"""音量, 1.0为原始音量, 仅对`AudioSegment`和`VideoSegment`有效"""
|
||||
|
||||
class KeyframeList:
|
||||
"""关键帧列表, 记录与某个特定属性相关的一系列关键帧"""
|
||||
|
||||
list_id: str
|
||||
"""关键帧列表全局id, 自动生成"""
|
||||
keyframe_property: KeyframeProperty
|
||||
"""关键帧对应的属性"""
|
||||
keyframes: List[Keyframe]
|
||||
"""关键帧列表"""
|
||||
|
||||
def __init__(self, keyframe_property: KeyframeProperty):
|
||||
"""为给定的关键帧属性初始化关键帧列表"""
|
||||
self.list_id = uuid.uuid4().hex
|
||||
|
||||
self.keyframe_property = keyframe_property
|
||||
self.keyframes = []
|
||||
|
||||
def add_keyframe(self, time_offset: int, value: float):
|
||||
"""给定时间偏移量及关键值, 向此关键帧列表中添加一个关键帧"""
|
||||
keyframe = Keyframe(time_offset, value)
|
||||
self.keyframes.append(keyframe)
|
||||
self.keyframes.sort(key=lambda x: x.time_offset)
|
||||
|
||||
def export_json(self) -> Dict[str, Any]:
|
||||
return {
|
||||
"id": self.list_id,
|
||||
"keyframe_list": [kf.export_json() for kf in self.keyframes],
|
||||
"material_id": "",
|
||||
"property_type": self.keyframe_property.value
|
||||
}
|
||||
@@ -0,0 +1,198 @@
|
||||
import os
|
||||
import uuid
|
||||
import pymediainfo
|
||||
|
||||
from typing import Optional, Literal
|
||||
from typing import Dict, Any
|
||||
|
||||
class CropSettings:
|
||||
"""素材的裁剪设置, 各属性均在0-1之间, 注意素材的坐标原点在左上角"""
|
||||
|
||||
upper_left_x: float
|
||||
upper_left_y: float
|
||||
upper_right_x: float
|
||||
upper_right_y: float
|
||||
lower_left_x: float
|
||||
lower_left_y: float
|
||||
lower_right_x: float
|
||||
lower_right_y: float
|
||||
|
||||
def __init__(self, *, upper_left_x: float = 0.0, upper_left_y: float = 0.0,
|
||||
upper_right_x: float = 1.0, upper_right_y: float = 0.0,
|
||||
lower_left_x: float = 0.0, lower_left_y: float = 1.0,
|
||||
lower_right_x: float = 1.0, lower_right_y: float = 1.0):
|
||||
"""初始化裁剪设置, 默认参数表示不裁剪"""
|
||||
self.upper_left_x = upper_left_x
|
||||
self.upper_left_y = upper_left_y
|
||||
self.upper_right_x = upper_right_x
|
||||
self.upper_right_y = upper_right_y
|
||||
self.lower_left_x = lower_left_x
|
||||
self.lower_left_y = lower_left_y
|
||||
self.lower_right_x = lower_right_x
|
||||
self.lower_right_y = lower_right_y
|
||||
|
||||
def export_json(self) -> Dict[str, Any]:
|
||||
return {
|
||||
"upper_left_x": self.upper_left_x,
|
||||
"upper_left_y": self.upper_left_y,
|
||||
"upper_right_x": self.upper_right_x,
|
||||
"upper_right_y": self.upper_right_y,
|
||||
"lower_left_x": self.lower_left_x,
|
||||
"lower_left_y": self.lower_left_y,
|
||||
"lower_right_x": self.lower_right_x,
|
||||
"lower_right_y": self.lower_right_y
|
||||
}
|
||||
|
||||
class VideoMaterial:
|
||||
"""本地视频素材(视频或图片), 一份素材可以在多个片段中使用"""
|
||||
|
||||
material_id: str
|
||||
"""素材全局id, 自动生成"""
|
||||
local_material_id: str
|
||||
"""素材本地id, 意义暂不明确"""
|
||||
material_name: str
|
||||
"""素材名称"""
|
||||
path: str
|
||||
"""素材文件路径"""
|
||||
duration: int
|
||||
"""素材时长, 单位为微秒"""
|
||||
height: int
|
||||
"""素材高度"""
|
||||
width: int
|
||||
"""素材宽度"""
|
||||
crop_settings: CropSettings
|
||||
"""素材裁剪设置"""
|
||||
material_type: Literal["video", "photo"]
|
||||
"""素材类型: 视频或图片"""
|
||||
|
||||
def __init__(self, path: str, material_name: Optional[str] = None, crop_settings: CropSettings = CropSettings()):
|
||||
"""从指定位置加载视频(或图片)素材
|
||||
|
||||
Args:
|
||||
path (`str`): 素材文件路径, 支持mp4, mov, avi等常见视频文件及jpg, jpeg, png等图片文件.
|
||||
material_name (`str`, optional): 素材名称, 如果不指定, 默认使用文件名作为素材名称.
|
||||
crop_settings (`CropSettings`, optional): 素材裁剪设置, 默认不裁剪.
|
||||
|
||||
Raises:
|
||||
`FileNotFoundError`: 素材文件不存在.
|
||||
`ValueError`: 不支持的素材文件类型.
|
||||
"""
|
||||
path = os.path.abspath(path)
|
||||
postfix = os.path.splitext(path)[1]
|
||||
if not os.path.exists(path):
|
||||
raise FileNotFoundError(f"找不到 {path}")
|
||||
|
||||
self.material_name = material_name if material_name else os.path.basename(path)
|
||||
self.material_id = uuid.uuid4().hex
|
||||
self.path = path
|
||||
self.crop_settings = crop_settings
|
||||
self.local_material_id = ""
|
||||
|
||||
if not pymediainfo.MediaInfo.can_parse():
|
||||
raise ValueError(f"不支持的视频素材类型 '{postfix}'")
|
||||
|
||||
info: pymediainfo.MediaInfo = \
|
||||
pymediainfo.MediaInfo.parse(path, mediainfo_options={"File_TestContinuousFileNames": "0"}) # type: ignore
|
||||
# 有视频轨道的视为视频素材
|
||||
if len(info.video_tracks):
|
||||
self.material_type = "video"
|
||||
self.duration = int(info.video_tracks[0].duration * 1e3) # type: ignore
|
||||
self.width, self.height = info.video_tracks[0].width, info.video_tracks[0].height # type: ignore
|
||||
# gif文件使用imageio库获取长度
|
||||
elif postfix.lower() == ".gif":
|
||||
import imageio
|
||||
gif = imageio.get_reader(path)
|
||||
|
||||
self.material_type = "video"
|
||||
self.duration = int(round(gif.get_meta_data()['duration'] * gif.get_length() * 1e3))
|
||||
self.width, self.height = info.image_tracks[0].width, info.image_tracks[0].height # type: ignore
|
||||
gif.close()
|
||||
elif len(info.image_tracks):
|
||||
self.material_type = "photo"
|
||||
self.duration = 10800000000 # 相当于3h
|
||||
self.width, self.height = info.image_tracks[0].width, info.image_tracks[0].height # type: ignore
|
||||
else:
|
||||
raise ValueError(f"输入的素材文件 {path} 没有视频轨道或图片轨道")
|
||||
|
||||
def export_json(self) -> Dict[str, Any]:
|
||||
video_material_json = {
|
||||
"audio_fade": None,
|
||||
"category_id": "",
|
||||
"category_name": "local",
|
||||
"check_flag": 63487,
|
||||
"crop": self.crop_settings.export_json(),
|
||||
"crop_ratio": "free",
|
||||
"crop_scale": 1.0,
|
||||
"duration": self.duration,
|
||||
"height": self.height,
|
||||
"id": self.material_id,
|
||||
"local_material_id": self.local_material_id,
|
||||
"material_id": self.material_id,
|
||||
"material_name": self.material_name,
|
||||
"media_path": "",
|
||||
"path": self.path,
|
||||
"type": self.material_type,
|
||||
"width": self.width
|
||||
}
|
||||
return video_material_json
|
||||
|
||||
class AudioMaterial:
|
||||
"""本地音频素材"""
|
||||
|
||||
material_id: str
|
||||
"""素材全局id, 自动生成"""
|
||||
material_name: str
|
||||
"""素材名称"""
|
||||
path: str
|
||||
"""素材文件路径"""
|
||||
|
||||
duration: int
|
||||
"""素材时长, 单位为微秒"""
|
||||
|
||||
def __init__(self, path: str, material_name: Optional[str] = None):
|
||||
"""从指定位置加载音频素材, 注意视频文件不应该作为音频素材使用
|
||||
|
||||
Args:
|
||||
path (`str`): 素材文件路径, 支持mp3, wav等常见音频文件.
|
||||
material_name (`str`, optional): 素材名称, 如果不指定, 默认使用文件名作为素材名称.
|
||||
|
||||
Raises:
|
||||
`FileNotFoundError`: 素材文件不存在.
|
||||
`ValueError`: 不支持的素材文件类型.
|
||||
"""
|
||||
path = os.path.abspath(path)
|
||||
if not os.path.exists(path):
|
||||
raise FileNotFoundError(f"找不到 {path}")
|
||||
|
||||
self.material_name = material_name if material_name else os.path.basename(path)
|
||||
self.material_id = uuid.uuid4().hex
|
||||
self.path = path
|
||||
|
||||
if not pymediainfo.MediaInfo.can_parse():
|
||||
raise ValueError("不支持的音频素材类型 %s" % os.path.splitext(path)[1])
|
||||
info: pymediainfo.MediaInfo = pymediainfo.MediaInfo.parse(path) # type: ignore
|
||||
if len(info.video_tracks):
|
||||
raise ValueError("音频素材不应包含视频轨道")
|
||||
if not len(info.audio_tracks):
|
||||
raise ValueError(f"给定的素材文件 {path} 没有音频轨道")
|
||||
self.duration = int(info.audio_tracks[0].duration * 1e3) # type: ignore
|
||||
|
||||
def export_json(self) -> Dict[str, Any]:
|
||||
return {
|
||||
"app_id": 0,
|
||||
"category_id": "",
|
||||
"category_name": "local",
|
||||
"check_flag": 3,
|
||||
"copyright_limit_type": "none",
|
||||
"duration": self.duration,
|
||||
"effect_id": "",
|
||||
"formula_id": "",
|
||||
"id": self.material_id,
|
||||
"local_material_id": self.material_id,
|
||||
"music_id": self.material_id,
|
||||
"name": self.material_name,
|
||||
"path": self.path,
|
||||
"source_platform": 0,
|
||||
"type": "extract_music",
|
||||
"wave_points": []
|
||||
}
|
||||
@@ -0,0 +1,55 @@
|
||||
"""记录各种特效/音效/滤镜等的元数据
|
||||
|
||||
音频相关元数据更新时间:2024
|
||||
其余元数据更新时间:2025-08
|
||||
"""
|
||||
|
||||
from .effect_meta import EffectMeta, EffectParamInstance
|
||||
from .effect_meta import AnimationMeta
|
||||
|
||||
# 视频特效
|
||||
from .video_scene_effect import VideoSceneEffectType
|
||||
from .video_character_effect import VideoCharacterEffectType
|
||||
|
||||
# 视频动画
|
||||
from .video_intro import IntroType
|
||||
from .video_outro import OutroType
|
||||
from .video_group_animation import GroupAnimationType
|
||||
|
||||
# 音频特效
|
||||
from .audio_scene_effect import AudioSceneEffectType
|
||||
from .tone_effect import ToneEffectType
|
||||
from .speech_to_song import SpeechToSongType
|
||||
|
||||
# 文本动画
|
||||
from .text_intro import TextIntro
|
||||
from .text_outro import TextOutro
|
||||
from .text_loop import TextLoopAnim
|
||||
|
||||
# 其它
|
||||
from .font_meta import FontType
|
||||
from .mask_meta import MaskType, MaskMeta
|
||||
from .filter_meta import FilterType
|
||||
from .transition_meta import TransitionType
|
||||
|
||||
__all__ = [
|
||||
"AnimationMeta",
|
||||
"EffectMeta",
|
||||
"EffectParamInstance",
|
||||
"MaskType",
|
||||
"MaskMeta",
|
||||
"FilterType",
|
||||
"FontType",
|
||||
"TransitionType",
|
||||
"IntroType",
|
||||
"OutroType",
|
||||
"GroupAnimationType",
|
||||
"TextIntro",
|
||||
"TextOutro",
|
||||
"TextLoopAnim",
|
||||
"AudioSceneEffectType",
|
||||
"ToneEffectType",
|
||||
"SpeechToSongType",
|
||||
"VideoSceneEffectType",
|
||||
"VideoCharacterEffectType"
|
||||
]
|
||||
@@ -0,0 +1,387 @@
|
||||
"""音频场景特效元数据"""
|
||||
|
||||
from .effect_meta import EffectEnum
|
||||
from .effect_meta import EffectMeta, EffectParam
|
||||
|
||||
class AudioSceneEffectType(EffectEnum):
|
||||
"""音频"场景音"效果枚举"""
|
||||
|
||||
# 免费特效
|
||||
_8bit = EffectMeta("8bit", False, "7161319747584266766", "5723961", "8d24238329ea5c250e33ae241d5adae2", [
|
||||
EffectParam("change_voice_param_pitch_shift", 0.500, 0.000, 1.000),
|
||||
EffectParam("change_voice_param_timbre", 1.000, 0.000, 1.000),
|
||||
EffectParam("change_voice_param_strength", 1.000, 0.000, 1.000)])
|
||||
"""参数:
|
||||
change_voice_param_pitch_shift: 默认50%, 0% ~ 100%
|
||||
change_voice_param_timbre: 默认100%, 0% ~ 100%
|
||||
change_voice_param_strength: 默认100%, 0% ~ 100%"""
|
||||
低保真 = EffectMeta("低保真", False, "7024390914537689614", "2672762", "7ddbd39a691a66a021f684cab756a89a", [
|
||||
EffectParam("强弱", 1.000, 0.000, 1.000)])
|
||||
"""参数:
|
||||
强弱: 默认100%, 0% ~ 100%"""
|
||||
合成器 = EffectMeta("合成器", False, "7018011500577034759", "2672753", "394efea5922637bcd8288e0fb3c2372e", [
|
||||
EffectParam("强弱", 1.000, 0.000, 1.000)])
|
||||
"""参数:
|
||||
强弱: 默认100%, 0% ~ 100%"""
|
||||
回音 = EffectMeta("回音", False, "7018011608408396325", "5723901", "5377f66109693f2d473df5ea6ec8f791", [
|
||||
EffectParam("change_voice_param_quantity", 0.800, 0.000, 1.000),
|
||||
EffectParam("change_voice_param_strength", 0.762, 0.000, 1.000)])
|
||||
"""参数:
|
||||
change_voice_param_quantity: 默认80%, 0% ~ 100%
|
||||
change_voice_param_strength: 默认76%, 0% ~ 100%"""
|
||||
扩音器 = EffectMeta("扩音器", False, "7018011975514853924", "2672749", "13169f6ab9957ff005d316239bef0045", [
|
||||
EffectParam("强弱", 1.000, 0.000, 1.000)])
|
||||
"""参数:
|
||||
强弱: 默认100%, 0% ~ 100%"""
|
||||
水下 = EffectMeta("水下", False, "7106404450444513806", "2673077", "53956694a8b68b2855faa2adc043b5b1", [
|
||||
EffectParam("深度", 0.500, 0.000, 1.000)])
|
||||
"""参数:
|
||||
深度: 默认50%, 0% ~ 100%"""
|
||||
没电了 = EffectMeta("没电了", False, "7018012193769656845", "2672747", "87f91614bac060840ad5a57ef2b0c9ca", [
|
||||
EffectParam("强弱", 1.000, 0.000, 1.000)])
|
||||
"""参数:
|
||||
强弱: 默认100%, 0% ~ 100%"""
|
||||
环绕音 = EffectMeta("环绕音", False, "7161319847819743780", "5723960", "fa9a4cb20d3488bf79e176571d5841f5", [
|
||||
EffectParam("change_voice_param_center_position", 0.500, 0.000, 1.000),
|
||||
EffectParam("change_voice_param_surrounding_frequency", 0.500, 0.000, 1.000)])
|
||||
"""参数:
|
||||
change_voice_param_center_position: 默认50%, 0% ~ 100%
|
||||
change_voice_param_surrounding_frequency: 默认50%, 0% ~ 100%"""
|
||||
电音 = EffectMeta("电音", False, "7018011438379700773", "2672754", "d893a319d5175d9f09f70ddef1f79980", [
|
||||
EffectParam("强弱", 1.000, 0.000, 1.000)])
|
||||
"""参数:
|
||||
强弱: 默认100%, 0% ~ 100%"""
|
||||
颤音 = EffectMeta("颤音", False, "7018011370289369637", "2672755", "c5e4874f83337e1cb9f8322fb843c901", [
|
||||
EffectParam("频率", 0.714, 0.000, 1.000),
|
||||
EffectParam("幅度", 0.905, 0.000, 1.000)])
|
||||
"""参数:
|
||||
频率: 默认71%, 0% ~ 100%
|
||||
幅度: 默认90%, 0% ~ 100%"""
|
||||
麦霸 = EffectMeta("麦霸", False, "7018012141332468260", "2672748", "3eedef5ef82b32912203a1f4fb901182", [
|
||||
EffectParam("空间大小", 0.052, 0.000, 1.000),
|
||||
EffectParam("强弱", 0.450, 0.000, 1.000)])
|
||||
"""参数:
|
||||
空间大小: 默认5%, 0% ~ 100%
|
||||
强弱: 默认45%, 0% ~ 100%"""
|
||||
黑胶 = EffectMeta("黑胶", False, "7024391411764040205", "2672761", "59e61d687a0f612bfae43bccf770f090", [
|
||||
EffectParam("强弱", 1.000, 0.000, 1.000),
|
||||
EffectParam("噪点", 0.743, 0.000, 1.000)])
|
||||
"""参数:
|
||||
强弱: 默认100%, 0% ~ 100%
|
||||
噪点: 默认74%, 0% ~ 100%"""
|
||||
|
||||
# 付费特效
|
||||
_360度环绕音 = EffectMeta("360度环绕音", True, "7410254975328064040", "81298963", "cc1709e1be9bb76d98cf54f28efda236", [
|
||||
EffectParam("strength", 1.000, 0.000, 1.000)])
|
||||
"""参数:
|
||||
strength: 默认100%, 0% ~ 100%"""
|
||||
_3d环绕音 = EffectMeta("3d环绕音", True, "7350214888242811455", "53187169", "577c3d8e5312012b1d98ba5fc0b206d0", [
|
||||
EffectParam("强度", 0.000, 0.000, 1.000)])
|
||||
"""参数:
|
||||
强度: 默认0%, 0% ~ 100%"""
|
||||
Autotune = EffectMeta("Autotune", True, "7360900806851170828", "58979352", "1477f4ca8307e2fa4ee2243d98d8b837", [
|
||||
EffectParam("强度", 1.000, 0.000, 1.000)])
|
||||
"""参数:
|
||||
强度: 默认100%, 0% ~ 100%"""
|
||||
Livehouse = EffectMeta("Livehouse", True, "7413661671941476904", "82364386", "d626c7854922c9fabb2a777e40f05aff", [
|
||||
EffectParam("强度", 1.000, 0.000, 1.000)])
|
||||
"""参数:
|
||||
强度: 默认100%, 0% ~ 100%"""
|
||||
下雨 = EffectMeta("下雨", True, "7375069649446113804", "68076030", "0633c88a5d6344a5ac1c00aa05e43d5f", [
|
||||
EffectParam("strength", 1.000, 0.000, 1.000),
|
||||
EffectParam("noise", 0.743, 0.000, 1.000)])
|
||||
"""参数:
|
||||
strength: 默认100%, 0% ~ 100%
|
||||
noise: 默认74%, 0% ~ 100%"""
|
||||
乡村大喇叭 = EffectMeta("乡村大喇叭", True, "7282691036197950009", "23897651", "c996243ac50d235f00e5931e5ecadc52", [
|
||||
EffectParam("强度", 1.000, 0.000, 1.000)])
|
||||
"""参数:
|
||||
强度: 默认100%, 0% ~ 100%"""
|
||||
人声增强 = EffectMeta("人声增强", True, "7106404399756349983", "2673078", "626f988dbd2cbd17acaa24d08451e314", [
|
||||
EffectParam("强弱", 1.000, 0.000, 1.000)])
|
||||
"""参数:
|
||||
强弱: 默认100%, 0% ~ 100%"""
|
||||
人声增强3 = EffectMeta("人声增强3", True, "7425556785693463090", "86419033", "9324a8dd6d5f67820bb50577a129a577", [
|
||||
EffectParam("强度", 1.000, 0.000, 1.000)])
|
||||
"""参数:
|
||||
强度: 默认100%, 0% ~ 100%"""
|
||||
低保真扩音器 = EffectMeta("低保真扩音器", True, "7467815819540435506", "103845136", "6955de18e7c318f8b0a91c7b06377a69", [
|
||||
EffectParam("强度", 1.000, 0.000, 1.000)])
|
||||
"""参数:
|
||||
强度: 默认100%, 0% ~ 100%"""
|
||||
低音增强 = EffectMeta("低音增强", True, "7106404304247853604", "2673080", "e7c09c96d10c163269fc4e35c1f4b1ee", [
|
||||
EffectParam("change_voice_param_strength", 1.000, 0.000, 1.000)])
|
||||
"""参数:
|
||||
change_voice_param_strength: 默认100%, 0% ~ 100%"""
|
||||
低音增强2 = EffectMeta("低音增强2", True, "7410254814539420195", "81298965", "b5b8e03035ed0e9bc1d23895366869ff", [
|
||||
EffectParam("strength", 1.000, 0.000, 1.000)])
|
||||
"""参数:
|
||||
strength: 默认100%, 0% ~ 100%"""
|
||||
停车场 = EffectMeta("停车场", True, "7372150242524795446", "66413024", "d2dd515293081a8573485159db5a71e0", [
|
||||
EffectParam("strength", 1.000, 0.000, 1.000)])
|
||||
"""参数:
|
||||
strength: 默认100%, 0% ~ 100%"""
|
||||
冥想 = EffectMeta("冥想", True, "7467815749931766322", "103845143", "1785bb1a52982661c7fc475f130d1b7b", [
|
||||
EffectParam("强度", 1.000, 0.000, 1.000)])
|
||||
"""参数:
|
||||
强度: 默认100%, 0% ~ 100%"""
|
||||
冰川之下 = EffectMeta("冰川之下", True, "7375068986829967883", "68076029", "6b9cda93f6d75b9a3b19b2e8eb6ad40f", [
|
||||
EffectParam("strength", 1.000, 0.000, 1.000),
|
||||
EffectParam("noise", 0.743, 0.000, 1.000)])
|
||||
"""参数:
|
||||
strength: 默认100%, 0% ~ 100%
|
||||
noise: 默认74%, 0% ~ 100%"""
|
||||
刮风 = EffectMeta("刮风", True, "7375069247275274771", "68076028", "33e99402b2b056ce4f44f820ceac5cb5", [
|
||||
EffectParam("strength", 1.000, 0.000, 1.000),
|
||||
EffectParam("noise", 0.743, 0.000, 1.000)])
|
||||
"""参数:
|
||||
strength: 默认100%, 0% ~ 100%
|
||||
noise: 默认74%, 0% ~ 100%"""
|
||||
午夜电台 = EffectMeta("午夜电台", True, "7431088998652580378", "88155751", "94ce3c12b4f9e72469bccbba9d3c020e", [
|
||||
EffectParam("强度", 1.000, 0.000, 1.000)])
|
||||
"""参数:
|
||||
强度: 默认100%, 0% ~ 100%"""
|
||||
噪音混响 = EffectMeta("噪音混响", True, "7382844688987853349", "72110975", "3b3b09b530b0a64666f1c5b6d20d4018", [
|
||||
EffectParam("strength", 1.000, 0.000, 1.000)])
|
||||
"""参数:
|
||||
strength: 默认100%, 0% ~ 100%"""
|
||||
回声 = EffectMeta("回声", True, "7425556970339308083", "86419034", "edbfe18f8479b3da7e091b6d8bb2b592", [
|
||||
EffectParam("强度", 1.000, 0.000, 1.000)])
|
||||
"""参数:
|
||||
强度: 默认100%, 0% ~ 100%"""
|
||||
回忆人声 = EffectMeta("回忆人声", True, "7400653027557773865", "78208789", "5a1681f3a09b861ef3e4a65b2f9b794d", [
|
||||
EffectParam("strength", 1.000, 0.000, 1.000)])
|
||||
"""参数:
|
||||
strength: 默认100%, 0% ~ 100%"""
|
||||
地狱 = EffectMeta("地狱", True, "7375069113988682281", "68076027", "5ec03c41ada16530949daa4106c85a90", [
|
||||
EffectParam("strength", 1.000, 0.000, 1.000),
|
||||
EffectParam("noise", 0.743, 0.000, 1.000)])
|
||||
"""参数:
|
||||
strength: 默认100%, 0% ~ 100%
|
||||
noise: 默认74%, 0% ~ 100%"""
|
||||
复古收音机 = EffectMeta("复古收音机", True, "7350215379714576907", "53187166", "301d642d131aabff7ea8c3b717b36a79", [
|
||||
EffectParam("强度", 1.000, 0.000, 1.000)])
|
||||
"""参数:
|
||||
强度: 默认100%, 0% ~ 100%"""
|
||||
复古收音机2 = EffectMeta("复古收音机2", True, "7431088943560397339", "88155750", "ef070459bb3eb2c02b0d65277369424c", [
|
||||
EffectParam("强度", 1.000, 0.000, 1.000)])
|
||||
"""参数:
|
||||
强度: 默认100%, 0% ~ 100%"""
|
||||
复古电视 = EffectMeta("复古电视", True, "7431089082647712282", "88155749", "a2e9b297a1acdb997c3f71bb4273bf77", [
|
||||
EffectParam("强度", 1.000, 0.000, 1.000)])
|
||||
"""参数:
|
||||
强度: 默认100%, 0% ~ 100%"""
|
||||
失真电子 = EffectMeta("失真电子", True, "7350215296801575443", "53187167", "a1c00df42076ed1bd6a81f2d30b94566", [
|
||||
EffectParam("强度", 1.000, 0.000, 1.000)])
|
||||
"""参数:
|
||||
强度: 默认100%, 0% ~ 100%"""
|
||||
宽阔人声 = EffectMeta("宽阔人声", True, "7400653260320674343", "78208785", "8472328fd44653bd18d871357da26dd7", [
|
||||
EffectParam("strength", 1.000, 0.000, 1.000)])
|
||||
"""参数:
|
||||
strength: 默认100%, 0% ~ 100%"""
|
||||
对讲机 = EffectMeta("对讲机", True, "7350214704284832275", "53187168", "016dbdb3c786896c92bb936ece11acf6", [
|
||||
EffectParam("强度", 1.000, 0.000, 1.000)])
|
||||
"""参数:
|
||||
强度: 默认100%, 0% ~ 100%"""
|
||||
山洞 = EffectMeta("山洞", True, "7392070412865114659", "75411128", "4335ffa39cfdd4b7635fb6beb49dea80", [
|
||||
EffectParam("strength", 1.000, 0.000, 1.000)])
|
||||
"""参数:
|
||||
strength: 默认100%, 0% ~ 100%"""
|
||||
广播 = EffectMeta("广播", True, "7418519152467382794", "84093261", "d3378900221ac03887cb608f1bae981c", [
|
||||
EffectParam("强度", 1.000, 0.000, 1.000)])
|
||||
"""参数:
|
||||
强度: 默认100%, 0% ~ 100%"""
|
||||
延迟回声 = EffectMeta("延迟回声", True, "7425556912709571110", "86419029", "26201a59916f7616c4706788aceee188", [
|
||||
EffectParam("强度", 1.000, 0.000, 1.000)])
|
||||
"""参数:
|
||||
强度: 默认100%, 0% ~ 100%"""
|
||||
恐怖音效 = EffectMeta("恐怖音效", True, "7431088801579012645", "88155748", "5e8778aa2e2e8270fba1b5e677b8e5fc", [
|
||||
EffectParam("强度", 1.000, 0.000, 1.000),
|
||||
EffectParam("背景音", 0.500, 0.000, 1.000)])
|
||||
"""参数:
|
||||
强度: 默认100%, 0% ~ 100%
|
||||
背景音: 默认50%, 0% ~ 100%"""
|
||||
房间 = EffectMeta("房间", True, "7282691385872880165", "23880629", "639f5c0c6b20418aaeb0e144da21151c", [
|
||||
EffectParam("强度", 1.000, 0.000, 1.000)])
|
||||
"""参数:
|
||||
强度: 默认100%, 0% ~ 100%"""
|
||||
捂嘴 = EffectMeta("捂嘴", True, "7372405649684042292", "66552320", "9f9a8270c0005a480547d6ddf2a9293a", [
|
||||
EffectParam("strength", 1.000, 0.000, 1.000)])
|
||||
"""参数:
|
||||
strength: 默认100%, 0% ~ 100%"""
|
||||
教堂 = EffectMeta("教堂", True, "7282691146759803429", "23882063", "96dc71756d0025e96a504b42d988b2ac", [
|
||||
EffectParam("强度", 1.000, 0.000, 1.000)])
|
||||
"""参数:
|
||||
强度: 默认100%, 0% ~ 100%"""
|
||||
教室 = EffectMeta("教室", True, "7282687783833965113", "23897703", "678c14a6f63f75e03daa062a254081f7", [
|
||||
EffectParam("强度", 1.000, 0.000, 1.000)])
|
||||
"""参数:
|
||||
强度: 默认100%, 0% ~ 100%"""
|
||||
时光扭曲 = EffectMeta("时光扭曲", True, "7410254477246075407", "81298964", "b4abdda11160d663308aeb0dab6063de", [
|
||||
EffectParam("strength", 1.000, 0.000, 1.000)])
|
||||
"""参数:
|
||||
strength: 默认100%, 0% ~ 100%"""
|
||||
森林 = EffectMeta("森林", True, "7413270049080742415", "82210570", "147be719531ade36bd6959338a3caa29", [
|
||||
EffectParam("强度", 1.000, 0.000, 1.000),
|
||||
EffectParam("背景音", 0.500, 0.000, 1.000)])
|
||||
"""参数:
|
||||
强度: 默认100%, 0% ~ 100%
|
||||
背景音: 默认50%, 0% ~ 100%"""
|
||||
楼道 = EffectMeta("楼道", True, "7410254596020376064", "81298960", "c1806a2578d126dd74433640f5e09bab", [
|
||||
EffectParam("strength", 1.000, 0.000, 1.000)])
|
||||
"""参数:
|
||||
strength: 默认100%, 0% ~ 100%"""
|
||||
楼道回声 = EffectMeta("楼道回声", True, "7425556847509115401", "86419032", "4e418df9c1cb821c20e10fcf304b7e93", [
|
||||
EffectParam("强度", 1.000, 0.000, 1.000)])
|
||||
"""参数:
|
||||
强度: 默认100%, 0% ~ 100%"""
|
||||
氦气 = EffectMeta("氦气", True, "7400653188803596836", "78208787", "9c59009886c059e20d3914089afbc82f", [
|
||||
EffectParam("strength", 1.000, 0.000, 1.000)])
|
||||
"""参数:
|
||||
strength: 默认100%, 0% ~ 100%"""
|
||||
沙漠 = EffectMeta("沙漠", True, "7375069515530375691", "68076025", "5bd2772879c6273189d3fc7f07581e71", [
|
||||
EffectParam("strength", 1.000, 0.000, 1.000),
|
||||
EffectParam("noise", 0.743, 0.000, 1.000)])
|
||||
"""参数:
|
||||
strength: 默认100%, 0% ~ 100%
|
||||
noise: 默认74%, 0% ~ 100%"""
|
||||
洞穴回声 = EffectMeta("洞穴回声", True, "7425557093597319689", "86419031", "bec3da95c2b4c70e8e1202972aeaf8e3", [
|
||||
EffectParam("强度", 1.000, 0.000, 1.000)])
|
||||
"""参数:
|
||||
强度: 默认100%, 0% ~ 100%"""
|
||||
派对 = EffectMeta("派对", True, "7381685442795541042", "71718513", "723386ab87f938779a3369436234d903", [
|
||||
EffectParam("strength", 1.000, 0.000, 1.000),
|
||||
EffectParam("noise", 0.743, 0.000, 1.000)])
|
||||
"""参数:
|
||||
strength: 默认100%, 0% ~ 100%
|
||||
noise: 默认74%, 0% ~ 100%"""
|
||||
浴室 = EffectMeta("浴室", True, "7392070514686038543", "75411129", "543fa76977e80084f25067c94e4c08a8", [
|
||||
EffectParam("strength", 1.000, 0.000, 1.000)])
|
||||
"""参数:
|
||||
strength: 默认100%, 0% ~ 100%"""
|
||||
深海回声 = EffectMeta("深海回声", True, "7350215168413929995", "53187172", "37a16a2dc77540b7d70fe301e482d4f2", [
|
||||
EffectParam("强度", 1.000, 0.000, 1.000)])
|
||||
"""参数:
|
||||
强度: 默认100%, 0% ~ 100%"""
|
||||
深邃人声 = EffectMeta("深邃人声", True, "7400653111255110183", "78208786", "1d79f2c0660e1f4a2441255b9e34be6e", [
|
||||
EffectParam("strength", 1.000, 0.000, 1.000)])
|
||||
"""参数:
|
||||
strength: 默认100%, 0% ~ 100%"""
|
||||
清澈人声 = EffectMeta("清澈人声", True, "7410254648440787456", "81298967", "b99fbb6dd42a759572f4ba13efb516ae", [
|
||||
EffectParam("strength", 1.000, 0.000, 1.000)])
|
||||
"""参数:
|
||||
strength: 默认100%, 0% ~ 100%"""
|
||||
演唱会 = EffectMeta("演唱会", True, "7413661596611777076", "82364387", "8ceb67756bd822b7ee9728903c8e3efa", [
|
||||
EffectParam("强度", 1.000, 0.000, 1.000)])
|
||||
"""参数:
|
||||
强度: 默认100%, 0% ~ 100%"""
|
||||
演讲舞台 = EffectMeta("演讲舞台", True, "7431088715092464155", "88155747", "6452fbaa8d66c01c491fc6d5816afc77", [
|
||||
EffectParam("强度", 1.000, 0.000, 1.000)])
|
||||
"""参数:
|
||||
强度: 默认100%, 0% ~ 100%"""
|
||||
环绕回声 = EffectMeta("环绕回声", True, "7425557028694659635", "86419030", "0fe55903f86c3fdad33275b04c04cba0", [
|
||||
EffectParam("强度", 1.000, 0.000, 1.000)])
|
||||
"""参数:
|
||||
强度: 默认100%, 0% ~ 100%"""
|
||||
电台播音 = EffectMeta("电台播音", True, "7418519267659747877", "84093262", "752c3df02caa20b12bfa3154ed025bff", [
|
||||
EffectParam("强度", 1.000, 0.000, 1.000)])
|
||||
"""参数:
|
||||
强度: 默认100%, 0% ~ 100%"""
|
||||
电话 = EffectMeta("电话", True, "7264894634285863483", "20255003", "5da5a98b8c926c0dcc1c3c8bc3f3012f", [
|
||||
EffectParam("强弱", 0.700, 0.000, 1.000)])
|
||||
"""参数:
|
||||
强弱: 默认70%, 0% ~ 100%"""
|
||||
留声机 = EffectMeta("留声机", True, "7282687663872676408", "23897797", "e692fae669650c948451b5811a04e7e6", [
|
||||
EffectParam("强度", 1.000, 0.000, 1.000)])
|
||||
"""参数:
|
||||
强度: 默认100%, 0% ~ 100%"""
|
||||
百老汇 = EffectMeta("百老汇", True, "7372150379150053907", "66413025", "73e3a35496b9766d0400165844be72f1", [
|
||||
EffectParam("strength", 1.000, 0.000, 1.000)])
|
||||
"""参数:
|
||||
strength: 默认100%, 0% ~ 100%"""
|
||||
空灵感 = EffectMeta("空灵感", True, "7350215092975178252", "53187171", "aa1887a8b3375d20df6bf9438d62083a", [
|
||||
EffectParam("强度", 1.000, 0.000, 1.000)])
|
||||
"""参数:
|
||||
强度: 默认100%, 0% ~ 100%"""
|
||||
空谷回声 = EffectMeta("空谷回声", True, "7350214991628210727", "53187170", "9913daa32167a17c1f41ad2f5596c411", [
|
||||
EffectParam("强度", 1.000, 0.000, 1.000)])
|
||||
"""参数:
|
||||
强度: 默认100%, 0% ~ 100%"""
|
||||
立体声 = EffectMeta("立体声", True, "7418519209996456498", "84093260", "4381314f6906919781ea17c0d51f36a0", [
|
||||
EffectParam("强度", 1.000, 0.000, 1.000)])
|
||||
"""参数:
|
||||
强度: 默认100%, 0% ~ 100%"""
|
||||
管道 = EffectMeta("管道", True, "7410254536234766863", "81298962", "37233b9d5efed3324a4c6a9d05831f40", [
|
||||
EffectParam("strength", 1.000, 0.000, 1.000)])
|
||||
"""参数:
|
||||
strength: 默认100%, 0% ~ 100%"""
|
||||
老式电话 = EffectMeta("老式电话", True, "7282691476843139621", "23880011", "2eb835175e1e72e9d86b09bf513077cf", [
|
||||
EffectParam("强度", 1.000, 0.000, 1.000)])
|
||||
"""参数:
|
||||
强度: 默认100%, 0% ~ 100%"""
|
||||
蚊子变声 = EffectMeta("蚊子变声", True, "7467815685876355622", "103845137", "b34cc53f1adf2f9decb0111a0082eb0a", [
|
||||
EffectParam("强度", 1.000, 0.000, 1.000)])
|
||||
"""参数:
|
||||
强度: 默认100%, 0% ~ 100%"""
|
||||
言灵术 = EffectMeta("言灵术", True, "7382844601435951653", "72110974", "7184386e75226a36942c60a5d5bb5618", [
|
||||
EffectParam("strength", 1.000, 0.000, 1.000)])
|
||||
"""参数:
|
||||
strength: 默认100%, 0% ~ 100%"""
|
||||
豪宅回声 = EffectMeta("豪宅回声", True, "7360900963294515775", "58979353", "7c20b5fba991f3188f14d7cdb0de1fa1", [
|
||||
EffectParam("强度", 1.000, 0.000, 1.000)])
|
||||
"""参数:
|
||||
强度: 默认100%, 0% ~ 100%"""
|
||||
超市广播 = EffectMeta("超市广播", True, "7431088660709118514", "88155744", "14a9154302878be941c993ff6dfd0f3d", [
|
||||
EffectParam("强度", 1.000, 0.000, 1.000),
|
||||
EffectParam("背景音", 0.500, 0.000, 1.000)])
|
||||
"""参数:
|
||||
强度: 默认100%, 0% ~ 100%
|
||||
背景音: 默认50%, 0% ~ 100%"""
|
||||
超级混响 = EffectMeta("超级混响", True, "7400652941318689299", "78208790", "c1a87e3affc5c812609b4eded7609e81", [
|
||||
EffectParam("strength", 1.000, 0.000, 1.000)])
|
||||
"""参数:
|
||||
strength: 默认100%, 0% ~ 100%"""
|
||||
超重低音 = EffectMeta("超重低音", True, "7410254867232461364", "81298961", "db9c654a48e01c71bfb097d70d21a42d", [
|
||||
EffectParam("strength", 1.000, 0.000, 1.000)])
|
||||
"""参数:
|
||||
strength: 默认100%, 0% ~ 100%"""
|
||||
迷幻 = EffectMeta("迷幻", True, "7410254415921156643", "81298966", "1f549f0d21a5e7729268e6d443857364", [
|
||||
EffectParam("强度", 1.000, 0.000, 1.000)])
|
||||
"""参数:
|
||||
强度: 默认100%, 0% ~ 100%"""
|
||||
迷幻电子 = EffectMeta("迷幻电子", True, "7375069381769826879", "68076026", "65ef01ba4626318fab4f007fec136e1e", [
|
||||
EffectParam("strength", 1.000, 0.000, 1.000),
|
||||
EffectParam("noise", 0.743, 0.000, 1.000)])
|
||||
"""参数:
|
||||
strength: 默认100%, 0% ~ 100%
|
||||
noise: 默认74%, 0% ~ 100%"""
|
||||
闷响 = EffectMeta("闷响", True, "7413269872307606016", "82210571", "8d966ef5950315b96dcd02bfc511d5e0", [
|
||||
EffectParam("强度", 1.000, 0.000, 1.000)])
|
||||
"""参数:
|
||||
强度: 默认100%, 0% ~ 100%"""
|
||||
震撼全景音 = EffectMeta("震撼全景音", True, "7400653333456753163", "78208788", "1b65723d3e25e82a3ab99af289728498", [
|
||||
EffectParam("strength", 1.000, 0.000, 1.000)])
|
||||
"""参数:
|
||||
strength: 默认100%, 0% ~ 100%"""
|
||||
音乐厅 = EffectMeta("音乐厅", True, "7404798608395997723", "79701150", "e819bbe1cd586bd9a2118ca39758ac22", [
|
||||
EffectParam("strength", 1.000, 0.000, 1.000)])
|
||||
"""参数:
|
||||
strength: 默认100%, 0% ~ 100%"""
|
||||
颤抖电音 = EffectMeta("颤抖电音", True, "7467815889602089523", "103845138", "8fbf024a96e0c659e8b3d3ca975f1042", [
|
||||
EffectParam("强度", 1.000, 0.000, 1.000)])
|
||||
"""参数:
|
||||
强度: 默认100%, 0% ~ 100%"""
|
||||
马路边 = EffectMeta("马路边", True, "7413269976628335119", "82210569", "1c0c1e3be5ead093b685f451033de74e", [
|
||||
EffectParam("强度", 1.000, 0.000, 1.000),
|
||||
EffectParam("背景音", 0.500, 0.000, 1.000)])
|
||||
"""参数:
|
||||
强度: 默认100%, 0% ~ 100%
|
||||
背景音: 默认50%, 0% ~ 100%"""
|
||||
高解析人声 = EffectMeta("高解析人声", True, "7410254695169528355", "81298968", "3bcf82243ef574064bb53f99a2f59d5d", [
|
||||
EffectParam("strength", 1.000, 0.000, 1.000)])
|
||||
"""参数:
|
||||
strength: 默认100%, 0% ~ 100%"""
|
||||
高音增强 = EffectMeta("高音增强", True, "7410254923037676047", "81298959", "59b5cc1fc51c2557d9d20e0d7494edc8", [
|
||||
EffectParam("strength", 1.000, 0.000, 1.000)])
|
||||
"""参数:
|
||||
strength: 默认100%, 0% ~ 100%"""
|
||||
@@ -0,0 +1,191 @@
|
||||
"""元数据类型定义"""
|
||||
|
||||
from enum import Enum
|
||||
|
||||
from typing import List, Dict, Any
|
||||
from typing import TypeVar, Optional
|
||||
|
||||
class EffectParam:
|
||||
"""特效参数信息"""
|
||||
|
||||
name: str
|
||||
"""参数名称"""
|
||||
default_value: float
|
||||
"""默认值"""
|
||||
min_value: float
|
||||
"""最小值"""
|
||||
max_value: float
|
||||
"""最大值"""
|
||||
|
||||
def __init__(self, name: str, default_value: float, min_value: float, max_value: float):
|
||||
self.name = name
|
||||
self.default_value = default_value
|
||||
self.min_value = min_value
|
||||
self.max_value = max_value
|
||||
|
||||
class EffectParamInstance(EffectParam):
|
||||
"""特效参数实例"""
|
||||
|
||||
index: int
|
||||
"""参数索引"""
|
||||
value: float
|
||||
"""当前值"""
|
||||
|
||||
def __init__(self, meta: EffectParam, index: int, value: float):
|
||||
super().__init__(meta.name, meta.default_value, meta.min_value, meta.max_value)
|
||||
self.index = index
|
||||
self.value = value
|
||||
|
||||
def export_json(self) -> Dict[str, Any]:
|
||||
return {
|
||||
"default_value": self.default_value,
|
||||
"max_value": self.max_value,
|
||||
"min_value": self.min_value,
|
||||
"name": self.name,
|
||||
"parameterIndex": self.index,
|
||||
"portIndex": 0,
|
||||
"value": self.value
|
||||
}
|
||||
|
||||
# 基础特效元数据, 直接用于滤镜/文字/视频特效
|
||||
class EffectMeta:
|
||||
"""特效元数据, 直接用于滤镜/文字/视频特效"""
|
||||
|
||||
name: str
|
||||
"""效果名称"""
|
||||
is_vip: bool
|
||||
"""是否为VIP特权"""
|
||||
|
||||
resource_id: str
|
||||
"""资源ID"""
|
||||
effect_id: str
|
||||
"""效果ID"""
|
||||
md5: str
|
||||
|
||||
params: List[EffectParam]
|
||||
"""效果的参数信息"""
|
||||
|
||||
def __init__(self, name: str, is_vip: bool, resource_id: str, effect_id: str, md5: str, params: List[EffectParam] = []):
|
||||
self.name = name
|
||||
self.is_vip = is_vip
|
||||
self.resource_id = resource_id
|
||||
self.effect_id = effect_id
|
||||
self.md5 = md5
|
||||
self.params = params
|
||||
|
||||
def parse_params(self, params: Optional[List[Optional[float]]]) -> List[EffectParamInstance]:
|
||||
"""解析参数列表(范围0~100), 返回参数实例列表"""
|
||||
ret: List[EffectParamInstance] = []
|
||||
|
||||
if params is None: params = []
|
||||
for i, param in enumerate(self.params):
|
||||
val = param.default_value
|
||||
if i < len(params):
|
||||
input_v = params[i]
|
||||
if input_v is not None:
|
||||
if input_v < 0 or input_v > 100:
|
||||
raise ValueError("Invalid parameter value %f within %s" % (input_v, str(param)))
|
||||
val = param.min_value + (param.max_value - param.min_value) * input_v / 100.0 # 从0~100映射到实际值
|
||||
ret.append(EffectParamInstance(param, i, val))
|
||||
return ret
|
||||
|
||||
|
||||
EffectEnumSubclass = TypeVar("EffectEnumSubclass", bound="EffectEnum")
|
||||
|
||||
class EffectEnum(Enum):
|
||||
"""特效枚举基类, 提供一个`from_name`方法用于根据名称获取特效元数据"""
|
||||
|
||||
@classmethod
|
||||
def from_name(cls: "type[EffectEnumSubclass]", name: str) -> EffectEnumSubclass:
|
||||
"""根据名称获取特效元数据, 忽略大小写、空格和下划线
|
||||
|
||||
Args:
|
||||
name (str): 特效名称
|
||||
|
||||
Raises:
|
||||
`ValueError`: 特效名称不存在
|
||||
"""
|
||||
name = name.lower().replace(" ", "").replace("_", "")
|
||||
for effect in cls:
|
||||
if effect.name.lower().replace(" ", "").replace("_", "") == name:
|
||||
return effect
|
||||
raise ValueError(f"Effect named '{name}' not found")
|
||||
|
||||
# 动画元数据
|
||||
class AnimationMeta:
|
||||
"""动画元数据, 用于视频/文字片段的入场/出场/组合动画"""
|
||||
|
||||
title: str
|
||||
is_vip: bool
|
||||
duration: int
|
||||
"""效果默认时长, 单位为微秒"""
|
||||
|
||||
resource_id: str
|
||||
effect_id: str
|
||||
md5: str
|
||||
|
||||
def __init__(self, title: str, is_vip: bool, duration: float, resource_id: str, effect_id: str, md5: str):
|
||||
self.title = title
|
||||
self.is_vip = is_vip
|
||||
self.duration = int(round(duration * 1e6))
|
||||
self.resource_id = resource_id
|
||||
self.effect_id = effect_id
|
||||
self.md5 = md5
|
||||
|
||||
# 蒙版元数据
|
||||
class MaskMeta:
|
||||
"""蒙版元数据"""
|
||||
|
||||
name: str
|
||||
"""转场名称"""
|
||||
|
||||
resource_type: str
|
||||
"""资源类型, 与蒙版形状相关"""
|
||||
|
||||
resource_id: str
|
||||
"""资源ID"""
|
||||
effect_id: str
|
||||
"""效果ID"""
|
||||
md5: str
|
||||
|
||||
default_aspect_ratio: float
|
||||
"""默认宽高比(宽高都是相对素材的比例)"""
|
||||
|
||||
def __init__(self, name: str, resource_type: str, resource_id: str, effect_id: str, md5: str, default_aspect_ratio: float):
|
||||
self.name = name
|
||||
self.resource_type = resource_type
|
||||
self.resource_id = resource_id
|
||||
self.effect_id = effect_id
|
||||
self.md5 = md5
|
||||
|
||||
self.default_aspect_ratio = default_aspect_ratio
|
||||
|
||||
# 转场元数据
|
||||
class TransitionMeta:
|
||||
"""转场元数据"""
|
||||
|
||||
name: str
|
||||
"""转场名称"""
|
||||
is_vip: bool
|
||||
"""是否为VIP特权"""
|
||||
|
||||
resource_id: str
|
||||
"""资源ID"""
|
||||
effect_id: str
|
||||
"""效果ID"""
|
||||
md5: str
|
||||
|
||||
default_duration: int
|
||||
"""默认持续时间, 单位为微秒"""
|
||||
is_overlap: bool
|
||||
"""是否允许重叠(?)"""
|
||||
|
||||
def __init__(self, name: str, is_vip: bool, resource_id: str, effect_id: str, md5: str, default_duration: float, is_overlap: bool):
|
||||
self.name = name
|
||||
self.is_vip = is_vip
|
||||
self.resource_id = resource_id
|
||||
self.effect_id = effect_id
|
||||
self.md5 = md5
|
||||
|
||||
self.default_duration = int(round(default_duration * 1e6))
|
||||
self.is_overlap = is_overlap
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,807 @@
|
||||
"""字体资源元数据"""
|
||||
|
||||
from .effect_meta import EffectEnum
|
||||
from .effect_meta import EffectMeta
|
||||
|
||||
class FontType(EffectEnum):
|
||||
"""字体资源类型"""
|
||||
|
||||
# 免费特效
|
||||
_3D_만화 = EffectMeta("3D 만화", False, "6841117833447870990", "20402387", "9d79db0486d90980a54240b3313ea156", [])
|
||||
A1明朝 = EffectMeta("A1明朝", False, "7246698168547545602", "20403949", "6eca3b3507bab16aac9ad557fa17a46e", [])
|
||||
AlexBrush = EffectMeta("AlexBrush", False, "7241838813960475173", "14864426", "6be278d4aef1173e6ca44f9ff96f913a", [])
|
||||
Alice_Regular = EffectMeta("Alice-Regular", False, "7238874837500826170", "14443129", "2d35398aea443c50ab0f28f32492311d", [])
|
||||
Alike_Regular = EffectMeta("Alike-Regular", False, "7238879091334582821", "14443547", "51f4b11df2a6423c714ce8e27febf3a8", [])
|
||||
Allura_Regular = EffectMeta("Allura-Regular", False, "7239181917067678266", "14864457", "db0c6eb393c3b4e0db86ef3f81c2df49", [])
|
||||
Amble_Regular = EffectMeta("Amble-Regular", False, "7236679983140180539", "14138187", "681c9b484dbc55dc6322de5318773956", [])
|
||||
Amigate = EffectMeta("Amigate", False, "7042231710112551431", "1485328", "1496029e87060f4208d5fbc127ed5f2c", [])
|
||||
Anson = EffectMeta("Anson", False, "7312373886476096001", "37083210", "1f6c4b124f1cc0c8dc64e9a8d5d5db1c", [])
|
||||
Anton = EffectMeta("Anton", False, "6807743423336944142", "643585", "42dd948f3247dc39f802bf951e9be731", [])
|
||||
Arizonia_Regular = EffectMeta("Arizonia-Regular", False, "7239188828425032252", "14864444", "00b288db92a3de4e612d10a6d73dd551", [])
|
||||
Arvo = EffectMeta("Arvo", False, "7238901809073361467", "14451489", "a086736a58a78472c0b20dc4ab1e6c86", [])
|
||||
Ballet = EffectMeta("Ballet", False, "7241838661656908343", "14864427", "fd0c45be63da4eea7647907d22335953", [])
|
||||
Barrio_Regular = EffectMeta("Barrio-Regular", False, "7239174980292842044", "14471579", "08c0bd8b8b221c5ab1a6c601d03c1643", [])
|
||||
Belleza_Regular = EffectMeta("Belleza-Regular", False, "7234404156780319288", "13824767", "fe94f7ae72a9ec37f34c25d99835d35b", [])
|
||||
Bevan_Regular = EffectMeta("Bevan-Regular", False, "7238530249451901496", "14400121", "1d181b88d75b2728ae21ecec60525f01", [])
|
||||
Bilbo_Regular = EffectMeta("Bilbo-Regular", False, "7239189505289228861", "14864440", "d0619bf78b9ad1b563f44726bf5e6eeb", [])
|
||||
BlackMango_Regular = EffectMeta("BlackMango-Regular", False, "7306445155244970497", "41472093", "8f91492140c961395923bc1edd9abae8", [])
|
||||
Blinker_Thin = EffectMeta("Blinker-Thin", False, "7209874013324055098", "10587620", "81c6838b262365f201bbc4e7bd1dd3d4", [])
|
||||
Boxing = EffectMeta("Boxing", False, "7078972382651617805", "1648729", "bab7d0b17e408bd9098c074825e15fc0", [])
|
||||
Bungee_Regular = EffectMeta("Bungee-Regular", False, "7314592672792973826", "37039650", "26f72c42742cd487ebafebfa8bc45c4f", [])
|
||||
Caladea_Regular = EffectMeta("Caladea-Regular", False, "7209874013319860797", "10587623", "2611c4dab5e14627c0d2d0e1da6b2279", [])
|
||||
Calfine = EffectMeta("Calfine", False, "7076269550299255309", "1632683", "4064e735eb58176895303b2c16b746a0", [])
|
||||
Candal_Regular = EffectMeta("Candal-Regular", False, "7234514498579599928", "13854523", "a2d487c2f846a1ccda2bf132ed899a0f", [])
|
||||
Candice = EffectMeta("Candice", False, "7080446593123488286", "1656182", "64df76345cbd40beadae4bd3de9ba3b2", [])
|
||||
Carattere_Regular = EffectMeta("Carattere-Regular", False, "7277869798401249851", "22621896", "b80aaa34cc2482fbba8d202f881b1405", [])
|
||||
Cardo_Regular = EffectMeta("Cardo-Regular", False, "7209874013324055101", "10587624", "9ace63fa497bb12601dd89a36864bb3e", [])
|
||||
Caveat_Bold = EffectMeta("Caveat-Bold", False, "7239187536675869242", "14864446", "4388f5af4caff83b8b322d911bfc54bd", [])
|
||||
Caveat_Regular = EffectMeta("Caveat-Regular", False, "7277872672304796217", "22621892", "2ad4a79314b4fe122e8ff7599133cf4a", [])
|
||||
Chonburi_Regular = EffectMeta("Chonburi-Regular", False, "7209944750021939771", "10608872", "77ff38c7d3ea5d01f2f2609a56f12d9e", [])
|
||||
Cinzel_Regular = EffectMeta("Cinzel-Regular", False, "7209874013324055095", "10587622", "ef50d040311cab144dd0879e9fb17214", [])
|
||||
Coda_Heavy = EffectMeta("Coda-Heavy", False, "7234514878008922681", "13854593", "e59a0f53b9d8fcf82f0ecc64e6e82b03", [])
|
||||
Coiny_Regular = EffectMeta("Coiny-Regular", False, "7203293403990200834", "27240316", "027b0038d0184ca86288c22298b82600", [])
|
||||
Cola = EffectMeta("Cola", False, "7076270486740537863", "1632682", "bb54dd710db7f3d31d747d4f62421710", [])
|
||||
Cookie_Regular = EffectMeta("Cookie-Regular", False, "7239182754624049720", "14864454", "cf340cf39c31a5b28b85b5f6dec07367", [])
|
||||
Cormorant_Garamond_Medium = EffectMeta("Cormorant Garamond-Medium", False, "7238899812190392888", "14451211", "f7693a5eb89ce8af8b6b978d89dbc56e", [])
|
||||
Coustard_Regular = EffectMeta("Coustard-Regular", False, "7209874014028698172", "10587614", "99006417512ae6c9126a739f6cdbeea1", [])
|
||||
Crimson_SemiboldItalic = EffectMeta("Crimson-SemiboldItalic", False, "7239227834273632827", "14864433", "b6cc62d01a2cc5280c48b7db98db93c4", [])
|
||||
Dynalight_Regular = EffectMeta("Dynalight-Regular", False, "7239227395088060987", "14864435", "5d5320056f020e023af8d8b2cc437882", [])
|
||||
Exo = EffectMeta("Exo", False, "7003588519440421413", "1349503", "c7861a7748efe6c7f69b2d864881eeb3", [])
|
||||
Facon = EffectMeta("Facon", False, "6807743498851193352", "643587", "efbc6d45df587ebb12ed68df89da03ff", [])
|
||||
FiraSans_Book = EffectMeta("FiraSans-Book", False, "7236005080040739388", "14037099", "d8e3ce7cb329f8fd088ab68593cee7c3", [])
|
||||
Fraunces_Black = EffectMeta("Fraunces-Black", False, "7209874014221636155", "10587607", "e4eaeb42700c4e326415285bcd62568c", [])
|
||||
Fulbo_Argenta = EffectMeta("Fulbo-Argenta", False, "7239234097267085861", "14490123", "df542eac625386374be06a4ff47f44bb", [])
|
||||
Gallery = EffectMeta("Gallery", False, "7030677248797577765", "1441466", "c6c8e230a16440a4df49ae96893c8211", [])
|
||||
GenWanMinJP_Light_源云明体 = EffectMeta("GenWanMinJP-Light(源云明体)", False, "7265529261530812985", "20356559", "c6088aac4b7825da8d0781b25375b333", [])
|
||||
GenWanMinJP_Medium_源云明体 = EffectMeta("GenWanMinJP-Medium(源云明体)", False, "7265529620802310713", "20356561", "941698601932e62603a114646b13c8d6", [])
|
||||
GenWanMinJP_Regular_源云明体 = EffectMeta("GenWanMinJP-Regular(源云明体)", False, "7265529744542667322", "20356563", "62a5403aa320065c8020fff2332606a0", [])
|
||||
GenWanMinJP_SB_源云明体 = EffectMeta("GenWanMinJP-SB(源云明体)", False, "7265529923547173413", "20356565", "f8f73f5b108d3a2ada9b8bdb5ba230ce", [])
|
||||
Giveny = EffectMeta("Giveny", False, "7030676531156357645", "1441468", "7499748cd12c31b8e3e5c30fb7184a54", [])
|
||||
Great_Vibes_Regular = EffectMeta("Great Vibes-Regular", False, "7239229310119187001", "14864431", "055d9f5c35d0a5b803ff9eb94cfd1c9d", [])
|
||||
Grenze_Thin = EffectMeta("Grenze-Thin", False, "7209874014951445051", "10587602", "654a7647f1fc34d7bd45eaf48bc09f94", [])
|
||||
HG行書体 = EffectMeta("HG行書体", False, "6808052324217393677", "20402937", "f5db863a8c3d18dd45b27ebf125f3053", [])
|
||||
HarmonyOSCn_Ltlt = EffectMeta("HarmonyOSCn-Ltlt", False, "7265589159580930621", "20373125", "896d4f7f284c9fac25df861900c40b52", [])
|
||||
HarmonyOS_Sans_SC_Bold = EffectMeta("HarmonyOS_Sans_SC_Bold", False, "7265594890002633272", "20374146", "43f72102bcc9cf55d485857e81a4b1d0", [])
|
||||
HarmonyOS_Sans_SC_Light = EffectMeta("HarmonyOS_Sans_SC_Light", False, "7265595050145354295", "20374151", "049f4b5a6101391d7e4b67654a5ba00b", [])
|
||||
HarmonyOS_Sans_SC_Medium = EffectMeta("HarmonyOS_Sans_SC_Medium", False, "7265595177916437050", "20374140", "b6636326c0e4bd6b7d163210313e36b1", [])
|
||||
HarmonyOS_Sans_SC_Regular = EffectMeta("HarmonyOS_Sans_SC_Regular", False, "7265595305163231781", "20374142", "ae33e48fc99aa4c8bdf259ec8aa7b768", [])
|
||||
HarmonyOS_Sans_TC_Bold = EffectMeta("HarmonyOS_Sans_TC_Bold", False, "7265530043495879226", "20356569", "ed1b8e7841ccba0c1a530d4d975a3651", [])
|
||||
HarmonyOS_Sans_TC_Light = EffectMeta("HarmonyOS_Sans_TC_Light", False, "7265530445658329661", "20356571", "f43d72b12b7ac433a6b9efd13b00e44c", [])
|
||||
HarmonyOS_Sans_TC_Medium = EffectMeta("HarmonyOS_Sans_TC_Medium", False, "7265530519687795255", "20356573", "116d59aa44e88bda1c3b4652ccc42bc5", [])
|
||||
HarmonyOS_Sans_TC_Regular = EffectMeta("HarmonyOS_Sans_TC_Regular", False, "7265530629050077754", "20356575", "57cdc99508ebf188ee9107f21c558e1d", [])
|
||||
HeptaSlab_Light = EffectMeta("HeptaSlab-Light", False, "7277873865001275964", "22621897", "3fd3c1d463fc7ae1918dff1ce91544ae", [])
|
||||
Inter_SemiBold = EffectMeta("Inter-SemiBold", False, "7314592494006571522", "37039662", "a6c30071ea24cb16a01a3bf1bc6be1fc", [])
|
||||
Italianno = EffectMeta("Italianno", False, "7241839293499445820", "14864422", "556a3f0ce762e7524a1163ffc59ffd54", [])
|
||||
Jellee_Bold = EffectMeta("Jellee-Bold", False, "7239233471132996153", "14489881", "d20fff398f68280b5a62d5c6718251ef", [])
|
||||
Kanit_ExtraBoldItalic = EffectMeta("Kanit-ExtraBoldItalic", False, "7341281330442801665", "48512062", "aebb4a5aba5f9fa5fbc1e108ae58738b", [])
|
||||
Kanit_Regular = EffectMeta("Kanit-Regular", False, "7341281459799331330", "48512024", "8c53bab543a483f4aea69870952e15b5", [])
|
||||
KaushanScript = EffectMeta("KaushanScript", False, "7241838959305691707", "14864425", "668f46331e342dbebebb36c127e9d937", [])
|
||||
Koulen_Regular = EffectMeta("Koulen-Regular", False, "7341281656319250945", "48512036", "7b5c8caefbc8f8c2cf6834e65d10c48a", [])
|
||||
LXGWWenKai_Bold = EffectMeta("LXGWWenKai-Bold", False, "7265591538472718903", "20373127", "562011555df237de57ff2da20dde5ecc", [])
|
||||
LXGWWenKai_Light = EffectMeta("LXGWWenKai-Light", False, "7265592227118715448", "20373111", "302ec5cdf24cd8ed486ffdcfc1431c39", [])
|
||||
LXGWWenKai_Regular = EffectMeta("LXGWWenKai-Regular", False, "7265591946897265212", "20373101", "7bac545cc43d16cfc89b681ba37b06e7", [])
|
||||
Letter = EffectMeta("Letter", False, "6740438320989344263", "349325", "afe91c6c7dfc29fca46fd33e9900e738", [])
|
||||
Lexend_Tera_Regular = EffectMeta("Lexend Tera-Regular", False, "7234820388151104061", "13897171", "c80509ef3cbbf1a22e997e028d8d65d7", [])
|
||||
Lora_Regular = EffectMeta("Lora-Regular", False, "7238875962530599481", "14443153", "b5e90b8f301b01629056e71f3df5a456", [])
|
||||
Love = EffectMeta("Love", False, "6766522308593979917", "459276", "a329a038511121412865fa841f51dfc3", [])
|
||||
Luxury = EffectMeta("Luxury", False, "7291876268541219329", "41472051", "8b2c690dc8c0a5124b5536aab2915747", [])
|
||||
Maler = EffectMeta("Maler", False, "7080115730963763743", "1654362", "bc7bb1a47b0de76584924e455397ec39", [])
|
||||
Marker = EffectMeta("Marker", False, "6766523474354639373", "459282", "a32ce70017cd4b72adc8aee8768c2380", [])
|
||||
Mirza_Regular = EffectMeta("Mirza-Regular", False, "7239174396349256249", "14471319", "10d2e66842d9ee555bede8d5b1f0dbe7", [])
|
||||
Misto = EffectMeta("Misto", False, "7078972749472862757", "1648728", "3a0130cbb7dd5e67908f7c1549f2b16c", [])
|
||||
Modern = EffectMeta("Modern", False, "6740498577912500749", "349479", "3bd3fe9a9464df4555335393bb266aba", [])
|
||||
Mokgech = EffectMeta("Mokgech", False, "7042232545433358878", "1485324", "40cd447e9f6cd01454c5754e29d8d277", [])
|
||||
Montserrat_Black = EffectMeta("Montserrat-Black", False, "7314592902414340609", "37039624", "93753515f71befcab33fb82a861ae668", [])
|
||||
Montserrat_Thin = EffectMeta("Montserrat-Thin", False, "7209944750529450554", "10608863", "fd322e04efc93ed0b04a5c5eccf8670a", [])
|
||||
Nunito = EffectMeta("Nunito", False, "6807743644842332685", "643589", "5243915a1b14f5fe467f4d5f10d2ba38", [])
|
||||
OldStandardTT_Regular = EffectMeta("OldStandardTT-Regular", False, "7277874282493907512", "22621894", "24b6280d5832d9d6cbfada464f5c5a61", [])
|
||||
Parisienne_Regular = EffectMeta("Parisienne-Regular", False, "7239229422367150652", "14864430", "1198a78a64a487470c2896642867fd4f", [])
|
||||
Playfair_Display_SC_Re = EffectMeta("Playfair Display SC-Re", False, "7238897435437699639", "14450193", "ad4a8a89cccf34fa545d809eb5fb9e98", [])
|
||||
PlayfairDisplay_Italic = EffectMeta("PlayfairDisplay-Italic", False, "7238900597125026341", "14451355", "5f2b452050047a6277d4a8e4a0714719", [])
|
||||
Plunct = EffectMeta("Plunct", False, "7035916496484176421", "1459552", "ba351b572d684c0f8ea9b7d6cab9f500", [])
|
||||
Polly = EffectMeta("Polly", False, "7078971156350374431", "1648730", "02fb23bcda9f281d4029ef482bb3c1fb", [])
|
||||
Poppins_Bold = EffectMeta("Poppins-Bold", False, "7312373689708712449", "41472095", "d090413fb1d5672cdf7177fea62fbccd", [])
|
||||
Poppins_Regular = EffectMeta("Poppins-Regular", False, "7202912523383738881", "41472101", "62f9677bff07407d954efbb810d8273e", [])
|
||||
Prata = EffectMeta("Prata", False, "6807743776916771335", "643593", "e02d50dc998334eb230ccf6abd8703d2", [])
|
||||
Quattrocento_Regular = EffectMeta("Quattrocento-Regular", False, "7238898734724026917", "14450839", "a48a832bc5b72fcfedc20c67dfa355ce", [])
|
||||
RedHatDisplay_BoldItalic = EffectMeta("RedHatDisplay-BoldItalic", False, "7341281783637348865", "48512032", "c24c458d3099c3e7f327635326ba78ce", [])
|
||||
RedHatDisplay_Light = EffectMeta("RedHatDisplay-Light", False, "7341282109987754497", "48512058", "319e4fda3248900720841a4475234a89", [])
|
||||
ReenieBeanie_Regular = EffectMeta("ReenieBeanie-Regular", False, "7277866226397745701", "22618063", "c8ce7ac2720c24710aa6972bc2ea6db8", [])
|
||||
ResourceHanRoundedCN_Bold = EffectMeta("ResourceHanRoundedCN-Bold", False, "7265596195949515319", "20374132", "5cbf4c907356bf12a5eb668b7ed47ae5", [])
|
||||
ResourceHanRoundedCN_Lt = EffectMeta("ResourceHanRoundedCN-Lt", False, "7265596294683431485", "20374136", "da4650aca66cca11be078688afe61353", [])
|
||||
ResourceHanRoundedCN_Md = EffectMeta("ResourceHanRoundedCN-Md", False, "7265596408491676197", "20374131", "b21249fcbc5e1d96505fdeb21c1f7e8f", [])
|
||||
ResourceHanRoundedCN_Nl = EffectMeta("ResourceHanRoundedCN-Nl", False, "7265596514955694649", "20374148", "5df531b829fa804cb520148c5d1e7c85", [])
|
||||
Rix독도 = EffectMeta("Rix독도", False, "6808056629678838286", "645449", "10fbabdd4c0f2d733c3bac1934e2027b", [])
|
||||
Romantic = EffectMeta("Romantic", False, "6807743277853315597", "643581", "f0d68fa6c56d1fe75337697635d8d073", [])
|
||||
Rubik = EffectMeta("Rubik", False, "7003588607231398430", "1349502", "8d5c645a77e132c533bb1988579736de", [])
|
||||
SansitaSwashed_Regular = EffectMeta("SansitaSwashed-Regular", False, "7314592065168347650", "37108558", "136c05da10e6016965dccd20b017a0ad", [])
|
||||
SecularOne_Regular = EffectMeta("SecularOne-Regular", False, "7312374157725929986", "37082988", "6b3bb5fe24e5b1df5ed82af22a1b45bd", [])
|
||||
Serrat = EffectMeta("Serrat", False, "7068208488563872286", "1588332", "a71fc3b2ebc32587189c11b403dc267d", [])
|
||||
Signature = EffectMeta("Signature", False, "7042230917837885965", "1485330", "4e29c132141a12bbbffb4a6c5b35bac2", [])
|
||||
Soap = EffectMeta("Soap", False, "7076269202771808804", "1632684", "853e5b6b92915f439228d36ae9be0ddf", [])
|
||||
SourceHanSansCN_Bold = EffectMeta("SourceHanSansCN-Bold", False, "7265596643066516029", "20374122", "fb70a3667211b2962782b5a2c127b2a6", [])
|
||||
SourceHanSansCN_Light = EffectMeta("SourceHanSansCN-Light", False, "7265596753926165050", "20374126", "1e5cecf2d7f404937e579b691dd824c5", [])
|
||||
SourceHanSansCN_Medium = EffectMeta("SourceHanSansCN-Medium", False, "7265596846465094199", "20374144", "6ae9ea8211a7b2df59519cc25bf0e4d3", [])
|
||||
SourceHanSansCN_Normal = EffectMeta("SourceHanSansCN-Normal", False, "7265596944867660346", "20374137", "0875520d11130e75a7c55db404269fef", [])
|
||||
SourceHanSansCN_Regular = EffectMeta("SourceHanSansCN-Regular", False, "7265597035946971705", "20374128", "ab9425633f936ad3aee8ce6776a8d785", [])
|
||||
SourceHanSansTW_Bold = EffectMeta("SourceHanSansTW-Bold", False, "7265530703364756026", "20356585", "068f075fb3e12a9e7d866485e4ec90fd", [])
|
||||
SourceHanSansTW_Light = EffectMeta("SourceHanSansTW-Light", False, "7265530900580930085", "20356587", "3c658b896e04038f1e64a7b482c09f2e", [])
|
||||
SourceHanSansTW_Medium = EffectMeta("SourceHanSansTW-Medium", False, "7265530989479203389", "20356589", "3db3cffea241e097cfef7bcef2334d90", [])
|
||||
SourceHanSansTW_Normal = EffectMeta("SourceHanSansTW-Normal", False, "7265531070680928828", "20356591", "7e3007f207de8eeb029b534fbaf9a13f", [])
|
||||
SourceHanSansTW_Regular = EffectMeta("SourceHanSansTW-Regular", False, "7265531198548480568", "20356593", "9a228f45a856db7e2acc9844fe12de42", [])
|
||||
SourceHanSerifCN_Bold = EffectMeta("SourceHanSerifCN-Bold", False, "7265597144600416827", "20374153", "3a3f2f08644467089cadaeb22596a407", [])
|
||||
SourceHanSerifCN_Light = EffectMeta("SourceHanSerifCN-Light", False, "7265597259708895803", "20374143", "f8733631870deaba746afcb65ef30389", [])
|
||||
SourceHanSerifCN_Medium = EffectMeta("SourceHanSerifCN-Medium", False, "7265597365539574329", "20374123", "6b1255756261d5ddb9ac40216ee5a2f0", [])
|
||||
SourceHanSerifCN_Regular = EffectMeta("SourceHanSerifCN-Regular", False, "7265597449262076474", "20374152", "47dc066be4a347aa81c347554fa376a9", [])
|
||||
SourceHanSerifCN_SemiBold = EffectMeta("SourceHanSerifCN-SemiBold", False, "7265598654294004281", "20374118", "f1b0ad6ceca5ec6bd47b0dacae9fbf97", [])
|
||||
SourceHanSerifTW_Bold = EffectMeta("SourceHanSerifTW-Bold", False, "7265534770845585980", "20356595", "7de7afb3383bc3c71064e694a8437fed", [])
|
||||
SourceHanSerifTW_Light = EffectMeta("SourceHanSerifTW-Light", False, "7265535017625850429", "20356597", "78bd0a481bca529b29dadce742f93d4b", [])
|
||||
SourceHanSerifTW_Medium = EffectMeta("SourceHanSerifTW-Medium", False, "7265535154775396919", "20356599", "13289edc534678e1ac9846ffea550910", [])
|
||||
SourceHanSerifTW_Regular = EffectMeta("SourceHanSerifTW-Regular", False, "7265535307322233399", "20356601", "8850278849317c50eefc844c086dd455", [])
|
||||
SourceHanSerifTW_SemiBold = EffectMeta("SourceHanSerifTW-SemiBold", False, "7265535436594876984", "20356603", "2420aafb990c49f9266bfd0bd3d79149", [])
|
||||
SourceSansPro_Regular = EffectMeta("SourceSansPro-Regular", False, "7235998842880004665", "14035983", "2ded03684e9f6b64a81d74f915b17042", [])
|
||||
Specta = EffectMeta("Specta", False, "7039992016805040671", "1478300", "86debc3c92b292b162ce399aca9f61f8", [])
|
||||
Spicy_Rice_Regular = EffectMeta("Spicy Rice-Regular", False, "7239229520828437053", "14864429", "7dbb386a703bd1e6b67376ca92f0fa8c", [])
|
||||
Staatliches_Regular = EffectMeta("Staatliches-Regular", False, "7312373990083793409", "37083204", "eb3e70b0668eb3e03499cd5162bbf8e3", [])
|
||||
Sunset = EffectMeta("Sunset", False, "6807743703436759566", "643591", "01365a30a2569e10b160f7bd46e2c8c8", [])
|
||||
Thrive = EffectMeta("Thrive", False, "7290877082660246071", "26148239", "09aecfbb88990df392ae7dfa53e56b6e", [])
|
||||
Thunder = EffectMeta("Thunder", False, "7050422198724465189", "1511612", "f68ab331feafe5deac4c9484df686557", [])
|
||||
Work_Sans_ExtraBoldItalic = EffectMeta("Work Sans-ExtraBoldItalic", False, "7209944751246676517", "10608852", "b4bb205043371da7ac23c095d1a15895", [])
|
||||
WorkSans_BlackItalic = EffectMeta("WorkSans-BlackItalic", False, "7236677807634387511", "14137039", "b7fe9aff83a587f1bb128d15df0c469e", [])
|
||||
WorkSans_Regular = EffectMeta("WorkSans-Regular", False, "7242301481699775032", "14963149", "3858f6a8bc6aa06a36b66771b24d8cb9", [])
|
||||
ZEN丸コ_シック = EffectMeta("ZEN丸ゴシック", False, "7236735800514187831", "20403385", "aa2051cae318b4fb3a736aad88f3fd81", [])
|
||||
ZEN紅道 = EffectMeta("ZEN紅道", False, "7244104371372298754", "20403919", "a010d51f36e5954e6e4ca9112dcb141d", [])
|
||||
ZY_Alluring_Regular = EffectMeta("ZY Alluring-Regular", False, "7277862842190008891", "22616627", "4d56dbea0c35acab69a5d51861521b12", [])
|
||||
ZY_Azure = EffectMeta("ZY Azure", False, "7230715188326961721", "13314774", "92baf67659d39c44e7a7e00f7024ada1", [])
|
||||
ZY_Bless = EffectMeta("ZY Bless", False, "7229615361967002172", "13168499", "8142200dd17ebb41839e9e580fc80aa4", [])
|
||||
ZY_Coconut_Regular = EffectMeta("ZY Coconut-Regular", False, "7277865493736722981", "22618062", "882aa39ef38c6acb7244d2712f484194", [])
|
||||
ZY_Dexterous = EffectMeta("ZY Dexterous", False, "7320169657841750529", "38698692", "fadee671a67e0e552e0d61f480e78348", [])
|
||||
ZY_Diligent = EffectMeta("ZY Diligent", False, "7270787894317421093", "21346088", "0ca879fd3498f0e7957797dceb6b419f", [])
|
||||
ZY_Etiquette = EffectMeta("ZY Etiquette", False, "7262284005293167160", "19649099", "5ad3fe6b440cde181cb9240565d1afe5", [])
|
||||
ZY_Fervent = EffectMeta("ZY Fervent", False, "7325315777014272514", "40751208", "edb351323c1814bbb13fdc1149817b88", [])
|
||||
ZY_Heaven = EffectMeta("ZY Heaven", False, "7256754129400238649", "18436001", "e90e022bd595d7e598b5fd59e5a12524", [])
|
||||
ZY_Hope = EffectMeta("ZY Hope", False, "7276364919165948474", "22346588", "645c6d16ec0326ca588ed1b792d722b9", [])
|
||||
ZY_Innocent = EffectMeta("ZY Innocent", False, "7256754220588601913", "18436002", "81733827a8cb7523177fe2ed96c16d51", [])
|
||||
ZY_Modest = EffectMeta("ZY Modest", False, "7276365485812224571", "22346583", "9de2f616a80d03ee04c73b7a85023bf1", [])
|
||||
ZY_Oliver = EffectMeta("ZY Oliver", False, "7230715372683399740", "13314772", "d90b1aaa54e0e1ad23afc2af06c04370", [])
|
||||
ZY_Panorama = EffectMeta("ZY Panorama", False, "7262284073026982460", "19649101", "9f1b77d60340ae5fe1eb3701a843597e", [])
|
||||
ZY_Radiance = EffectMeta("ZY Radiance", False, "7248820625366585915", "16174404", "e916bd1b63a326aa68a505e80e3f8a89", [])
|
||||
ZY_Rainbow = EffectMeta("ZY Rainbow", False, "7276365019292373559", "22346586", "33b44a540525ed9a9662b8b3f7d8f362", [])
|
||||
ZY_Resolve = EffectMeta("ZY Resolve", False, "7317175475195875841", "37544856", "c7607b2d122df39381457c4680b07498", [])
|
||||
ZY_Superb_Regular = EffectMeta("ZY Superb-Regular", False, "7277866017231999525", "22618066", "c18fa905465af7ff5aff43bb7e48366c", [])
|
||||
ZY_Vibrant = EffectMeta("ZY Vibrant", False, "7276365787147801145", "22346584", "9f5bc776b6a68c979628fa4249eda4fe", [])
|
||||
ZY_Wonder = EffectMeta("ZY Wonder", False, "7270788266683535932", "21346084", "dbfdbb77a913235dac580fc6e9e4c19c", [])
|
||||
ZYCherish = EffectMeta("ZYCherish", False, "7290485005162123813", "26013701", "0d6080a435603e6b1a392d9202d43dac", [])
|
||||
Zapfino = EffectMeta("Zapfino", False, "7076271146110292494", "1632681", "efa8ec4bd296ade312a2a64fe6b2d206", [])
|
||||
いろは角クラシックE = EffectMeta("いろは角クラシックE", False, "7236735800514187833", "20403373", "1afbea968b2e1af6cac0e96a44b0e1b0", [])
|
||||
いろは角クラシックM = EffectMeta("いろは角クラシックM", False, "7236735800501604924", "20403369", "7b73272b2e422660f156f20d7157ffbb", [])
|
||||
きさ_はし金陵 = EffectMeta("きざはし金陵", False, "7246698168547545601", "20403943", "489be31b94a06eb438a50032df8d98ec", [])
|
||||
くり抜く = EffectMeta("くり抜く", False, "6990291609376002562", "20403197", "76d286f7251430218bd24f555bacebbc", [])
|
||||
しっほ_りアンチック = EffectMeta("しっぽりアンチック", False, "7236735800442884645", "20403443", "c60f6db5714f4db0ffe07794c290c274", [])
|
||||
すす_むし = EffectMeta("すずむし", False, "7246698168543351297", "20404003", "5a563fdd1daef779b4d4cec65ae07f5e", [])
|
||||
た_るまと_ろっふ = EffectMeta("だるまどろっぷ", False, "7236735800388358715", "20403579", "5a269c2c702bc230f613c748b94a78d3", [])
|
||||
つきみ丸コ_かな_B = EffectMeta("つきみ丸ゴかな B", False, "7236735800371581501", "20403581", "826659485cc65dec7d8a16eba3788ad7", [])
|
||||
つきみ丸コ_かな_R = EffectMeta("つきみ丸ゴかな R", False, "7236735800363192891", "20403643", "b8abadb9a0e3568108d211d1a63b5ae5", [])
|
||||
はちきるホ_ッフ = EffectMeta("はちきるポップ", False, "7236735799817933368", "20403715", "4f6d841371f92e510afe383f83c73a42", [])
|
||||
ひな明朝 = EffectMeta("ひな明朝", False, "7236735799817933367", "20403717", "7fe60a5bb3eb2fefeb5080a16ba65df6", [])
|
||||
ほ_ってり = EffectMeta("ぽってり", False, "7246698168551739906", "20403945", "f194725b8247c3cb01df730b786f1a0f", [])
|
||||
オとマのヘ = EffectMeta("オとマのペ", False, "7236735800459661861", "20403367", "1502f1c27c0a043f8059eea0d956ad53", [])
|
||||
キ_カ_丸 = EffectMeta("ギガ丸", False, "7246698169348657665", "20403939", "a9076ef858ae90ccc4019622cc1e69e3", [])
|
||||
キャビン = EffectMeta("キャビン", False, "6841482472102826510", "20403069", "c76635455780f12a3f869416574d5bb0", [])
|
||||
クレー_One = EffectMeta("クレー One", False, "7236735800442884667", "20403427", "88612653636506a25508dd36f0a12c1d", [])
|
||||
コ_シック = EffectMeta("ゴシック", False, "7246698168543367682", "20404037", "18ee639c4dc2b3bf080a2e392d9445a0", [])
|
||||
コスギ = EffectMeta("コスギ", False, "6808051939150926344", "20402991", "bb28b047f12adc86d81a0ebee5df7b1f", [])
|
||||
ゴシック = EffectMeta("ゴシック", False, "6766522798685819399", "459278", "130d166479800cd97586de33b3a0b659", [])
|
||||
タイムマシンわ号 = EffectMeta("タイムマシンわ号", False, "7236735800430301753", "20404343", "d3a2a70a08086775f468ca6f9de97cae", [])
|
||||
チェリーホ_ム = EffectMeta("チェリーボム", False, "7239261205582320129", "20403877", "b1c1463f54eb6cc0a4905d928e00a9a4", [])
|
||||
テ_ラコ_シック = EffectMeta("デラゴシック", False, "7236735799822127674", "20403647", "4f71acd43e4a4257985d092c3ced1bea", [])
|
||||
ト_ットコ_シック_16 = EffectMeta("ドットゴシック 16", False, "7236735799813739069", "20403657", "314f2ce6b496daee67243b39ff58803c", [])
|
||||
ニューテコ_ミン = EffectMeta("ニューテゴミン", False, "7236735799822127653", "20403683", "7fbbf397f7d96586920ed6f89f328df7", [])
|
||||
ビジネス = EffectMeta("ビジネス", False, "6808051344142766599", "20402993", "cdc69ab82c994c9a67275b74a413b750", [])
|
||||
ブロック = EffectMeta("ブロック", False, "6841483116922540558", "20403043", "43b7d680337fd69f13dc5319e2574a6a", [])
|
||||
ヘ_ンレタ = EffectMeta("ペンレタ", False, "7246698168543384066", "20404089", "a2c0b4b7259aaecf6946a4e257dac5cc", [])
|
||||
ホ_ッタ = EffectMeta("ポッタ", False, "7236735799817933370", "20404337", "a2acad777dc0bd39f32c890ebb6684bb", [])
|
||||
ポジティブ = EffectMeta("ポジティブ", False, "7013643531847733761", "20403295", "db889a3e5309902696fdea2b5d3de453", [])
|
||||
ミンサン書体B = EffectMeta("ミンサン書体B", False, "7239261205586514433", "20403895", "18e32819f3310d8d46d805d31d068635", [])
|
||||
ミンサン書体R = EffectMeta("ミンサン書体R", False, "7239261205594903041", "20403909", "67ca6787d094e5af727955824f354c39", [])
|
||||
メモ = EffectMeta("メモ", False, "6841483408602829326", "20403011", "52f2da3304584137f088b77f51acad88", [])
|
||||
メモ帳 = EffectMeta("メモ帳", False, "6990291446100136449", "20403233", "260fd1ddf7ce925d8f190749f0296049", [])
|
||||
モッチーホ_ッフ = EffectMeta("モッチーポップ", False, "7236735799813739045", "20403817", "eebab96f0d7f12a6f239d297a395a465", [])
|
||||
ランハ_ート = EffectMeta("ランパート", False, "7236735799817933373", "20403869", "8f5133ad1859de8ffab89113b4358a50", [])
|
||||
レケ_エ_One = EffectMeta("レゲエ One", False, "7236735799813739068", "20403871", "b7b2846f2bb8d5910e93a16de58fd6cf", [])
|
||||
ロックンロール = EffectMeta("ロックンロール", False, "7236735799809544763", "20403875", "da1dc1ac57175d1f5158b469f79897a2", [])
|
||||
ローマ = EffectMeta("ローマ", False, "6841482587446186509", "20403063", "3ef3c328cef61895e0d17b7265d0a830", [])
|
||||
中秀体 = EffectMeta("中秀体", False, "6917512631515353607", "1014410", "9561161c74ae03658e101577ec5cfae6", [])
|
||||
书南体 = EffectMeta("书南体", False, "7290445475461730875", "25998982", "d2602638de94c9006851f0858d567459", [])
|
||||
云魅手书 = EffectMeta("云魅手书", False, "7174434449080193550", "7048145", "bd4bdc8403280395a79565573a6a3cbb", [])
|
||||
今宋体 = EffectMeta("今宋体", False, "7216598549809599032", "11443544", "4bd7448e9ba53dd7fe3bd8b73a07e6f4", [])
|
||||
仓耳与墨W05 = EffectMeta("仓耳与墨W05", False, "7265576717970838076", "20373115", "c0ab4e3f1a478b5867cbd46e00b0f99d", [])
|
||||
仓耳周珂正大榜书 = EffectMeta("仓耳周珂正大榜书", False, "7265577040110162492", "20373112", "5c78e7cf1982aa68487d1675159b73f6", [])
|
||||
仓耳小丸子 = EffectMeta("仓耳小丸子", False, "7265576611347436093", "20373117", "3452ca2452f781808f832d67063a659c", [])
|
||||
仓耳舒圆体W02 = EffectMeta("仓耳舒圆体W02", False, "7265576364948853303", "20373116", "19fd2acae413b58901b2b466dd813785", [])
|
||||
仓耳非白W02 = EffectMeta("仓耳非白W02", False, "7265576127073096250", "20373124", "ef1fe50ee91c6e00bd928500920a2555", [])
|
||||
仓耳非白W04 = EffectMeta("仓耳非白W04", False, "7265576259957035579", "20373114", "120bbe030eae22f65fdcf76f587e337d", [])
|
||||
以梦为马 = EffectMeta("以梦为马", False, "7197366059056239141", "9182767", "56dfcfca94158a7a92263aa5b41f8a84", [])
|
||||
优设好身体 = EffectMeta("优设好身体", False, "7265610359807939132", "20379296", "254c324257a74cfdcf35d4e9eb5da964", [])
|
||||
优设标题圆 = EffectMeta("优设标题圆", False, "7260808713844298295", "19366221", "dd565912c20ce61f6f71a33bcb30faf8", [])
|
||||
优设标题黑 = EffectMeta("优设标题黑", False, "7068207165277737502", "1588336", "d9f1238f50005595eff5f545aa54776c", [])
|
||||
伯兮体 = EffectMeta("伯兮体", False, "7290440685616894522", "25999024", "521d0621c5cd8e26944ba063ca5dec02", [])
|
||||
佑字_朴 = EffectMeta("佑字 朴", False, "7236735801042670136", "20403343", "fc90908f8e84e220b04858badd7ef84d", [])
|
||||
佑字_舞 = EffectMeta("佑字 舞", False, "7236735801021698619", "20403425", "9ebb6e14126e9fc9940f021014ec13b3", [])
|
||||
佳妙体 = EffectMeta("佳妙体", False, "7290443628554490423", "25998997", "f67bcc4b0cf6483e78bffa6cfd972bf1", [])
|
||||
俊雅体 = EffectMeta("俊雅体", False, "7078971008769593887", "1648731", "4f96b92a0023d2da2a4c9cb4e09e9565", [])
|
||||
俪金黑 = EffectMeta("俪金黑", False, "6740499317733200388", "349465", "4ef7d2eb7cdfcff226f086008045131a", [])
|
||||
像素体 = EffectMeta("像素体", False, "6770944991167517192", "466469", "909e7b4c50b29620fcc42a5f7b27914e", [])
|
||||
元也 = EffectMeta("元也", False, "6990291473216311809", "20403229", "49f510d2627a0916367c79c11f40a1b1", [])
|
||||
元气泡泡体 = EffectMeta("元气泡泡体", False, "7203664981080937021", "9898775", "3af8af39c55aa4109263fd49a00f3885", [])
|
||||
元瑶体 = EffectMeta("元瑶体", False, "7290447082886795832", "25999023", "b981cfd05bb12209521b5aeac9d3740f", [])
|
||||
先锋体 = EffectMeta("先锋体", False, "7043775345333375519", "1488720", "85da61942dcc96f5eddad1c3826b5f0c", [])
|
||||
光远体 = EffectMeta("光远体", False, "7290442818584056357", "25999003", "9e1697182672f31f0280e673856738ea", [])
|
||||
兰亭圆 = EffectMeta("兰亭圆", False, "7173608955527041567", "6949825", "211a5b4aed3f2ac8412d6f9f7e9d8244", [])
|
||||
凌东齐伋体_combo = EffectMeta("凌东齐伋体-combo", False, "7265611544820453948", "20379306", "6ca3f118d0415aa1f0be2e9ee2800890", [])
|
||||
凌东齐伋体_fallback = EffectMeta("凌东齐伋体-fallback", False, "7265611310132367931", "20379309", "5717be837d5f541193816ad6b421f7fc", [])
|
||||
凝琴体 = EffectMeta("凝琴体", False, "7290444849298281021", "25999011", "efa89382ae256d5ce6092a312dddd3fc", [])
|
||||
刘炳森 = EffectMeta("刘炳森", False, "6852190696930021902", "814922", "1507ce2872918e76320be3647e986dcf", [])
|
||||
初尘体 = EffectMeta("初尘体", False, "7290441058238861879", "25998986", "ae887a93827cf1730d7b08db606b5b68", [])
|
||||
匹喏曹 = EffectMeta("匹喏曹", False, "7043773350555947551", "1488716", "4f6d74dc7cb2208981569c0842124038", [])
|
||||
半梦体 = EffectMeta("半梦体", False, "7290439421625635385", "25999018", "ed70a8440c036e4f95d41ac34846f229", [])
|
||||
卡酷体 = EffectMeta("卡酷体", False, "7045187669847970341", "1494864", "514acd68e036f48781d209d84cc7728e", [])
|
||||
古典体 = EffectMeta("古典体", False, "7035911487646339598", "1459456", "37cd7f9d7364c200a37c7f9ee2192ae9", [])
|
||||
古印宋简 = EffectMeta("古印宋简", False, "7216598368791827002", "11443545", "aafc0b7c13e1c5b790d090e57afcff76", [])
|
||||
古雅体 = EffectMeta("古雅体", False, "7025895760583463438", "1425152", "dc99fbcf0d0a7c179313e6289d95ebaf", [])
|
||||
古风小楷 = EffectMeta("古风小楷", False, "7216598671016596029", "11443543", "97e1ab8a11b337dc9e8369a40c936e19", [])
|
||||
台北黑体_Bold = EffectMeta("台北黑体-Bold", False, "7265536086472921658", "20356617", "b4598638d6eba21257d0456ebe2dd161", [])
|
||||
台北黑体_Light = EffectMeta("台北黑体-Light", False, "7265536169083933242", "20356619", "3367383fa78c478b88ab81a18746ee85", [])
|
||||
台北黑体_Regular = EffectMeta("台北黑体-Regular", False, "7265536307932172861", "20356621", "640ca1b520ae3f08b77de45dab99ba33", [])
|
||||
后现代体 = EffectMeta("后现代体", False, "6740435494053614093", "349307", "35b4b7201d26c9a26a038be8813efdd2", [])
|
||||
启功行楷 = EffectMeta("启功行楷", False, "6852190785740214791", "814921", "6fc51e60d628ca3afb0d3fbdc00f3000", [])
|
||||
吹き出し = EffectMeta("吹き出し", False, "6841482925955879431", "20403057", "79ef9ad4b06c3f44640e943834cc676f", [])
|
||||
唐瑜体 = EffectMeta("唐瑜体", False, "7290445542331519525", "25998993", "3158dfc09010810f5c1ab5fbf6d835d0", [])
|
||||
喜悦体 = EffectMeta("喜悦体", False, "7045187886924173861", "1494856", "71a8ba6a406a0c02fc2a31dceb4921d0", [])
|
||||
喜鹊万人造字 = EffectMeta("喜鹊万人造字", False, "7208056956471218748", "10379503", "b0781d9e494afdae886bd846fecab2e0", [])
|
||||
喜鹊梅花楷 = EffectMeta("喜鹊梅花楷", False, "7208056839089427002", "10379504", "80b578cbb1ed9f7f7403150d3910a0bc", [])
|
||||
喵魂体 = EffectMeta("喵魂体", False, "6740436949040894475", "349315", "f89f9c707b0ed386568e78c9ab3bb176", [])
|
||||
嘉木体 = EffectMeta("嘉木体", False, "7290443820041245241", "25999016", "a5ac5235fec9d01bbb280ab9b37b7b93", [])
|
||||
圆体 = EffectMeta("圆体", False, "6740436583247254029", "349313", "6622f87ce830dd89234522a0d9db5104", [])
|
||||
基础像素 = EffectMeta("基础像素", False, "7203638484752405049", "9893377", "f76ecb363595e5321389d3ed29df1c9f", [])
|
||||
墩墩体 = EffectMeta("墩墩体", False, "7043772438898807304", "1488712", "377365df3340b4b642a0c199fcbb3882", [])
|
||||
大字报 = EffectMeta("大字报", False, "7054126026267300382", "1530068", "bb2f51e267dce8ffd369e1721f2a6371", [])
|
||||
天云体 = EffectMeta("天云体", False, "7290445618533634617", "25998981", "6ae7aeddb05e6b7ea980b99708204100", [])
|
||||
妙松体 = EffectMeta("妙松体", False, "7290444755811439141", "25998991", "1178bbca3857f8448c766c6f9c6d3bec", [])
|
||||
妙黑体 = EffectMeta("妙黑体", False, "7203638484756599333", "9893375", "ff39549fdcdf9528ce1d0137384eb906", [])
|
||||
子どもたち = EffectMeta("子どもたち", False, "6766524209620324877", "20402995", "99ac707c2ba4d141161fcec8a9ea91b7", [])
|
||||
字制区喜脉体 = EffectMeta("字制区喜脉体", False, "7391765808835203647", "75248650", "9e6dcd6301144426671b86797a1cfd7a", [])
|
||||
字制区喜脉喜欢体 = EffectMeta("字制区喜脉喜欢体", False, "7391765873716892199", "75248705", "c8402181a043ef9b8c105f8e7bbc03cf", [])
|
||||
孤月体 = EffectMeta("孤月体", False, "7290441418395357754", "25999015", "e48e0b0bf5ff728a46405176e1d5030f", [])
|
||||
宋体 = EffectMeta("宋体", False, "6740513279296147982", "349517", "02a4eb96fa9d82bbba5906c35521f6f4", [])
|
||||
小杉ゴシック = EffectMeta("小杉ゴシック", False, "6841482326321402375", "20403079", "fca4e0440151814d39b1a0a23872224e", [])
|
||||
小薇体 = EffectMeta("小薇体", False, "7265594602311127607", "20373097", "db03f70f2fc5177f552d46ab3648af3f", [])
|
||||
尔雅新大黑 = EffectMeta("尔雅新大黑", False, "7217732136894206501", "11593555", "c3dc73e45b7b16cae8e867a0a73f35dd", [])
|
||||
居酒屋 = EffectMeta("居酒屋", False, "7013643566341689858", "20403285", "ca3edcfff9defcc59e9090cb11ed96d4", [])
|
||||
山林体 = EffectMeta("山林体", False, "7035912592925135396", "1459484", "2b4b013ad868f43d20de26cc7720083a", [])
|
||||
岩柚体 = EffectMeta("岩柚体", False, "7290445914571805245", "25999002", "a2300687db587e3801b32c4a7b77dd32", [])
|
||||
峰骨体 = EffectMeta("峰骨体", False, "7054126189211816462", "1530066", "b5a3bb8585981e629732ca53d6d3be36", [])
|
||||
幸せ = EffectMeta("幸せ", False, "6990291634747347458", "20403193", "b18c4a35769d204d8ee88db8a06ac471", [])
|
||||
幼萱体 = EffectMeta("幼萱体", False, "7290446812442268217", "25998999", "ab1b9e358069f4187427aaecbcca1467", [])
|
||||
庞门正道标题体 = EffectMeta("庞门正道标题体", False, "7265611148060267045", "20379302", "92b17506e2b26dac8716ef305c8bcf06", [])
|
||||
庞门正道粗书体 = EffectMeta("庞门正道粗书体", False, "7265611032465248805", "20379291", "06caadf2c04504ea78873cfad51447a3", [])
|
||||
庞门正道轻松体 = EffectMeta("庞门正道轻松体", False, "7265610901795902013", "20379295", "4fe6b6e59c94796b520f5bd5fe83e2ce", [])
|
||||
张子山体 = EffectMeta("张子山体", False, "6894206029785993736", "961476", "4e3af7fa95351181ba26f1be246c4d43", [])
|
||||
彼岸体 = EffectMeta("彼岸体", False, "7290440016646378042", "25999019", "9d97a2a66420faa6dc320cd3035b4fe6", [])
|
||||
得意黑 = EffectMeta("得意黑", False, "7399865900821647935", "77844112", "5219d1f012f4944aaaa2ec19556fdea6", [])
|
||||
德古拉 = EffectMeta("德古拉", False, "7021353291850191368", "1404774", "0573d513ed964b0a24a02943e469c9e7", [])
|
||||
快乐体 = EffectMeta("快乐体", False, "7265594331262620217", "20373113", "d3c284bf1c58e72c2ccd5c0c22bfa5e5", [])
|
||||
快速体 = EffectMeta("快速体", False, "7197366121069023804", "9182766", "462692b2efb28f3cf411edbef8f7f6ff", [])
|
||||
思源中宋 = EffectMeta("思源中宋", False, "6807743192671195655", "643579", "e8b002bff0884028c9f13a9d6eeb03bc", [])
|
||||
思源粗宋 = EffectMeta("思源粗宋", False, "6807742980271641102", "643575", "e4387517f584be39bb2e1ca4ede6cbe3", [])
|
||||
悠悠然 = EffectMeta("悠悠然", False, "7081924596999393805", "1665070", "f38c316a2e5f0e059094bbe18a252ce1", [])
|
||||
悠然体 = EffectMeta("悠然体", False, "6740436145831678467", "349311", "7f7454ea269cfebfef1b104673f05894", [])
|
||||
悦妍体 = EffectMeta("悦妍体", False, "7290447167821451813", "25998984", "3c6344b0d77c47511e5b177675761c7b", [])
|
||||
惊鸿体 = EffectMeta("惊鸿体", False, "7203638484756599356", "9893376", "d06a0ac2a94160c8e6d88bf6d1c436e6", [])
|
||||
手書 = EffectMeta("手書", False, "7013643615326966273", "20403235", "1d266a4a87b97a7602a4b612465d88e3", [])
|
||||
抖音美好体 = EffectMeta("抖音美好体", False, "7244518590332801592", "15332487", "1a9c90e65d4ac34436d90a1b19d94d5a", [])
|
||||
招牌体 = EffectMeta("招牌体", False, "7035914068053463565", "1459526", "d591f14dd0bf7486dc318195299706a4", [])
|
||||
拼音体 = EffectMeta("拼音体", False, "6740437635287749133", "349319", "1735cfc4e88e38efc9f7b1e3cfd6d035", [])
|
||||
挥墨体 = EffectMeta("挥墨体", False, "7037018943218782757", "1464398", "162b2fc5a67b2f7b664001030b16828a", [])
|
||||
教科書 = EffectMeta("教科書", False, "6990291514886722050", "20403203", "b21936cc7b4fbb0191cc0b356d2d4d98", [])
|
||||
文研体 = EffectMeta("文研体", False, "6990293257540342302", "1203468", "bcadf482b4045f8d47bf373fc01479a0", [])
|
||||
文艺繁体 = EffectMeta("文艺繁体", False, "6740437797456318983", "349321", "b15dc9e0411a83b2c63f983a2fb3b7a6", [])
|
||||
文轩体 = EffectMeta("文轩体", False, "7290445778273702455", "25998976", "d5ea95d6a862335c917a93b4fc741c89", [])
|
||||
文雅体 = EffectMeta("文雅体", False, "7068208151488631309", "1588334", "6f0ccd9662b4b0eb41318fd8547699de", [])
|
||||
新青年体 = EffectMeta("新青年体", False, "6740435892441190919", "349309", "71a73f7e297831936018c928d61ce2b8", [])
|
||||
方正王铎行草 = EffectMeta("方正王铎行草", False, "6852191050547597832", "814918", "94c2759eda2591a0e88b5995c13d0d1b", [])
|
||||
方糖体 = EffectMeta("方糖体", False, "7037017159280628231", "1464396", "49573e8f5bb7ae96ce913040780803e3", [])
|
||||
无界黑 = EffectMeta("无界黑", False, "7203638485670957629", "9893370", "1e04097242afd9dea436e390c2b8d89d", [])
|
||||
日式标题 = EffectMeta("日式标题", False, "7081925137355772453", "1665068", "b21c3e5dcee4cbd5aa5606f1e04fe382", [])
|
||||
星光体 = EffectMeta("星光体", False, "7216598789103030821", "11443542", "cc578f4ebfa6ec1d814f50b8ab99ce5e", [])
|
||||
晨风体 = EffectMeta("晨风体", False, "7290440791967666725", "25999012", "04a6a353ece14e49884af2b765c4f3d1", [])
|
||||
景天体 = EffectMeta("景天体", False, "7290444063004693029", "25999010", "071aa83859c9780691a4c2a872d53456", [])
|
||||
晴雪体 = EffectMeta("晴雪体", False, "7290445254241555005", "25999004", "fb5c70eeca2cbdbd2dcedae3315d9701", [])
|
||||
書道 = EffectMeta("書道", False, "6990291666124935681", "20403191", "67115dcac0ac0d2311d6a67e1ad1b6a5", [])
|
||||
有猫在 = EffectMeta("有猫在", False, "6766524065151717901", "459290", "0880173b6edb03abadc473b64ec80316", [])
|
||||
未来黑 = EffectMeta("未来黑", False, "7081925520866152997", "1665065", "8fbf8914d93137fc79062de3aa99de65", [])
|
||||
本黑体 = EffectMeta("本黑体", False, "7200743888816968247", "9554613", "fca68b5b94fa66afe5ca424cb5868011", [])
|
||||
李李体 = EffectMeta("李李体", False, "7203638484752405053", "9893380", "87985cec317b243b34472455eb35e061", [])
|
||||
极简拼音 = EffectMeta("极简拼音", False, "7070430470667768333", "1600484", "d9bd33e2a246c62cfae5b75504c5d7c0", [])
|
||||
柏青体 = EffectMeta("柏青体", False, "7187746468785033787", "8393133", "d6d5b5884e999ab9841c65b9af9ad68a", [])
|
||||
柳公权 = EffectMeta("柳公权", False, "6852190880837669390", "814920", "433c8deaa6b69a9b314b01c44020f95d", [])
|
||||
梅雨煎茶 = EffectMeta("梅雨煎茶", False, "7081925245099053604", "1665067", "7adeea403a9002c92bdb071f07506f5d", [])
|
||||
梦寒体 = EffectMeta("梦寒体", False, "7290444357499359781", "25999021", "9e44efeeecc891448419108472e8f719", [])
|
||||
梦想家 = EffectMeta("梦想家", False, "6914965725543141896", "1005688", "01507865e864281742d0126385a84030", [])
|
||||
梦桃体 = EffectMeta("梦桃体", False, "7290444545689391653", "25998998", "58f48899950d28f609bef42bcab15575", [])
|
||||
梦槐体 = EffectMeta("梦槐体", False, "7290444451179139641", "25998996", "4211fd251648fe7089552ac58926b10d", [])
|
||||
棘薔薇ホ_ールト = EffectMeta("棘薔薇ボールド", False, "7236735801134944823", "20403299", "caa76c8a42b129086bacfbec06a3416e", [])
|
||||
棘薔薇ライト = EffectMeta("棘薔薇ライト", False, "7236735801105584701", "20403311", "d26d591f8ee3732e6cad13f8eabfb74f", [])
|
||||
楚辰体 = EffectMeta("楚辰体", False, "7070430593925779981", "1600482", "ced7a98a9bcc8984318a2c215192b0c5", [])
|
||||
楷書MCBK1 = EffectMeta("楷書MCBK1", False, "7246698168547578369", "20404083", "fb1f997aac1f765ffd9a0567e39ec75b", [])
|
||||
欣然体 = EffectMeta("欣然体", False, "7068531082265629197", "1589146", "f1d3dde1819db78d7f4bde16daf52fe3", [])
|
||||
正奇体 = EffectMeta("正奇体", False, "7290447230488547901", "25999005", "0be6ac1d15866b82ab08f2219b772ab5", [])
|
||||
毛笔行楷 = EffectMeta("毛笔行楷", False, "6912033793700270606", "999616", "112cdf4c20ddf9336f4757e8c42bcc57", [])
|
||||
毡笔体 = EffectMeta("毡笔体", False, "7035924520854622757", "1459716", "171016edaee58043c22552d32579f154", [])
|
||||
汇文明朝体 = EffectMeta("汇文明朝体", False, "7444913491762221577", "95241741", "dff19164a0e4822b2320a900db9c1c2e", [])
|
||||
汉仪英雄体 = EffectMeta("汉仪英雄体", False, "6740499052644798984", "349471", "3f63a7b1ab4699bf11c88b284939e661", [])
|
||||
汉仪贤二体 = EffectMeta("汉仪贤二体", False, "7265612201199669816", "20379294", "e2016262592025a41b52412055efcae6", [])
|
||||
江户招牌 = EffectMeta("江户招牌", False, "7080096840875512334", "1654205", "a98a329c2a52154b6c50b06e66d60b12", [])
|
||||
江湖体 = EffectMeta("江湖体", False, "7080097079397192228", "1654203", "50957d5102cb4f2ea1459e140826eb0c", [])
|
||||
沈尹默 = EffectMeta("沈尹默", False, "6852190963947803143", "814919", "9af4745e3a8f8b3a8f72f65b43302a98", [])
|
||||
油性マシ_ック = EffectMeta("油性マジック", False, "7236735801076224568", "20403341", "0c3de71c508fe9eb7027ec49ff2878f0", [])
|
||||
油漆体 = EffectMeta("油漆体", False, "7035906361040835079", "1459392", "f3f06c4b538c534a498c5e3712a949fa", [])
|
||||
海岛森林_全字符 = EffectMeta("海岛森林-全字符", False, "7445240658693984805", "95365506", "91a93794d0970a1acdb8822729ae5965", [])
|
||||
清刻本悦 = EffectMeta("清刻本悦", False, "7086429206543864350", "1698068", "2e70579a0538bde91edc1eaedc68c02f", [])
|
||||
清酒体 = EffectMeta("清酒体", False, "7290445172834308664", "25999017", "7692c22a862d23bcd09f84c0aa2f7502", [])
|
||||
渊亭体 = EffectMeta("渊亭体", False, "7290447006659514941", "25999013", "026681bd4e89ed40420e184fd6bfb1fc", [])
|
||||
温宁体 = EffectMeta("温宁体", False, "7290445705578025529", "25998977", "fdc9d5eb51a0e4f9e1dedc0091402ff5", [])
|
||||
温柔体 = EffectMeta("温柔体", False, "7050009415155454500", "1511616", "eb4b8ebef19e89895193d930e7c607c1", [])
|
||||
港风繁体 = EffectMeta("港风繁体", False, "6740438140432945675", "349323", "9bfde9a789862114b6055ed475688908", [])
|
||||
游园体 = EffectMeta("游园体", False, "7290446760739082789", "25998988", "b9e3537ea657978bc1963e76b66312a9", [])
|
||||
游思体 = EffectMeta("游思体", False, "7290446655604658748", "25998994", "3fd19c651575d8cfda6ca059f725a6f8", [])
|
||||
源ノ角コ_シック = EffectMeta("源ノ角ゴシック", False, "7236735800992338487", "20403397", "14e8f41b916c9a3b1d38a334301134e5", [])
|
||||
漫语体 = EffectMeta("漫语体", False, "7081925440264213000", "1665066", "e91bd31939be0dbbcae085a64d151ad6", [])
|
||||
澄月 = EffectMeta("澄月", False, "7246698168547561986", "20404007", "5ff03a1ddae1b9a9909926629d4aa63e", [])
|
||||
瀞ノクーケ_ル明朝 = EffectMeta("瀞ノクーゲル明朝", False, "7236735801088807482", "20403339", "b20759e5aec663c007cc19c16460f819", [])
|
||||
点宋体 = EffectMeta("点宋体", False, "7080096967543493150", "1654204", "e5338c6ec760fc059b257d8dc31e7279", [])
|
||||
烈金体 = EffectMeta("烈金体", False, "7043773114546655781", "1488714", "dd0bc895570589984077890ab098ef15", [])
|
||||
烟波宋 = EffectMeta("烟波宋", False, "7068531367386026526", "1589144", "4ee19f0d46c10ccc70bac084226e6f82", [])
|
||||
爨宝子碑 = EffectMeta("爨宝子碑", False, "6852191233356337671", "814916", "f2686de98659e4812016cfc41192f726", [])
|
||||
特黑体 = EffectMeta("特黑体", False, "6740439840254333443", "349329", "92988aefce8a45c8fd7fe58a60fc72cc", [])
|
||||
玉轩体 = EffectMeta("玉轩体", False, "7290446916402287163", "25999001", "ab11f1f4e5eeb5d783a8ddae06c34225", [])
|
||||
玩童体 = EffectMeta("玩童体", False, "6766524209620324877", "459292", "99ac707c2ba4d141161fcec8a9ea91b7", [])
|
||||
琉璃宋 = EffectMeta("琉璃宋", False, "7020719089999942157", "1402720", "a3bd369495563713486e56b7f550af87", [])
|
||||
瑞意宋 = EffectMeta("瑞意宋", False, "7130447431891685895", "3997461", "a73364889c89bd6be1d08a92cb49245a", [])
|
||||
瑶蝶体 = EffectMeta("瑶蝶体", False, "7290446536050217532", "25998987", "04e3d3e0eae3de5c859e8c00d2b48759", [])
|
||||
甜甜圈 = EffectMeta("甜甜圈", False, "7130634783163421215", "4009729", "bbe904649c122449f4ea360030b603a6", [])
|
||||
白舟武骨 = EffectMeta("白舟武骨", False, "7212913285383852600", "10971151", "2049cc4511ce3d74dbcc2b6678615922", [])
|
||||
目光体 = EffectMeta("目光体", False, "7035921361348334117", "1459640", "39e69d115d15e598c11d2686067dc70d", [])
|
||||
真言体 = EffectMeta("真言体", False, "7003588300720050696", "1349505", "9ae1a1787978c3b8e2a06a9d0c55906a", [])
|
||||
知夏森林 = EffectMeta("知夏森林", False, "7224042336223760954", "12441415", "9d8f09292c3d223bc5a0ac05e373902a", [])
|
||||
研宋体 = EffectMeta("研宋体", False, "7130644288047682085", "4010355", "06458c13377d445fe3368cd2c786c7a5", [])
|
||||
研月体 = EffectMeta("研月体", False, "7290446001947546149", "25998978", "7357fd4adcd7d003cc8ce73876e5b660", [])
|
||||
禅影体 = EffectMeta("禅影体", False, "7278963576167993916", "22902355", "438c78fb511d6993217961e53a281c0a", [])
|
||||
秀英四号太かな = EffectMeta("秀英四号太かな", False, "7246698168543351298", "20404005", "9ab728019cac814d6634b4f9df2ea909", [])
|
||||
站酷仓耳渔阳体_W02 = EffectMeta("站酷仓耳渔阳体-W02", False, "7265609366311539237", "20379308", "9a845e092fe17de221ac868374d9744b", [])
|
||||
站酷仓耳渔阳体_W03 = EffectMeta("站酷仓耳渔阳体-W03", False, "7265610166744125989", "20379299", "4ae46d2552d181b6ad61de16f81a01e6", [])
|
||||
站酷仓耳渔阳体_W04 = EffectMeta("站酷仓耳渔阳体-W04", False, "7265609848438395449", "20379307", "709d54b0e2a042680ea24ee4705e299e", [])
|
||||
站酷文艺体 = EffectMeta("站酷文艺体", False, "7265593885475213880", "20373100", "16a1388d7e0219385f7db1afd56d5255", [])
|
||||
站酷酷黑体 = EffectMeta("站酷酷黑体", False, "7265609486646121018", "20379297", "bf9cb4e27fff8ea1dacdd07ed038f92f", [])
|
||||
童趣体 = EffectMeta("童趣体", False, "7035888265290846756", "1459176", "07911c7bc89d724503b88c6fbafaccc5", [])
|
||||
竹柏体 = EffectMeta("竹柏体", False, "7290447547208831544", "25998983", "f1e9985534986c52aebe7cec8116383a", [])
|
||||
竹风体 = EffectMeta("竹风体", False, "7290447605065060901", "25998973", "b27dc01a8f98a87292b7f6f589dcbe33", [])
|
||||
简中圆 = EffectMeta("简中圆", False, "7050009066717844005", "1511618", "f26eb8bd135d147bb7700a560f1a5470", [])
|
||||
糯米团 = EffectMeta("糯米团", False, "6934225430266253837", "1053146", "aee9551fab5ef01c45dbe3335869db1d", [])
|
||||
結月 = EffectMeta("結月", False, "7013643491003601410", "20403297", "8eb2aac0456da1b04e206fc3fe1d75d8", [])
|
||||
纯真体 = EffectMeta("纯真体", False, "7045185581772444174", "1494870", "b33e32b8733e27775849ee5d7f92d7e7", [])
|
||||
细体 = EffectMeta("细体", False, "6740511815358222859", "349521", "3d80be25a18fb67455744136c1262c91", [])
|
||||
经典雅黑 = EffectMeta("经典雅黑", False, "7043775037559542279", "1488718", "ba7bbfabf030860ee4a23d6596a6c6e3", [])
|
||||
综艺体 = EffectMeta("综艺体", False, "6740499188347310605", "349467", "8d34d3abe70f2c3c61f9a93b1f85c76b", [])
|
||||
综艺字 = EffectMeta("综艺字", False, "7130642664080282149", "4010283", "74671c7987f56ba9a6ab93f95856973a", [])
|
||||
美佳体 = EffectMeta("美佳体", False, "7203665054338650685", "9898774", "69a5666d4ab91113ea146e71bc3e42c9", [])
|
||||
聚珍体 = EffectMeta("聚珍体", False, "7203638484752405051", "9893381", "7e024261e2d38e87bc78e6843ad2e6b3", [])
|
||||
胡晓波男神体 = EffectMeta("胡晓波男神体", False, "7265612031825285689", "20379293", "b383909e5988beae9c65d91a451d4db9", [])
|
||||
胡晓波真帅体 = EffectMeta("胡晓波真帅体", False, "7265611790313067069", "20379292", "4392c7918eaffa6dd9af883ef4b628e2", [])
|
||||
胡晓波骚包体 = EffectMeta("胡晓波骚包体", False, "7265611912849658429", "20379298", "6fd07e4a429f7ebe39c205aea5962ab6", [])
|
||||
芋圆体 = EffectMeta("芋圆体", False, "7039989971796628005", "1478272", "c47882a0a6781f00b6b152c456844413", [])
|
||||
花语手书 = EffectMeta("花语手书", False, "7081925028773630471", "1665069", "d79245bb807ef0f74165afdb07b5f952", [])
|
||||
芷云体 = EffectMeta("芷云体", False, "7290447317247726139", "25998979", "740074083cab996fa9115efb9ca63eaf", [])
|
||||
若烟体 = EffectMeta("若烟体", False, "7290445344557503033", "25999000", "001f25aa8dc71e9221433f2ff6c8e540", [])
|
||||
荔枝体 = EffectMeta("荔枝体", False, "6740498118342611464", "349483", "9beb006988541f18a560f8029d47defa", [])
|
||||
萌趣体 = EffectMeta("萌趣体", False, "7045186231122006535", "1494868", "005466971691f729c2a0927ffe6f81b7", [])
|
||||
萧疏体 = EffectMeta("萧疏体", False, "7290445832845791801", "25998989", "70729e571b7729a7be14828f525ce9ef", [])
|
||||
蒹葭体 = EffectMeta("蒹葭体", False, "7290443923556667959", "25999014", "04660ff6d07b1fd3437128caf3adfbb8", [])
|
||||
薯条少年 = EffectMeta("薯条少年", False, "7068530728467698213", "1589148", "8842c4ca3fde9cefeaa17fa5bb99a77b", [])
|
||||
蝉影隶书 = EffectMeta("蝉影隶书", False, "7045186520738697742", "1494867", "afcec5248968e5b3fd7d7eb3a670eadc", [])
|
||||
蝶汐体 = EffectMeta("蝶汐体", False, "7290441304029270587", "25999007", "c45854a55e2d3320e47c299633df8c7f", [])
|
||||
装甲明朝 = EffectMeta("装甲明朝", False, "7265536455655559739", "20356625", "3f334186c4522694108e7ab9534201fd", [])
|
||||
解星テ_コール = EffectMeta("解星デコール", False, "7236735801088807461", "20403335", "e87c0310b7f95ded9e9466ed5a038d23", [])
|
||||
谷槐体 = EffectMeta("谷槐体", False, "7290442552933618213", "25999006", "eb56bfc5c186158d60149372192b99ba", [])
|
||||
谷秋体 = EffectMeta("谷秋体", False, "7290442742822343205", "25999008", "233d1f80de91946da3c59527a61b1c87", [])
|
||||
超级战甲 = EffectMeta("超级战甲", False, "6970982657576407559", "1156412", "2872dab5c322f42ed7d1d9715013dc36", [])
|
||||
超重要体 = EffectMeta("超重要体", False, "7203638484752405048", "9893378", "d21f913df460b6a9332a1520f7fe2d0c", [])
|
||||
轻吟体 = EffectMeta("轻吟体", False, "7035927184275411464", "1459730", "205a76c590ab163af423468e7f416a91", [])
|
||||
轻烟体 = EffectMeta("轻烟体", False, "7290445091401896507", "25998992", "477c79ab3925eb7eacf381bbc5df9cf8", [])
|
||||
追光体 = EffectMeta("追光体", False, "7203638485666763325", "9893371", "5e0b49b0a3e33e04769cabbee228f6f4", [])
|
||||
造字工房朴月体 = EffectMeta("造字工房朴月体", False, "7174426619228983816", "7046698", "7e21275ffaeeacc4472580bad9a95b19", [])
|
||||
逸致拼音 = EffectMeta("逸致拼音", False, "7070430706689643038", "1600480", "e15bf3763fb346f8b60eebabf04bdeee", [])
|
||||
醉冬体 = EffectMeta("醉冬体", False, "7290447667463721531", "25998974", "03b90eec6b256b89377e9f0b2936a9fe", [])
|
||||
醉山体 = EffectMeta("醉山体", False, "7290447771503432250", "25998980", "593e3537fab3af2dee1cff9ef8272571", [])
|
||||
金陵体 = EffectMeta("金陵体", False, "7086699209738424840", "1698067", "599831579b8aa5b5f0608d5e7d4ec5ce", [])
|
||||
钟隶体 = EffectMeta("钟隶体", False, "7290447395433747002", "25998975", "986ea2205ab06bf06be49eff695633ab", [])
|
||||
锦瑟体 = EffectMeta("锦瑟体", False, "7290443998345302586", "25999022", "eb465dc5d9f045c5ff3ce34d480a2529", [])
|
||||
闘龍 = EffectMeta("闘龍", False, "7246698168547561985", "20403941", "b2552e48bc11cb289ccdf4504e3b771f", [])
|
||||
陈森田 = EffectMeta("陈森田", False, "6740499585669534215", "349461", "2f460ce688c37123262d25a3cc01771c", [])
|
||||
雁兰体 = EffectMeta("雁兰体", False, "7290446084780855867", "25998990", "6198e5f40da27fec116ee785c23b837e", [])
|
||||
雅酷黑简 = EffectMeta("雅酷黑简", False, "7130640934366089758", "4010137", "35ddec41ffa518033484f219e324a6bd", [])
|
||||
霸燃手书 = EffectMeta("霸燃手书", False, "7045187409960505886", "1494865", "e4f6766608951c7184a5d2a56aa370fa", [])
|
||||
青松体 = EffectMeta("青松体", False, "7290444911940211237", "25998985", "f4e7026acbdb7edd1003d24561f2add7", [])
|
||||
青翼体 = EffectMeta("青翼体", False, "7290445024435638842", "25998995", "ed99664d2260c7ea5390f24d9f280a69", [])
|
||||
风铃悠悠 = EffectMeta("风铃悠悠", False, "6903832640005083655", "979898", "6bec0d77ab4770d730f03611e9ae7f3d", [])
|
||||
风雅宋 = EffectMeta("风雅宋", False, "7208056673317950011", "10379505", "c4624c3d535a1801e0992ccb25de6ac4", [])
|
||||
飒爽手写 = EffectMeta("飒爽手写", False, "7054125855676568095", "1530070", "86756c9b0c71fd513bcc163893b56d7e", [])
|
||||
飞扬行书 = EffectMeta("飞扬行书", False, "7035922620969128479", "1459678", "0532175b5a7a61e379d6b1f23c212f43", [])
|
||||
飞驰体 = EffectMeta("飞驰体", False, "7045186745100407310", "1494866", "1e9478384005377f087abf035cdffe64", [])
|
||||
高字标志黑 = EffectMeta("高字标志黑", False, "7268259518427959866", "20885841", "4843f24f22c8d22c984533e347be275a", [])
|
||||
高字湘黑体 = EffectMeta("高字湘黑体", False, "7268259657167147577", "20885842", "2f0c093261b368846aae47cf8a8f74ba", [])
|
||||
魏碑体 = EffectMeta("魏碑体", False, "7035925927364137480", "1459722", "86169b46ad4dc73060f2a0b8d4f85a48", [])
|
||||
鲁迅行书 = EffectMeta("鲁迅行书", False, "6852191147230499341", "814917", "f1e089b61ff8c80ae89a929480c29f9e", [])
|
||||
鸿朗体 = EffectMeta("鸿朗体", False, "7290443206641062456", "25999020", "f5c0a418632780b008ec6d06476f3a3c", [])
|
||||
鸿潮榜书 = EffectMeta("鸿潮榜书", False, "7080096689553412615", "1654206", "9bbd5d67cabab4f174289af1c1efbe4c", [])
|
||||
黄令东齐伋复刻体 = EffectMeta("黄令东齐伋复刻体", False, "7265535655105532476", "20356605", "e7830741b741962e5c43105ea25e3612", [])
|
||||
黄油体 = EffectMeta("黄油体", False, "7265594455246246456", "20373099", "8d461ee41e8ffba2b77eae73f0a81d77", [])
|
||||
黄金时代 = EffectMeta("黄金时代", False, "7050010418932093471", "1511614", "269a3b6801b4e0b8e43d2d786f729da5", [])
|
||||
黎首体 = EffectMeta("黎首体", False, "7290444159842783803", "25999009", "ab6b6d28a350348b62613d3d0107096e", [])
|
||||
黒明朝 = EffectMeta("黒明朝", False, "7246698169310908930", "20404021", "4bc15cc4aac4d0cd44bb1949573d0cb7", [])
|
||||
默陌手写 = EffectMeta("默陌手写", False, "7025886295524119053", "1424938", "64b0eee1f99387b2d7a27f9c961e6bba", [])
|
||||
검 = EffectMeta("검", False, "6841117522335371789", "20402365", "22104eb8b13bb33ff67be66a0a354723", [])
|
||||
검은_고딕체 = EffectMeta("검은 고딕체", False, "6808056243958059534", "20402283", "eb3c9a93c57d012275f863dc505cd599", [])
|
||||
고딕 = EffectMeta("고딕", False, "6841143710177038856", "20402461", "4fa8d9e036b07cfb4903758f59f853f4", [])
|
||||
고딕체 = EffectMeta("고딕체", False, "6808056385679397389", "20402279", "046f11d9049144aa80e3723b5ed93b7a", [])
|
||||
귀염 = EffectMeta("귀염", False, "6841117240457171470", "20402361", "88e33d4c49ea8e0d3e2a34db33d5baf9", [])
|
||||
나눔_명조체 = EffectMeta("나눔 명조체", False, "6808057418866496014", "20402271", "98fa1cc813be2355fa176d7ccf67b785", [])
|
||||
낭만 = EffectMeta("낭만", False, "6841119058838950414", "20402441", "9b3b62befefc316098b5e5dd9396ad25", [])
|
||||
로맨틱가이 = EffectMeta("로맨틱가이", False, "6808056744258834952", "20402275", "b393bd8032b9567e9111e28cf216156a", [])
|
||||
로봇 = EffectMeta("로봇", False, "6841119449815192071", "20402445", "55dbee5dae1f9078477c7ecfc2a0be39", [])
|
||||
룬 = EffectMeta("룬", False, "6841118098964091405", "20402401", "a029f910e187edc554df3f7945c7f022", [])
|
||||
버터 = EffectMeta("버터", False, "6841119192150708744", "20402443", "c967a8d8bd3640d6e59f02a0277bb04b", [])
|
||||
성냥개비 = EffectMeta("성냥개비", False, "6841118217641923085", "20402431", "7bfdd9c2dad08600a83f226db3149653", [])
|
||||
소나무 = EffectMeta("소나무", False, "6841116992846434829", "20402359", "261086435afe50219a1156d1aa3b0004", [])
|
||||
시트콤 = EffectMeta("시트콤", False, "6841116836445032974", "20402357", "f95108bc596583df9ddc9bfec7813e62", [])
|
||||
십대 = EffectMeta("십대", False, "6841117356756832776", "20402363", "d589218d3c08ad6e0a4cb1de1bd00f03", [])
|
||||
아기 = EffectMeta("아기", False, "6808056941458231815", "645451", "79273a8d31ec91b9f110243bd1096291", [])
|
||||
아이 = EffectMeta("아이", False, "6841118486639415822", "20402433", "c9db70b65b984a4363c15343b2bd2573", [])
|
||||
유행 = EffectMeta("유행", False, "6841117979371901454", "20402399", "009b2f822e20ece4ed7f2ae3df8e431f", [])
|
||||
이야기 = EffectMeta("이야기", False, "6841118628025209358", "20402435", "cb58fd3d586a63998dd3a2a9b2c74441", [])
|
||||
전통 = EffectMeta("전통", False, "6808056067201700360", "20402311", "113f70827a53eb347c4963008442f5e0", [])
|
||||
초승달 = EffectMeta("초승달", False, "6841117705538376205", "20402369", "ef26b19722edb198afb05dbf1e6aaaf6", [])
|
||||
추사체 = EffectMeta("추사체", False, "6808057229309121038", "20402301", "03f146063813fef4e276122ec2f9022c", [])
|
||||
커피 = EffectMeta("커피", False, "6841118775186559495", "20402437", "7a1aae32d9c48be23d5ef99797977c68", [])
|
||||
필기 = EffectMeta("필기", False, "6766523918946669069", "459288", "b393bd8032b9567e9111e28cf216156a", [])
|
||||
한드 = EffectMeta("한드", False, "6841118889850442254", "20402439", "398d40463233dfad04e3419248a1f216", [])
|
||||
행복 = EffectMeta("행복", False, "6841151352597385735", "20402465", "ced999c86d6916f621b8a5c0c2d325af", [])
|
||||
흑백만 = EffectMeta("흑백만", False, "6841116695759688205", "20402327", "8626c3ab19bd1ea9e6a8cbbbb3ff48dd", [])
|
||||
アドゴッシク = EffectMeta("アドゴッシク", False, "6841482093025825288", "20403099", "ca0367d4e28ad273f187747c45d27d57", [])
|
||||
オーバーラップ = EffectMeta("オーバーラップ", False, "6841482806573404680", "20403059", "c771c84fc32ec5f969a8230a54453652", [])
|
||||
スクリプト = EffectMeta("スクリプト", False, "6841483289438458381", "20403035", "516cd5ca0a4c4fb58e51023e76c95d94", [])
|
||||
セリフ太字 = EffectMeta("セリフ太字", False, "7020729846334493215", "1402800", "569bf7220b9170da8dd45c2241740140", [])
|
||||
セリフライト = EffectMeta("セリフライト", False, "6841481513985380872", "20403113", "6448241a16c56d4c8dfa6ecb6b04c1c0", [])
|
||||
モーダ太字 = EffectMeta("モーダ太字", False, "6841481374243754510", "20403121", "e523f252c437fb3b707044a3a4492899", [])
|
||||
モーダライト = EffectMeta("モーダライト", False, "6841480712739099150", "20403133", "d0ba57c8c707a5aee48cfbe5214017cf", [])
|
||||
レギュラー = EffectMeta("レギュラー", False, "6841482701082464776", "20403061", "97c3fa9b7e660481c34e3991449e0886", [])
|
||||
|
||||
# 付费特效
|
||||
Aa之云体 = EffectMeta("Aa之云体", True, "7501533851718521394", "115474299", "c2d2b3f676344b6c60abb1c86490a81a", [])
|
||||
Aa乌日莫 = EffectMeta("Aa乌日莫", True, "7501234570835006003", "115375585", "3c3abd1d591cebc922f726ca6757bd83", [])
|
||||
Aa人间蹉跎 = EffectMeta("Aa人间蹉跎", True, "7501532931635024434", "115473709", "3cb617e2815bc9933189305a24d97c4d", [])
|
||||
Aa全息黑体 = EffectMeta("Aa全息黑体", True, "7497891126481785381", "114156127", "4e1d0e0a88ceac64b296c29fe0a39b3e", [])
|
||||
Aa刃黑体 = EffectMeta("Aa刃黑体", True, "7497895571210900005", "114159648", "6b49279ad89772018b28ca98a4c45253", [])
|
||||
Aa剑豪体 = EffectMeta("Aa剑豪体", True, "7501261456420114981", "115395999", "c348d6f9b504581f4eb1f3654272b4fb", [])
|
||||
Aa动员宋 = EffectMeta("Aa动员宋", True, "7501238408837075483", "115377308", "ebdb43b153a9ffad27012ac91380a2c8", [])
|
||||
Aa勘亭流 = EffectMeta("Aa勘亭流", True, "7501211609050649115", "115360771", "94d4d50001bfd5b803117535413066bc", [])
|
||||
Aa厚底黑 = EffectMeta("Aa厚底黑", True, "7174431250067755577", "7047541", "f3b0d37b587cc5b5ee33b5092802c5a7", [])
|
||||
Aa古线体 = EffectMeta("Aa古线体", True, "7501211793906209331", "115360774", "ddae3345190c1a093966c9c7e3fd63a2", [])
|
||||
Aa台灣漢字心動信號_简繁 = EffectMeta("Aa台灣漢字心動信號(简繁)", True, "7497889331973984805", "114154846", "6c4a38850eb3b3b52f5a68d682fa430a", [])
|
||||
Aa封神榜书 = EffectMeta("Aa封神榜书", True, "7501235311461012018", "115375582", "fd1dbebd76b8b781fa4472f4fc86f297", [])
|
||||
Aa小星星 = EffectMeta("Aa小星星", True, "7501533449530905114", "115474013", "a7543af068a34d006b9d245631c6ac14", [])
|
||||
Aa居酒屋 = EffectMeta("Aa居酒屋", True, "7501539460945809957", "115478734", "8b7c3464cb22da3b34b1366a3a9db35a", [])
|
||||
Aa巴洛克 = EffectMeta("Aa巴洛克", True, "7501235648557224498", "115375583", "27819df69cf24dea1b6680e172ff2383", [])
|
||||
Aa幻想 = EffectMeta("Aa幻想", True, "7501533252969042470", "115473869", "db640c840ec4a3ac277f82651d882a6a", [])
|
||||
Aa德古拉简 = EffectMeta("Aa德古拉简", True, "7497898575926399498", "114171804", "2b8c71449d9bd07af2b53e39649195aa", [])
|
||||
Aa放放隶书 = EffectMeta("Aa放放隶书", True, "7497890527145103881", "114155759", "df28a19f3fabcea1714983b641b74f04", [])
|
||||
Aa新华墨竹体 = EffectMeta("Aa新华墨竹体", True, "7497893640140755494", "114158131", "8f980bd172a4209dffdfe9607eb3479e", [])
|
||||
Aa新华惊马体 = EffectMeta("Aa新华惊马体", True, "7501238774051902002", "115377540", "6311492d22d45387cc0a7d33175f0509", [])
|
||||
Aa新怪谈 = EffectMeta("Aa新怪谈", True, "7501235484727710246", "115375584", "09588ce566b7a1e04b8d9e8dad5b9307", [])
|
||||
Aa方块黑 = EffectMeta("Aa方块黑", True, "7497893873037873714", "114158130", "c05e291a77ad65289700a642af2ac23a", [])
|
||||
Aa未央宫词 = EffectMeta("Aa未央宫词", True, "7497892647986532914", "114157130", "d09257691cd47c862d817b37a901c5ab", [])
|
||||
Aa杜康手书 = EffectMeta("Aa杜康手书", True, "7501262679810511370", "115396001", "9a2c0455cdb75dfd2c26cea7a3d2e33d", [])
|
||||
Aa欢乐堡 = EffectMeta("Aa欢乐堡", True, "7501235116673339954", "115375586", "a4dc41ffdc19e2943272ddd094977633", [])
|
||||
Aa水玉圆体 = EffectMeta("Aa水玉圆体", True, "7501211417521951270", "115360773", "2b4738a757bafc3a206443c6487eb98a", [])
|
||||
Aa浮梦体 = EffectMeta("Aa浮梦体", True, "7501212180285493787", "115360769", "91bc40daba8b5cd9c0297ef0e5c2faae", [])
|
||||
Aa海豹体 = EffectMeta("Aa海豹体", True, "7501212376713138698", "115360770", "24369b05f05fa1f8e503e7e164de413b", [])
|
||||
Aa清欢圆体 = EffectMeta("Aa清欢圆体", True, "7497893259797074441", "114158127", "0059c8befa5a7e0543e62a3cfb0961e7", [])
|
||||
Aa漆书 = EffectMeta("Aa漆书", True, "7497890203277726235", "114155607", "5cfd18f135307a803de983307f256203", [])
|
||||
Aa烈焰隶书 = EffectMeta("Aa烈焰隶书", True, "7501239212855792165", "115378827", "0e784d2d379a3cdefcd88e808df0c89c", [])
|
||||
Aa狂派手书 = EffectMeta("Aa狂派手书", True, "7501260939212100146", "115396002", "9f70fc1fb883f713d2aad9ec629f891d", [])
|
||||
Aa疏漫宋 = EffectMeta("Aa疏漫宋", True, "7497897887477535242", "114171805", "0491ac4f070fbe395856d0e19e4f1027", [])
|
||||
Aa百物语 = EffectMeta("Aa百物语", True, "7501234966815052339", "115375580", "db0dab0965562d57c7770c7d2778d5bb", [])
|
||||
Aa祝融隶 = EffectMeta("Aa祝融隶", True, "7501262524466074121", "115396000", "75791dafa1036a011a9d23b80c22402a", [])
|
||||
Aa简正隶黑 = EffectMeta("Aa简正隶黑", True, "7501238583911518729", "115377425", "9b00ec896d0655c5966a80ffb236f2fa", [])
|
||||
Aa芥末墩 = EffectMeta("Aa芥末墩", True, "7501234746416960050", "115375581", "8dbda4bb6f1f69d6e765aa773e0d93f3", [])
|
||||
Aa菊花体 = EffectMeta("Aa菊花体", True, "7497894073559159323", "114158129", "08cc7d09f863c337c66601564a73c9db", [])
|
||||
Aa融融宋 = EffectMeta("Aa融融宋", True, "7501238214691131930", "115377151", "d5ea45ee9325d5f5664d0b9955dfbad6", [])
|
||||
Aa西风手书 = EffectMeta("Aa西风手书", True, "7497891525213295114", "114156355", "6bfd89309c57db170a8058502ad2dd78", [])
|
||||
Aa跃然体 = EffectMeta("Aa跃然体", True, "7501262110492463625", "115395996", "0b729ba9eaebde7cffc63b285a55ed4e", [])
|
||||
Aa醒狮体 = EffectMeta("Aa醒狮体", True, "7501260756655018533", "115395997", "23ffea61da52f50710ad590525ef8b46", [])
|
||||
Aa金石体 = EffectMeta("Aa金石体", True, "7497891337044234789", "114156237", "f66ddc70f3a7e0b80af776d9b59b2df3", [])
|
||||
Aa锐智体 = EffectMeta("Aa锐智体", True, "7501238022352933413", "115377035", "41a8ad1e053a994d062f45c303d28855", [])
|
||||
Aa锐甲黑 = EffectMeta("Aa锐甲黑", True, "7497896024078291482", "114159647", "ce12950846b42d3ca7db007b2702f892", [])
|
||||
Aa锐雅体 = EffectMeta("Aa锐雅体", True, "7497896536597074483", "114159649", "8d1884ec7380f5aa0c5ed0d6ed248419", [])
|
||||
Aa镁宋 = EffectMeta("Aa镁宋", True, "7497898052825387530", "114171803", "91ba8555000f2047c56714f96e0129bd", [])
|
||||
Aa闲云体 = EffectMeta("Aa闲云体", True, "7501261128207438386", "115396003", "38adf19d88cb05a6704ba4885eb44a12", [])
|
||||
Aa霸道楷 = EffectMeta("Aa霸道楷", True, "7501210878839099930", "115360768", "14d529c19ff5422c2a71c02d2f0942a5", [])
|
||||
Aa顽宋 = EffectMeta("Aa顽宋", True, "7497896719514866203", "114159645", "b82001265d8c3b358793d30b9a2f501e", [])
|
||||
Aa鲸潮体 = EffectMeta("Aa鲸潮体", True, "7501261289486815795", "115395998", "ed1adf6e49aa98e72824bf0acd575865", [])
|
||||
Aa鹅卵石 = EffectMeta("Aa鹅卵石", True, "7497894333161411098", "114158128", "592312dab4297df570ca565b43c17dc1", [])
|
||||
Aa麟兰宋 = EffectMeta("Aa麟兰宋", True, "7497896347551404595", "114159646", "60b1d9a919f4b30922ce0f3accb15b5c", [])
|
||||
Aa龙象体 = EffectMeta("Aa龙象体", True, "7501211164332790298", "115360772", "24206940919ae94e22bb052739cfdafb", [])
|
||||
Atomic_Marker = EffectMeta("Atomic-Marker", True, "7490531359736205834", "111804574", "c3ddb0454628811c3562a03f256a126d", [])
|
||||
Awelier = EffectMeta("Awelier", True, "7491984624688566835", "112259365", "0e869f12fca5b2af601afec79f64d4ad", [])
|
||||
CC_Captial = EffectMeta("CC-Captial", True, "7418508570066424330", "84086581", "8ba811d327acd1516615259819da72a2", [])
|
||||
CC_Chubby = EffectMeta("CC-Chubby", True, "7481130667518988850", "108570272", "7876d2d83e1e2b85bd87e0ba74274802", [])
|
||||
CC_Decocut = EffectMeta("CC-Decocut", True, "7419969356659954214", "84566362", "bd7466b88b16c19833a1c1151303e016", [])
|
||||
CC_DerStil = EffectMeta("CC-DerStil", True, "7481130779821478426", "108570258", "c6cc9a5326909d0ca63eac1ab3be6e3d", [])
|
||||
CC_Element = EffectMeta("CC-Element", True, "7416649778416587274", "83388253", "1e7becc8521b658de14864db8fcbb389", [])
|
||||
CC_Fluffy = EffectMeta("CC-Fluffy", True, "7412942953905132049", "82112759", "87954588501cc7c35de2789bfe23ab21", [])
|
||||
CC_Fusion = EffectMeta("CC-Fusion", True, "7441202923708617227", "93510805", "a6e9ea208def5ea9fe2f8177fb03aa8f", [])
|
||||
CC_Glee = EffectMeta("CC-Glee", True, "7428153662695805478", "87224070", "2f6e2cdb94c3b68451d68916fee6515b", [])
|
||||
CC_Loopy_Letters = EffectMeta("CC-Loopy Letters", True, "7484186924291199526", "109692383", "898932311d059de4523acad926122499", [])
|
||||
CC_Manga = EffectMeta("CC-Manga", True, "7484175941208379914", "109692410", "9d6a96d28565c511fc9a96b51c70f7f5", [])
|
||||
CC_Moderno = EffectMeta("CC-Moderno", True, "7444152681741947403", "94915234", "3bd5f42349aa8b0d3d211b6d2a6c31d4", [])
|
||||
CC_MonoCut = EffectMeta("CC-MonoCut", True, "7416261331872911881", "83245166", "45a1f04c1214f28081f2cd32c8814a39", [])
|
||||
CC_Piston = EffectMeta("CC-Piston", True, "7414496688611529255", "82624536", "3b3026dc1324ff59c62f34b02b2d5822", [])
|
||||
CC_Rapid = EffectMeta("CC-Rapid", True, "7434004568716874259", "89156910", "97e21584fc2f88a0473c3b6dd5abec25", [])
|
||||
CC_UltraMass = EffectMeta("CC-UltraMass", True, "7481130884687467046", "108570236", "c82dd71f169384002fac0d6f1274b62d", [])
|
||||
CC_Vita = EffectMeta("CC-Vita", True, "7419969457788817929", "84566385", "cab4d8408ed7788346c73f1237426184", [])
|
||||
CC_lemon = EffectMeta("CC-lemon", True, "7484188078546883082", "109692355", "0014e25d1ed87857d83f9f46fd8644c1", [])
|
||||
Clostan = EffectMeta("Clostan", True, "7491985061500162598", "112259661", "499772addc34d3c0c57d0db12a4f3836", [])
|
||||
Gildan = EffectMeta("Gildan", True, "7491984485504782874", "112260846", "b64a233d2273b4424e3498357764756d", [])
|
||||
Gildan_It = EffectMeta("Gildan-It", True, "7491984248069427750", "112259122", "2d59c5411a396be79a972abb62bcef23", [])
|
||||
JYruantang = EffectMeta("JYruantang", True, "7451897289527792178", "98222876", "af78243f78f27dfa80aca4e82c77eb1d", [])
|
||||
JYshiduo = EffectMeta("JYshiduo", True, "7451897058371310117", "98222874", "24fdaeb998c36d329b423561398ba4e3", [])
|
||||
JYzhuqingting = EffectMeta("JYzhuqingting", True, "7451897479320048166", "98222875", "921ba2b753807a5fb0d56a967225a352", [])
|
||||
Mellow = EffectMeta("Mellow", True, "7491984798026568218", "112259480", "7815b9c5cb6e7a5c6bbf9f95416170e7", [])
|
||||
Merry_Christmas = EffectMeta("Merry Christmas", True, "7451574186692055578", "98103035", "2a8b0f3ec8be1bde50969620603553af", [])
|
||||
Morska = EffectMeta("Morska", True, "7491984914565304870", "112259573", "5413dba12d4f3832a43d15038a19cdb8", [])
|
||||
MyFont凌渡哥哥简 = EffectMeta("MyFont凌渡哥哥简", True, "7316825302406009395", "36880890", "cc22c869da3e5aecae2c1ffaf27d3eda", [])
|
||||
MyFont凌渡猪猪简 = EffectMeta("MyFont凌渡猪猪简", True, "7316826370200310298", "36880879", "991bae1ed498bc17c16056935b73fa9b", [])
|
||||
Railway_Gank = EffectMeta("Railway-Gank", True, "7490534157064344074", "111805300", "b4f6d043abc325eb5ba55a79d3c8266c", [])
|
||||
Sugary = EffectMeta("Sugary", True, "7491984099733672485", "112259022", "2dba8f998289f81f20658ad407c4732d", [])
|
||||
Sugary_Dreams_Italic = EffectMeta("Sugary-Dreams-Italic", True, "7490531151350600219", "111804589", "2dba8f998289f81f20658ad407c4732d", [])
|
||||
Thinker_Alt1 = EffectMeta("Thinker-Alt1", True, "7490531314752295450", "111804584", "7b5044afab06e051cc2d70a75988e18a", [])
|
||||
Ugly_Dave_Alternates = EffectMeta("Ugly-Dave-Alternates", True, "7490531414392181258", "111804564", "aa46d2672cecc9d16c4184c804c85d23", [])
|
||||
Vogue = EffectMeta("Vogue", True, "7491983297870828058", "112258561", "a891f2a60d48be581685f9136e9418ca", [])
|
||||
ZY_Amity = EffectMeta("ZY Amity", True, "7311977316970664449", "34200643", "d6723285163f5230adc9bab0063530ae", [])
|
||||
ZY_Balloonbillow = EffectMeta("ZY Balloonbillow", True, "7353574360667394561", "55106512", "f6405bfdefb032ab060c05d9a1a7038a", [])
|
||||
ZY_Blossom = EffectMeta("ZY Blossom", True, "7304640684311450113", "30910322", "0435212aa54de0bbd8797b877eed75b4", [])
|
||||
ZY_Brief = EffectMeta("ZY Brief", True, "7311977774799917570", "34200651", "85952d2387016574cb2630d7f6760f4a", [])
|
||||
ZY_Classical = EffectMeta("ZY Classical", True, "7311977840574992897", "34200639", "65a5e2bf53c01be6ab002d281f2b917d", [])
|
||||
ZY_Concise = EffectMeta("ZY Concise", True, "7317175365288333826", "37544776", "e1727e1559ea44eef5a79f4d2e0f0901", [])
|
||||
ZY_Coruscant = EffectMeta("ZY Coruscant", True, "7302355236243378689", "30000836", "13b25f0cefddbd9674fa37821a864ad2", [])
|
||||
ZY_Courage = EffectMeta("ZY Courage", True, "7304640798488793602", "30910326", "902c396d8481367784495d73620b1a90", [])
|
||||
ZY_Daisy = EffectMeta("ZY Daisy", True, "7302355415038169601", "30000858", "5694276489bf9e70db025e6f19277508", [])
|
||||
ZY_Dots_Art = EffectMeta("ZY Dots Art", True, "7407288650473411088", "80464454", "6cf134f84322facd5a889b4cdfd8dde3", [])
|
||||
ZY_Elegant_Black = EffectMeta("ZY Elegant-Black", True, "7324166053649453570", "40250742", "9ed1afc8f2ba9b8abdec694010254e7b", [])
|
||||
ZY_Elixir = EffectMeta("ZY Elixir", True, "7302355533313348097", "30000844", "ebd4e8ef85eacc25860cd9c4c7d63d72", [])
|
||||
ZY_Fabulous = EffectMeta("ZY Fabulous", True, "7302355634538680833", "30000832", "2f673e5e2e8d956e6a0c6d8b28203d05", [])
|
||||
ZY_Fantasy = EffectMeta("ZY Fantasy", True, "7350189137770582529", "53177510", "09af030c4b206c3b895502f715c80d79", [])
|
||||
ZY_Flexible = EffectMeta("ZY Flexible", True, "7320169752465248769", "38698722", "7db82031c43cd09a3eb2e4a8cefff9cc", [])
|
||||
ZY_Flourishing_Italic = EffectMeta("ZY Flourishing-Italic", True, "7330606083335000577", "43287756", "dca57209a301d9119b911bff090262a8", [])
|
||||
ZY_Fortitude = EffectMeta("ZY Fortitude", True, "7330160852353421825", "43041469", "2db56cf21059b8a0c192f801555df245", [])
|
||||
ZY_Genial = EffectMeta("ZY Genial", True, "7343835314105881090", "49626244", "880c71fe5718834d2af405079017a334", [])
|
||||
ZY_Harmony = EffectMeta("ZY Harmony", True, "7311977407244669441", "34200663", "627c4a4271a14a2aaa50e99f55b55061", [])
|
||||
ZY_Ingenious = EffectMeta("ZY Ingenious", True, "7332772999801606657", "44370268", "ff9c0fcb108f4f2c31521ebfdc4a924b", [])
|
||||
ZY_Kindly_Breeze = EffectMeta("ZY Kindly Breeze", True, "7407289076090409489", "80464440", "a4e22dd23bf2aa6ae8ceda12400eb900", [])
|
||||
ZY_Loose = EffectMeta("ZY Loose", True, "7311977919948001793", "34200631", "ee6834207df657453188eba97ee1f260", [])
|
||||
ZY_Loyalty = EffectMeta("ZY Loyalty", True, "7371704099433091600", "66322554", "1e9b242443a9943a43ccf30604243978", [])
|
||||
ZY_Majestic = EffectMeta("ZY Majestic", True, "7322744435404444161", "39631829", "5f9cf1ebd52e941a74774df029bd6499", [])
|
||||
ZY_Modern = EffectMeta("ZY Modern", True, "7347670651626328577", "51844020", "5f5649ec5cd96f1311271d7f84e6151b", [])
|
||||
ZY_Multiplicity = EffectMeta("ZY Multiplicity", True, "7371704261878485521", "66322523", "f9714cd361ad6ddb6ee5b255d1e8ee21", [])
|
||||
ZY_Pace = EffectMeta("ZY Pace", True, "7311978000008876546", "34200623", "137b83eac18b26fb4ed9947cdc69f54d", [])
|
||||
ZY_Panacea = EffectMeta("ZY Panacea", True, "7302355742936273410", "30000850", "dc33e6efcf20202d53ab1818c50216e2", [])
|
||||
ZY_Relax = EffectMeta("ZY Relax", True, "7311977487469122049", "34200615", "4ac466f1249ffceb8ef9b6f366d42384", [])
|
||||
ZY_Rhythm = EffectMeta("ZY Rhythm", True, "7311978076647199233", "34200633", "ba8aa30ec13b22027612010c12f6ef4d", [])
|
||||
ZY_Slender = EffectMeta("ZY Slender", True, "7311977578821063170", "34200655", "bd7e086e303630912f12c4b75f93d139", [])
|
||||
ZY_Spunk = EffectMeta("ZY Spunk", True, "7304640886703395329", "30910324", "8942384a7e78d2be8b650b0791afdd56", [])
|
||||
ZY_Squiggle = EffectMeta("ZY Squiggle", True, "7371704357009494529", "66322535", "7b461311c3dae5726d9768969ff26ecf", [])
|
||||
ZY_Starry = EffectMeta("ZY Starry", True, "7304640983893807618", "31942077", "8558a845c7f82bf81e5b27c654b413e2", [])
|
||||
ZY_Steady = EffectMeta("ZY Steady", True, "7340237950094938625", "48055822", "2a7d2deb0d59c986f2b7dcec1ba5eafa", [])
|
||||
ZY_Tactful = EffectMeta("ZY Tactful", True, "7343835205418881537", "49626266", "98526862d30f120428d722f0f482a535", [])
|
||||
ZY_Timing = EffectMeta("ZY Timing", True, "7304641084833927682", "30910320", "95032638412a83a08c311a83bbcc85bb", [])
|
||||
ZY_Trend = EffectMeta("ZY Trend", True, "7347670845185069569", "51844010", "0f62f8bfab9d76a74dc281c7f248ac23", [])
|
||||
ZY_Upright = EffectMeta("ZY Upright", True, "7394802257847390737", "76415424", "7039078ff18119460a7475a4f0855c30", [])
|
||||
ZY_Vigour = EffectMeta("ZY Vigour", True, "7340906771109646849", "48332840", "e3ec58ae48dacc61639cd3189782397f", [])
|
||||
ZY_Vision = EffectMeta("ZY Vision", True, "7340906978828358145", "48332846", "d557c7127eb583608295e11d362c7db5", [])
|
||||
ZYLAA_Demure = EffectMeta("ZYLAA Demure", True, "7313895257991549442", "35459490", "ce4f98f6b9b57daa44336c2489eff940", [])
|
||||
ZYLAA_Flechazo = EffectMeta("ZYLAA Flechazo", True, "7313895610061427201", "35459194", "271dc59c2571611705199905a1e3720e", [])
|
||||
ZYLAA_Gambol = EffectMeta("ZYLAA Gambol", True, "7313895522496942593", "35459480", "da0af3552b7d3a02852bb38492ebaf4e", [])
|
||||
ZYLAA_Infinity = EffectMeta("ZYLAA Infinity", True, "7313895149266801153", "35459464", "89cb2458a15d287b1700e19da8992e6b", [])
|
||||
ZYLAA_Serein = EffectMeta("ZYLAA Serein", True, "7313895348269748738", "35459448", "e2b7df96431748f6a111df6fa01bd0f2", [])
|
||||
ZYLAA_lavender = EffectMeta("ZYLAA lavender", True, "7313895433011466754", "35459252", "e5cb066306e46ffbc15dc08eb70bc175", [])
|
||||
一笔壹画加油体 = EffectMeta("一笔壹画加油体", True, "7390218575979483659", "74697345", "f3020b0f6e2995f787a4fab6faef0e33", [])
|
||||
一笔壹画潮黑体 = EffectMeta("一笔壹画潮黑体", True, "7390218461990883876", "74696981", "97a3a570222328a8dd97b3921d3716bd", [])
|
||||
三极云隶体中 = EffectMeta("三极云隶体中", True, "7312720330986885642", "34549534", "6f587feaf3648f708c4da91616e340fd", [])
|
||||
三极力量体简_粗 = EffectMeta("三极力量体简-粗", True, "7405555944769196595", "79942352", "4c26fb32e20e6796d98a3ee30dfb5635", [])
|
||||
三极古拙楷书 = EffectMeta("三极古拙楷书", True, "7410300778998403610", "81318534", "03580936bf93675062e50d273fea559d", [])
|
||||
三极妙漫体 = EffectMeta("三极妙漫体", True, "7405556011081142822", "79942353", "d4ea5fbd89d90037a8d6500469023d96", [])
|
||||
三极宋黑体超粗 = EffectMeta("三极宋黑体超粗", True, "7312720224510284326", "34549526", "8b847b757e21edd8f0189782f8dd97b4", [])
|
||||
三极拙墨体 = EffectMeta("三极拙墨体", True, "7405556255906861605", "79942349", "8096b3c9dc67f62af7715b1d266ae1c7", [])
|
||||
三极拙隶简体 = EffectMeta("三极拙隶简体", True, "7312720520011584038", "34549528", "b53e4ba7b8a1a275b290dc427127296d", [])
|
||||
三极极宋超粗 = EffectMeta("三极极宋超粗", True, "7494187329054052901", "112957135", "f8122ed54493f8f66c8ebf6c422e6df2", [])
|
||||
三极榜楷简体 = EffectMeta("三极榜楷简体", True, "7410300778990015027", "81318537", "1b1aadca917f42578fb41d5d95c6539c", [])
|
||||
三极欢乐体 = EffectMeta("三极欢乐体", True, "7405555876368486939", "79942350", "e4acf0240f647779c23d3cd70452df5b", [])
|
||||
三极正雅黑粗 = EffectMeta("三极正雅黑粗", True, "7312720421177004571", "34549517", "705aa06a0c64ac4348cf575e3921faf9", [])
|
||||
三极气泡体 = EffectMeta("三极气泡体", True, "7405556128832033317", "79942351", "f1120030bd9df3fc5e58adfb2be96c26", [])
|
||||
三极泼墨体 = EffectMeta("三极泼墨体", True, "7405556071848219186", "79942347", "ecbcf36e6184d1306dc75dcc9391f4b7", [])
|
||||
三极活力黑简体_粗 = EffectMeta("三极活力黑简体 粗", True, "7410300778994209307", "81318539", "6125db74e7f1c5d73848a5359ac0303f", [])
|
||||
三极浓密仙粗 = EffectMeta("三极浓密仙粗", True, "7312720141865718282", "34549529", "d65312a270f2f970f94b453b0e05949f", [])
|
||||
三极湘乡体 = EffectMeta("三极湘乡体", True, "7410300778994209289", "81318538", "c817812de4b4be06462070c0af0e9ab0", [])
|
||||
三极纯真体粗 = EffectMeta("三极纯真体粗", True, "7312719708283736627", "34549518", "c847816a7221cc0d5864e30de0612177", [])
|
||||
三极罗丽黑简体_粗 = EffectMeta("三极罗丽黑简体-粗", True, "7410300778994209290", "81318535", "4950c4b06f6e7e882374bdd60add5bda", [])
|
||||
三极萌喵简体 = EffectMeta("三极萌喵简体", True, "7410300778994225674", "81318536", "d56f4a0c1c39de0bc7d5c9fb6e9b1400", [])
|
||||
三极行楷简体_粗 = EffectMeta("三极行楷简体-粗", True, "7405556194279952905", "79942348", "e901f6b29261b596fc8e7f85b1ea572b", [])
|
||||
三极铿锵体 = EffectMeta("三极铿锵体", True, "7312720059191792154", "34549521", "9a5cdcda6b00d26af0ecfa9b79250c54", [])
|
||||
三极黑宋体中粗 = EffectMeta("三极黑宋体中粗", True, "7312719852194501158", "34549520", "4577355bc0adeb1763ad581f05e7c5ea", [])
|
||||
云书法三行魏碑体 = EffectMeta("云书法三行魏碑体", True, "7316822178538721830", "36880893", "8d1f5570b333f80196ec40fde68fd190", [])
|
||||
云书法手书建刚静心楷简 = EffectMeta("云书法手书建刚静心楷简", True, "7316823183905002010", "36880886", "5b5b4250553e98394d9e01644ec47320", [])
|
||||
云书法生如夏花简 = EffectMeta("云书法生如夏花简", True, "7316822784103944713", "36880894", "460bd3cafc980d468c35c960dd50a2d3", [])
|
||||
云书法罗西硬笔楷书体 = EffectMeta("云书法罗西硬笔楷书体", True, "7316819473019703859", "36880892", "a8554d938efd7655890ddb5c413b1d47", [])
|
||||
云书法萨瓦迪卡简 = EffectMeta("云书法萨瓦迪卡简", True, "7316821586038755877", "36880889", "b504036de8a8db8ada2082bfaeb6b497", [])
|
||||
亦然体 = EffectMeta("亦然体", True, "7290457372814742073", "26003134", "a4922f5c3dbd6998261cbbf9dcb51139", [])
|
||||
仓耳丝柔体 = EffectMeta("仓耳丝柔体", True, "7423616269384946186", "85757836", "4cc0c3a634c7888ada2991778315963c", [])
|
||||
仓耳丰黑 = EffectMeta("仓耳丰黑", True, "7423616269397545499", "85757844", "efb2ad14a082b876427a3fb696918927", [])
|
||||
仓耳体 = EffectMeta("仓耳体", True, "7423616268759994890", "85757842", "7d450c06b110c67f359ddbb2a6377ae4", [])
|
||||
仓耳力士 = EffectMeta("仓耳力士", True, "7423616269326225946", "85757837", "e29302f3d11350964083cc128799dd8e", [])
|
||||
仓耳明黑 = EffectMeta("仓耳明黑", True, "7423616269552718345", "85757841", "910023dbaae2f88ee799e9893e73ab14", [])
|
||||
仓耳曙黑 = EffectMeta("仓耳曙黑", True, "7423616268755800603", "85757840", "2d77715e09de6fdcddadaddeee6f21a9", [])
|
||||
仓耳榜黑 = EffectMeta("仓耳榜黑", True, "7423616269313643035", "85757838", "da389dd735bb6b52d42cf349374a8a82", [])
|
||||
仓耳状元楷 = EffectMeta("仓耳状元楷", True, "7423616268764189222", "85757849", "d8ca77c9003f4b2dd29cdae84d5f0556", [])
|
||||
仓耳视频体 = EffectMeta("仓耳视频体", True, "7423616269338808841", "85757847", "406d8ff6e6989818b85510428b118951", [])
|
||||
仓耳趣黑 = EffectMeta("仓耳趣黑", True, "7423616269397529115", "85757839", "c9472a60029f4de40b7352723b6d645b", [])
|
||||
仓耳酷黑 = EffectMeta("仓耳酷黑", True, "7423616268759994930", "85757853", "18f24dbd9ac9df2aa5fcce0be1864f68", [])
|
||||
优设书华体 = EffectMeta("优设书华体", True, "7438524730103042599", "91065725", "3dc2297c2b116a9da29a5cb0ab3d894d", [])
|
||||
优设字由棒棒体 = EffectMeta("优设字由棒棒体", True, "7311914390259765811", "34131538", "60db6d16ba870996309056ecb1e315b1", [])
|
||||
优设字美体 = EffectMeta("优设字美体", True, "7438524940153786934", "91065726", "b1cab3de325e719f0e2d446cfa11c99f", [])
|
||||
优设招牌体 = EffectMeta("优设招牌体", True, "7438524840576815627", "91065727", "fd59ad69d28b184ae30ef8b3571ec38a", [])
|
||||
修羽体 = EffectMeta("修羽体", True, "7290456770160366139", "26003131", "72f61f22f5ef19cfcadc4995934aa063", [])
|
||||
凌丝体 = EffectMeta("凌丝体", True, "7290455877864133157", "26003145", "92fc337d10907e56437c0da3f6d10a78", [])
|
||||
利飞体 = EffectMeta("利飞体", True, "7423616268764189193", "85757848", "b269aadd970b3705e5aaa54d0343117d", [])
|
||||
剪映专辑 = EffectMeta("剪映专辑", True, "7479022906626806298", "107789541", "56896a93f56d85f79ed19a07c52d4de7", [])
|
||||
剪映云迹 = EffectMeta("剪映云迹", True, "7502335387969262130", "115815828", "7269f0ee6bcdd0cf8a1184618f65cbba", [])
|
||||
剪映半山海 = EffectMeta("剪映半山海", True, "7497171321915183625", "113931114", "0597492b4816d447e85e057852c7c038", [])
|
||||
剪映印章 = EffectMeta("剪映印章", True, "7499001991096439347", "114520924", "93edc0c6b3926ec19bc249779fe0a91a", [])
|
||||
剪映团子 = EffectMeta("剪映团子", True, "7494617559677800970", "113096610", "fa201c52ba126f103a453b9668f6f442", [])
|
||||
剪映圆隶 = EffectMeta("剪映圆隶", True, "7497162943239295539", "113927430", "4666460830ba95be46fee85812b702f6", [])
|
||||
剪映手书 = EffectMeta("剪映手书", True, "7486448265496367625", "110450154", "2e85dc679048a1da139661e050438ec2", [])
|
||||
剪映新年体 = EffectMeta("剪映新年体", True, "7463380715107783206", "102584862", "259e955ebb6238cf8b3a70e160fc26f9", [])
|
||||
剪映春日部 = EffectMeta("剪映春日部", True, "7481618551309079077", "108780445", "f6ab639c8895f9778f0b83a231c1126c", [])
|
||||
剪映狗爬体 = EffectMeta("剪映狗爬体", True, "7485673940988203558", "110206413", "c2090467a91f15c333bcb983403ebac6", [])
|
||||
剪映细毛笔 = EffectMeta("剪映细毛笔", True, "7502351067770786341", "115825070", "ea98039f50c8807e396522ae2317124f", [])
|
||||
剪映香蕉 = EffectMeta("剪映香蕉", True, "7497163735652373018", "113927966", "f3f9766b7909e4c92b07a65cdbcbef8b", [])
|
||||
励字俊林简 = EffectMeta("励字俊林简", True, "7316745865731772955", "36825422", "5f7e14d8bc6853e8d2b38abb9f930495", [])
|
||||
励字勇敢黑简_大黑 = EffectMeta("励字勇敢黑简 大黑", True, "7316817704143295003", "36880884", "0580e68e5ec975b80ebd9d9d2806cbf8", [])
|
||||
励字大黑简繁 = EffectMeta("励字大黑简繁", True, "7316745335257174578", "36825420", "78f653837bfd529904d56cfd77521eee", [])
|
||||
励字姚体简繁 = EffectMeta("励字姚体简繁", True, "7316817407664722441", "36880881", "22b55c6dc66142309168297e2633ec9b", [])
|
||||
励字小怪兽简 = EffectMeta("励字小怪兽简", True, "7316747164716110345", "36825428", "b33b2fc025a61087d99bd6aaa664dcc1", [])
|
||||
励字志向黑简_特粗 = EffectMeta("励字志向黑简 特粗", True, "7316819223840297481", "36880880", "ba409eae71d9d99f370175f283002307", [])
|
||||
励字憨憨简 = EffectMeta("励字憨憨简", True, "7316745679055884837", "36825429", "b316a0c93d766f2bcefb9962ebb92f46", [])
|
||||
励字敲可爱简_中粗 = EffectMeta("励字敲可爱简 中粗", True, "7316746541820023306", "36825430", "e7226d59672ac424570ad6504c8241a0", [])
|
||||
励字星宜简 = EffectMeta("励字星宜简", True, "7316747352956473882", "36825423", "9154d1fb2fc607f0fc1c182ed810a8c1", [])
|
||||
励字玉树临风简 = EffectMeta("励字玉树临风简", True, "7316818084935766565", "36880878", "01db7f1ab40c6daa77271d9a19d90be8", [])
|
||||
励字行楷简繁 = EffectMeta("励字行楷简繁", True, "7316817018030658075", "36880877", "63abf61c61a93772e2a0feff194c1785", [])
|
||||
励字趣石简 = EffectMeta("励字趣石简", True, "7316746949489594931", "36825427", "e2dc9006d5e08c9c3714b9107568bddd", [])
|
||||
励字趣黑简繁 = EffectMeta("励字趣黑简繁", True, "7316746727430558234", "36825424", "393ae2f90543245b132d69f25639e375", [])
|
||||
励字逆反差圆舞简_超级黑 = EffectMeta("励字逆反差圆舞简 超级黑", True, "7316746365185298981", "36825426", "4d7e99c776b2ed6df04889c6ba0136c5", [])
|
||||
励字造梦简_特粗 = EffectMeta("励字造梦简 特粗", True, "7316818766493389339", "36880891", "a21754e4d75eaa9ea07f12512f0a1df1", [])
|
||||
励字隶书简繁 = EffectMeta("励字隶书简繁", True, "7316746076373914139", "36825425", "28d5ed8c5392b325a5f22823917e2aa7", [])
|
||||
华书体 = EffectMeta("华书体", True, "7290455554504266298", "26003140", "2854f0774cf3b780304708ee46625fa9", [])
|
||||
听露体 = EffectMeta("听露体", True, "7290456595102700089", "26003132", "adfad625c852fca682e02463bd7d0bbc", [])
|
||||
唧唧国王 = EffectMeta("唧唧国王", True, "7312719555653014053", "34549532", "b978210e888a28fd7f6b1ac6e864cc03", [])
|
||||
壮楷体 = EffectMeta("壮楷体", True, "7441547528874496539", "93697432", "1b486bea4bad28409070e70c8d0e10f0", [])
|
||||
妙如体 = EffectMeta("妙如体", True, "7290456177559736889", "26003137", "d8cdbaf5501f5ec0d2d88a294fafac17", [])
|
||||
字由爱驾公路体 = EffectMeta("字由爱驾公路体", True, "7311912714970862107", "34131532", "2c6b6b843410224e98e99e3d1ab427e1", [])
|
||||
字语云黑宋 = EffectMeta("字语云黑宋", True, "7312719287796371978", "34549538", "a0594d2389cf544ca305f467ae7dd4ba", [])
|
||||
字语俊言体 = EffectMeta("字语俊言体", True, "7495685759022666278", "113453150", "723657e683658cd93c4615cc7b905fb6", [])
|
||||
字语叙黑体 = EffectMeta("字语叙黑体", True, "7495677959626297907", "113448754", "755374b6c5f1d1e826a4277f38593b2f", [])
|
||||
字语叙黑体_中粗 = EffectMeta("字语叙黑体-中粗", True, "7495667671212495386", "113443244", "befd16cb73dbaccd9505ecd6e0d5a662", [])
|
||||
字语叙黑体_常规 = EffectMeta("字语叙黑体-常规", True, "7495679051764339251", "113449404", "11aaa654400d5083897329713a9bb9e8", [])
|
||||
字语叙黑体_粗体 = EffectMeta("字语叙黑体-粗体", True, "7495676881946022451", "113448362", "d1c7cf4dd7c40614826d680ed5805cdd", [])
|
||||
字语叙黑体_细体 = EffectMeta("字语叙黑体-细体", True, "7495679735909847589", "113449788", "3b224152eaf416cbeaed7d39917e6fdf", [])
|
||||
字语叙黑体_超粗 = EffectMeta("字语叙黑体-超粗", True, "7495661432017523250", "113442102", "e8367550c6c832bf3c29b00bd7827cc0", [])
|
||||
字语古兰体 = EffectMeta("字语古兰体", True, "7312718551096234523", "34549527", "b1130cae36f0b2bad353e96af5850c78", [])
|
||||
字语古映体 = EffectMeta("字语古映体", True, "7495686582133854730", "113453641", "831fab960b2d97a5ecc8735031aaad2f", [])
|
||||
字语咏宋体 = EffectMeta("字语咏宋体", True, "7312719367769166386", "34549533", "12fe695be021ad4406276e85f32de4be", [])
|
||||
字语咏宏体 = EffectMeta("字语咏宏体", True, "7312719426845938203", "34549522", "28ed414e182f0fd35c9a3658d1999e57", [])
|
||||
字语咏楷体 = EffectMeta("字语咏楷体", True, "7312719210373714459", "34549530", "06ab9abe9d2e6f4d10152bafe691738c", [])
|
||||
字语嘟嘟体 = EffectMeta("字语嘟嘟体", True, "7312718329347576347", "34549523", "ce70e138b40294d5f159ddbdfd2f5e23", [])
|
||||
字语圆体 = EffectMeta("字语圆体", True, "7495689259223880202", "113454943", "f625722b0ce881a1182f8ae3d2fc7b9a", [])
|
||||
字语康宋体 = EffectMeta("字语康宋体", True, "7495657467548799515", "113436253", "8da8fafe9b3517714901f3fc88e7428c", [])
|
||||
字语康宋体繁体 = EffectMeta("字语康宋体繁体", True, "7495691210900640293", "113456064", "3150de1a5539e1981c6561342af25b88", [])
|
||||
字语文乐体 = EffectMeta("字语文乐体", True, "7495684286788407818", "113452362", "1f275305f825ffc7a578e1df43146ca4", [])
|
||||
字语文乐体_粗体 = EffectMeta("字语文乐体-粗体", True, "7495683757769232906", "113452063", "0fd32b402664816baecfab313cb6235f", [])
|
||||
字语文乐体_细体 = EffectMeta("字语文乐体-细体", True, "7495684762376344091", "113452597", "8031951a036455afe6bc05955b19b650", [])
|
||||
字语文刻体 = EffectMeta("字语文刻体", True, "7495683056359969306", "113451682", "ea6e2bb9b97f11fb1688a135f9c07688", [])
|
||||
字语文熙体 = EffectMeta("字语文熙体", True, "7495685451823452723", "113452995", "193086e7036a8379a7b54e3204944ddb", [])
|
||||
字语文酷体 = EffectMeta("字语文酷体", True, "7312718751328113162", "34549524", "df4da46440a5f0dc20316de2a38445f7", [])
|
||||
字语文雅体 = EffectMeta("字语文雅体", True, "7312718961991225894", "34549525", "bf9095c601719f1dcaa55eacc4c5d1bd", [])
|
||||
字语文韬体 = EffectMeta("字语文韬体", True, "7312718857334952498", "34549539", "dc992f2c580c264006a779732bc617b9", [])
|
||||
字语文韵体 = EffectMeta("字语文韵体", True, "7312719046229627402", "34549537", "bc5a66d2265466330a836fc862b0c518", [])
|
||||
字语漫雅手书 = EffectMeta("字语漫雅手书", True, "7495686373119103526", "113453534", "f7d92829d54324872f3aa70598dbe169", [])
|
||||
字语萌酱体 = EffectMeta("字语萌酱体", True, "7495690155840246298", "113455471", "09bb701167bffb3a7544fe31674bce62", [])
|
||||
字语软糖体 = EffectMeta("字语软糖体", True, "7312718629982704166", "34549535", "a126d5a78f08f65afdcea6f0b6d3928c", [])
|
||||
字语颖黑体 = EffectMeta("字语颖黑体", True, "7312719121404138021", "34549516", "2c43f4309b450a0fff1c547ec5e96003", [])
|
||||
宜宋 = EffectMeta("宜宋", True, "7423616269825348122", "85757843", "6b5fdc1a70b0b3a461bff3db1ccbbae7", [])
|
||||
小可爱体 = EffectMeta("小可爱体", True, "7423616269267505691", "85757845", "0eb3ee4fdd0c5a415e73a7e82dd9dcd8", [])
|
||||
少年南波万 = EffectMeta("少年南波万", True, "7441547528870302258", "93697433", "fc594dc0e1764159fff35321944e907d", [])
|
||||
山雁体 = EffectMeta("山雁体", True, "7290456514370736698", "26003150", "c29a5195061ec2b2f72aa4fe97e04f43", [])
|
||||
幽梦体 = EffectMeta("幽梦体", True, "7290457477873668666", "26003126", "1f23a06aada2e64a9dc3cd490aadaf07", [])
|
||||
归雁体 = EffectMeta("归雁体", True, "7290455353756488247", "26003136", "5d364212ce7ad920f858d615448a3981", [])
|
||||
怜秋体 = EffectMeta("怜秋体", True, "7290455783932695100", "26003139", "bfdcaac20b0a81352e95996d7e1a6433", [])
|
||||
承英体 = EffectMeta("承英体", True, "7290455103704666679", "26003146", "247535da6392b2d1a96e5193fb5d1f03", [])
|
||||
星汉宋 = EffectMeta("星汉宋", True, "7423616268764189211", "85757834", "47383c4219eac3eaaef23cddd07f8203", [])
|
||||
景曜体 = EffectMeta("景曜体", True, "7290455645264810555", "26003133", "5320f82421f4ef64d62f27272241b8cf", [])
|
||||
月亮供电不足 = EffectMeta("月亮供电不足", True, "7312720704959418930", "34549519", "65bb1af80161acd665444de74af896d8", [])
|
||||
未光体 = EffectMeta("未光体", True, "7290456683027894839", "26003147", "2e77e4633f21a02e0a70b90977a7b01a", [])
|
||||
毛体行楷 = EffectMeta("毛体行楷", True, "7452649447441306121", "98548489", "06e8ecfb9262f12693c90d29dc501111", [])
|
||||
毛体行草 = EffectMeta("毛体行草", True, "7452649545395081755", "98548450", "35029f40e40fe5e66090c385ec28be0b", [])
|
||||
汉字之美棒棒糖粗简 = EffectMeta("汉字之美棒棒糖粗简", True, "7316732709747823114", "36795730", "296fc38d5559dba8cb8ed33daf6ea93f", [])
|
||||
汉字之美玉龙简 = EffectMeta("汉字之美玉龙简", True, "7316745091178041865", "36825421", "ff8a83fc65133df892ebb680a917d2c6", [])
|
||||
汉字之美郝刚牡丹体简 = EffectMeta("汉字之美郝刚牡丹体简", True, "7316816467062690330", "36880888", "1b67a99e701e335a08536e499dfe91ff", [])
|
||||
流苏体 = EffectMeta("流苏体", True, "7290455967735484987", "26003142", "8a3b67cce8e2f0e66c06600c2c6271cf", [])
|
||||
游乐体 = EffectMeta("游乐体", True, "7290457554574905914", "26003128", "987336c2aff7c968b5d019749a327998", [])
|
||||
点字佳楷 = EffectMeta("点字佳楷", True, "7311912796520714779", "34131531", "c218de2cbf3e51caf8b425bfaf174bbf", [])
|
||||
点字奇巧 = EffectMeta("点字奇巧", True, "7311913943188902427", "34131533", "b6ef0e1abe473dd27bde5fbdb12fa6f8", [])
|
||||
点字小隶书 = EffectMeta("点字小隶书", True, "7311914134109426203", "34131539", "adecd49c062bfd7c94790bf7ba0b16be", [])
|
||||
点字玄真宋 = EffectMeta("点字玄真宋", True, "7311914225767551498", "34131530", "eb6a86ba326391dc111882da9659f355", [])
|
||||
点字王者风范 = EffectMeta("点字王者风范", True, "7311914033571959333", "34131529", "db641a69aa72229967d82686d5af0a0f", [])
|
||||
点字艺圆 = EffectMeta("点字艺圆", True, "7311914298060575283", "34131536", "0cc2de74fd8ed8a72a0c0cbf3bb9b5ff", [])
|
||||
点字青花楷 = EffectMeta("点字青花楷", True, "7311913734081876506", "34131534", "8de5c66831c1c08a3a0db17abffdc090", [])
|
||||
点字青花隶 = EffectMeta("点字青花隶", True, "7311913858942112306", "34131535", "1c21f23c85ea5473322cfb2b856c686b", [])
|
||||
烟客体 = EffectMeta("烟客体", True, "7290457082921226811", "26003138", "b6c9e51a0caeda7546833874c4f6d3f4", [])
|
||||
爱你是无解命题 = EffectMeta("爱你是无解命题", True, "7311911945655816730", "34131537", "4d2d4673e42ced2e43c6e6d5d4a3d5d6", [])
|
||||
爱民小楷 = EffectMeta("爱民小楷", True, "7423616268760011314", "85757851", "e1e9bb52f3cc75124b4e668bbbeed5ab", [])
|
||||
玄鸟体 = EffectMeta("玄鸟体", True, "7290456889668670013", "26003129", "aa8b1188f865f250cce24a09f0105af8", [])
|
||||
知新体 = EffectMeta("知新体", True, "7423616268952932902", "85757852", "ab6662733ccf500d7de099211e31423c", [])
|
||||
章鱼小丸子 = EffectMeta("章鱼小丸子", True, "7423616269254922762", "85757850", "96c278e361b5bf39d0e75f50b299bf1d", [])
|
||||
竹言体 = EffectMeta("竹言体", True, "7423616269850513947", "85757835", "abf26da51a47d5dc399680cc09253f62", [])
|
||||
花锦体 = EffectMeta("花锦体", True, "7290455460186952251", "26003144", "202627efd4e86fcac13b028297319013", [])
|
||||
莫雪体 = EffectMeta("莫雪体", True, "7290456347177390629", "26003143", "e6df6d9922211e1b9cd907930569a320", [])
|
||||
蕴行体 = EffectMeta("蕴行体", True, "7441547528878690867", "93697435", "22d3f23e85385f5c62e0534ea30f9d59", [])
|
||||
造字侠今朝醉简 = EffectMeta("造字侠今朝醉简", True, "7316824086712160806", "36880876", "2b98cf117f555d4789b65c865d9f5f9a", [])
|
||||
造字侠寻味江湖简 = EffectMeta("造字侠寻味江湖简", True, "7316824437930594867", "36880883", "8335b615c4eb7b246b7aa564899c368d", [])
|
||||
造字侠昊仔简繁 = EffectMeta("造字侠昊仔简繁", True, "7316823873930924582", "36880885", "60e524ded7b66c88a3bf39f2a4adb898", [])
|
||||
造字侠永刚漆书简繁 = EffectMeta("造字侠永刚漆书简繁", True, "7316824945592373770", "36880882", "1ddb9f64db159a46fccaa243917e9bfc", [])
|
||||
造字侠陈坤风行简繁 = EffectMeta("造字侠陈坤风行简繁", True, "7316823545399480841", "36880887", "c266c8a01c258c85c5f7d022300015e0", [])
|
||||
锋舞九天 = EffectMeta("锋舞九天", True, "7423616268764205595", "85757854", "456729f9a73f699c04d708ee6c69fdc2", [])
|
||||
阳华体 = EffectMeta("阳华体", True, "7290457161887388219", "26003127", "6ec8135c696317264510d2725a6fc83a", [])
|
||||
阳煦体 = EffectMeta("阳煦体", True, "7290457267030200869", "26003130", "4622bd24edf2f817730e108e625b6e05", [])
|
||||
雅月体 = EffectMeta("雅月体", True, "7423616268764189234", "85757855", "0f70f20df8d9be821e294a862be67304", [])
|
||||
雅韵体 = EffectMeta("雅韵体", True, "7290456990571041340", "26003135", "99ceebeec763fb4f3a1a59e226b1cf22", [])
|
||||
青印体 = EffectMeta("青印体", True, "7290456429276697149", "26003149", "8ed939d6940890e3d4f77dff0091a52e", [])
|
||||
青春加糖体 = EffectMeta("青春加糖体", True, "7441547528874496538", "93697434", "50a5e54e72193f99e46ccbc2b594199b", [])
|
||||
青禾体 = EffectMeta("青禾体", True, "7423616269275894310", "85757846", "ab3917e6d6b6e57bdbdbdb9d052109f9", [])
|
||||
青鸟华光中长宋 = EffectMeta("青鸟华光中长宋", True, "7410326723805319706", "81332681", "e4d44cca5db89d96f63fd943ae948a32", [])
|
||||
青鸟华光书宋2 = EffectMeta("青鸟华光书宋2", True, "7410326723780153893", "81332684", "6850473b134099c8049bd646c990fe44", [])
|
||||
青鸟华光仿宋2 = EffectMeta("青鸟华光仿宋2", True, "7410326723327185435", "81332685", "96b32125bb5d11e8fe83565b5dc917fe", [])
|
||||
青鸟华光大标宋 = EffectMeta("青鸟华光大标宋", True, "7410326723322974746", "81332679", "8be414a44e65338d012f2b5493fbc005", [])
|
||||
青鸟华光报宋2 = EffectMeta("青鸟华光报宋2", True, "7410326723314586149", "81332677", "9f5b177fb5cc6863c9827d31945a068d", [])
|
||||
青鸟华光标题黑 = EffectMeta("青鸟华光标题黑", True, "7410326723318780467", "81332682", "3642da89ae583761117498dad3edff0b", [])
|
||||
青鸟华光楷体2 = EffectMeta("青鸟华光楷体2", True, "7410326723318780453", "81332676", "b2f9d6b81eff2e0e2eaef0f3a46890fd", [])
|
||||
青鸟华光粗黑 = EffectMeta("青鸟华光粗黑", True, "7410326723327169051", "81332680", "ae6c97d96b918637b249f559c665638f", [])
|
||||
青鸟华光细黑 = EffectMeta("青鸟华光细黑", True, "7410326723792736795", "81332678", "54e6e6a69da14b6a9a4a01e2bc3ba4fb", [])
|
||||
青鸟华光细黑1 = EffectMeta("青鸟华光细黑1", True, "7410326723796931109", "81332673", "1f764c651b8202f7dadc74fdefc92308", [])
|
||||
青鸟华光美黑 = EffectMeta("青鸟华光美黑", True, "7410326723327169034", "81332683", "184e84f286db37d6ea31502521740644", [])
|
||||
青鸟华光黑体 = EffectMeta("青鸟华光黑体", True, "7410326723331363337", "81332674", "ede3bbcf8e6eeb9149395e1117062c7e", [])
|
||||
青鸟华光黑变 = EffectMeta("青鸟华光黑变", True, "7410326723322991154", "81332672", "6ca836ce90531a01adfd2909d6d119e3", [])
|
||||
飞鸟集 = EffectMeta("飞鸟集", True, "7130643143719916069", "4010301", "1be94b984920e8ddd125b5c868521448", [])
|
||||
高字标志圆 = EffectMeta("高字标志圆", True, "7312720780599497225", "34549540", "b063783985f84f53748319de1532b926", [])
|
||||
鱼太闲躺平体 = EffectMeta("鱼太闲躺平体", True, "7312720611694875162", "34549531", "928979b4f0c9ba5ac430fc2990d0ea9d", [])
|
||||
鸣翠体 = EffectMeta("鸣翠体", True, "7290456267212984889", "26003148", "7028cfb924701fbb8112cab5ce2ccccd", [])
|
||||
鹿鸣体 = EffectMeta("鹿鸣体", True, "7290456058328257084", "26003141", "77a62272e2ded59547b213c20adec6ef", [])
|
||||
黑糖体 = EffectMeta("黑糖体", True, "7070430083919385119", "1600490", "c79b375905670f3012ae371583680109", [])
|
||||
@@ -0,0 +1,15 @@
|
||||
"""视频蒙版元数据"""
|
||||
|
||||
from .effect_meta import EffectEnum, MaskMeta
|
||||
|
||||
class MaskType(EffectEnum):
|
||||
"""蒙版类型"""
|
||||
|
||||
线性 = MaskMeta("线性", "line", "6791652175668843016", "636071", "1f467b8b9bb94cecc46d916219b7940a", 1.0)
|
||||
"""默认遮挡下方部分"""
|
||||
镜面 = MaskMeta("镜面", "mirror", "6791699060140020232", "636073", "b2c0516d1f737f4542fb9b2862907817", 1.0)
|
||||
"""默认保留两线之间部分"""
|
||||
圆形 = MaskMeta("圆形", "circle", "6791700663249146381", "636075", "9a55eae0e99ee6d1ecbc6defaf0501ec", 1.0)
|
||||
矩形 = MaskMeta("矩形", "rectangle", "6791700809454195207", "636077", "ef361d96c456cd6077c76d737f98898d", 1.0)
|
||||
爱心 = MaskMeta("爱心", "geometric_shape", "6794051276482023949", "636079", "0bf09fa1e3a32464fed4f71e49a8ab01", 1.115)
|
||||
星形 = MaskMeta("星形", "geometric_shape", "6794051169434997255", "636081", "155612dee601d3f5422a3fbeabc7610c", 1.05)
|
||||
@@ -0,0 +1,12 @@
|
||||
from .effect_meta import EffectEnum
|
||||
from .effect_meta import EffectMeta
|
||||
|
||||
class SpeechToSongType(EffectEnum):
|
||||
"""剪映自带的音频“声音成曲”效果类型, 此类效果目前不能自动被剪映所识别"""
|
||||
|
||||
Lofi = EffectMeta("Lofi", False, "7252917861948068410", "17345060", "8dd8889045e6c065177df791ddb3dfb8", [])
|
||||
民谣 = EffectMeta("民谣", False, "7251868698170888759", "17046923", "8dd8889045e6c065177df791ddb3dfb8", [])
|
||||
嘻哈 = EffectMeta("嘻哈", True, "7252918249036190245", "17344948", "8dd8889045e6c065177df791ddb3dfb8", [])
|
||||
爵士 = EffectMeta("爵士", True, "7264413578860433978", "20120940", "8dd8889045e6c065177df791ddb3dfb8", [])
|
||||
节奏蓝调 = EffectMeta("节奏蓝调", True, "7252918101958726200", "17345046", "8dd8889045e6c065177df791ddb3dfb8", [])
|
||||
雷鬼 = EffectMeta("雷鬼", True, "7264413386962637368", "20120864", "8dd8889045e6c065177df791ddb3dfb8", [])
|
||||
@@ -0,0 +1,155 @@
|
||||
"""文字入场动画元数据"""
|
||||
|
||||
from .effect_meta import EffectEnum, AnimationMeta
|
||||
|
||||
class TextIntro(EffectEnum):
|
||||
"""文字入场动画, 默认时长为0.5秒"""
|
||||
|
||||
# 免费特效
|
||||
冲屏位移 = AnimationMeta("冲屏位移", False, 0.500, "7078181271393800711", "1643884", "fd73ffc26a3f02fa6d957a94b590623a")
|
||||
卡拉OK = AnimationMeta("卡拉OK", False, 0.500, "6771294855785091588", "1558840", "46c913b531dcc84e23a2f56003d1daef")
|
||||
变色输入 = AnimationMeta("变色输入", False, 0.800, "7397306443147252233", "77035159", "e0e29d6ea015f0d1d38b4a852a1b6202")
|
||||
右上弹入 = AnimationMeta("右上弹入", False, 0.500, "7074854080388010532", "1621978", "932ea0a91ca337bc1fd566aa17cb9aa7")
|
||||
右下擦开 = AnimationMeta("右下擦开", False, 0.500, "7088576340361744903", "1715294", "70a3ffbff2b02ede796ee38d95b38db2")
|
||||
向上擦除 = AnimationMeta("向上擦除", False, 0.500, "6774625910067827212", "1644272", "ee74a3a8afb2167f4403dee957338afe")
|
||||
向上滑动 = AnimationMeta("向上滑动", False, 0.500, "6763470111253729803", "1644267", "22030c473076074288fd01b17d1c6174")
|
||||
向上翻转 = AnimationMeta("向上翻转", False, 0.500, "7194703971498332727", "8945307", "0cf2050093a2bbe736ab4b2ee9002dcf")
|
||||
向上重叠 = AnimationMeta("向上重叠", False, 0.500, "7077500533040222756", "1639676", "b3ea1be4937b7cd032f1775d98b1f06e")
|
||||
向上露出 = AnimationMeta("向上露出", False, 0.500, "7163514358935327268", "5925717", "3786ff3fcc9795eead5fd5629ff7e4e9")
|
||||
向下擦除 = AnimationMeta("向下擦除", False, 0.500, "6774626192990409224", "1644273", "bfe1add2d59ee32449a979257d4a3448")
|
||||
向下滑动 = AnimationMeta("向下滑动", False, 0.500, "6724921985282871816", "1644268", "f5506a1b5ebcf9d0636d7809bf3cb81a")
|
||||
向下露出 = AnimationMeta("向下露出", False, 0.500, "7163514502128865823", "5925716", "a7b05a11c6bdc7010cc4dc7f1d276407")
|
||||
向下飞入 = AnimationMeta("向下飞入", False, 0.500, "7088942186561016356", "1719670", "4ee5a7a4d9ab7bbd7dd2ad4d8b80db78")
|
||||
向右擦除 = AnimationMeta("向右擦除", False, 0.500, "6771288500240126478", "1644271", "b4a5ba027822ca3e1c9d83d2f5a58a08")
|
||||
向右滑动 = AnimationMeta("向右滑动", False, 0.500, "6724920136056181256", "1644266", "fa1d0bc4290f058d0175ee4b4fb5501f")
|
||||
向右缓入 = AnimationMeta("向右缓入", False, 0.500, "7043778124760224292", "1488722", "2d751bb706b38a030ab7eb3382b2d248")
|
||||
向右集合 = AnimationMeta("向右集合", False, 0.500, "7081206983461704199", "1661186", "5a78f1024ecdc9a6b69220eac58a0963")
|
||||
向右露出 = AnimationMeta("向右露出", False, 0.500, "7163514730525495839", "5925714", "6f8e0a5cd98c44b79f9ec09b0b913059")
|
||||
向左擦除 = AnimationMeta("向左擦除", False, 0.500, "6774626830038077960", "1644270", "4db856992dc60d1220664165d4130042")
|
||||
向左滑动 = AnimationMeta("向左滑动", False, 0.500, "6763470195894784525", "1644277", "13c954ed3bc583f87e9f79a2325b8e84")
|
||||
向左露出 = AnimationMeta("向左露出", False, 0.500, "7163514612690719269", "5925715", "b4119cf3405c71bc556e1c5562e22d01")
|
||||
圆形扫描 = AnimationMeta("圆形扫描", False, 0.500, "6840689010034086407", "1644280", "ac77daf80de65a4beb1164ce44c500c5")
|
||||
复古打字机 = AnimationMeta("复古打字机", False, 0.800, "7253888335163167291", "17639720", "a69db3276f15fa2affcd98f2236c873d")
|
||||
居中打字 = AnimationMeta("居中打字", False, 0.500, "7265222187286532667", "20303987", "40f484d3b77321b38d53b30d94c2dce1")
|
||||
左上弹入 = AnimationMeta("左上弹入", False, 0.500, "7078586233030447629", "1646760", "6467514ec2a8740953d29c3915364a31")
|
||||
左移弹动 = AnimationMeta("左移弹动", False, 1.000, "7313890082040058406", "35176342", "c21d4019453137cd76e0d847d5d8af96")
|
||||
开幕 = AnimationMeta("开幕", False, 0.500, "6835571502050447879", "1644279", "c26a12a1cacc6b85f8439a0bc600335d")
|
||||
弹入 = AnimationMeta("弹入", False, 0.500, "6887482184844710413", "1644313", "0533e3aeb2cda562cdd8a86693815443")
|
||||
弹弓 = AnimationMeta("弹弓", False, 0.500, "6862897343176380942", "1644305", "f9300b314e5bd7df573063b15a1ab081")
|
||||
弹性伸缩 = AnimationMeta("弹性伸缩", False, 0.500, "6872642189260755463", "1644311", "7d23b7a68a1bf21c7692a35ffa6ddcdc")
|
||||
弹簧 = AnimationMeta("弹簧", False, 0.500, "6884154692398486023", "1644312", "34d74f1bf451dac1a23158380a5be322")
|
||||
彩色映射 = AnimationMeta("彩色映射", False, 0.500, "7039655272222036516", "1476514", "46f37098540b9250abdad9bb1282ec83")
|
||||
打字机_I = AnimationMeta("打字机 I", False, 0.500, "6724920249654710791", "1644275", "7c7cfe92aa22a8e131c94d20f44e97df")
|
||||
打字机_II = AnimationMeta("打字机 II", False, 0.500, "6724920636403094028", "1644276", "1c500e93b3b8bdee3cbe1095db5d01ff")
|
||||
打字机_III = AnimationMeta("打字机 III", False, 0.500, "6724920521462387207", "1644335", "1b21dfb54b0ccd50e50f383f01d0a193")
|
||||
打字机IV = AnimationMeta("打字机IV", False, 2.000, "7237409385092223525", "14235879", "6828d67634e66ace1e76c4eb7cc2f8e6")
|
||||
扭曲模糊 = AnimationMeta("扭曲模糊", False, 0.500, "7089261793406620197", "1722114", "40a9fd02e81930bc0289aeb692c382f6")
|
||||
拖尾 = AnimationMeta("拖尾", False, 0.500, "7244102915239973432", "15259479", "5d0dbb4e66c3261576b47f8766e3eb14")
|
||||
收拢 = AnimationMeta("收拢", False, 0.500, "6779879712261935619", "1644261", "b173da2fb68d5f8e7dbb2cc000a50bdd")
|
||||
放大 = AnimationMeta("放大", False, 0.500, "6724919499042066958", "1644264", "cf0f072aa31d3884ba90362af063f55a")
|
||||
故障打字机 = AnimationMeta("故障打字机", False, 0.500, "6870061463243854350", "1644308", "b4536942105b69e637dabef4c3ebfc6d")
|
||||
旋入 = AnimationMeta("旋入", False, 0.500, "6763873859402732039", "1644265", "dc3a54158c51f45a0033a16f5763e047")
|
||||
日出 = AnimationMeta("日出", False, 0.500, "6779084126457696776", "1644269", "9e39257e0d8b60598d1c09bb31fbc62a")
|
||||
晕开 = AnimationMeta("晕开", False, 0.500, "7088531060341871141", "1714696", "2f7aebf0f525ef21f8b00070c17d2fc2")
|
||||
模糊 = AnimationMeta("模糊", False, 0.500, "6923094735116571150", "1644338", "0e57ec99758f1e12636a73c6ec4fb6f5")
|
||||
水墨晕开 = AnimationMeta("水墨晕开", False, 1.200, "7278295995362841145", "22734325", "5c970b17e18e3441b917a7bcba4d043b")
|
||||
水平翻转 = AnimationMeta("水平翻转", False, 0.500, "7051512227353858590", "1644340", "9403a81925b4886589f745130a67cb05")
|
||||
波浪弹入 = AnimationMeta("波浪弹入", False, 0.500, "6917178744775905806", "1644316", "301272b44278c3b5ebe228e8baa8d984")
|
||||
渐显 = AnimationMeta("渐显", False, 0.500, "6724916044072227332", "1644304", "40859aa05ff9f3e3a3f0de7bfead1c42")
|
||||
溶解 = AnimationMeta("溶解", False, 0.500, "6872642398095151629", "1644310", "b126b2989904ce12e8889a58df8447fc")
|
||||
滑动上升 = AnimationMeta("滑动上升", False, 1.500, "7275687883011265083", "22226771", "9ab223e5e9a0b9611b04062048173de9")
|
||||
生长 = AnimationMeta("生长", False, 0.500, "6869302248103481869", "1644307", "b0f76f716f571ecde209056995e96978")
|
||||
甩出 = AnimationMeta("甩出", False, 0.900, "7244102679851438650", "15261071", "97162e8faa56cf163b8f2c1bfd5ad6e0")
|
||||
站起 = AnimationMeta("站起", False, 0.800, "7265288917279052344", "20324364", "6f322d7bb7fe6b443197c2bf5d64dd8b")
|
||||
缩小 = AnimationMeta("缩小", False, 0.500, "6724921217721045515", "1644263", "0b58ad7d0d7cc93080e7bedfd0caa222")
|
||||
缩小_II = AnimationMeta("缩小 II", False, 0.500, "7041836555903701540", "1644341", "ae803da2a5d2292e0f8be3c8ab3b3788")
|
||||
羽化向右擦开 = AnimationMeta("羽化向右擦开", False, 0.500, "6897084405781631496", "1644314", "d330712b8f96ce33d450489ea6e459a3")
|
||||
羽化向左擦开 = AnimationMeta("羽化向左擦开", False, 0.500, "6897084292908716557", "1644315", "a4eefe0afe41cd05acd1beb3d2615b23")
|
||||
翻动 = AnimationMeta("翻动", False, 1.000, "7308278898330964489", "32283659", "ba570ec241b336204d882fe35f128d5d")
|
||||
轻微放大 = AnimationMeta("轻微放大", False, 0.500, "6763469998330483213", "1644262", "6f5ec0bb82bfd24a72706e2006c0e806")
|
||||
逐字旋转 = AnimationMeta("逐字旋转", False, 0.500, "7111643562676064805", "3114660", "17a78b3b5c193a3e30431946a8cbd696")
|
||||
逐字显影 = AnimationMeta("逐字显影", False, 0.500, "7038882772450021896", "1644339", "2f250516dcea1a591656dabc9c40684f")
|
||||
逐字翻转 = AnimationMeta("逐字翻转", False, 0.500, "7112241904216969765", "3138860", "cdf2df541dea807f4bcb29ede73dd766")
|
||||
闪动 = AnimationMeta("闪动", False, 0.500, "7035902226602136071", "1644322", "8a1581c846a5933e8a90204219504892")
|
||||
随机弹跳 = AnimationMeta("随机弹跳", False, 0.500, "7021831463867781662", "1644321", "d49f117c117e7d6b4dcb53bbe9b5ed4a")
|
||||
随机飞入 = AnimationMeta("随机飞入", False, 0.500, "6872642542765085191", "1644309", "d9ad3796df2b0881ea144f8dfa44e0b1")
|
||||
|
||||
# 付费特效
|
||||
乱码故障 = AnimationMeta("乱码故障", True, 1.000, "7325648367747338802", "40877554", "00b40103690bfb45e0125592b6ec0f5c")
|
||||
二段缩放 = AnimationMeta("二段缩放", True, 0.900, "7238519092997526074", "14394713", "a4cba6840c1bf92bc73bb1bcacf7b76e")
|
||||
便利贴 = AnimationMeta("便利贴", True, 0.800, "7307207886843679283", "31819229", "4e9265ea4703be87feaf640d79b23f7c")
|
||||
倒数 = AnimationMeta("倒数", True, 1.800, "7314303157360661018", "35401566", "814df0b29746943fe165ae9b16719cc2")
|
||||
兔子弹跳 = AnimationMeta("兔子弹跳", True, 0.500, "7187785892382118461", "8398145", "5d157129853f479ea15f75075c1ef070")
|
||||
冰雪飘动 = AnimationMeta("冰雪飘动", True, 1.500, "7314291622525538843", "35395178", "6e3e4d697d85de5b23b3f243a35b7f26")
|
||||
发光模糊 = AnimationMeta("发光模糊", True, 0.500, "7054482687297327630", "1644342", "ba83061e43e95969f5a19cfa236120b7")
|
||||
发光闪入 = AnimationMeta("发光闪入", True, 1.800, "7308272157442707978", "32278776", "c30f989a97cddbdc64e43ba96d901b71")
|
||||
叠影并入 = AnimationMeta("叠影并入", True, 1.000, "7259634012774208059", "19101418", "8358578022cd14c6232a99ddee035824")
|
||||
向上弹入 = AnimationMeta("向上弹入", True, 0.500, "7123116334677758501", "3704299", "28d9145ead32c23742082a37e511370e")
|
||||
向下溶解 = AnimationMeta("向下溶解", True, 0.500, "7028458557058060831", "1644318", "09fde2de891d18c74949e025bc0dca07")
|
||||
向右模糊_II = AnimationMeta("向右模糊 II", True, 0.500, "7254503374622560828", "17830700", "6b3c54ef781f16f20204d766b799abec")
|
||||
向左模糊 = AnimationMeta("向左模糊", True, 0.500, "7112368349257929230", "3147126", "f99acc8cc6b3fcd2b4ea661670c4c048")
|
||||
吸入 = AnimationMeta("吸入", True, 0.300, "7120438380453696031", "3576973", "42a0c7e42275986d92a2d3bbe55dd816")
|
||||
呐喊声波 = AnimationMeta("呐喊声波", True, 0.500, "7199943069385364005", "9432429", "6f5992c1f47cac9d33468c5e60725d0b")
|
||||
喷绘 = AnimationMeta("喷绘", True, 0.500, "7120131223036367367", "3563651", "77633d8638e177488dcce84086018c8a")
|
||||
圆柱体滚动 = AnimationMeta("圆柱体滚动", True, 1.200, "7179035729043919397", "7548913", "7ce47010b9b736d12d264cf73f6c294e")
|
||||
圣诞帽弹跳 = AnimationMeta("圣诞帽弹跳", True, 0.500, "7169419861158793759", "6492065", "e5de917f45c938a685b73a9e0bb464e1")
|
||||
圣诞树弹跳II = AnimationMeta("圣诞树弹跳II", True, 0.500, "7174706243267727930", "7080877", "c9be0fbb72056234cdc5f8e082f32c40")
|
||||
弹入跳动 = AnimationMeta("弹入跳动", True, 0.500, "7184797276181631546", "8058189", "7a2b94056fe6c1cba19e27a986cdcb64")
|
||||
弹性伸缩_II = AnimationMeta("弹性伸缩 II", True, 0.500, "7308272646913790490", "32279178", "9b0bdc149bbc541e93cddaf94b1dcaa0")
|
||||
心动瞬间 = AnimationMeta("心动瞬间", True, 1.650, "7332519885999706663", "44271866", "2438d9132c7b04552762ae54066f7d94")
|
||||
慢速放大 = AnimationMeta("慢速放大", True, 60.000, "7205177922280231479", "10063675", "33d85f938bd55928fa16bede8cf7a26b")
|
||||
打字光标 = AnimationMeta("打字光标", True, 2.000, "7237411357514011192", "14235878", "12196518b89652860631d196d19b6f45")
|
||||
抖动甩入 = AnimationMeta("抖动甩入", True, 0.500, "7301945752278798885", "29825712", "8e49d8dde0112aaf071d41e8a56527e1")
|
||||
折叠 = AnimationMeta("折叠", True, 0.500, "7125298122011447816", "3779439", "9f65c45595fa8c0002f7f49a61637ff2")
|
||||
描边填充 = AnimationMeta("描边填充", True, 0.900, "7308269965453300262", "32278219", "cb8300f18fdf8b9aab7c1eacd33e92c9")
|
||||
放大震动 = AnimationMeta("放大震动", True, 0.500, "7267849370727354936", "20801300", "e6f8542e114dcb8b7aea821b1c954941")
|
||||
故障闪动 = AnimationMeta("故障闪动", True, 2.000, "7244101806710592057", "15261571", "f0c64727504b3975b4656ee2b10760fb")
|
||||
新年打字机 = AnimationMeta("新年打字机", True, 1.000, "7272754730684650045", "21711818", "a5aa35ae2b69f85c944074dfeadd6c89")
|
||||
旋转缩放 = AnimationMeta("旋转缩放", True, 1.600, "7243633588493619773", "15140845", "cef0ccebe3406f4c53b64f39825b7bfa")
|
||||
旋转飞入 = AnimationMeta("旋转飞入", True, 0.500, "6775803763652301326", "1644274", "21984d5e90731f925fc58a59fef355ee")
|
||||
星光闪闪 = AnimationMeta("星光闪闪", True, 1.500, "7309036302962266675", "32665781", "269e1b23d766c0a3c5c9f792dedfd1a9")
|
||||
星光闪闪_II = AnimationMeta("星光闪闪 II", True, 1.000, "7319873264375829001", "38428077", "8cddcc9ff610948afbd705259cec8fa9")
|
||||
星星弹跳 = AnimationMeta("星星弹跳", True, 1.100, "7307189517562155547", "31799385", "e5a1520dee5dd3700da60c62743111e4")
|
||||
模糊发光 = AnimationMeta("模糊发光", True, 1.800, "7301535952101446170", "29690460", "ea9d91ad5b58f1f9a1e95264f77e9a15")
|
||||
模糊滚动 = AnimationMeta("模糊滚动", True, 0.800, "7264501462187643450", "20154968", "3eaa7038a9148548a6b2cc6673f77944")
|
||||
模糊缩小 = AnimationMeta("模糊缩小", True, 1.500, "7294147761765618186", "27144470", "7226ef3bab9d89a32e8becb2dcc5faac")
|
||||
汇聚 = AnimationMeta("汇聚", True, 0.500, "6986931575199896094", "5529369", "2774ee332a759084eaa558bad0cb3a44")
|
||||
波浪弹跳 = AnimationMeta("波浪弹跳", True, 1.000, "7317536986691015218", "37303562", "e5b79c83b4a12edb15d2389a83c51476")
|
||||
流光扩散 = AnimationMeta("流光扩散", True, 2.000, "7314566361642963493", "35505526", "ee3e3d741c85017b94b5f2139edb7177")
|
||||
滚入 = AnimationMeta("滚入", True, 0.500, "7026674824537707038", "1644320", "d631585b87e866b31fe20fa8d578b7cd")
|
||||
激光雕刻 = AnimationMeta("激光雕刻", True, 3.000, "7244102612700631589", "15261101", "affa14b4f89ceb4dd01a69a24b42651f")
|
||||
爱心弹跳 = AnimationMeta("爱心弹跳", True, 0.500, "6845191009861636616", "1644337", "711434e690c1a1d7ebca4f13b1712f85")
|
||||
玩雪 = AnimationMeta("玩雪", True, 60.000, "7304943429962699290", "30904546", "501ea62f0702ab65569aa0e923bd8182")
|
||||
环绕滑入 = AnimationMeta("环绕滑入", True, 1.000, "7261858654561767973", "19562189", "672aae4e963ac36d9b898cb32c964995")
|
||||
生长_II = AnimationMeta("生长 II", True, 0.800, "7210312869282320933", "10659499", "562300bfab6b00c4853118b058f429a2")
|
||||
电光 = AnimationMeta("电光", True, 1.500, "7296051582246851109", "27769111", "5fbc2c019454b3420c8e8c6c0a42dad5")
|
||||
电光_II = AnimationMeta("电光 II", True, 1.000, "7299364098788037171", "28928614", "8c30a310e9ce5bf2b7b5a324c9426b7c")
|
||||
碰碰车 = AnimationMeta("碰碰车", True, 0.600, "7338602211041088027", "47157536", "ce6822887e702ad1a4b762e267148e38")
|
||||
空翻 = AnimationMeta("空翻", True, 0.500, "6865175746420150792", "1644306", "c16d544824d736ad0be1a5e109aafc04")
|
||||
缤纷冲屏 = AnimationMeta("缤纷冲屏", True, 2.000, "7116829842271638053", "3894473", "f6b8859c215e255b61f70cdbcc239b98")
|
||||
缩放_III = AnimationMeta("缩放 III", True, 1.600, "7211036012401660473", "10743073", "d625a4ef458b7e8c5928cdf04ab952ac")
|
||||
翻页II = AnimationMeta("翻页II", True, 1.200, "7170343439832191519", "6599721", "69d372ee41a3c968e0a7b55382eb23ff")
|
||||
背景滑入 = AnimationMeta("背景滑入", True, 1.500, "7306794354255860250", "31601883", "69c170b50c062f8106c01b37682fe19f")
|
||||
色散拖影 = AnimationMeta("色散拖影", True, 1.100, "7340513927651922458", "48159236", "422b57c27cfd659d0756303189e11599")
|
||||
螺旋上升 = AnimationMeta("螺旋上升", True, 0.500, "6799873891352187406", "1644278", "d3e255df67130866e0d2de42a703637c")
|
||||
跃进 = AnimationMeta("跃进", True, 1.200, "7220685840442200634", "11996999", "40bdc1263417f53c712c54cb32438008")
|
||||
跳跳捣蛋鬼 = AnimationMeta("跳跳捣蛋鬼", True, 1.800, "7200340219109839419", "9503089", "897a0c194e07ace6813a2eba797ac22f")
|
||||
跳跳糖 = AnimationMeta("跳跳糖", True, 1.267, "7329815894933115432", "42866461", "c8ecf2f107002df92dcefec6ea988843")
|
||||
辉光 = AnimationMeta("辉光", True, 1.000, "7258179345192063525", "18786330", "5bf3d95b86ac00f59c51dd3822d2b569")
|
||||
辉光扫描 = AnimationMeta("辉光扫描", True, 1.800, "7316878401590006323", "36927710", "f9a2c9ae931b916a81f204a1b9c31f7c")
|
||||
逐字弹跳 = AnimationMeta("逐字弹跳", True, 0.500, "7197615431673188921", "9195301", "52b151b0021d9fa91a42e65c2a392517")
|
||||
逐字旋入 = AnimationMeta("逐字旋入", True, 1.500, "7229520427196879421", "13137035", "9838c6772ddbd48126f30baf74200f99")
|
||||
金粉飘落 = AnimationMeta("金粉飘落", True, 2.000, "7330561002922054196", "43242964", "2add1c3882b2aaab841070f7bfd5ae66")
|
||||
镂空跳入 = AnimationMeta("镂空跳入", True, 1.200, "7311620091060163082", "33984693", "cb98c7b01005954ba9cc4bc78a4c59a7")
|
||||
闪烁集合 = AnimationMeta("闪烁集合", True, 1.500, "7267886380439573029", "20805754", "6d86be731c4d735a5e612a45b0c8631a")
|
||||
随机上升 = AnimationMeta("随机上升", True, 1.500, "7233662263805088314", "13720553", "98142c53838b5a382f79cc2d89e30c04")
|
||||
随机弹跳_II = AnimationMeta("随机弹跳 II", True, 0.500, "7114189305781686797", "3241034", "ff0761c602fa5ec8cc31c48ce57ea003")
|
||||
随机打字机 = AnimationMeta("随机打字机", True, 0.500, "6926718978064650760", "1644317", "e1f7899554d34dfa3e1e4924f82acc69")
|
||||
随机落下 = AnimationMeta("随机落下", True, 1.200, "7231443875406025275", "13416707", "a3aa7aa5991ef3c6a3d83a2e1fc6b748")
|
||||
随机集合 = AnimationMeta("随机集合", True, 2.500, "7223959789175312954", "12416139", "4d1fa3b7aac9aeab107743db10372029")
|
||||
雪光模糊 = AnimationMeta("雪光模糊", True, 1.200, "7314614905196253705", "35545508", "cb35d22175f67f734290b48bdaf93dd6")
|
||||
音符弹跳 = AnimationMeta("音符弹跳", True, 0.500, "6841115718172283406", "1644336", "86c6e9061b14fd43049b6232ffc113fa")
|
||||
顶出 = AnimationMeta("顶出", True, 1.100, "7268221856618910264", "20880936", "7fd6da0e6ff8a46276648dc43faa4f95")
|
||||
预览打字 = AnimationMeta("预览打字", True, 0.800, "7268152375536259639", "20853726", "964a6cb51a01c0ddeb839010765023a6")
|
||||
飞入 = AnimationMeta("飞入", True, 0.500, "7029231035007111710", "1644319", "9980148af0641a8501561320ec8f967b")
|
||||
鼠标点击 = AnimationMeta("鼠标点击", True, 1.650, "7350128013637325353", "53149407", "1ba2fbaaeb30f7756ecd92e0121b7ac0")
|
||||
@@ -0,0 +1,103 @@
|
||||
"""文字循环动画元数据"""
|
||||
|
||||
from .effect_meta import EffectEnum, AnimationMeta
|
||||
|
||||
class TextLoopAnim(EffectEnum):
|
||||
"""文字循环动画"""
|
||||
|
||||
# 免费特效
|
||||
VHS = AnimationMeta("VHS", False, 2.000, "7399879467457319463", "77851352", "f82d0f25b2cc4f0696dce7d97c7b02be")
|
||||
上弧 = AnimationMeta("上弧", False, 0.500, "7075224569421763079", "1626238", "a0362ebaa2f5016487abfab05d47605b")
|
||||
刷屏 = AnimationMeta("刷屏", False, 0.500, "7308280358691148315", "32284703", "e92c576feca5efb75feda14004b269c5")
|
||||
发光模糊多行 = AnimationMeta("发光模糊多行", False, 0.800, "7397688001356108339", "77132594", "ee68176782c8b62a207c04f4a979957a")
|
||||
吹泡泡 = AnimationMeta("吹泡泡", False, 0.500, "7045155566003425823", "1644539", "6db3746838af18903d01968e6af07185")
|
||||
吹泡泡_II = AnimationMeta("吹泡泡 II", False, 0.500, "7052257626897256968", "1644528", "b378734fd7a0e8ec78e53987823fad79")
|
||||
呐喊 = AnimationMeta("呐喊", False, 0.500, "7119024816480326157", "4002167", "04933b5e575c54cbf09c57c5e933f0ec")
|
||||
复古涂鸦 = AnimationMeta("复古涂鸦", False, 1.000, "7400234025392017956", "77997810", "4bc57fba68e0cce14e2ea8ab652dabc2")
|
||||
字体变换 = AnimationMeta("字体变换", False, 0.800, "7402185694732358170", "78763194", "06c685c00a9c1a7a484c7841ac45742a")
|
||||
弹幕滚动 = AnimationMeta("弹幕滚动", False, 0.500, "6790247082155315719", "1644518", "4ca7b3a27da98849561b21c9c6d964fc")
|
||||
彩虹 = AnimationMeta("彩虹", False, 0.500, "6908592625406710280", "990096", "fac0ebef55c57c31b3142f5840299b03")
|
||||
彩虹_情人节 = AnimationMeta("彩虹-情人节", False, 0.500, "6916820108211917325", "1012617", "c45282c8e30b8639a71345769060f3d5")
|
||||
彩虹_新年 = AnimationMeta("彩虹-新年", False, 0.500, "6916820045519655432", "1012618", "dd9fcbbcfc17cad31ab42e886769c66e")
|
||||
彩虹_马卡龙 = AnimationMeta("彩虹-马卡龙", False, 0.500, "6921528300573561358", "1022790", "a614b3dd7d4b852f1a126afe4c5ee50f")
|
||||
扫光 = AnimationMeta("扫光", False, 0.500, "7051843475892867598", "1520868", "0495742cdb3a26ff28dfabf7f8ef236b")
|
||||
投影颤抖_II = AnimationMeta("投影颤抖 II", False, 0.500, "7070332370963927559", "1599696", "673aa54d5519360162ea8ec38986ea1c")
|
||||
折叠 = AnimationMeta("折叠", False, 0.500, "7064823078542381581", "1567212", "c9b3ef10e455a3916dbef47a7f711eaa")
|
||||
拼贴纹理 = AnimationMeta("拼贴纹理", False, 0.800, "7399983060806013479", "77918388", "922ca4e87c7eed7e60d062c18e928bc6")
|
||||
描边粉笔 = AnimationMeta("描边粉笔", False, 2.000, "7399879712140431883", "77851433", "05c3c10997b885c71ed0dd64aff14dd2")
|
||||
摇摆 = AnimationMeta("摇摆", False, 0.500, "6724920869363126795", "1644515", "8af4da60a802e3ca6c9fe2184fbe22d0")
|
||||
摇荡 = AnimationMeta("摇荡", False, 0.500, "6840710593289130503", "1644523", "61f24344eb8bf86582d6140ad985ef14")
|
||||
故障闪动 = AnimationMeta("故障闪动", False, 0.500, "6857714281136263687", "1644524", "51d9ee83fbaf2dfa049885676ec2d5d9")
|
||||
旋转 = AnimationMeta("旋转", False, 0.500, "6763900973946507784", "1644510", "151421d4de4d49e65b050cb413482cd5")
|
||||
晃动 = AnimationMeta("晃动", False, 0.500, "6790246693674684942", "1644520", "383dabd75d7fe7985d990ebb34d63732")
|
||||
爆闪 = AnimationMeta("爆闪", False, 0.500, "7308279705252139530", "32284413", "61951bd303975761bc99f187bdb8fdab")
|
||||
环绕 = AnimationMeta("环绕", False, 0.500, "6980916124976157220", "1644542", "e81fcebf0885fa5d698f6ca7d027a556")
|
||||
翻转 = AnimationMeta("翻转", False, 0.500, "6763897586328801805", "1644511", "e4983ce92d02628087780832ef631c7d")
|
||||
色差故障 = AnimationMeta("色差故障", False, 0.500, "6835878163575214605", "1644522", "e0295a9f4f19fe21692c405f7c00d1e5")
|
||||
蓝黄滑动 = AnimationMeta("蓝黄滑动", False, 2.000, "7398492769628459539", "77383265", "bb717e125d34532ec904d1bc01ec25da")
|
||||
超强晃动 = AnimationMeta("超强晃动", False, 0.500, "7065208406633615909", "1568854", "b129b0e6bed4f9835f871848db646763")
|
||||
超强晃动_II = AnimationMeta("超强晃动 II", False, 0.500, "7069965879437431303", "1597286", "daec618afd4429f3f97085d3b7029bcc")
|
||||
超强波浪 = AnimationMeta("超强波浪", False, 0.500, "6857036499389518349", "872098", "87f7332abda9ac46d5dc81f69c48daab")
|
||||
超强波浪_II = AnimationMeta("超强波浪 II", False, 0.500, "7065219379687854623", "1568964", "bdd007527d0eda9d64bfbf6aef103e97")
|
||||
跳动 = AnimationMeta("跳动", False, 0.500, "6724920002958332420", "1644512", "784250e657b472a46a3b3ce0a838e4f7")
|
||||
轻微跳动 = AnimationMeta("轻微跳动", False, 0.500, "6884155832838132231", "1644525", "ac5c4160fae860fd74e5b7ab6d053252")
|
||||
钟摆 = AnimationMeta("钟摆", False, 0.500, "6724921579517514248", "1644516", "320b71150105629f7ab1b318716181eb")
|
||||
闪烁 = AnimationMeta("闪烁", False, 0.500, "6724921437930394120", "1644514", "6fe3f0fcd14e11e70b7510f42444b86c")
|
||||
雨刷 = AnimationMeta("雨刷", False, 0.500, "6799874389669057037", "1644521", "6a4c40e24db5027cb42892d8ade9df38")
|
||||
频闪边框 = AnimationMeta("频闪边框", False, 0.500, "7308280718302384690", "32284883", "36184bd37eae10c2d8247fb5bd59c6f2")
|
||||
颤抖 = AnimationMeta("颤抖", False, 0.500, "6764189482871689742", "1644509", "9d16d8998abe172511399c3158bddddd")
|
||||
颤抖_III = AnimationMeta("颤抖 III", False, 0.500, "7070036604429013535", "1598082", "c6f744d4c3d208abf97a3af3afe9d356")
|
||||
|
||||
# 付费特效
|
||||
加字符 = AnimationMeta("加字符", True, 0.800, "7441532971082846758", "93688629", "f9c72d34da0c6e7b2b4263a37892ae6c")
|
||||
喷涌 = AnimationMeta("喷涌", True, 0.500, "7134190113780666887", "4175399", "76cc53a7bb20385d208c858a13cf06fd")
|
||||
喷绘 = AnimationMeta("喷绘", True, 0.500, "7110160318529016350", "2999942", "fbd35399a1880d2637731d20eb619d29")
|
||||
圆形涂鸦 = AnimationMeta("圆形涂鸦", True, 0.800, "7276420462131810874", "22362181", "696d3b443b4c6ed8b9f0f28825c08a8c")
|
||||
声波震动 = AnimationMeta("声波震动", True, 2.000, "7239526343833031223", "14518651", "9098085cd316045cf912e54a73d845a4")
|
||||
字幕滚动 = AnimationMeta("字幕滚动", True, 0.500, "6790246884683289102", "1644519", "9aa4e0d045c61892c2b2e3fdfaf1b093")
|
||||
尾巴摇摆 = AnimationMeta("尾巴摇摆", True, 1.600, "7212897307782550053", "10967121", "c1585ff28130b111d0458c6490d20ef2")
|
||||
弹幕 = AnimationMeta("弹幕", True, 0.500, "7107592133472686606", "2795622", "8d0a44c1f51ea9cd7a8174f72751d2b7")
|
||||
弹幕_II = AnimationMeta("弹幕 II", True, 0.500, "7096375845773644318", "1826548", "11bcd8965488f2c70e27c8dc5112c6cb")
|
||||
强调三遍 = AnimationMeta("强调三遍", True, 0.500, "7129767866894651917", "3966601", "f34d9d771c836c5e4e836d4789788a82")
|
||||
彩色切换 = AnimationMeta("彩色切换", True, 1.500, "7303430211519910451", "30322872", "e2c7f4ec20555abe1e50c1920e81a0f9")
|
||||
彩色火焰 = AnimationMeta("彩色火焰", True, 0.500, "7308278472541999654", "32283417", "94dd9722a4b46d248c5e1d3d4b7c71fb")
|
||||
影像叠加 = AnimationMeta("影像叠加", True, 0.500, "7193989785319379515", "8882439", "018a39f66ba7ceb39f4d61e4446624f8")
|
||||
心跳 = AnimationMeta("心跳", True, 1.500, "7210283971316290085", "10650869", "3c2c6a7f6b8b102e9ae5f918600f83c0")
|
||||
急了 = AnimationMeta("急了", True, 2.400, "7134634461588623909", "4200435", "4f01b8c42b2d4a26a89aa528e6cc1544")
|
||||
悸动 = AnimationMeta("悸动", True, 1.200, "7229526981807706680", "13139395", "dc1aa28b54954465640c40928fae55f7")
|
||||
情绪加载 = AnimationMeta("情绪加载", True, 2.200, "7130142075995034119", "3983735", "6293429c9f4e12407d38089ee43b77cd")
|
||||
扩音器 = AnimationMeta("扩音器", True, 1.200, "7277870806552547895", "22619881", "ba24954b91039982fabf75ad533e7ff1")
|
||||
扭动 = AnimationMeta("扭动", True, 0.500, "7123093247672455711", "3733565", "5380b570671074788541d13e389daa4f")
|
||||
投影颤抖 = AnimationMeta("投影颤抖", True, 0.500, "7070332284934558245", "1599698", "4f4bebc9ab74f05801dca7b9b2ffa047")
|
||||
抖动故障 = AnimationMeta("抖动故障", True, 0.800, "7283103017526628921", "23998441", "55749de55fe55fc230a31952790142f3")
|
||||
拉住 = AnimationMeta("拉住", True, 1.200, "7221747595884892731", "12135594", "98db2339ea77225948ed8b7f8d72fc36")
|
||||
拉开 = AnimationMeta("拉开", True, 60.000, "7223675733606928957", "12390761", "41f672adaa1cdccdb81c8d0b2b1124a4")
|
||||
排队入场 = AnimationMeta("排队入场", True, 1.000, "7225496399817740855", "12628547", "0a7a9cb49305092f638d65888f149348")
|
||||
摇摆_I = AnimationMeta("摇摆 I", True, 0.500, "6908281696253121038", "1520478", "ea2f688a517d18a9de5912fa09f3bd56")
|
||||
放大缩小 = AnimationMeta("放大缩小", True, 0.500, "7224077152587616805", "12453543", "3e1538ad9a9f723238bb922423e20aed")
|
||||
放大镜 = AnimationMeta("放大镜", True, 0.800, "7272339163142165050", "21635790", "e9f8437306ec0f948c1eb485f09692a3")
|
||||
文字泛光 = AnimationMeta("文字泛光", True, 0.500, "7124226995231134239", "3740251", "879231435782ed4b72f278290070f20a")
|
||||
波浪 = AnimationMeta("波浪", True, 0.500, "6724927688047333891", "1644517", "176a075543ef82c04df1dd40d181ac5b")
|
||||
波浪_II = AnimationMeta("波浪 II", True, 0.500, "7067046171381862919", "1576246", "62245c9799544b75258689eb1ff222bb")
|
||||
波浪_III = AnimationMeta("波浪 III", True, 0.500, "7067812686557352456", "1583302", "b57dd58b3c8090eae268bae843655c79")
|
||||
流光 = AnimationMeta("流光", True, 1.600, "7308277700492268042", "32283005", "fd7091c4e298df2433e9433c8d58a427")
|
||||
涂鸦手绘 = AnimationMeta("涂鸦手绘", True, 0.500, "7276407256965452346", "22361305", "1ae8ceff3f65dd62f36b3eb43baff6b4")
|
||||
涂鸦手绘_II = AnimationMeta("涂鸦手绘 II", True, 0.500, "7276407576625943100", "22361304", "f72282b1f43b0d5e59144bbca7fbeda8")
|
||||
渐变拖尾 = AnimationMeta("渐变拖尾", True, 0.800, "7308277117622424090", "32282151", "950687cffad02a7b17bc9b672c9585f2")
|
||||
漂浮 = AnimationMeta("漂浮", True, 1.500, "7213291988500615738", "11017729", "451fbb332b33ec6ba683dc9d22055810")
|
||||
漩涡 = AnimationMeta("漩涡", True, 0.500, "7099419657290912286", "1936778", "416be3d42ae0d037597209d2a2f843c4")
|
||||
环形滚动 = AnimationMeta("环形滚动", True, 1.200, "7179135028343870012", "7564487", "e167e03db93ab98c4917ff53f59162c1")
|
||||
环绕_II = AnimationMeta("环绕 II", True, 0.500, "7114181846086193701", "3240866", "6df622ca3b91909a8d23ae24f1c2a675")
|
||||
甜甜圈 = AnimationMeta("甜甜圈", True, 0.500, "7070415354656199181", "1600378", "23a8cee8851ad7e169a094cee8ca9513")
|
||||
福袋炸开 = AnimationMeta("福袋炸开", True, 1.500, "7047088638932292127", "1531460", "2646a21f26faeb4103acacaa74c171f6")
|
||||
空间翻转_I = AnimationMeta("空间翻转 I", True, 1.500, "7163896186972148261", "5965291", "540b96331793d162cf80a099cd00dc55")
|
||||
空间翻转_II = AnimationMeta("空间翻转 II", True, 1.100, "7163901901589713444", "5966503", "ce769779dfa1d9c69eb593318bf1bc28")
|
||||
空间翻转_III = AnimationMeta("空间翻转 III", True, 0.500, "7163892769176424991", "5964737", "f9c82b94ebd990e6734ddef5ebba68cb")
|
||||
竖向渐变 = AnimationMeta("竖向渐变", True, 2.200, "7430669972088558090", "87963946", "db87c31a4c3252000f04f61d814e96d0")
|
||||
翻页I = AnimationMeta("翻页I", True, 1.200, "7168819879183651359", "6443365", "6f49e16f12b0518b2c3b38a12d07466d")
|
||||
调皮 = AnimationMeta("调皮", True, 0.500, "6917143282690560526", "1644527", "b832fcbb8ea3bcc64ddbd70c56166956")
|
||||
逐字放大 = AnimationMeta("逐字放大", True, 0.500, "6908592686781960717", "1644526", "4cd5a5c4144a3a713469043722579306")
|
||||
错位 = AnimationMeta("错位", True, 3.000, "7243633488249754173", "15140783", "cc869e81ac3b5d769afa6836bab5937b")
|
||||
随机弹跳 = AnimationMeta("随机弹跳", True, 0.500, "7045150354672980516", "1644538", "8656e9848f862adf1adfa30c26113a80")
|
||||
颤抖_II = AnimationMeta("颤抖 II", True, 0.500, "6986920909927879199", "1446098", "8c985874e1b508c4bfb9552735228143")
|
||||
飘起 = AnimationMeta("飘起", True, 3.000, "7211060597352305189", "10749797", "1ab6d9a8761c108da6989633b933647e")
|
||||
@@ -0,0 +1,107 @@
|
||||
"""文字出场动画元数据"""
|
||||
|
||||
from .effect_meta import EffectEnum, AnimationMeta
|
||||
|
||||
class TextOutro(EffectEnum):
|
||||
"""文字出场动画, 默认时长为0.5秒"""
|
||||
|
||||
# 免费特效
|
||||
右上弹出 = AnimationMeta("右上弹出", False, 0.500, "7076006676951732767", "1631524", "7b65a6e8a2ef7015dc780dec3524af60")
|
||||
右下擦除 = AnimationMeta("右下擦除", False, 0.500, "7090146831836910110", "1729286", "5e99fcba0a90d5bde52a85e034469aea")
|
||||
向上擦除 = AnimationMeta("向上擦除", False, 0.500, "6774625752794010115", "1644609", "d9b04e37f86d6b5cf456f396648e11d4")
|
||||
向上溶解 = AnimationMeta("向上溶解", False, 0.500, "7026619708627489293", "1644655", "7422f3de89f894522a0b45f3f2196131")
|
||||
向上滑动 = AnimationMeta("向上滑动", False, 0.500, "6763873533115240968", "1644605", "bbec5aa1ddf8df26276b99cfd9996d76")
|
||||
向下擦除 = AnimationMeta("向下擦除", False, 0.500, "6774626081791021576", "1644610", "4dafd6a7cbde862044fcbc543ecd818a")
|
||||
向下滑动 = AnimationMeta("向下滑动", False, 0.500, "6724919284893487619", "1644606", "4b1190ca81551d872f1d6b0e2ce5db2b")
|
||||
向右擦除 = AnimationMeta("向右擦除", False, 0.500, "6783908820176343566", "1644615", "a48325fce55a7a419b351c8a9826c7a0")
|
||||
向右滑动 = AnimationMeta("向右滑动", False, 0.500, "6724920744431587853", "1644614", "4026a211f18b0fc6ab9e10d09c8922ba")
|
||||
向右缓出 = AnimationMeta("向右缓出", False, 0.500, "7023684632591733284", "1451688", "59d06eeae650eb154920e1d07ef6b123")
|
||||
向左擦除 = AnimationMeta("向左擦除", False, 0.500, "6774626748177846791", "1644608", "1160d9bcc8a158a65441bcfc9603bd00")
|
||||
向左滑动 = AnimationMeta("向左滑动", False, 0.500, "6763873602476446221", "1644613", "a193ecedf73b2b27616ee7da4f599b9b")
|
||||
向左解散 = AnimationMeta("向左解散", False, 0.500, "7083752251742753287", "1674332", "46b117e1d9fc552e574958fcde072a53")
|
||||
圆形扫描 = AnimationMeta("圆形扫描", False, 0.500, "6840698265277567496", "1644617", "84c8a6772ba3199c3fdba0c171f0f2fc")
|
||||
居中打字 = AnimationMeta("居中打字", False, 0.500, "7265222263174074937", "20304017", "39cf0ff875a8825a82377a11e8b89d6a")
|
||||
展开 = AnimationMeta("展开", False, 0.500, "6779879836916650509", "1644599", "cc9805cb2f96e99eec6c0f1978b03f70")
|
||||
左上弹出 = AnimationMeta("左上弹出", False, 0.500, "7078587337998864926", "1646758", "6cb5717740976cd9e65544d93bb8a8be")
|
||||
左移弹动 = AnimationMeta("左移弹动", False, 1.000, "7313890212529050138", "35176386", "26cd4509db97923ac2fb11eca5947750")
|
||||
弹出 = AnimationMeta("弹出", False, 0.500, "6887482090351235592", "1644648", "ee214499310cb2a55d2370534fd0c02b")
|
||||
弹弓 = AnimationMeta("弹弓", False, 0.500, "6862897350478664200", "1644618", "45f66e1fa1a3b79968b3749275bab10c")
|
||||
弹性伸缩 = AnimationMeta("弹性伸缩", False, 0.500, "6872642084977775118", "1644646", "f2882bcfc0abc3b0c53b39649a2c4224")
|
||||
弹簧 = AnimationMeta("弹簧", False, 0.500, "6884154487246688776", "1644647", "15c4e6b0a27360bab5d6f5d421bbbe1e")
|
||||
打字机_I = AnimationMeta("打字机 I", False, 0.500, "6763469696260903435", "1644611", "19a09f5625ae9001db6ce17d850da691")
|
||||
打字机_II = AnimationMeta("打字机 II", False, 0.500, "6763469767555682823", "1644612", "f3ab4aa9eefc616bd928de6ca9936fb3")
|
||||
打字机_III = AnimationMeta("打字机 III", False, 0.500, "6763469838368117256", "1644664", "3f77a87e46ee1b50cd0ac207809c4c24")
|
||||
扭曲模糊 = AnimationMeta("扭曲模糊", False, 0.500, "7090122015603954189", "1729226", "2e58579b330dbccc4491c5f0a8cf4a8a")
|
||||
拖尾 = AnimationMeta("拖尾", False, 0.500, "7244102819731477049", "15260277", "178d1715bc49ea8303d3a9831e14ea84")
|
||||
放大 = AnimationMeta("放大", False, 0.500, "6724919767200698884", "1644603", "e818fb0699073a734ecead7c2768d827")
|
||||
放大_II = AnimationMeta("放大 II", False, 0.500, "7042278078415901192", "1644666", "1d6882ba11b67fff13c98493bc644027")
|
||||
故障打字机 = AnimationMeta("故障打字机", False, 0.500, "6870061326698287624", "1644643", "71a23656184bc8438f4fa22425192185")
|
||||
旋出 = AnimationMeta("旋出", False, 0.500, "6763873732143354376", "1644604", "ffc35db86b29aee7a0a4342ea5ed059f")
|
||||
日落 = AnimationMeta("日落", False, 0.500, "6779084194392838670", "1644607", "662eea25ba7d450d9a91febf43f22f7f")
|
||||
晕开 = AnimationMeta("晕开", False, 0.500, "7090059095134179877", "1727994", "3f2770aa65e01746967c8289e193021b")
|
||||
模糊 = AnimationMeta("模糊", False, 0.500, "6923094772907250189", "1644652", "72f73d5e9fd970ccee4918008b5a9d9a")
|
||||
水墨晕开 = AnimationMeta("水墨晕开", False, 1.200, "7278296130432012857", "22734371", "2705529afbf57f101c042d3a96ca2795")
|
||||
水平翻转 = AnimationMeta("水平翻转", False, 0.500, "7052633346936934942", "1644667", "8719853b159397ea64fc2102c61e52e4")
|
||||
波浪弹出 = AnimationMeta("波浪弹出", False, 0.500, "6917178803521327630", "1644651", "c60021c62c10eab0aa4f408ed602405c")
|
||||
渐隐 = AnimationMeta("渐隐", False, 0.500, "6724919382104871427", "1644600", "11004616098603d847593ce9ede05a62")
|
||||
溶解 = AnimationMeta("溶解", False, 0.500, "6872642354898014728", "1644645", "46389f9f5f72e1b58020a0b8293a23b9")
|
||||
滑动下落 = AnimationMeta("滑动下落", False, 1.500, "7270726693277405733", "21330850", "fa4aaf84b182425eed4e330ac03ecdbd")
|
||||
生长 = AnimationMeta("生长", False, 0.500, "6869302139584254477", "1644642", "e6ae4e1fc5ade7bd8765ef6d918f5f6f")
|
||||
缩小 = AnimationMeta("缩小", False, 0.500, "6724921351385125387", "1644602", "6c679c75b88d8c69335c9faefbcd635a")
|
||||
羽化向右擦除 = AnimationMeta("羽化向右擦除", False, 0.500, "6897085341811872270", "1644649", "9d4c77cbae673b97c629890c6687bc71")
|
||||
羽化向左擦除 = AnimationMeta("羽化向左擦除", False, 0.500, "6897085246206906893", "1644650", "865d4874f9e21f104881bd3f1f1e02fa")
|
||||
翻动 = AnimationMeta("翻动", False, 1.000, "7308279288061497865", "32283993", "04cba0b253ac17aba55979be72a1a322")
|
||||
躺下 = AnimationMeta("躺下", False, 0.800, "7265288999470633509", "20324365", "dc012ae6bfd6482bb0e52d02328016c8")
|
||||
轻微放大 = AnimationMeta("轻微放大", False, 0.500, "6763469915518145032", "1644601", "1e293df954586a261a11576481dd8454")
|
||||
闪动 = AnimationMeta("闪动", False, 0.500, "7039245189638001183", "1644658", "6b16591d61fa6ee68eef9148dbf0aa31")
|
||||
闭幕 = AnimationMeta("闭幕", False, 0.500, "6834511218552607239", "1644616", "02a28db581b74aac8547c2479cb219bc")
|
||||
随机弹跳 = AnimationMeta("随机弹跳", False, 0.500, "7026617357300666893", "1644665", "c260caa85b16e7d471ddeb2015cdf3f3")
|
||||
随机飞出 = AnimationMeta("随机飞出", False, 0.500, "6872642497013617159", "1644644", "d1292de2cfc57d0ca12fdbafb4e0bca2")
|
||||
|
||||
# 付费特效
|
||||
二段缩放 = AnimationMeta("二段缩放", True, 1.500, "7238519014866031162", "14394793", "bc54fc23dff39b105104f5bb15043ff9")
|
||||
发光闪出 = AnimationMeta("发光闪出", True, 1.800, "7308275717505028617", "32281161", "980fe827d603f3785e69854b6e5967a4")
|
||||
叠影并出 = AnimationMeta("叠影并出", True, 1.000, "7259634082760364603", "19101496", "1cc4801fbe64f100872abd1d502ac121")
|
||||
向上飞出 = AnimationMeta("向上飞出", True, 0.500, "7090139631861109278", "1730928", "3513093fd914fcccfa87cb98a410062e")
|
||||
向下弹出 = AnimationMeta("向下弹出", True, 0.500, "7127158940151845390", "3859743", "751b7e005e3ec297f5d3d2c40664f585")
|
||||
向下翻转 = AnimationMeta("向下翻转", True, 0.500, "7198395913948107301", "9282213", "860c71ba47b9cf749ac977cb437ae1a8")
|
||||
向左模糊 = AnimationMeta("向左模糊", True, 0.500, "7112703727336690189", "3176752", "2115519d6d8226853c4c7faf8ad61b18")
|
||||
向左模糊_II = AnimationMeta("向左模糊 II", True, 0.500, "7254503584732025381", "17830676", "b01dbbd36097f1d37e4dde2fd4380a13")
|
||||
吸出 = AnimationMeta("吸出", True, 0.300, "7121986743141667358", "3647465", "27d43c1a8f3bb21f88f25fadfd74e113")
|
||||
喷绘 = AnimationMeta("喷绘", True, 0.500, "7120131305303446029", "3563649", "a2efafd9407094f2706c38b5ea2867c0")
|
||||
复古打字机 = AnimationMeta("复古打字机", True, 0.800, "7252619798108967484", "17250228", "38ce74d50ed5abdebf4ba9cff80f644c")
|
||||
弹出跳动 = AnimationMeta("弹出跳动", True, 0.500, "7184797189627974200", "8058215", "dffb8966b47b6eae5fb9ef0e0fe6e6b9")
|
||||
弹性伸缩_II = AnimationMeta("弹性伸缩 II", True, 0.500, "7308276711039177225", "32281815", "9b225f4fafa2341876eec98ba91c89ee")
|
||||
打字光标 = AnimationMeta("打字光标", True, 2.000, "7237411511755346491", "14235852", "1285f4e58d3989468cc7c7679145e155")
|
||||
打字机IV = AnimationMeta("打字机IV", True, 2.000, "7237411448303915557", "14235853", "3f2d4916f48390652f4abaff69742c0b")
|
||||
折叠 = AnimationMeta("折叠", True, 0.500, "7124961998919438884", "3769517", "ccce629bcf7f98a8de4d4e1a2228d11a")
|
||||
描边填充 = AnimationMeta("描边填充", True, 0.900, "7308273254127374874", "32279531", "9dc334dd67a2ace030c8d0f0d01ecede")
|
||||
收缩震动 = AnimationMeta("收缩震动", True, 0.500, "7268214314022998588", "20877442", "c95da61de0632a74d061f03806a8ea9b")
|
||||
故障 = AnimationMeta("故障", True, 0.500, "7091567288385540622", "1789138", "b106b2d684134a06b033aa2ba70baea2")
|
||||
故障闪动 = AnimationMeta("故障闪动", True, 2.000, "7244102414377161276", "15261509", "ba766fab0ea8b838f1c64973aee2b54b")
|
||||
旋转缩放 = AnimationMeta("旋转缩放", True, 1.600, "7243633648237285949", "15140857", "37af568e3f004232b19507b24d5438c1")
|
||||
旋转飞出 = AnimationMeta("旋转飞出", True, 0.500, "6775804032318444045", "1644639", "802b2078b18d70ecd073ffacff59c1d8")
|
||||
模糊发光 = AnimationMeta("模糊发光", True, 1.800, "7301536173959156274", "29690520", "a21891cf3eff128b2a5190cad5356d69")
|
||||
模糊滚动 = AnimationMeta("模糊滚动", True, 0.800, "7264501549240422949", "20154980", "9c07a1d5d75f675d32f8917dc76f7381")
|
||||
波浪弹跳 = AnimationMeta("波浪弹跳", True, 1.000, "7317637880799564297", "37396324", "17dc7c4e6498440fcafc56dfbe3fb4fe")
|
||||
消散 = AnimationMeta("消散", True, 0.500, "7155790075794559525", "5323563", "21888446c8d15d56c60864985328652b")
|
||||
滚出 = AnimationMeta("滚出", True, 0.500, "7023684709737566728", "1644656", "f25af0cdef9584d588584b3765350f64")
|
||||
激光雕刻 = AnimationMeta("激光雕刻", True, 1.200, "7244102529573720635", "15261103", "bb0ab89c7396d11d5663b0071296f27d")
|
||||
炸开 = AnimationMeta("炸开", True, 0.500, "7142816577971294734", "4577477", "15ced8e31e8d57f8932820fe99f96391")
|
||||
炸开_II = AnimationMeta("炸开 II", True, 0.500, "7148309755121898015", "4834739", "bff4571b77bca8598b6ce8ba65d93252")
|
||||
炸开_Ⅲ = AnimationMeta("炸开 Ⅲ", True, 1.200, "7308274161992864266", "32280237", "0060b15237436dc553a3a050825d18a6")
|
||||
环绕滑出 = AnimationMeta("环绕滑出", True, 1.000, "7261858590808347193", "19562193", "c88f30f314faade1a6e71884234a380b")
|
||||
甩回 = AnimationMeta("甩回", True, 0.600, "7244102747698500156", "15261069", "0203e194e3bcf10f7f96fde73dc350f3")
|
||||
空翻 = AnimationMeta("空翻", True, 0.500, "6865176065514410503", "1644641", "f578720479df7746fa067199a1e4ea8b")
|
||||
螺旋下降 = AnimationMeta("螺旋下降", True, 0.500, "6799874105710481927", "1644640", "e6e1a2239d894b408e41341a6ca578ca")
|
||||
逐字旋出 = AnimationMeta("逐字旋出", True, 1.500, "7229520513586958908", "13137113", "3df3f26182ac9c6359be95dfb443d5da")
|
||||
逐字旋转 = AnimationMeta("逐字旋转", True, 0.500, "7112021029085516319", "3129838", "ee29d8b9e06a471972f36734c53dbea8")
|
||||
逐字翻转 = AnimationMeta("逐字翻转", True, 0.500, "7112274846326723086", "3139394", "ffc81a4b0c44427fbfd60984f7ddcdc2")
|
||||
逐字虚影 = AnimationMeta("逐字虚影", True, 0.500, "7034717113130422791", "1644657", "fe2cfbc08c330517caa8b602187ced07")
|
||||
镂空跳出 = AnimationMeta("镂空跳出", True, 1.200, "7312331703903588902", "34383204", "9ee4277be6f23033bf1b80fd0e6e8d27")
|
||||
闪烁散开 = AnimationMeta("闪烁散开", True, 1.000, "7268169968204649020", "20860262", "b58f8939e94946a70c35188819a65a78")
|
||||
随机弹跳_II = AnimationMeta("随机弹跳 II", True, 0.500, "7114191629346411016", "3241116", "0f0b492622513301a7cd8f30b035a056")
|
||||
随机打字机 = AnimationMeta("随机打字机", True, 0.500, "6926719087158497806", "1644653", "9db48fc9916b5b8554ce7262bb90f18f")
|
||||
顶出 = AnimationMeta("顶出", True, 1.100, "7268231069768356408", "20882164", "98ad0ec3b5980352e4709158def77960")
|
||||
预览打字 = AnimationMeta("预览打字", True, 0.800, "7268216065337856572", "20878188", "360d883bb43dab551defd1e94b9730d6")
|
||||
飞出 = AnimationMeta("飞出", True, 0.500, "7029522072724312612", "1644654", "324c695abdd43e1ec3506364fce0a087")
|
||||
@@ -0,0 +1,107 @@
|
||||
from .effect_meta import EffectEnum
|
||||
from .effect_meta import EffectMeta, EffectParam
|
||||
|
||||
class ToneEffectType(EffectEnum):
|
||||
"""剪映自带的音频“音色”效果类型"""
|
||||
|
||||
# 免费
|
||||
台湾小哥 = EffectMeta("台湾小哥", False, "7255565276819755576", "18149602", "8dd8889045e6c065177df791ddb3dfb8", [])
|
||||
圣诞精灵 = EffectMeta("圣诞精灵", False, "7310059412062736946", "33214695", "8dd8889045e6c065177df791ddb3dfb8", [])
|
||||
圣诞老人 = EffectMeta("圣诞老人", False, "7310059178133819930", "33214489", "8dd8889045e6c065177df791ddb3dfb8", [])
|
||||
广告男声 = EffectMeta("广告男声", False, "7328088579811316263", "42060748", "f554735f65a98cc4da17a1c53ef6a886", [])
|
||||
港普男声 = EffectMeta("港普男声", False, "7328087687548637732", "42060743", "f554735f65a98cc4da17a1c53ef6a886", [])
|
||||
老婆婆 = EffectMeta("老婆婆", False, "7328089253114548799", "42060746", "f554735f65a98cc4da17a1c53ef6a886", [])
|
||||
解说小帅 = EffectMeta("解说小帅", False, "7332473259369173540", "44254166", "f554735f65a98cc4da17a1c53ef6a886", [])
|
||||
大叔 = EffectMeta("大叔", False, "7020344898033291790", "2672760", "2509bbd71e127b04a29f52a54e82c53c", [
|
||||
EffectParam("音调", 0.834, 0.000, 1.000),
|
||||
EffectParam("音色", 1.000, 0.000, 1.000)])
|
||||
"""参数:
|
||||
- 音调: 默认0.83, 0.00 ~ 1.00
|
||||
- 音色: 默认1.00, 0.00 ~ 1.00
|
||||
"""
|
||||
女生 = EffectMeta("女生", False, "7020345715901600270", "2672757", "0ce1aade5958506c97bffea150772b6e", [
|
||||
EffectParam("音调", 0.834, 0.000, 1.000),
|
||||
EffectParam("音色", 0.334, 0.000, 1.000)])
|
||||
"""参数:
|
||||
- 音调: 默认0.83, 0.00 ~ 1.00
|
||||
- 音色: 默认0.33, 0.00 ~ 1.00
|
||||
"""
|
||||
怪物 = EffectMeta("怪物", False, "7020344978794615327", "2672759", "2130ffa21e5980196e014ec0baade179", [
|
||||
EffectParam("音调", 0.650, 0.000, 1.000),
|
||||
EffectParam("音色", 0.780, 0.000, 1.000)])
|
||||
"""参数:
|
||||
- 音调: 默认0.65, 0.00 ~ 1.00
|
||||
- 音色: 默认0.78, 0.00 ~ 1.00
|
||||
"""
|
||||
机器人 = EffectMeta("机器人", False, "7018011705414259213", "2672750", "4b87db25aecd2f6f71927930110c4a1e", [
|
||||
EffectParam("强弱", 1.000, 0.000, 1.000)])
|
||||
"""参数:
|
||||
- 强弱: 默认1.00, 0.00 ~ 1.00
|
||||
"""
|
||||
男生 = EffectMeta("男生", False, "7020345085233467917", "2672758", "ffd7a609207fd849efc9f63bf31697b1", [
|
||||
EffectParam("音调", 0.375, 0.000, 1.000),
|
||||
EffectParam("音色", 0.250, 0.000, 1.000)])
|
||||
"""参数:
|
||||
- 音调: 默认0.38, 0.00 ~ 1.00
|
||||
- 音色: 默认0.25, 0.00 ~ 1.00
|
||||
"""
|
||||
花栗鼠 = EffectMeta("花栗鼠", False, "7018011553081332231", "2672752", "e30b1922b8300423f21f9f84eff41ced", [
|
||||
EffectParam("音调", 0.500, 0.000, 1.000),
|
||||
EffectParam("音色", 0.500, 0.000, 1.000)])
|
||||
"""参数:
|
||||
- 音调: 默认0.50, 0.00 ~ 1.00
|
||||
- 音色: 默认0.50, 0.00 ~ 1.00
|
||||
"""
|
||||
萝莉 = EffectMeta("萝莉", False, "7020345789599715848", "2672756", "00b7ed2ccfe4d6076f78c8d751347a53", [
|
||||
EffectParam("音调", 0.750, 0.000, 1.000),
|
||||
EffectParam("音色", 0.600, 0.000, 1.000)])
|
||||
"""参数:
|
||||
- 音调: 默认0.75, 0.00 ~ 1.00
|
||||
- 音色: 默认0.60, 0.00 ~ 1.00
|
||||
"""
|
||||
|
||||
|
||||
# 付费
|
||||
TVB女声 = EffectMeta("TVB女声", True, "7260024060417937978", "19186454", "8dd8889045e6c065177df791ddb3dfb8", [])
|
||||
东厂公公 = EffectMeta("东厂公公", True, "7328092524612948491", "42060742", "f554735f65a98cc4da17a1c53ef6a886", [])
|
||||
云龙哥 = EffectMeta("云龙哥", True, "7376558114830553612", "68856989", "f554735f65a98cc4da17a1c53ef6a886", [])
|
||||
侠客 = EffectMeta("侠客", True, "7328089134331859468", "42060738", "f554735f65a98cc4da17a1c53ef6a886", [])
|
||||
做作夹子音 = EffectMeta("做作夹子音", True, "7367676929496846911", "63231108", "f554735f65a98cc4da17a1c53ef6a886", [])
|
||||
八戒 = EffectMeta("八戒", True, "7265891792766112314", "20427371", "8dd8889045e6c065177df791ddb3dfb8", [])
|
||||
军事解说 = EffectMeta("军事解说", True, "7328092289480266252", "42060734", "f554735f65a98cc4da17a1c53ef6a886", [])
|
||||
动漫小新 = EffectMeta("动漫小新", True, "7360901047662940708", "58979441", "f554735f65a98cc4da17a1c53ef6a886", [])
|
||||
动漫海绵 = EffectMeta("动漫海绵", True, "7367676859883983379", "63231109", "f554735f65a98cc4da17a1c53ef6a886", [])
|
||||
咆哮哥 = EffectMeta("咆哮哥", True, "7332473122605503039", "44254278", "f554735f65a98cc4da17a1c53ef6a886", [])
|
||||
商务殷语 = EffectMeta("商务殷语", True, "7328085477267870249", "42060747", "f554735f65a98cc4da17a1c53ef6a886", [])
|
||||
四郎 = EffectMeta("四郎", True, "7250403044414722621", "16627073", "8dd8889045e6c065177df791ddb3dfb8", [])
|
||||
太白 = EffectMeta("太白", True, "7328091247308968484", "42060736", "f554735f65a98cc4da17a1c53ef6a886", [])
|
||||
如来佛祖 = EffectMeta("如来佛祖", True, "7376558174049931830", "68856990", "f554735f65a98cc4da17a1c53ef6a886", [])
|
||||
姜饼人 = EffectMeta("姜饼人", True, "7310059267384414747", "33214539", "8dd8889045e6c065177df791ddb3dfb8", [])
|
||||
容嬷嬷 = EffectMeta("容嬷嬷", True, "7332472945366798860", "44254320", "f554735f65a98cc4da17a1c53ef6a886", [])
|
||||
小孩 = EffectMeta("小孩", True, "7262648951948448315", "19716244", "8dd8889045e6c065177df791ddb3dfb8", [])
|
||||
强势妹 = EffectMeta("强势妹", True, "7328091624427229759", "42060740", "f554735f65a98cc4da17a1c53ef6a886", [])
|
||||
快板 = EffectMeta("快板", True, "7328088454183522827", "42060741", "f554735f65a98cc4da17a1c53ef6a886", [])
|
||||
恐怖电影 = EffectMeta("恐怖电影", True, "7325710953247412787", "40932465", "f554735f65a98cc4da17a1c53ef6a886", [])
|
||||
悬疑解说 = EffectMeta("悬疑解说", True, "7325711304390349362", "40932811", "f554735f65a98cc4da17a1c53ef6a886", [])
|
||||
懒小羊 = EffectMeta("懒小羊", True, "7332473035116515859", "44254304", "f554735f65a98cc4da17a1c53ef6a886", [])
|
||||
搞笑解说 = EffectMeta("搞笑解说", True, "7262648842238038584", "19716150", "8dd8889045e6c065177df791ddb3dfb8", [])
|
||||
文艺女声 = EffectMeta("文艺女声", True, "7379565719991620132", "70562787", "f554735f65a98cc4da17a1c53ef6a886", [])
|
||||
樱桃丸子 = EffectMeta("樱桃丸子", True, "7325709643332719113", "40931609", "f554735f65a98cc4da17a1c53ef6a886", [])
|
||||
樱花小哥 = EffectMeta("樱花小哥", True, "7328091741678998055", "42060735", "f554735f65a98cc4da17a1c53ef6a886", [])
|
||||
武则天 = EffectMeta("武则天", True, "7328088300474864167", "42060744", "f554735f65a98cc4da17a1c53ef6a886", [])
|
||||
沉稳解说 = EffectMeta("沉稳解说", True, "7367676791164506636", "63231110", "f554735f65a98cc4da17a1c53ef6a886", [])
|
||||
温柔姐姐 = EffectMeta("温柔姐姐", True, "7379565769190806079", "70562785", "f554735f65a98cc4da17a1c53ef6a886", [])
|
||||
熊二 = EffectMeta("熊二", True, "7250403222798471740", "16627311", "8dd8889045e6c065177df791ddb3dfb8", [])
|
||||
猴哥 = EffectMeta("猴哥", True, "7236944659547689531", "14477015", "4f6a1fbc0000e178c724d355efea1d9f", [])
|
||||
甜美悦悦 = EffectMeta("甜美悦悦", True, "7325710673978069530", "40932253", "f554735f65a98cc4da17a1c53ef6a886", [])
|
||||
生活小妙招 = EffectMeta("生活小妙招", True, "7328092409525441065", "42060737", "f554735f65a98cc4da17a1c53ef6a886", [])
|
||||
电竞解说 = EffectMeta("电竞解说", True, "7325711893551649330", "40933559", "f554735f65a98cc4da17a1c53ef6a886", [])
|
||||
电视广告 = EffectMeta("电视广告", True, "7360901109667336743", "58979440", "f554735f65a98cc4da17a1c53ef6a886", [])
|
||||
紫薇 = EffectMeta("紫薇", True, "7281175506391667257", "23475307", "8dd8889045e6c065177df791ddb3dfb8", [])
|
||||
舌尖解说 = EffectMeta("舌尖解说", True, "7328091500753982015", "42060739", "f554735f65a98cc4da17a1c53ef6a886", [])
|
||||
蜡笔小妮 = EffectMeta("蜡笔小妮", True, "7379565670398169619", "70562786", "f554735f65a98cc4da17a1c53ef6a886", [])
|
||||
语音助手 = EffectMeta("语音助手", True, "7325710335455793714", "40931973", "f554735f65a98cc4da17a1c53ef6a886", [])
|
||||
那姐 = EffectMeta("那姐", True, "7369177370873303587", "64206631", "f554735f65a98cc4da17a1c53ef6a886", [])
|
||||
锤子哥 = EffectMeta("锤子哥", True, "7328091348098093580", "42060745", "f554735f65a98cc4da17a1c53ef6a886", [])
|
||||
顾姐 = EffectMeta("顾姐", True, "7250403134923608631", "16627197", "8dd8889045e6c065177df791ddb3dfb8", [])
|
||||
黛玉 = EffectMeta("黛玉", True, "7255565592093004343", "18149634", "8dd8889045e6c065177df791ddb3dfb8", [])
|
||||
@@ -0,0 +1,876 @@
|
||||
"""转场效果元数据"""
|
||||
|
||||
from .effect_meta import EffectEnum, TransitionMeta
|
||||
|
||||
class TransitionType(EffectEnum):
|
||||
"""转场类型"""
|
||||
|
||||
# 免费特效
|
||||
_3D空间 = TransitionMeta("3D空间", False, "7049979667406656014", "1506926", "aaecc038f6543411f601608fc5539f0b", 1.500, True)
|
||||
"""默认时长: 1.50s"""
|
||||
上下翻页 = TransitionMeta("上下翻页", False, "7397337005387944457", "77055399", "091f7995a43fc66fd0a95b2a6b88834f", 1.000, True)
|
||||
"""默认时长: 1.00s"""
|
||||
上移 = TransitionMeta("上移", False, "6724846395116753416", "2917279", "df9bc16697464de201a4924de49234a2", 0.500, True)
|
||||
"""默认时长: 0.50s"""
|
||||
下移 = TransitionMeta("下移", False, "6724849276100284942", "2917280", "9c042543d4846e7c17e8f950ce6f91c2", 0.500, True)
|
||||
"""默认时长: 0.50s"""
|
||||
中心旋转 = TransitionMeta("中心旋转", False, "6858191434294497805", "878914", "b43f5b2e59f966a3b110222773c2942d", 0.500, False)
|
||||
"""默认时长: 0.50s"""
|
||||
云朵 = TransitionMeta("云朵", False, "6955722927161479694", "2912469", "283bb4bbe729f19f933cb705024a0983", 0.500, True)
|
||||
"""默认时长: 0.50s"""
|
||||
倒影 = TransitionMeta("倒影", False, "6748313807031898627", "369691", "0ee10b771dc0443c41a90bb9fd6b3c25", 0.500, True)
|
||||
"""默认时长: 0.50s"""
|
||||
冰雪结晶 = TransitionMeta("冰雪结晶", False, "6919369228701143559", "1017910", "a0fd9d6eb0cb5596cac4f54d0ba59eaf", 0.500, False)
|
||||
"""默认时长: 0.50s"""
|
||||
冲鸭 = TransitionMeta("冲鸭", False, "7030714241359286821", "1441672", "784b284f040f61ae95f4e8e660f3a873", 0.500, False)
|
||||
"""默认时长: 0.50s"""
|
||||
分割 = TransitionMeta("分割", False, "6968372308419285540", "4211683", "ca45695f29bacf2dc29a6eb959e9e968", 0.500, True)
|
||||
"""默认时长: 0.50s"""
|
||||
分割_II = TransitionMeta("分割 II", False, "6969782622868214302", "4211740", "5ba1cb89bcf4a0898f86494864348e13", 0.500, True)
|
||||
"""默认时长: 0.50s"""
|
||||
分割_III = TransitionMeta("分割 III", False, "6969793843403166215", "4211739", "942fd71d67ca576384b2cd068157ca45", 0.500, True)
|
||||
"""默认时长: 0.50s"""
|
||||
分割_IV = TransitionMeta("分割 IV", False, "6969793934356648455", "4211738", "62d08c08542fe62e6a8429f9501e76fa", 0.500, True)
|
||||
"""默认时长: 0.50s"""
|
||||
前后对比_II = TransitionMeta("前后对比 II", False, "7299290706277831218", "28895844", "64e8f4a060901fd4349301f97fbdd172", 0.800, True)
|
||||
"""默认时长: 0.80s"""
|
||||
动漫云朵 = TransitionMeta("动漫云朵", False, "6777178865119793678", "2911876", "e835cbc7fa7b15af90a2a7090bbf68c3", 0.500, False)
|
||||
"""默认时长: 0.50s"""
|
||||
动漫漩涡 = TransitionMeta("动漫漩涡", False, "6858191448827761160", "878913", "fa7ba99b13036c0ff167ea3b7d5c31a2", 0.500, False)
|
||||
"""默认时长: 0.50s"""
|
||||
动漫火焰 = TransitionMeta("动漫火焰", False, "6777178765643485709", "2911875", "8e7c247c5ebd58aa5c3582273e9c840b", 0.500, False)
|
||||
"""默认时长: 0.50s"""
|
||||
动漫闪电 = TransitionMeta("动漫闪电", False, "6777178696609436174", "2911874", "3fd5d0c7c48668ba5305c57ac0b5d596", 0.500, False)
|
||||
"""默认时长: 0.50s"""
|
||||
压缩 = TransitionMeta("压缩", False, "6751618376780485133", "4212466", "337d4cd9be4e1860bd1e7e50a9a93841", 0.500, True)
|
||||
"""默认时长: 0.50s"""
|
||||
叠加 = TransitionMeta("叠加", False, "6914112332205396488", "1003369", "4f7e4bd421e382860b49e3e34eb4e4aa", 1.000, True)
|
||||
"""默认时长: 1.00s"""
|
||||
叠化 = TransitionMeta("叠化", False, "6724845717472416269", "322577", "2d641adc4bb63e37e3a0067d8c8cc3c3", 0.500, True)
|
||||
"""默认时长: 0.50s"""
|
||||
右移 = TransitionMeta("右移", False, "6726711296063967748", "2917287", "4cfd965c25e33c7df9b2c1b3b4cbdf31", 1.000, True)
|
||||
"""默认时长: 1.00s"""
|
||||
向上 = TransitionMeta("向上", False, "6724227090872275463", "359459", "349746a951e130fe896415f51c9eb36a", 1.000, False)
|
||||
"""默认时长: 1.00s"""
|
||||
向上擦除 = TransitionMeta("向上擦除", False, "6724849456891564557", "2917281", "9a2e4ebf7309c80be332e3c62594dcd6", 0.500, True)
|
||||
"""默认时长: 0.50s"""
|
||||
向下 = TransitionMeta("向下", False, "6724227330190873100", "359449", "9c263958ef3b5762db6ffd94a665f9e8", 1.000, False)
|
||||
"""默认时长: 1.00s"""
|
||||
向下擦除 = TransitionMeta("向下擦除", False, "6724849752921346573", "2917282", "ce1fb8739d1fbff3d86498fc18321933", 0.500, True)
|
||||
"""默认时长: 0.50s"""
|
||||
向下流动 = TransitionMeta("向下流动", False, "6858191469807669773", "878912", "45f28ed2995ca15cfe027784b55d34f2", 0.500, False)
|
||||
"""默认时长: 0.50s"""
|
||||
向右 = TransitionMeta("向右", False, "6724227599616184836", "359527", "55af58a9b04ff458c3a9ae3ddb358152", 1.000, False)
|
||||
"""默认时长: 1.00s"""
|
||||
向右上 = TransitionMeta("向右上", False, "6724227870559834635", "359567", "19d72649fe9bc3b272e1d874a93a0e9b", 0.500, True)
|
||||
"""默认时长: 0.50s"""
|
||||
向右下 = TransitionMeta("向右下", False, "6724228621742903815", "359537", "4291e21aefc6d87a232441d38cabacc5", 0.500, True)
|
||||
"""默认时长: 0.50s"""
|
||||
向右拉伸 = TransitionMeta("向右拉伸", False, "6987299127025472031", "4211782", "6c3d17aa182e6238ee3a48c2fdf4a627", 0.500, True)
|
||||
"""默认时长: 0.50s"""
|
||||
向右擦除 = TransitionMeta("向右擦除", False, "6724849898857959950", "2917284", "a10153bd2b569c49ddd7c055e8c9eba9", 0.500, True)
|
||||
"""默认时长: 0.50s"""
|
||||
向右流动 = TransitionMeta("向右流动", False, "6858191483573375495", "878911", "8d3508f6e570dc73d3e771d234796cb8", 0.500, False)
|
||||
"""默认时长: 0.50s"""
|
||||
向左 = TransitionMeta("向左", False, "6724227717195108867", "359529", "323fadc45da03741e6b393b3e3b34e75", 0.500, False)
|
||||
"""默认时长: 0.50s"""
|
||||
向左上 = TransitionMeta("向左上", False, "6724230442679013902", "359533", "4ed73d43829eb496f6885ac0b882a391", 0.500, True)
|
||||
"""默认时长: 0.50s"""
|
||||
向左下 = TransitionMeta("向左下", False, "6724230577211314695", "359535", "c76650d4ea9bc4e3b0530c9b9f05f28e", 0.500, True)
|
||||
"""默认时长: 0.50s"""
|
||||
向左拉伸 = TransitionMeta("向左拉伸", False, "6987201429622493732", "4211781", "b0dd96c3c203104a2df46d83dd91b7bd", 0.500, True)
|
||||
"""默认时长: 0.50s"""
|
||||
向左擦除 = TransitionMeta("向左擦除", False, "6724849999336706573", "2917283", "316c2a1c1783f51505c793b13381b445", 0.500, True)
|
||||
"""默认时长: 0.50s"""
|
||||
吸入 = TransitionMeta("吸入", False, "7246288124110705209", "15653345", "fb75bf696e19a04795ae9a06b43a09f2", 1.000, True)
|
||||
"""默认时长: 1.00s"""
|
||||
回忆下滑 = TransitionMeta("回忆下滑", False, "7309840407406318117", "33106283", "7e8f1b10bb9979d7ed184d29f301b93d", 1.000, True)
|
||||
"""默认时长: 1.00s"""
|
||||
圆形分割_II = TransitionMeta("圆形分割 II", False, "7317206886053319194", "37127313", "05017adee9a3798b4fb207bb3206187e", 0.800, True)
|
||||
"""默认时长: 0.80s"""
|
||||
圆形扫描 = TransitionMeta("圆形扫描", False, "6851775006418932238", "813992", "0260ab98d7a840c3344cb5b3e70b7d4b", 1.000, True)
|
||||
"""默认时长: 1.00s"""
|
||||
圆形遮罩 = TransitionMeta("圆形遮罩", False, "6725767129519362573", "2916676", "a7eb1d47f97049b17f49669622d07f3d", 0.500, True)
|
||||
"""默认时长: 0.50s"""
|
||||
圆形遮罩_II = TransitionMeta("圆形遮罩 II", False, "6724850215364334083", "2916675", "2772ad7c8c7e30c6421be7c2e5dd3f15", 1.000, True)
|
||||
"""默认时长: 1.00s"""
|
||||
复古放映 = TransitionMeta("复古放映", False, "7237068402945167909", "14192091", "44c3d405f4961d843c74c69e241df643", 0.600, True)
|
||||
"""默认时长: 0.60s"""
|
||||
岁月的痕迹 = TransitionMeta("岁月的痕迹", False, "6982750240663147044", "1185194", "0b228af1ebde4909bb6ff545ddd89023", 1.000, True)
|
||||
"""默认时长: 1.00s"""
|
||||
左下角_II = TransitionMeta("左下角 II", False, "7304868316252738098", "30874190", "e0296196f0ec6666a33b33fead4f63d6", 0.700, True)
|
||||
"""默认时长: 0.70s"""
|
||||
左移 = TransitionMeta("左移", False, "6726711499676455435", "2917286", "9562c0ea301229d43f9dca6f6590f306", 1.000, True)
|
||||
"""默认时长: 1.00s"""
|
||||
开幕 = TransitionMeta("开幕", False, "6750893890712113677", "391781", "d5f097e701ddaa984a590249896fc51a", 0.500, True)
|
||||
"""默认时长: 0.50s"""
|
||||
弹幕转场 = TransitionMeta("弹幕转场", False, "7028877116259176974", "1433950", "7b5385070a42a218f194d9daddb59f32", 4.000, False)
|
||||
"""默认时长: 4.00s"""
|
||||
弹跳 = TransitionMeta("弹跳", False, "6747865141120864779", "368205", "4b3b8b53bc1f947d57a30489d81387eb", 0.500, True)
|
||||
"""默认时长: 0.50s"""
|
||||
快门 = TransitionMeta("快门", False, "6882983860615778823", "944120", "2df569fefb5004c041af5509c10d6c53", 0.500, True)
|
||||
"""默认时长: 0.50s"""
|
||||
打板转场_I = TransitionMeta("打板转场 I", False, "7028143517570437668", "1432322", "355d5c4df581f6c4940c9b999e010f81", 4.000, False)
|
||||
"""默认时长: 4.00s"""
|
||||
打板转场_II = TransitionMeta("打板转场 II", False, "7029592645538157086", "1437264", "021dfc9a6541d8d08bac631749f9e87d", 4.000, False)
|
||||
"""默认时长: 4.00s"""
|
||||
抖动 = TransitionMeta("抖动", False, "7252544245444121148", "17223925", "a1b79bbc99afca7c9e5372cd050ad61d", 0.800, True)
|
||||
"""默认时长: 0.80s"""
|
||||
抖动_II = TransitionMeta("抖动 II", False, "7252544309830881851", "17223924", "37319b02a398332e7159f323ea93ba88", 0.800, True)
|
||||
"""默认时长: 0.80s"""
|
||||
抠像旋转 = TransitionMeta("抠像旋转", False, "7386584387128660506", "73423370", "290a8f067f8039b1060df3d1e8d07ca0", 0.800, True)
|
||||
"""默认时长: 0.80s"""
|
||||
拉伸 = TransitionMeta("拉伸", False, "7231391397717217851", "13402655", "4fd21b4a2e6382ee8851c51c8f65ed73", 1.200, True)
|
||||
"""默认时长: 1.20s"""
|
||||
拉伸_II = TransitionMeta("拉伸 II", False, "7259735372039459389", "19137130", "d28fee612c51edf28da804983d220f8d", 0.600, True)
|
||||
"""默认时长: 0.60s"""
|
||||
拉远 = TransitionMeta("拉远", False, "6724226338418332167", "359365", "9661d5321722495c0a98959a0d617b0f", 1.000, False)
|
||||
"""默认时长: 1.00s"""
|
||||
拍摄器 = TransitionMeta("拍摄器", False, "7100849808784495135", "2057168", "b64bebe75d492161875d4fd54725b31d", 0.500, True)
|
||||
"""默认时长: 0.50s"""
|
||||
推近 = TransitionMeta("推近", False, "6724226861666144779", "359359", "4d5a316f2eae582e7d0604b47feb8c32", 1.000, False)
|
||||
"""默认时长: 1.00s"""
|
||||
撕纸拉屏 = TransitionMeta("撕纸拉屏", False, "7254847807465460280", "17934952", "c500d2310388b63f3a4e66ff0b15f6dc", 0.700, True)
|
||||
"""默认时长: 0.70s"""
|
||||
放射 = TransitionMeta("放射", False, "6724239584663704071", "4212630", "06cc8d49c558d57e21207f68a6a7dbc0", 1.000, True)
|
||||
"""默认时长: 1.00s"""
|
||||
故障 = TransitionMeta("故障", False, "6725771847444468236", "2918080", "7bec08ae5dae8806e3ba0c66622d0fd3", 1.000, False)
|
||||
"""默认时长: 1.00s"""
|
||||
故障拼贴 = TransitionMeta("故障拼贴", False, "7397337004507140618", "77055395", "305fc94470ded4f5b633c80fb4112582", 1.000, True)
|
||||
"""默认时长: 1.00s"""
|
||||
斜向分割 = TransitionMeta("斜向分割", False, "7085250093527339557", "4211687", "6ae9eb3ee4b08afa67e3d079a2ece505", 0.500, True)
|
||||
"""默认时长: 0.50s"""
|
||||
星星 = TransitionMeta("星星", False, "6751564373317128708", "2916678", "5ad3a484b1784e3f5391bf3fa7b188f4", 0.500, True)
|
||||
"""默认时长: 0.50s"""
|
||||
星星_II = TransitionMeta("星星 II", False, "6789847494898487822", "2916679", "16a4697aef243c1524e9581fb2f038c9", 0.500, True)
|
||||
"""默认时长: 0.50s"""
|
||||
模糊 = TransitionMeta("模糊", False, "6911569618171597320", "4212596", "fc1352435f88c6f284b6c6dce8552ffe", 0.500, True)
|
||||
"""默认时长: 0.50s"""
|
||||
横向分割 = TransitionMeta("横向分割", False, "7083771238564237861", "4211685", "aa0aa4a72fc236611d3fd4bf75a12ca3", 0.500, True)
|
||||
"""默认时长: 0.50s"""
|
||||
横向拉幕 = TransitionMeta("横向拉幕", False, "6724492948144132621", "2917278", "de63aa2d5225bb6a65b5bab8702aa1f5", 1.000, True)
|
||||
"""默认时长: 1.00s"""
|
||||
横向模糊 = TransitionMeta("横向模糊", False, "7450031573958660645", "97482744", "38f584c24f4383e9d10037ad4ce6fa00", 0.500, True)
|
||||
"""默认时长: 0.50s"""
|
||||
横线 = TransitionMeta("横线", False, "6724845810892149251", "2918076", "36c1c8edb0171ea082c98d38ffa8bd36", 0.500, True)
|
||||
"""默认时长: 0.50s"""
|
||||
气泡转场 = TransitionMeta("气泡转场", False, "7028880945671311903", "1433968", "66489506132d1314f3c7264bcd947cad", 4.000, False)
|
||||
"""默认时长: 4.00s"""
|
||||
水波卷动 = TransitionMeta("水波卷动", False, "6858191497280360973", "878910", "cf9bac91349a227a6155eca9d94a8af8", 0.500, False)
|
||||
"""默认时长: 0.50s"""
|
||||
水波向右 = TransitionMeta("水波向右", False, "6858191510865711629", "878909", "e9301bacebc6dc444aa4e6f835dd4a31", 0.500, False)
|
||||
"""默认时长: 0.50s"""
|
||||
水波向左 = TransitionMeta("水波向左", False, "6858191524312650248", "878908", "6b6499879310b6d29e9595799829cb15", 0.500, False)
|
||||
"""默认时长: 0.50s"""
|
||||
泛光 = TransitionMeta("泛光", False, "6914112263645303303", "4202527", "c978e2e22e9a9768813f5fd8d486b792", 1.000, True)
|
||||
"""默认时长: 1.00s"""
|
||||
泛白 = TransitionMeta("泛白", False, "6949828109663212045", "4202528", "1bf6b83628ff6416a4d87865107b739e", 1.000, False)
|
||||
"""默认时长: 1.00s"""
|
||||
波点向右 = TransitionMeta("波点向右", False, "6858191541706428941", "878907", "74c13e6250cdff7a4e860625d1098e0c", 0.500, False)
|
||||
"""默认时长: 0.50s"""
|
||||
渐变擦除 = TransitionMeta("渐变擦除", False, "6919369138800431629", "1017911", "2fff9b60c929559bce574ab8ef2c14a7", 1.000, True)
|
||||
"""默认时长: 1.00s"""
|
||||
滑动 = TransitionMeta("滑动", False, "6757982416649851399", "4212349", "b99916e2936aeb2e56892ca617888694", 1.000, True)
|
||||
"""默认时长: 1.00s"""
|
||||
漩涡 = TransitionMeta("漩涡", False, "6851810799510360583", "4211780", "31d2de43e6711a9eeb831d60529d0393", 1.000, False)
|
||||
"""默认时长: 1.00s"""
|
||||
烟雾转场 = TransitionMeta("烟雾转场", False, "7450031574923350555", "97482746", "67dc647cf7b1c45ada91d32bebc2bde7", 1.500, True)
|
||||
"""默认时长: 1.50s"""
|
||||
爱心 = TransitionMeta("爱心", False, "6748289440130535947", "2916677", "2382e2096918b63a0f8e75f720d7d892", 0.500, True)
|
||||
"""默认时长: 0.50s"""
|
||||
爱心_II = TransitionMeta("爱心 II", False, "6789846472343949837", "2916682", "0c04684566638932cb6f6d86cdfabda6", 0.500, True)
|
||||
"""默认时长: 0.50s"""
|
||||
爱心上升 = TransitionMeta("爱心上升", False, "6789846246069637640", "2916681", "2a3c5439ce79e6113843a2b7135bd21a", 0.500, True)
|
||||
"""默认时长: 0.50s"""
|
||||
电视故障_I = TransitionMeta("电视故障 I", False, "7046293801123451405", "2918081", "feaf2e85b909a123ea71728f9b61fb03", 1.600, True)
|
||||
"""默认时长: 1.60s"""
|
||||
电视故障_II = TransitionMeta("电视故障 II", False, "7042278078415901192", "2918082", "a082bdaea1122bbf1aba730278d50250", 1.600, True)
|
||||
"""默认时长: 1.60s"""
|
||||
画笔擦除 = TransitionMeta("画笔擦除", False, "6789846828788486664", "2912467", "4fafb5343d5c9e726278e90b5e0c1c93", 0.500, True)
|
||||
"""默认时长: 0.50s"""
|
||||
白光快闪 = TransitionMeta("白光快闪", False, "7343136487182963211", "49272367", "c1f7073a94d22565ace1ab3023d1c154", 0.400, True)
|
||||
"""默认时长: 0.40s"""
|
||||
白色墨花 = TransitionMeta("白色墨花", False, "6858191556055142919", "878906", "775ccf71576e2b8fb075f0e61e980923", 0.500, False)
|
||||
"""默认时长: 0.50s"""
|
||||
白色烟雾 = TransitionMeta("白色烟雾", False, "6885646856672514567", "947664", "9b679b32ec03c42932fa37b10c141bda", 0.500, False)
|
||||
"""默认时长: 0.50s"""
|
||||
百叶窗 = TransitionMeta("百叶窗", False, "6789847331060584974", "521326", "9f37c3f6f5e84b37b3a0560803a16c30", 0.500, True)
|
||||
"""默认时长: 0.50s"""
|
||||
眨眼 = TransitionMeta("眨眼", False, "6864867302936941064", "2917719", "bf695506c8091f7a01ee7b1323a4d601", 0.500, True)
|
||||
"""默认时长: 0.50s"""
|
||||
矩形分割 = TransitionMeta("矩形分割", False, "6858191571196580359", "878905", "82d6235324f8c5f830f8ccf7b1cc036b", 0.500, False)
|
||||
"""默认时长: 0.50s"""
|
||||
窗格 = TransitionMeta("窗格", False, "6747989545448378888", "368721", "cd6a7ff53319efa1c57690f61c8737a0", 0.500, True)
|
||||
"""默认时长: 0.50s"""
|
||||
立方体 = TransitionMeta("立方体", False, "6785042367498949127", "519784", "be45578bb628a21eaae268a8d8df868f", 0.500, True)
|
||||
"""默认时长: 0.50s"""
|
||||
竖向分割 = TransitionMeta("竖向分割", False, "7083771107706147364", "4211686", "7cc017d4e1b6ab58ec4b6900432522ff", 0.500, True)
|
||||
"""默认时长: 0.50s"""
|
||||
竖向拉幕 = TransitionMeta("竖向拉幕", False, "6726711903684399619", "2917285", "84f91be5a43cc6a9d03505a465418206", 1.000, True)
|
||||
"""默认时长: 1.00s"""
|
||||
竖向模糊 = TransitionMeta("竖向模糊", False, "7125661387568714247", "3796327", "cda4099e3f207ef1509f27d0b1ab01c1", 0.800, True)
|
||||
"""默认时长: 0.80s"""
|
||||
竖向模糊_II = TransitionMeta("竖向模糊 II", False, "7280837008421818936", "23404229", "85e381982a94778e003f3acc9527d5cf", 0.660, True)
|
||||
"""默认时长: 0.66s"""
|
||||
竖线 = TransitionMeta("竖线", False, "6724846536041173511", "2918077", "75019c1486b2366675d95602f58430e2", 0.500, True)
|
||||
"""默认时长: 0.50s"""
|
||||
箭头向右 = TransitionMeta("箭头向右", False, "6858191587554365966", "878904", "fa0cfb9e822393af86c6df4a8477cd63", 0.500, False)
|
||||
"""默认时长: 0.50s"""
|
||||
粒子 = TransitionMeta("粒子", False, "6855565313715474952", "4212632", "389d08f0700dd3e646a1e92289d84d58", 0.500, True)
|
||||
"""默认时长: 0.50s"""
|
||||
翻篇 = TransitionMeta("翻篇", False, "7034446419641504264", "4212350", "e3a2c5e0bd63416b5f64e489beb8a702", 1.300, True)
|
||||
"""默认时长: 1.30s"""
|
||||
翻页 = TransitionMeta("翻页", False, "6747979085894390279", "368701", "2f157ee5d78c197efc26f8ed37490573", 0.500, True)
|
||||
"""默认时长: 0.50s"""
|
||||
色差逆时针 = TransitionMeta("色差逆时针", False, "6940500629013926413", "1069274", "b235f0bc4c9eb6e090358c09c7b0ffb0", 1.000, False)
|
||||
"""默认时长: 1.00s"""
|
||||
色差顺时针 = TransitionMeta("色差顺时针", False, "6940520116035523080", "1069374", "8661a7a8b19762d35506cd6513d8ed3e", 1.000, False)
|
||||
"""默认时长: 1.00s"""
|
||||
色彩溶解 = TransitionMeta("色彩溶解", False, "6724846004274729480", "322583", "b5f962a334dcc141bbc3dae0f5777564", 0.500, True)
|
||||
"""默认时长: 0.50s"""
|
||||
色彩溶解_II = TransitionMeta("色彩溶解 II", False, "6724866927933526542", "322625", "8179e342f9b24dd1817c56f7ef1f8f9b", 1.000, True)
|
||||
"""默认时长: 1.00s"""
|
||||
色彩溶解_III = TransitionMeta("色彩溶解 III", False, "6724867032312975875", "322627", "293a03bd140d09b0c616f879bda235e1", 1.000, True)
|
||||
"""默认时长: 1.00s"""
|
||||
蓝色线条 = TransitionMeta("蓝色线条", False, "6858191605384352263", "878903", "d4d2996c3f6cf97fb8602f825d98a4da", 0.500, False)
|
||||
"""默认时长: 0.50s"""
|
||||
逆时针旋转 = TransitionMeta("逆时针旋转", False, "6724226603372515853", "359437", "048170ae8df06f9d6964691b1e472c6a", 0.500, True)
|
||||
"""默认时长: 0.50s"""
|
||||
逆时针旋转_II = TransitionMeta("逆时针旋转 II", False, "7252544659245765179", "17224251", "1b2c634ea54e81de34cb6d31848908af", 0.800, True)
|
||||
"""默认时长: 0.80s"""
|
||||
镜像翻转 = TransitionMeta("镜像翻转", False, "6848792278710882824", "2917288", "1109c08965141f90b9174c38e85c8cab", 1.000, False)
|
||||
"""默认时长: 1.00s"""
|
||||
闪白 = TransitionMeta("闪白", False, "6724845376098013708", "322575", "9732e719b858a6dbb648d4fb459fde08", 0.500, False)
|
||||
"""默认时长: 0.50s"""
|
||||
闪白_II = TransitionMeta("闪白 II", False, "7306818286413419017", "31619869", "9a1089fc9fefe2a79a71c37c1bc5831a", 0.300, True)
|
||||
"""默认时长: 0.30s"""
|
||||
闪黑 = TransitionMeta("闪黑", False, "6724239388189921806", "321493", "3bca53e9f3dfa2c184fbee96438ea097", 0.500, False)
|
||||
"""默认时长: 0.50s"""
|
||||
雪花故障 = TransitionMeta("雪花故障", False, "6724866446842663431", "2918079", "71cabe836d9c88afd44f43654ba67fa7", 1.000, False)
|
||||
"""默认时长: 1.00s"""
|
||||
雾化 = TransitionMeta("雾化", False, "7216171159589491259", "11387229", "945e1560e2c65277b4bd4127cd479746", 1.200, True)
|
||||
"""默认时长: 1.20s"""
|
||||
震动 = TransitionMeta("震动", False, "7198100561235808825", "9261771", "e46204ca1e4fcf76d1b1c86e852e862d", 1.000, True)
|
||||
"""默认时长: 1.00s"""
|
||||
顺时针旋转 = TransitionMeta("顺时针旋转", False, "6724226684721041932", "359421", "d6d0c76fb82ca2a355de138d94a94780", 0.500, True)
|
||||
"""默认时长: 0.50s"""
|
||||
顺时针旋转_II = TransitionMeta("顺时针旋转 II", False, "7252544556799889975", "17224317", "5e81c58bf217a2bdaf479275e412ea93", 0.800, True)
|
||||
"""默认时长: 0.80s"""
|
||||
频闪 = TransitionMeta("频闪", False, "7083767957662208549", "1674710", "35a76b77dd0812f7012911109db35799", 0.500, True)
|
||||
"""默认时长: 0.50s"""
|
||||
风车 = TransitionMeta("风车", False, "6748286529921094157", "369485", "367b8b51b2eeb63eb2009bf5b356bc2f", 0.500, True)
|
||||
"""默认时长: 0.50s"""
|
||||
马赛克 = TransitionMeta("马赛克", False, "6724866519022440967", "4212631", "eed93b26d9cd6296b10d2f5065ee396e", 1.000, True)
|
||||
"""默认时长: 1.00s"""
|
||||
黑色块 = TransitionMeta("黑色块", False, "6724866346569437710", "2918078", "357e865f3bb0c6529ee882ebf279d7c6", 0.500, True)
|
||||
"""默认时长: 0.50s"""
|
||||
黑色烟雾 = TransitionMeta("黑色烟雾", False, "6885647017452769805", "947663", "fa02f80c28a9671a206c2ccf17b41c58", 0.500, False)
|
||||
"""默认时长: 0.50s"""
|
||||
|
||||
# 付费特效
|
||||
_2024回忆流 = TransitionMeta("2024回忆流", True, "7448898555617481225", "97032533", "e21c31c4d68bb535ab10905af32a8486", 2.000, True)
|
||||
"""默认时长: 2.00s"""
|
||||
X形震闪 = TransitionMeta("X形震闪", True, "7403208545111380531", "79087478", "07f3707be8fced05b149f16252c3aabc", 1.000, True)
|
||||
"""默认时长: 1.00s"""
|
||||
万花筒 = TransitionMeta("万花筒", True, "7257806429086552632", "18722268", "0aa1d28fdb90725586089436e6ccd243", 0.800, True)
|
||||
"""默认时长: 0.80s"""
|
||||
三屏放大 = TransitionMeta("三屏放大", True, "7320254175466492467", "38586528", "b59a3df958aeeba78f1ceb075be189f0", 1.000, True)
|
||||
"""默认时长: 1.00s"""
|
||||
三屏滑入 = TransitionMeta("三屏滑入", True, "7312438185261273650", "34443818", "09dc4fee56acca3e6f1c104277b8695d", 1.000, True)
|
||||
"""默认时长: 1.00s"""
|
||||
三屏闪切 = TransitionMeta("三屏闪切", True, "7252599996254523959", "17242682", "2bc234d945f15d93f3d292e64042d69d", 0.800, True)
|
||||
"""默认时长: 0.80s"""
|
||||
下滑 = TransitionMeta("下滑", True, "7309694074015977993", "32998125", "9c54ccb7b27ab98f7c3bb03a5d4acc4b", 0.550, True)
|
||||
"""默认时长: 0.55s"""
|
||||
中心切开 = TransitionMeta("中心切开", True, "7450031574931739146", "97482739", "bd58325fc11ddc0a5b865da741d48215", 2.000, True)
|
||||
"""默认时长: 2.00s"""
|
||||
二次元烟效 = TransitionMeta("二次元烟效", True, "7436273714729062921", "90037010", "e4a8dcb9c3a3244f38fbafd54df1875d", 1.920, True)
|
||||
"""默认时长: 1.92s"""
|
||||
云朵_II = TransitionMeta("云朵 II", True, "6955760408737092132", "2912470", "5a8914a3658f88265bbeda060a7c79aa", 0.500, True)
|
||||
"""默认时长: 0.50s"""
|
||||
亮点模糊 = TransitionMeta("亮点模糊", True, "7123135366504124936", "3705757", "b48f47c097e83842d1c0f919d9c67af6", 1.000, True)
|
||||
"""默认时长: 1.00s"""
|
||||
便利贴 = TransitionMeta("便利贴", True, "7302023728441856549", "29871972", "a5a04de1e339c4d4907e26ff6b229563", 1.100, True)
|
||||
"""默认时长: 1.10s"""
|
||||
信号故障 = TransitionMeta("信号故障", True, "7288149307197231676", "25265947", "f23f60f3bee4fac6368268a1406ccaf7", 0.500, True)
|
||||
"""默认时长: 0.50s"""
|
||||
信号故障_II = TransitionMeta("信号故障 II", True, "7342791345162949183", "49094731", "b5537d48d5d72d9707bb4641d51ecc73", 0.670, False)
|
||||
"""默认时长: 0.67s"""
|
||||
倾斜拉伸 = TransitionMeta("倾斜拉伸", True, "7383960886131560960", "72481265", "c87e594192131b1b82e1c34cd383f807", 0.800, True)
|
||||
"""默认时长: 0.80s"""
|
||||
倾斜拉开 = TransitionMeta("倾斜拉开", True, "7450031573958660646", "97482745", "5e528175496005ab698956e2ae692828", 2.000, True)
|
||||
"""默认时长: 2.00s"""
|
||||
倾斜模糊 = TransitionMeta("倾斜模糊", True, "7355762441533264394", "56268173", "0b88f86366c21c3ebd2bcc8df140810d", 0.800, True)
|
||||
"""默认时长: 0.80s"""
|
||||
像素冲屏 = TransitionMeta("像素冲屏", True, "6981689835534684702", "1182216", "b7f8e6cd03560d1f52e1270dcf7c9ba4", 0.800, True)
|
||||
"""默认时长: 0.80s"""
|
||||
全息投影 = TransitionMeta("全息投影", True, "7298230450768581129", "28518430", "95a2a049736e0843b5984e0090276f7b", 0.400, True)
|
||||
"""默认时长: 0.40s"""
|
||||
六边形变焦 = TransitionMeta("六边形变焦", True, "7182413216276812346", "7824963", "faf521d87b90c79031bfd08d687df52a", 1.000, True)
|
||||
"""默认时长: 1.00s"""
|
||||
冲屏扭曲 = TransitionMeta("冲屏扭曲", True, "7359133728313971227", "58099421", "2fb5734ab118c745bfa0596264533e54", 0.900, True)
|
||||
"""默认时长: 0.90s"""
|
||||
几何分割 = TransitionMeta("几何分割", True, "7130139199394550303", "3985085", "4f6209fcc7e8746a7c1e43d8a1704827", 0.500, True)
|
||||
"""默认时长: 0.50s"""
|
||||
几何滑动 = TransitionMeta("几何滑动", True, "7437386424036364837", "90546381", "954c56284f79c2d01b291802cc6449e1", 1.000, True)
|
||||
"""默认时长: 1.00s"""
|
||||
分屏下滑 = TransitionMeta("分屏下滑", True, "7337974537683735080", "46873416", "eb4e4368773f40a8c807e77497acab4f", 0.900, True)
|
||||
"""默认时长: 0.90s"""
|
||||
前后对比 = TransitionMeta("前后对比", True, "7205856572994490935", "10139297", "f38bc39938f58a4ee3f9c7bfcf4f524f", 1.200, True)
|
||||
"""默认时长: 1.20s"""
|
||||
剧烈摇晃 = TransitionMeta("剧烈摇晃", True, "7367356130307084838", "63047898", "4ffdc4b55688e65262a229d5e7b987ca", 0.900, True)
|
||||
"""默认时长: 0.90s"""
|
||||
卡片弹出 = TransitionMeta("卡片弹出", True, "7384334283659285032", "72605929", "67660fa9cdb387454a59d3a747cff6ef", 1.000, True)
|
||||
"""默认时长: 1.00s"""
|
||||
发光变焦 = TransitionMeta("发光变焦", True, "7402999668767986191", "79046595", "9faeac55ef029bce5e933ff4022dfe1d", 1.000, True)
|
||||
"""默认时长: 1.00s"""
|
||||
叠化扭曲 = TransitionMeta("叠化扭曲", True, "7439255870896083466", "92006146", "c0d00a409f16dab9ebe8a94802a3a757", 0.500, True)
|
||||
"""默认时长: 0.50s"""
|
||||
可爱爆炸 = TransitionMeta("可爱爆炸", True, "7187674415268631101", "8375167", "75942cf09b7e84526a357898a47c18bb", 0.800, True)
|
||||
"""默认时长: 0.80s"""
|
||||
可爱龙龙 = TransitionMeta("可爱龙龙", True, "7332697146929451546", "44314889", "9a498314d92e4fc192efe64608b40b60", 1.000, True)
|
||||
"""默认时长: 1.00s"""
|
||||
吃掉 = TransitionMeta("吃掉", True, "7372506069328728585", "66629623", "64b8f472cc109cccd9c50e210331af43", 0.900, True)
|
||||
"""默认时长: 0.90s"""
|
||||
后台切换 = TransitionMeta("后台切换", True, "7320129407799005734", "38530921", "c5092413343f5e808ffc27ab8b02e7c4", 0.800, True)
|
||||
"""默认时长: 0.80s"""
|
||||
向上波动 = TransitionMeta("向上波动", True, "7148734739807998495", "4861515", "69a520845b900b142b203cf2e677abd5", 5.000, True)
|
||||
"""默认时长: 5.00s"""
|
||||
向下抖动 = TransitionMeta("向下抖动", True, "7338709911791997480", "47241669", "1a44879e265bc89746e30f59d2ff0245", 1.300, True)
|
||||
"""默认时长: 1.30s"""
|
||||
向下拖拽 = TransitionMeta("向下拖拽", True, "7199528468244075067", "9382531", "f1d490e1e2a87013bee63a8aa4191f9f", 0.800, True)
|
||||
"""默认时长: 0.80s"""
|
||||
向左拉屏 = TransitionMeta("向左拉屏", True, "7089311972235153950", "1722934", "21538bc8fa278603f8e944fc405a65c9", 0.500, True)
|
||||
"""默认时长: 0.50s"""
|
||||
向左波动 = TransitionMeta("向左波动", True, "7126772940451877406", "3971081", "cbffe80a580575becb3beb3bcbd5cc09", 5.000, True)
|
||||
"""默认时长: 5.00s"""
|
||||
喜欢 = TransitionMeta("喜欢", True, "7070430644563612191", "1600478", "945ee55ddc4b7c9762b55c0ee302bdce", 0.500, True)
|
||||
"""默认时长: 0.50s"""
|
||||
四屏转换 = TransitionMeta("四屏转换", True, "7337612480610308649", "46644610", "e7bd3aacd0daeafdf20d93d4a171a846", 1.000, True)
|
||||
"""默认时长: 1.00s"""
|
||||
四格展开 = TransitionMeta("四格展开", True, "7412560964198863394", "81987893", "d204cd232ac137532ff751ff09b5d0a7", 0.500, True)
|
||||
"""默认时长: 0.50s"""
|
||||
回忆 = TransitionMeta("回忆", True, "6748220149284737550", "4211778", "48a73d2ca44a59d8faf88ab0c4bb39f6", 0.500, True)
|
||||
"""默认时长: 0.50s"""
|
||||
回忆_II = TransitionMeta("回忆 II", True, "6748220462746046989", "4211779", "bfb17d87ed3db6332a6e0855299809d9", 0.500, True)
|
||||
"""默认时长: 0.50s"""
|
||||
回忆拉屏 = TransitionMeta("回忆拉屏", True, "7184682990901924410", "8027945", "3bc26bcea93ea43b349c60c28bea394f", 1.000, True)
|
||||
"""默认时长: 1.00s"""
|
||||
回忆拉屏_II = TransitionMeta("回忆拉屏 II", True, "7306440470119322139", "31456359", "2464d4afc9c5f43072935915c6a86c29", 0.700, True)
|
||||
"""默认时长: 0.70s"""
|
||||
图片放大 = TransitionMeta("图片放大", True, "7434055685576348170", "89190525", "4974e799766ed1567d4e5bfafa79e14f", 1.000, True)
|
||||
"""默认时长: 1.00s"""
|
||||
圆形分割 = TransitionMeta("圆形分割", True, "7083435788322476581", "4211684", "2bb3ad90a4eb3a2563b87c300e0ae8a1", 1.500, False)
|
||||
"""默认时长: 1.50s"""
|
||||
圆盘旋转 = TransitionMeta("圆盘旋转", True, "7341334144485429810", "48516414", "835a263f9afbb614cfc5467343968642", 0.700, True)
|
||||
"""默认时长: 0.70s"""
|
||||
圣诞光斑 = TransitionMeta("圣诞光斑", True, "7450334536455426569", "97572058", "431fcb4417f60f17fbc7f1e8ed95c33c", 1.030, True)
|
||||
"""默认时长: 1.03s"""
|
||||
圣诞光斑II = TransitionMeta("圣诞光斑II", True, "7451488401062105610", "98049569", "c98322f188fcf08cfe380380da7d4e3b", 1.030, True)
|
||||
"""默认时长: 1.03s"""
|
||||
圣诞树 = TransitionMeta("圣诞树", True, "7302357935902954035", "29976594", "8c40262df8758d19446264aa5749008a", 0.700, True)
|
||||
"""默认时长: 0.70s"""
|
||||
圣诞礼盒 = TransitionMeta("圣诞礼盒", True, "7447067834628182578", "96154390", "6da15163fec7a5af3ab7a25e44f94da9", 1.500, True)
|
||||
"""默认时长: 1.50s"""
|
||||
复古漏光 = TransitionMeta("复古漏光", True, "7181752495150993957", "8104139", "0af78adb0da721bbe253b096b8152851", 0.800, True)
|
||||
"""默认时长: 0.80s"""
|
||||
复古漏光_II = TransitionMeta("复古漏光 II", True, "7287881053534949943", "25193261", "1789e06f18340fbcbd30e6757f10ba75", 0.600, True)
|
||||
"""默认时长: 0.60s"""
|
||||
复古胶片 = TransitionMeta("复古胶片", True, "7261814111816651322", "19552395", "c5686c7e832a5e8c178c5cadb42d9ab4", 1.000, True)
|
||||
"""默认时长: 1.00s"""
|
||||
多层环形 = TransitionMeta("多层环形", True, "7373523970538082866", "67116644", "cf6da6be1066054f86c4524fa6494d8e", 1.500, True)
|
||||
"""默认时长: 1.50s"""
|
||||
多屏定格 = TransitionMeta("多屏定格", True, "7287860606395224613", "25184085", "c12aeac3828eb06fd5d0f865ee7041d1", 0.800, True)
|
||||
"""默认时长: 0.80s"""
|
||||
大圆盘 = TransitionMeta("大圆盘", True, "7362104359682839055", "59713023", "9d6a02b47846369cec6d19a35826570d", 0.800, True)
|
||||
"""默认时长: 0.80s"""
|
||||
大波浪 = TransitionMeta("大波浪", True, "7426688369653977638", "86769062", "e63143bff5e6394a018f2b802e1d832e", 0.833, True)
|
||||
"""默认时长: 0.83s"""
|
||||
字母拼贴 = TransitionMeta("字母拼贴", True, "7314304549575987749", "35402126", "24be4f664fcf760c00d897362194e276", 1.000, True)
|
||||
"""默认时长: 1.00s"""
|
||||
射灯 = TransitionMeta("射灯", True, "7368775489445433883", "63886272", "23706ad60c2258a524da320eca564d12", 1.600, True)
|
||||
"""默认时长: 1.60s"""
|
||||
小喇叭 = TransitionMeta("小喇叭", True, "7070430823597478407", "1600476", "3707101142d3069789f3d821cdb7bc35", 0.500, True)
|
||||
"""默认时长: 0.50s"""
|
||||
小恶魔 = TransitionMeta("小恶魔", True, "7075598043252265509", "1628344", "c9a87dfafa58fbc0d401fc182fbaf6fc", 1.000, True)
|
||||
"""默认时长: 1.00s"""
|
||||
左移弹动 = TransitionMeta("左移弹动", True, "7312690473108247078", "34525642", "fa3f7df94e7fc6a7dfaee203590aff47", 0.800, True)
|
||||
"""默认时长: 0.80s"""
|
||||
幻影 = TransitionMeta("幻影", True, "7218040359715082809", "11634125", "4a1a61e615eb94e37e2c198dd4602107", 0.800, True)
|
||||
"""默认时长: 0.80s"""
|
||||
幻觉 = TransitionMeta("幻觉", True, "7395044376621093391", "76465118", "cb9796c59a719185df8c9c5d1922b061", 1.000, True)
|
||||
"""默认时长: 1.00s"""
|
||||
开心 = TransitionMeta("开心", True, "7073053544839909919", "1610838", "0d80e7d2b7171236732668e91b849120", 0.500, False)
|
||||
"""默认时长: 0.50s"""
|
||||
弹出 = TransitionMeta("弹出", True, "7394709307842892303", "76381219", "5c7ab5f82d4253e2225b57ba734edd3a", 0.900, True)
|
||||
"""默认时长: 0.90s"""
|
||||
弹动发光 = TransitionMeta("弹动发光", True, "7347897562436735503", "51950360", "31bdfcfe5852df71426d22fc02293698", 0.800, True)
|
||||
"""默认时长: 0.80s"""
|
||||
彩色像素 = TransitionMeta("彩色像素", True, "7096015235953201701", "4212518", "d91c7ef4be8808bddec8a1a119f78da7", 0.500, False)
|
||||
"""默认时长: 0.50s"""
|
||||
彩色滑片 = TransitionMeta("彩色滑片", True, "7437386424036381234", "90546380", "08a7fd3434943bdd3dc0c2f6d9714989", 1.500, True)
|
||||
"""默认时长: 1.50s"""
|
||||
往上翻页 = TransitionMeta("往上翻页", True, "7461951141333439013", "102053853", "ef160e3ca5fdb97a5919130b278bd745", 1.040, True)
|
||||
"""默认时长: 1.04s"""
|
||||
微抖动 = TransitionMeta("微抖动", True, "7368739347845091877", "63860874", "9870ae40f2c8a325debc06d25ef46895", 1.500, True)
|
||||
"""默认时长: 1.50s"""
|
||||
心形叠化 = TransitionMeta("心形叠化", True, "7264829174601224764", "20224653", "24559e84f2cfae6bbfd86d47bb8f60f9", 1.000, True)
|
||||
"""默认时长: 1.00s"""
|
||||
快涂擦除 = TransitionMeta("快涂擦除", True, "7450031573954466331", "97482742", "584bed7ede0c38de9d86fb5e9199ec29", 0.500, True)
|
||||
"""默认时长: 0.50s"""
|
||||
快速缩放 = TransitionMeta("快速缩放", True, "7382154814144123392", "71890617", "bbedbf5ac1b865d1e1395d4d402ce5fa", 1.000, True)
|
||||
"""默认时长: 1.00s"""
|
||||
快速震闪 = TransitionMeta("快速震闪", True, "7403364394404418074", "79172318", "5d1d93e09913898ffd9140351d7a9224", 1.000, True)
|
||||
"""默认时长: 1.00s"""
|
||||
惊悚屏闪 = TransitionMeta("惊悚屏闪", True, "7425528298395931187", "86397088", "7bad249a916e313a5e2f422291e9d4e9", 1.000, True)
|
||||
"""默认时长: 1.00s"""
|
||||
手机屏放大 = TransitionMeta("手机屏放大", True, "7447351620649620005", "96240495", "47f7a2d93348de0cc3363f8bed9e27b8", 2.000, True)
|
||||
"""默认时长: 2.00s"""
|
||||
扫光 = TransitionMeta("扫光", True, "7106765945305043463", "4202535", "333aa7e9d8b24e358ea60784ce47b6fe", 0.500, True)
|
||||
"""默认时长: 0.50s"""
|
||||
扭曲弹动 = TransitionMeta("扭曲弹动", True, "7402970650379293199", "79044291", "014956443b20f5c5e87edf79fe2aa5e3", 1.000, True)
|
||||
"""默认时长: 1.00s"""
|
||||
扭曲旋入 = TransitionMeta("扭曲旋入", True, "7373640088091103763", "67190756", "2f0a8143624bfc061ae9db4cb785029f", 1.000, True)
|
||||
"""默认时长: 1.00s"""
|
||||
扭曲溶解 = TransitionMeta("扭曲溶解", True, "7374259106502152741", "67617874", "756df14869da51538ed41e2bfac3b779", 1.000, True)
|
||||
"""默认时长: 1.00s"""
|
||||
扭转弹动 = TransitionMeta("扭转弹动", True, "7344986966145896994", "50231600", "e5d36f065e3f0e8801c43a625a7d9947", 1.500, True)
|
||||
"""默认时长: 1.50s"""
|
||||
抖动放大 = TransitionMeta("抖动放大", True, "7260415521852494397", "19272888", "e4cafc076ecab223a39a26fe6f05b6db", 0.800, True)
|
||||
"""默认时长: 0.80s"""
|
||||
抖动缩小 = TransitionMeta("抖动缩小", True, "7291972229087105563", "26488746", "6e78a0c97c60562573a30342882a240f", 0.700, True)
|
||||
"""默认时长: 0.70s"""
|
||||
抖动缩小_II = TransitionMeta("抖动缩小 II", True, "7316783851206873651", "36841926", "137d3f03fbd4dddbc6a2a0dd1f371e17", 1.000, True)
|
||||
"""默认时长: 1.00s"""
|
||||
折痕胶带 = TransitionMeta("折痕胶带", True, "7436273714733257225", "90037011", "949b5a139458534e713b4751f89cc366", 1.000, True)
|
||||
"""默认时长: 1.00s"""
|
||||
拉开 = TransitionMeta("拉开", True, "7384323685026370098", "72601002", "828b81127e669508f999900bff18cf2a", 0.600, True)
|
||||
"""默认时长: 0.60s"""
|
||||
拉框入屏 = TransitionMeta("拉框入屏", True, "7297077423487586826", "28115429", "bfc8a51d2b304be3dd36a68331f8d0f8", 1.000, True)
|
||||
"""默认时长: 1.00s"""
|
||||
挤压分屏 = TransitionMeta("挤压分屏", True, "7435897594074632713", "89895302", "ca0072e8c95318ca9babfa5a6d699cac", 0.830, True)
|
||||
"""默认时长: 0.83s"""
|
||||
推近_II = TransitionMeta("推近 II", True, "7290852476259930685", "26135688", "94815943a86e741a5fec1737fbb46d60", 0.900, True)
|
||||
"""默认时长: 0.90s"""
|
||||
推远_II = TransitionMeta("推远 II", True, "7360987817066893862", "59043083", "0a10553e75180add06fd336bf16fa8aa", 1.000, True)
|
||||
"""默认时长: 1.00s"""
|
||||
摄像机 = TransitionMeta("摄像机", True, "7070047850960261668", "1598384", "bb0b9fa428e5a3fde828c03022b5082d", 0.500, True)
|
||||
"""默认时长: 0.50s"""
|
||||
摇晃描边 = TransitionMeta("摇晃描边", True, "7372137986877559335", "66403340", "0a5449cf1ca4c9fb473ff664ea23185b", 1.000, True)
|
||||
"""默认时长: 1.00s"""
|
||||
摇晃震动 = TransitionMeta("摇晃震动", True, "7343618757530489379", "49545855", "c911cc41c158afbd43636d1aa465e1d2", 1.300, True)
|
||||
"""默认时长: 1.30s"""
|
||||
摇镜 = TransitionMeta("摇镜", True, "7305969268259033609", "31254345", "f215c106100f76dcf6c550d0f8217ecb", 0.700, True)
|
||||
"""默认时长: 0.70s"""
|
||||
撕纸 = TransitionMeta("撕纸", True, "6875627914444935694", "2912468", "131ae40c737ab9f5c79e35e3639a4bad", 0.500, True)
|
||||
"""默认时长: 0.50s"""
|
||||
撕纸掉落 = TransitionMeta("撕纸掉落", True, "7218114518314914365", "11661051", "42fa2f7a99a392e2801ad5ec5f62d73a", 1.200, True)
|
||||
"""默认时长: 1.20s"""
|
||||
收缩抖动 = TransitionMeta("收缩抖动", True, "7347676775633130024", "51859926", "88939867fef0a71b39f549558d724d31", 1.000, True)
|
||||
"""默认时长: 1.00s"""
|
||||
放大左移 = TransitionMeta("放大左移", True, "7347582471111709236", "51784590", "a2c4ddc0f96c5694e941d738ed52cdf4", 1.300, True)
|
||||
"""默认时长: 1.30s"""
|
||||
放大镜 = TransitionMeta("放大镜", True, "7313974602156216858", "35244988", "91aee5fc06c85dda958101a677f19c0b", 0.700, True)
|
||||
"""默认时长: 0.70s"""
|
||||
故障扫描 = TransitionMeta("故障扫描", True, "7425528124013548059", "86396968", "87bd40bfa4f188fa096a161d68c35037", 1.000, True)
|
||||
"""默认时长: 1.00s"""
|
||||
故障模糊 = TransitionMeta("故障模糊", True, "7302270954602762789", "29927992", "fc3fae70595c7bb6f943aca08dc7b9f1", 0.700, True)
|
||||
"""默认时长: 0.70s"""
|
||||
斜向模糊 = TransitionMeta("斜向模糊", True, "7125661284762128910", "3796323", "b14d9650ca6eef79d6b19c16c65166d3", 0.800, True)
|
||||
"""默认时长: 0.80s"""
|
||||
斜向闪光 = TransitionMeta("斜向闪光", True, "7384331194978013711", "72603864", "eba796256a96c4ff0d1b331a8819c6f2", 0.700, True)
|
||||
"""默认时长: 0.70s"""
|
||||
斜线翻页 = TransitionMeta("斜线翻页", True, "7339900424956154403", "47905855", "46d525166125a781ce8cf9c6e6370454", 0.700, True)
|
||||
"""默认时长: 0.70s"""
|
||||
新篇章 = TransitionMeta("新篇章", True, "7174756125902901797", "7089439", "74716b2d52b85799f78903818eb3c98f", 0.800, True)
|
||||
"""默认时长: 0.80s"""
|
||||
新篇章_II = TransitionMeta("新篇章 II", True, "7174754977544409657", "7089435", "6c1c52a50f842600c69417cf38adc113", 1.600, True)
|
||||
"""默认时长: 1.60s"""
|
||||
方形分割 = TransitionMeta("方形分割", True, "7127901205820346917", "3895735", "9f29e50ac72b66f4b0320ee1ea9d112f", 0.500, True)
|
||||
"""默认时长: 0.50s"""
|
||||
方形变焦 = TransitionMeta("方形变焦", True, "7398512469884277260", "77388758", "93317b58455482c7f5213b943a7e01ce", 1.000, True)
|
||||
"""默认时长: 1.00s"""
|
||||
方形模糊 = TransitionMeta("方形模糊", True, "7122721406210544164", "3686479", "8e3579bda4787d20d8c8ab1b0c68112d", 1.000, True)
|
||||
"""默认时长: 1.00s"""
|
||||
方形模糊_II = TransitionMeta("方形模糊 II", True, "7384005295770440201", "72501238", "301fe868bf7b1549d6d07af9405beb4a", 1.000, True)
|
||||
"""默认时长: 1.00s"""
|
||||
方片翻转 = TransitionMeta("方片翻转", True, "7451501266246570534", "98063100", "418d4795972e2f70533f05304e796c22", 1.100, True)
|
||||
"""默认时长: 1.10s"""
|
||||
旋焦 = TransitionMeta("旋焦", True, "7215424325036282428", "11286537", "917c209246e975d4f10d9b8c8c78035f", 0.500, True)
|
||||
"""默认时长: 0.50s"""
|
||||
旋转圆球 = TransitionMeta("旋转圆球", True, "7377722094806635048", "69481298", "34211e59f420adb42bc00b9a8d36bb6a", 0.800, True)
|
||||
"""默认时长: 0.80s"""
|
||||
旋转圆盘 = TransitionMeta("旋转圆盘", True, "7261828356386067005", "19556167", "792fd505220632cdca8d727ecafa9866", 1.000, True)
|
||||
"""默认时长: 1.00s"""
|
||||
旋转圆盘_II = TransitionMeta("旋转圆盘 II", True, "7262674749258469949", "19727008", "17d1ac181dd7b623059b8aed82d2ef13", 1.000, True)
|
||||
"""默认时长: 1.00s"""
|
||||
旋转快门 = TransitionMeta("旋转快门", True, "7350577049968316979", "53358879", "f2b536b7d3f17bc58e0e4957f517ece0", 1.000, True)
|
||||
"""默认时长: 1.00s"""
|
||||
旋转拨盘 = TransitionMeta("旋转拨盘", True, "7368844683256009242", "63924504", "88ac2494e5cdec7f874c4157555d2d2b", 1.000, True)
|
||||
"""默认时长: 1.00s"""
|
||||
旋转模糊 = TransitionMeta("旋转模糊", True, "7332480491058106943", "44259414", "1a28e7fbb2a177240786bd945fb9ca7e", 1.200, True)
|
||||
"""默认时长: 1.20s"""
|
||||
旋转穿越 = TransitionMeta("旋转穿越", True, "7343092798993732148", "49228871", "e05493559e59bf7f4c4a9ea5a5d212de", 1.800, True)
|
||||
"""默认时长: 1.80s"""
|
||||
旋转纵深 = TransitionMeta("旋转纵深", True, "7368687055225754153", "63822177", "e717dfe6ccb3c6a6c6a6f70987b1a894", 0.900, True)
|
||||
"""默认时长: 0.90s"""
|
||||
旋转翻页 = TransitionMeta("旋转翻页", True, "7320577375752688165", "38717232", "31a897fbdd402adaf84724fb28ef606b", 0.800, True)
|
||||
"""默认时长: 0.80s"""
|
||||
旋转震动 = TransitionMeta("旋转震动", True, "7326861725213397514", "41492871", "70bea2644a8dc8bc2b24102d8fa90ca4", 0.600, True)
|
||||
"""默认时长: 0.60s"""
|
||||
无缝撕裂 = TransitionMeta("无缝撕裂", True, "7439255870896083506", "92006145", "afcefb6980d7212c51229927c39c89e0", 1.500, True)
|
||||
"""默认时长: 1.50s"""
|
||||
无限穿越_I = TransitionMeta("无限穿越 I", True, "7036984568536109581", "1465694", "3ee3fc9318dc2315d250f0baa1763e5b", 1.600, True)
|
||||
"""默认时长: 1.60s"""
|
||||
无限穿越_II = TransitionMeta("无限穿越 II", True, "7034717113130422791", "1458828", "b87498756c478952cf7c804234f97bbb", 1.600, True)
|
||||
"""默认时长: 1.60s"""
|
||||
日历转场 = TransitionMeta("日历转场", True, "7460472998944838154", "101496138", "ca48c1fe6e5b7cdcc100469f5294820b", 2.000, True)
|
||||
"""默认时长: 2.00s"""
|
||||
时光穿梭 = TransitionMeta("时光穿梭", True, "7306853312400200229", "31645629", "74eab27c1dc1a568b851a2e543682058", 1.100, True)
|
||||
"""默认时长: 1.10s"""
|
||||
星光 = TransitionMeta("星光", True, "7177201869612126777", "7339355", "2215320b9ba4138c53f1f7b9d0c58b54", 1.500, True)
|
||||
"""默认时长: 1.50s"""
|
||||
星光叠化 = TransitionMeta("星光叠化", True, "7321658733497422363", "39173243", "f6d691dd1f991655b2826964c3883772", 0.800, True)
|
||||
"""默认时长: 0.80s"""
|
||||
星光炸开 = TransitionMeta("星光炸开", True, "7306852010320466483", "31644713", "b7523d4d583c515035937de1c191c808", 1.300, True)
|
||||
"""默认时长: 1.30s"""
|
||||
星星_III = TransitionMeta("星星 III", True, "7293358903176204851", "26885516", "1ece838a7bfd2c8b1b0daf25d5776d22", 0.500, True)
|
||||
"""默认时长: 0.50s"""
|
||||
星星变焦 = TransitionMeta("星星变焦", True, "7452559875839627786", "98464024", "7eeeca7c07e67b54519995ebdf71d6fc", 1.000, True)
|
||||
"""默认时长: 1.00s"""
|
||||
星星吸入 = TransitionMeta("星星吸入", True, "7312716430875562506", "34540914", "6ce2a58bc6a3df532a3c1ca890c97394", 1.000, True)
|
||||
"""默认时长: 1.00s"""
|
||||
星星模糊 = TransitionMeta("星星模糊", True, "7206157339253019197", "10169537", "28556f2cabd470e0da1a9ddf16d76198", 0.800, True)
|
||||
"""默认时长: 0.80s"""
|
||||
春日光斑 = TransitionMeta("春日光斑", True, "7330599151685603875", "43351778", "16080e0cc9aa32e4342335d60dd5dfae", 1.000, True)
|
||||
"""默认时长: 1.00s"""
|
||||
暧昧光晕 = TransitionMeta("暧昧光晕", True, "7268613185337299513", "20954940", "ab82749d799477631ae63c081ad569d1", 0.800, True)
|
||||
"""默认时长: 0.80s"""
|
||||
曝光拉丝 = TransitionMeta("曝光拉丝", True, "7308617539452408358", "32432969", "56eaaf319007193c199f17554890abb4", 2.000, True)
|
||||
"""默认时长: 2.00s"""
|
||||
曝光摇镜 = TransitionMeta("曝光摇镜", True, "7283720497513108025", "24147753", "e0ee1d0a29d1138f7a3b673ffbad91d5", 0.700, True)
|
||||
"""默认时长: 0.70s"""
|
||||
未来光谱 = TransitionMeta("未来光谱", True, "7176890183940313658", "7307905", "7974c984bf60d60079cc03be5928f74d", 0.800, True)
|
||||
"""默认时长: 0.80s"""
|
||||
条形模糊 = TransitionMeta("条形模糊", True, "7122387202725646862", "3675841", "0a5742430e336b3a1e1b6ff9983c5d25", 1.000, True)
|
||||
"""默认时长: 1.00s"""
|
||||
模糊放大 = TransitionMeta("模糊放大", True, "7301280654015074842", "29614872", "7c0ef1a54495f7cd9343efe2acc57b26", 1.000, True)
|
||||
"""默认时长: 1.00s"""
|
||||
模糊细闪 = TransitionMeta("模糊细闪", True, "7452559875839627785", "98464023", "486a1593cc532d15663279bd4a127a45", 1.170, True)
|
||||
"""默认时长: 1.17s"""
|
||||
模糊缩小 = TransitionMeta("模糊缩小", True, "7297133348567126566", "28141206", "742e708ac73c3a335a41133684c488ed", 1.200, True)
|
||||
"""默认时长: 1.20s"""
|
||||
横向分屏 = TransitionMeta("横向分屏", True, "7351341191184519699", "53798168", "9b32def73cc4e91d29a92bd640a92e81", 1.000, True)
|
||||
"""默认时长: 1.00s"""
|
||||
横向滑动 = TransitionMeta("横向滑动", True, "7433711910727455242", "89071753", "9023b03b64ddd87133a3ed36e60d14a1", 1.530, True)
|
||||
"""默认时长: 1.53s"""
|
||||
横向震动 = TransitionMeta("横向震动", True, "7403329110597964340", "79166394", "c3c9b35342f9cc1daa938cb512a71baa", 1.000, True)
|
||||
"""默认时长: 1.00s"""
|
||||
横条挤压 = TransitionMeta("横条挤压", True, "7369507828668568116", "64687184", "6bbc30d59ef4fd16e4ba6656129cfd95", 1.200, True)
|
||||
"""默认时长: 1.20s"""
|
||||
横移模糊 = TransitionMeta("横移模糊", True, "7316901787762430491", "36950128", "aa2ce5c9b13a62881d04f9c23aa30678", 0.800, True)
|
||||
"""默认时长: 0.80s"""
|
||||
樱花飞舞 = TransitionMeta("樱花飞舞", True, "7462198817211814426", "102144538", "ecd91f7ebaa7817d7eab538a50147fb4", 2.000, True)
|
||||
"""默认时长: 2.00s"""
|
||||
水墨 = TransitionMeta("水墨", True, "6789847231873683976", "2912466", "d1dd3dd8905f0b96be756bd34be1a84d", 0.500, True)
|
||||
"""默认时长: 0.50s"""
|
||||
水滴 = TransitionMeta("水滴", True, "7218875183413596730", "11765299", "d5fa6a1daecd2c45b0414626a69e7674", 0.500, True)
|
||||
"""默认时长: 0.50s"""
|
||||
水滴_II = TransitionMeta("水滴 II", True, "7231860840452854332", "13482623", "eebf40246476d57ccbf8bbdf15864864", 0.900, True)
|
||||
"""默认时长: 0.90s"""
|
||||
水滴_III = TransitionMeta("水滴 III", True, "7337571999885038130", "46608908", "32eea5171000b838f2eb74941fb751d7", 1.100, True)
|
||||
"""默认时长: 1.10s"""
|
||||
水滴溶解 = TransitionMeta("水滴溶解", True, "7397337004507140646", "77055389", "ea2d35628f0f6cbc703f7632fbc0588e", 1.000, True)
|
||||
"""默认时长: 1.00s"""
|
||||
汇聚 = TransitionMeta("汇聚", True, "7308666709932511753", "32470148", "3bb1668888e7e87764d03b15733370fb", 1.000, True)
|
||||
"""默认时长: 1.00s"""
|
||||
泡泡模糊 = TransitionMeta("泡泡模糊", True, "7159097688955294222", "5663559", "10478b300821fa6eccadf67b07b63208", 1.000, True)
|
||||
"""默认时长: 1.00s"""
|
||||
波光粼粼 = TransitionMeta("波光粼粼", True, "7361758664182469157", "59511491", "da913924bc6975821de103b371d540ff", 1.167, True)
|
||||
"""默认时长: 1.17s"""
|
||||
波动 = TransitionMeta("波动", True, "7169480114860724773", "6500749", "af314da6343d025cc0f5d668d2fa0a7b", 0.500, True)
|
||||
"""默认时长: 0.50s"""
|
||||
波动_II = TransitionMeta("波动 II", True, "7308652550574576138", "32459394", "dd709d2dd83add664f3cbd45893438f7", 0.400, True)
|
||||
"""默认时长: 0.40s"""
|
||||
波动故障 = TransitionMeta("波动故障", True, "7223312837320380983", "12349835", "bd7d819531a9d2b044f823080aa0fc1c", 0.600, True)
|
||||
"""默认时长: 0.60s"""
|
||||
泼墨晕染 = TransitionMeta("泼墨晕染", True, "7424057373741814298", "85924530", "7b36ddff84bae2afa85432cb5fdac1f4", 0.700, True)
|
||||
"""默认时长: 0.70s"""
|
||||
流光 = TransitionMeta("流光", True, "7316789832833831461", "36847370", "686a5ae873f34ac400ee8ad6a8658d68", 1.000, True)
|
||||
"""默认时长: 1.00s"""
|
||||
涂鸦放大 = TransitionMeta("涂鸦放大", True, "7239925851335168569", "14573363", "2a29109cf3c013e6f7770a28cba4154a", 1.500, True)
|
||||
"""默认时长: 1.50s"""
|
||||
溶解推进 = TransitionMeta("溶解推进", True, "7348406367394206271", "52246665", "e6c9fda251c612d8cdf69ddef055e410", 0.806, True)
|
||||
"""默认时长: 0.81s"""
|
||||
滑动压迫感 = TransitionMeta("滑动压迫感", True, "7447351620641231387", "96240496", "dd49d44cfd3e5f5b14e3275876fcc79c", 2.000, True)
|
||||
"""默认时长: 2.00s"""
|
||||
滑动弹出 = TransitionMeta("滑动弹出", True, "7343237606043292200", "49343171", "bb190e71a692bc20d9060b22b4311896", 1.000, True)
|
||||
"""默认时长: 1.00s"""
|
||||
滑动放大 = TransitionMeta("滑动放大", True, "7327132595190239759", "41576555", "a746b6b7c2e83275d90864d0b28173aa", 1.000, True)
|
||||
"""默认时长: 1.00s"""
|
||||
滑块拼贴 = TransitionMeta("滑块拼贴", True, "7239990715307004477", "14594823", "c8552ba32a7e8804013a8a1b977e23c1", 1.500, True)
|
||||
"""默认时长: 1.50s"""
|
||||
滚动立方 = TransitionMeta("滚动立方", True, "7471167302029808138", "105115378", "376cd96ec36e56b7ea5b921f402fa7f3", 0.733, True)
|
||||
"""默认时长: 0.73s"""
|
||||
漩涡扭曲 = TransitionMeta("漩涡扭曲", True, "7308653984888132123", "32460372", "fedeb478c6e4d39282dfe1ad13ee653a", 0.700, True)
|
||||
"""默认时长: 0.70s"""
|
||||
漫画撕纸 = TransitionMeta("漫画撕纸", True, "7429283264424055305", "87580719", "ac08c5a486921431e4bb175cc9b31432", 0.800, True)
|
||||
"""默认时长: 0.80s"""
|
||||
火焰湍流 = TransitionMeta("火焰湍流", True, "7397337005375361562", "77055404", "133e52c43b2639f2a202b3b1394846bf", 1.000, True)
|
||||
"""默认时长: 1.00s"""
|
||||
炫光弹动 = TransitionMeta("炫光弹动", True, "7348337133838406194", "52201950", "113a7490b314d57a7dea4826e056ff99", 1.000, True)
|
||||
"""默认时长: 1.00s"""
|
||||
炫光扫描 = TransitionMeta("炫光扫描", True, "7371717412736995903", "66131585", "4bd676f9001765af20ac02b252da5575", 1.467, True)
|
||||
"""默认时长: 1.47s"""
|
||||
炫光扭动 = TransitionMeta("炫光扭动", True, "7435897594703778330", "89895303", "a1fef85b1aaae8625494711a77ac1903", 0.700, True)
|
||||
"""默认时长: 0.70s"""
|
||||
炸弹 = TransitionMeta("炸弹", True, "7076321483282190878", "1632990", "e0a1a6b556395c054ce97d73b6d1ef25", 0.500, True)
|
||||
"""默认时长: 0.50s"""
|
||||
烟花光斑 = TransitionMeta("烟花光斑", True, "7449596462670811686", "97260760", "e7db0e4df4fad1aeb19413ebdb8e940d", 2.000, True)
|
||||
"""默认时长: 2.00s"""
|
||||
烟雾弹 = TransitionMeta("烟雾弹", True, "7366189026677625359", "62284094", "58dced44162cefabdc709058b7583d65", 1.400, True)
|
||||
"""默认时长: 1.40s"""
|
||||
热成像 = TransitionMeta("热成像", True, "7435897594074632742", "89895304", "ed973037edcf37c1c8272776af27ef7b", 1.000, True)
|
||||
"""默认时长: 1.00s"""
|
||||
燃烧 = TransitionMeta("燃烧", True, "7089309494550729253", "1722848", "0f42e514001c30186e1c9c68e1ebfee9", 0.500, True)
|
||||
"""默认时长: 0.50s"""
|
||||
燃烧_II = TransitionMeta("燃烧 II", True, "7089307363806548510", "1722824", "164c1073bde892dcd9f21d8026fb3cbd", 0.500, True)
|
||||
"""默认时长: 0.50s"""
|
||||
燃烧_III = TransitionMeta("燃烧 III", True, "7088523814102897188", "1714536", "da10f2f4ae0aa70ad4d61b2c750aef6b", 0.500, True)
|
||||
"""默认时长: 0.50s"""
|
||||
爆米花 = TransitionMeta("爆米花", True, "7075173004560306724", "1623902", "3b70ab38b467c15d463b018b05a420e2", 0.500, True)
|
||||
"""默认时长: 0.50s"""
|
||||
爆闪 = TransitionMeta("爆闪", True, "7255132261584998969", "18010162", "c533ae1fe681ec0903b6d631fec5caf6", 1.000, True)
|
||||
"""默认时长: 1.00s"""
|
||||
爆闪_II = TransitionMeta("爆闪 II", True, "7259635767096382011", "19102212", "96e672a98b09ef157224e8b1399ae316", 0.600, True)
|
||||
"""默认时长: 0.60s"""
|
||||
爱心冲击 = TransitionMeta("爱心冲击", True, "7405941767867994624", "80045036", "b9cc7fee0ef181378b070ddd3b96c08f", 1.500, True)
|
||||
"""默认时长: 1.50s"""
|
||||
爱心模糊 = TransitionMeta("爱心模糊", True, "7226945634312393274", "12851969", "3dfdf5cbfe44b5271b9e41acb15ddc37", 0.600, True)
|
||||
"""默认时长: 0.60s"""
|
||||
爱心气球 = TransitionMeta("爱心气球", True, "7267895649599754808", "20810100", "6b969705ffc616c0ad03c1e0fc039bd7", 1.000, True)
|
||||
"""默认时长: 1.00s"""
|
||||
爱心软糖 = TransitionMeta("爱心软糖", True, "7330845783006122515", "43363938", "ef23b64fbbf32418248446c9f4703589", 1.500, True)
|
||||
"""默认时长: 1.50s"""
|
||||
爱心遮罩 = TransitionMeta("爱心遮罩", True, "7468589287299093029", "104143934", "c4e6d4a6c68554cc17b620d2ffa8c41e", 2.000, True)
|
||||
"""默认时长: 2.00s"""
|
||||
环回推近 = TransitionMeta("环回推近", True, "7449266731089924658", "97152408", "3ad22aeec6b193f1d3718330bafdb4ac", 1.533, True)
|
||||
"""默认时长: 1.53s"""
|
||||
环形色散 = TransitionMeta("环形色散", True, "7384745397022888488", "72761824", "608a4f0f4729821ff115f72bfb57a909", 0.900, True)
|
||||
"""默认时长: 0.90s"""
|
||||
玻璃破碎 = TransitionMeta("玻璃破碎", True, "7242225450628420133", "14930013", "55aa86f7d52f2e3471574b51aedfffe8", 1.000, True)
|
||||
"""默认时长: 1.00s"""
|
||||
玻璃破碎_II = TransitionMeta("玻璃破碎 II", True, "7249622034878042661", "16373363", "f77fe839adb1ca6cddc086834a514b79", 1.000, True)
|
||||
"""默认时长: 1.00s"""
|
||||
珠光模糊 = TransitionMeta("珠光模糊", True, "7181370814594290234", "7738323", "75984d0cab40abfd59ec5d7ede711496", 1.000, True)
|
||||
"""默认时长: 1.00s"""
|
||||
生气 = TransitionMeta("生气", True, "7070430937900651016", "1600475", "be7a4f8a24aafb10db343e51e72fead2", 0.500, False)
|
||||
"""默认时长: 0.50s"""
|
||||
电光_II = TransitionMeta("电光 II", True, "7292990637350064690", "26773684", "e8a9edb89dae57afad5dfd6b707a6b57", 1.300, True)
|
||||
"""默认时长: 1.30s"""
|
||||
电流 = TransitionMeta("电流", True, "7402545346741539365", "78884363", "435f3111d5b73043c9da4fb52bc1c5aa", 1.167, True)
|
||||
"""默认时长: 1.17s"""
|
||||
畸变回弹 = TransitionMeta("畸变回弹", True, "7434746460186350130", "89406897", "3b87acb614610bef693ceeb28833378b", 2.000, True)
|
||||
"""默认时长: 2.00s"""
|
||||
百叶窗_II = TransitionMeta("百叶窗 II", True, "7389190159989740072", "74345085", "0786c1d4057bf47fbdb5f6bfeab8a0f3", 0.800, True)
|
||||
"""默认时长: 0.80s"""
|
||||
相机缩小 = TransitionMeta("相机缩小", True, "7462628239286997531", "102354878", "5a4bcb0da1b9aa3a412230ecf4009cf2", 2.000, True)
|
||||
"""默认时长: 2.00s"""
|
||||
相片切换 = TransitionMeta("相片切换", True, "7324946677305971226", "40583461", "0bcab7309cd00dc17a95071b62282d0a", 0.700, True)
|
||||
"""默认时长: 0.70s"""
|
||||
礼物落下 = TransitionMeta("礼物落下", True, "7462627865197023782", "102354705", "bc569b8205db8dad3eb195df697dfda8", 2.000, True)
|
||||
"""默认时长: 2.00s"""
|
||||
空间上移 = TransitionMeta("空间上移", True, "7405560276180800009", "79942985", "7043746b8dd5592ffa7e5e8baec3e504", 0.500, True)
|
||||
"""默认时长: 0.50s"""
|
||||
空间弹动 = TransitionMeta("空间弹动", True, "7265321906830578235", "20330329", "e86c774726c177ee17fd90f63750cf78", 1.000, False)
|
||||
"""默认时长: 1.00s"""
|
||||
空间弹动_II = TransitionMeta("空间弹动 II", True, "7269664953584325179", "21121644", "adf0c9abb5c1399909318bb603f28ad1", 1.000, False)
|
||||
"""默认时长: 1.00s"""
|
||||
空间弹动_III = TransitionMeta("空间弹动 III", True, "7265322078276948535", "20330339", "d8c4ad960be7cfbe8093fa26076ce000", 1.000, False)
|
||||
"""默认时长: 1.00s"""
|
||||
空间弹动_IV = TransitionMeta("空间弹动 IV", True, "7270393974517404215", "21261060", "fb42b8f0a30fe4a0c81c292460aabdbd", 1.000, False)
|
||||
"""默认时长: 1.00s"""
|
||||
空间旋转 = TransitionMeta("空间旋转", True, "7127563142359421471", "3878325", "07c37c8bcf40b83415aa6f223de2cd8a", 1.000, True)
|
||||
"""默认时长: 1.00s"""
|
||||
空间旋转_II = TransitionMeta("空间旋转 II", True, "7137983390896099871", "4360464", "43927ed137278ab2c3cf8a4933cb4169", 1.000, True)
|
||||
"""默认时长: 1.00s"""
|
||||
空间旋转_III = TransitionMeta("空间旋转 III", True, "7138602593751667207", "4382158", "7baa76e42959ee273c278389d359fc59", 1.000, True)
|
||||
"""默认时长: 1.00s"""
|
||||
空间翻转 = TransitionMeta("空间翻转", True, "7218870491400901157", "11764147", "0ea4c7c316341196f21440967330f063", 1.200, True)
|
||||
"""默认时长: 1.20s"""
|
||||
空间翻转_II = TransitionMeta("空间翻转 II", True, "7223591053973000761", "12371701", "ee9309f01cc53522243198c4ba69ab96", 1.200, True)
|
||||
"""默认时长: 1.20s"""
|
||||
空间跳跃 = TransitionMeta("空间跳跃", True, "7309399317662405146", "32858947", "82c5ef6e77c7178c7ca45d8549b87578", 0.633, True)
|
||||
"""默认时长: 0.63s"""
|
||||
穿越 = TransitionMeta("穿越", True, "7152422191944962567", "5083535", "80fb974789637e8175557c7c3e649c0e", 1.000, True)
|
||||
"""默认时长: 1.00s"""
|
||||
穿越_II = TransitionMeta("穿越 II", True, "7152354215132664357", "5076093", "aa3181f829fe16f72540cc0ec7dfb171", 1.000, True)
|
||||
"""默认时长: 1.00s"""
|
||||
穿越_III = TransitionMeta("穿越 III", True, "7341295618863665690", "48498880", "6d6fa95fe1414d4b4a45db9ddec0ee9b", 0.800, True)
|
||||
"""默认时长: 0.80s"""
|
||||
立体旋转 = TransitionMeta("立体旋转", True, "7397337004511334962", "77055394", "dc1ea47698728162001d4f8ee1f22a80", 1.000, True)
|
||||
"""默认时长: 1.00s"""
|
||||
立体翻转 = TransitionMeta("立体翻转", True, "7353088031705797159", "54820217", "3746e458c37ab10f2aaa1ac83dee99f6", 0.800, True)
|
||||
"""默认时长: 0.80s"""
|
||||
立体翻页 = TransitionMeta("立体翻页", True, "7156512800867619335", "5379189", "ac010354774404d6b8e092120ab76772", 0.800, True)
|
||||
"""默认时长: 0.80s"""
|
||||
立体翻页_II = TransitionMeta("立体翻页 II", True, "7156527319274754568", "5381749", "a033fe7038252ba812a4377ff3326acf", 0.800, True)
|
||||
"""默认时长: 0.80s"""
|
||||
立方旋转 = TransitionMeta("立方旋转", True, "7400668689411871251", "78218811", "31c50d0386413970443a6b592b201fd5", 1.000, True)
|
||||
"""默认时长: 1.00s"""
|
||||
竖向拉伸 = TransitionMeta("竖向拉伸", True, "7384005384349946418", "72501228", "ac2563343aceb1b399c6b97b2b21f567", 1.000, True)
|
||||
"""默认时长: 1.00s"""
|
||||
竖移模糊 = TransitionMeta("竖移模糊", True, "7270505237935297085", "21300860", "4f77c735f448ec5f6df27f21d88e4ee6", 0.600, True)
|
||||
"""默认时长: 0.60s"""
|
||||
笔迹涂抹 = TransitionMeta("笔迹涂抹", True, "7435897594078843419", "89895305", "0de59ee84b2fc1195497ade8dea6d5ed", 2.000, True)
|
||||
"""默认时长: 2.00s"""
|
||||
粉色反转片 = TransitionMeta("粉色反转片", True, "7200360240393491000", "9504701", "80529c6e270d25d9fa6e4babb45346c7", 0.800, True)
|
||||
"""默认时长: 0.80s"""
|
||||
红包雨 = TransitionMeta("红包雨", True, "7321942209752732186", "39261991", "3a4c80e1aebeea0ebf65d4d4fee96481", 1.500, True)
|
||||
"""默认时长: 1.50s"""
|
||||
纵向滑动 = TransitionMeta("纵向滑动", True, "7433711910727455259", "89071754", "9359f18a23d5ebfafc54489696912f2b", 1.330, True)
|
||||
"""默认时长: 1.33s"""
|
||||
纸团 = TransitionMeta("纸团", True, "7238905266912105019", "14451527", "283ecb29f26d13d371658f0b8b476776", 0.700, True)
|
||||
"""默认时长: 0.70s"""
|
||||
翻书转场 = TransitionMeta("翻书转场", True, "7440002160588231194", "92891048", "5fa1b17f1b45a942f90b13486fef2211", 1.600, True)
|
||||
"""默认时长: 1.60s"""
|
||||
翻转冲屏 = TransitionMeta("翻转冲屏", True, "7275914638267519525", "22253379", "c1ebaab317335c387d342a3d0b42a65b", 1.200, True)
|
||||
"""默认时长: 1.20s"""
|
||||
翻页_II = TransitionMeta("翻页 II", True, "7221478593803588152", "12108759", "7720214c69eaa3203c3edda2027b28d4", 0.900, True)
|
||||
"""默认时长: 0.90s"""
|
||||
聚光灯 = TransitionMeta("聚光灯", True, "7325700559556579878", "40923539", "43853a772e195442e07760b04fb236dd", 1.100, True)
|
||||
"""默认时长: 1.10s"""
|
||||
胶卷滑动 = TransitionMeta("胶卷滑动", True, "7437386424032170547", "90546382", "ebbf5882c3c8bcaec96da67a69dbb9b4", 2.000, True)
|
||||
"""默认时长: 2.00s"""
|
||||
胶片切闪 = TransitionMeta("胶片切闪", True, "7468603557348905510", "104151439", "a4efe5e3a9fd8ce07b1760f5e998acc4", 1.330, True)
|
||||
"""默认时长: 1.33s"""
|
||||
胶片擦除 = TransitionMeta("胶片擦除", True, "7308265370480022026", "32274061", "4bbb3dcb507832529d7a18020c8fc88d", 0.800, True)
|
||||
"""默认时长: 0.80s"""
|
||||
胶片融化 = TransitionMeta("胶片融化", True, "7346474643827462667", "51067351", "563d0dfa49528bb59646384d8a18552a", 0.700, True)
|
||||
"""默认时长: 0.70s"""
|
||||
胶片闪光 = TransitionMeta("胶片闪光", True, "7356486482271408666", "56656394", "d3eb0fe7d4088694cc0f9ca02cad07b2", 1.000, True)
|
||||
"""默认时长: 1.00s"""
|
||||
色块故障 = TransitionMeta("色块故障", True, "7104539089629614606", "2483334", "1f60c6b995a4cf2212dfd9038f738706", 3.000, False)
|
||||
"""默认时长: 3.00s"""
|
||||
色差故障 = TransitionMeta("色差故障", True, "6724239785205961228", "2918075", "9de90519d59e432b81c38423aa0393d7", 1.000, False)
|
||||
"""默认时长: 1.00s"""
|
||||
色彩溶解_IV = TransitionMeta("色彩溶解 IV", True, "7171714374912971271", "6736571", "a113cd4e04b969f3d988d76899885d42", 0.800, True)
|
||||
"""默认时长: 0.80s"""
|
||||
色彩溶解_V = TransitionMeta("色彩溶解 V", True, "7171714652248740365", "6736575", "da37129b95501377039f01acfded91fc", 0.800, True)
|
||||
"""默认时长: 0.80s"""
|
||||
色彩负片 = TransitionMeta("色彩负片", True, "7438535170317095451", "91077958", "c33d27f49534075f9076aa97ad06351f", 2.000, True)
|
||||
"""默认时长: 2.00s"""
|
||||
色散晃镜 = TransitionMeta("色散晃镜", True, "7340477409478578738", "48127374", "554ea6d10cd7fbb24ccd24bd91d8c7e1", 0.600, True)
|
||||
"""默认时长: 0.60s"""
|
||||
色散波纹 = TransitionMeta("色散波纹", True, "7385028833356812840", "72834771", "b56e5f23bd777160a81809df42933b8f", 1.000, True)
|
||||
"""默认时长: 1.00s"""
|
||||
色散漩涡 = TransitionMeta("色散漩涡", True, "7402904919188967963", "79026278", "15a84ee616e08311c77dffe269288c63", 0.800, True)
|
||||
"""默认时长: 0.80s"""
|
||||
色散闪烁 = TransitionMeta("色散闪烁", True, "7234416277974946365", "13830295", "2d9f72076aeefe8f52dfd1a012cd5127", 0.800, True)
|
||||
"""默认时长: 0.80s"""
|
||||
色散闪烁_II = TransitionMeta("色散闪烁 II", True, "7281584246882308665", "23586159", "5f501bb3da1bcbd2ffadca8b916eba81", 0.700, True)
|
||||
"""默认时长: 0.70s"""
|
||||
草图转场 = TransitionMeta("草图转场", True, "7439255870891889162", "92006144", "fba0166dc7c61408454dc5e60071dda7", 1.000, True)
|
||||
"""默认时长: 1.00s"""
|
||||
荧光爆闪 = TransitionMeta("荧光爆闪", True, "7342499359503684150", "48938221", "a2d70591b5f8dcc52298426ca626c931", 0.800, True)
|
||||
"""默认时长: 0.80s"""
|
||||
菱格翻转 = TransitionMeta("菱格翻转", True, "6983867136510792206", "1187052", "99c0d1524575c7f7020cd77d36a6b008", 1.450, True)
|
||||
"""默认时长: 1.45s"""
|
||||
蓝光扫描 = TransitionMeta("蓝光扫描", True, "7275176500381356599", "22119723", "95462badbbb87bd7dc4e1d7b04e58306", 1.000, True)
|
||||
"""默认时长: 1.00s"""
|
||||
蓝色反转片 = TransitionMeta("蓝色反转片", True, "7200358812316865085", "9504705", "41e718fd6dbac560c6c7a23afc66e50b", 0.800, True)
|
||||
"""默认时长: 0.80s"""
|
||||
虹光旋入 = TransitionMeta("虹光旋入", True, "7401039727761035815", "78355265", "59aaa373c4205aadd62cae40f80df9b5", 1.000, True)
|
||||
"""默认时长: 1.00s"""
|
||||
融化 = TransitionMeta("融化", True, "7198096122970116663", "9261283", "a0db335169668ca09f5244aa487730c0", 1.000, True)
|
||||
"""默认时长: 1.00s"""
|
||||
融化_II = TransitionMeta("融化 II", True, "7200339965442527803", "9503051", "74a83d45bdccf5d27bd4b55ddd2733f3", 1.000, True)
|
||||
"""默认时长: 1.00s"""
|
||||
课本转场 = TransitionMeta("课本转场", True, "7440040705499599411", "92924027", "98a03de05f89c064dc28e31ddf3690ad", 1.600, True)
|
||||
"""默认时长: 1.60s"""
|
||||
负片下滑 = TransitionMeta("负片下滑", True, "7302412902181376539", "29999964", "e2db0036d057c27aea3460f3442aedf9", 0.600, True)
|
||||
"""默认时长: 0.60s"""
|
||||
赛博马赛克 = TransitionMeta("赛博马赛克", True, "7450031573962854963", "97482741", "b6858b185f28ea0995283665badf7a5a", 2.000, True)
|
||||
"""默认时长: 2.00s"""
|
||||
超赞 = TransitionMeta("超赞", True, "7070430749547041293", "1600477", "e0bd13b237d73eb121473c442c752a23", 0.500, True)
|
||||
"""默认时长: 0.50s"""
|
||||
边框切换 = TransitionMeta("边框切换", True, "7434412782285509157", "89307364", "0c5440042359e1d8affab2b2631c23f8", 2.000, True)
|
||||
"""默认时长: 2.00s"""
|
||||
运镜压缩 = TransitionMeta("运镜压缩", True, "7447351621266182665", "96240499", "43f8c66c156a4bc8cf48809a908c8f14", 2.000, True)
|
||||
"""默认时长: 2.00s"""
|
||||
迷幻波纹 = TransitionMeta("迷幻波纹", True, "7441523705835950619", "93683056", "45b2ac1b9cea1a001a43e673151d1e34", 1.000, True)
|
||||
"""默认时长: 1.00s"""
|
||||
迷幻频闪 = TransitionMeta("迷幻频闪", True, "7436273714733257242", "90037012", "74e7013b196e25699e436052c3a3a39f", 1.000, True)
|
||||
"""默认时长: 1.00s"""
|
||||
透镜故障 = TransitionMeta("透镜故障", True, "7097849004062413343", "1889546", "bc652327bcde0e6bf9db8a89d371dd05", 0.500, True)
|
||||
"""默认时长: 0.50s"""
|
||||
重叠上滑 = TransitionMeta("重叠上滑", True, "7232587870672785980", "13582109", "aea42365eeb8cd0df3e4e422cde45e8a", 1.200, True)
|
||||
"""默认时长: 1.20s"""
|
||||
金币祝福 = TransitionMeta("金币祝福", True, "7326856503963423282", "41488441", "64d858d0716bb9fc9f5b4497afab8206", 1.500, True)
|
||||
"""默认时长: 1.50s"""
|
||||
金沙 = TransitionMeta("金沙", True, "7439681605804757541", "92634974", "21a5ca5fc6862b1baa4813f2c0ff294d", 1.740, True)
|
||||
"""默认时长: 1.74s"""
|
||||
金色光斑 = TransitionMeta("金色光斑", True, "7317211103652483621", "37131315", "f9224f91ef353fefa3bae96af26a447e", 0.800, True)
|
||||
"""默认时长: 0.80s"""
|
||||
钱兔无量 = TransitionMeta("钱兔无量", True, "7189608212193088060", "8605167", "a6c068f7790c563231b8df2b5796d60c", 1.500, True)
|
||||
"""默认时长: 1.50s"""
|
||||
镜头速移 = TransitionMeta("镜头速移", True, "7418201851507511849", "83974069", "30be83d2e7ed1f2f1fe74b9cfe51c206", 0.567, True)
|
||||
"""默认时长: 0.57s"""
|
||||
长曝光 = TransitionMeta("长曝光", True, "7306435255286633010", "31452163", "c239e26c5f99cf83cabd28f63d04b93f", 1.000, True)
|
||||
"""默认时长: 1.00s"""
|
||||
闪光灯_II = TransitionMeta("闪光灯 II", True, "7244074212158083641", "15250161", "1fcc7fccf7829d94f2747938fcb84706", 1.900, True)
|
||||
"""默认时长: 1.90s"""
|
||||
闪光灯_III = TransitionMeta("闪光灯 III", True, "7246234663755190839", "15638113", "5af30d0f877301d5235b925ccbda0703", 0.800, True)
|
||||
"""默认时长: 0.80s"""
|
||||
闪回 = TransitionMeta("闪回", True, "7250427149318885945", "16638473", "0a22de17ce5c2fd97f2bd77aa115de77", 0.200, True)
|
||||
"""默认时长: 0.20s"""
|
||||
闪屏故障 = TransitionMeta("闪屏故障", True, "7348352782744687130", "52211013", "a76337e1d1e2301f5d13fd7c90c41282", 1.000, True)
|
||||
"""默认时长: 1.00s"""
|
||||
闪黑_II = TransitionMeta("闪黑 II", True, "7264932863613604412", "20257185", "1ecd9bf4057919c5aa78002f97e715de", 0.600, True)
|
||||
"""默认时长: 0.60s"""
|
||||
闹钟 = TransitionMeta("闹钟", True, "7074854214479909390", "1621980", "eabbd46c7d68fe93406dd55d4178a574", 0.500, False)
|
||||
"""默认时长: 0.50s"""
|
||||
雨刷转场 = TransitionMeta("雨刷转场", True, "7447351621249405477", "96240497", "2fc9fdbde5b730255e5ffd39c610d735", 2.000, True)
|
||||
"""默认时长: 2.00s"""
|
||||
雪花叠化 = TransitionMeta("雪花叠化", True, "7447044441472242185", "96135908", "e30717b01c4d6ace8c1071a5b7537c0d", 3.000, True)
|
||||
"""默认时长: 3.00s"""
|
||||
雪花四散 = TransitionMeta("雪花四散", True, "7445177785405936165", "95320371", "3982224ea3c1b93e9d6aab2f3039dc78", 2.000, True)
|
||||
"""默认时长: 2.00s"""
|
||||
雪花环绕 = TransitionMeta("雪花环绕", True, "7445177785397547547", "95320370", "b6b74d907b71741dab39e489ce7ec387", 2.000, True)
|
||||
"""默认时长: 2.00s"""
|
||||
雪雾 = TransitionMeta("雪雾", True, "7309372378096603699", "32838061", "776c40711e9f0f6f32570bc12ea50f91", 1.700, True)
|
||||
"""默认时长: 1.70s"""
|
||||
震动_II = TransitionMeta("震动 II", True, "7195815265337086520", "9041507", "f5685f90de96d6541417f0331f84de8a", 1.000, True)
|
||||
"""默认时长: 1.00s"""
|
||||
震动缩小 = TransitionMeta("震动缩小", True, "7339865466506056207", "47887388", "3cb961ebfd78ef43742e78bca2d04d06", 1.100, True)
|
||||
"""默认时长: 1.10s"""
|
||||
霓虹闪光 = TransitionMeta("霓虹闪光", True, "7337938801882305074", "46839548", "60cee393e1ddf8c117ca6856e474d47d", 0.600, True)
|
||||
"""默认时长: 0.60s"""
|
||||
霓虹闪光_II = TransitionMeta("霓虹闪光 II", True, "7337946710041170470", "46846588", "b87a9bf7d6c8e93cc9873ccb47ffc4d0", 0.500, True)
|
||||
"""默认时长: 0.50s"""
|
||||
顺时针三角 = TransitionMeta("顺时针三角", True, "7450031573962854939", "97482743", "d02963275288ab14e24791ad2c0edd78", 1.500, True)
|
||||
"""默认时长: 1.50s"""
|
||||
飘雪 = TransitionMeta("飘雪", True, "7169510140138230285", "6506905", "b373d6de281f9cc9cec4b52b0f498517", 2.000, True)
|
||||
"""默认时长: 2.00s"""
|
||||
飘雪_II = TransitionMeta("飘雪 II", True, "7170983464416580133", "6658449", "f6e6d83024f30ae2ecf739e15e98813a", 2.000, True)
|
||||
"""默认时长: 2.00s"""
|
||||
马赛克_II = TransitionMeta("马赛克 II", True, "7322278354579624486", "39369063", "c2c4fdb0da65e27a073eaba6fcf8dd2a", 0.800, True)
|
||||
"""默认时长: 0.80s"""
|
||||
马赛克III = TransitionMeta("马赛克III", True, "7397337004502946314", "77055400", "38bcfd99a2076493d72e2544eeb95811", 1.000, True)
|
||||
"""默认时长: 1.00s"""
|
||||
鱼眼 = TransitionMeta("鱼眼", True, "7158359902950265352", "5508285", "0319d3f53fd0e79e7e7165f27d7eb9bb", 0.800, True)
|
||||
"""默认时长: 0.80s"""
|
||||
鱼眼_II = TransitionMeta("鱼眼 II", True, "7152723523721499167", "5096381", "6705e7c01ad8518db1428a34b1357d8f", 0.800, True)
|
||||
"""默认时长: 0.80s"""
|
||||
鱼眼_III = TransitionMeta("鱼眼 III", True, "7270399429297836605", "21261750", "cdaf9cd4712f5f8061110dfed13738fd", 1.333, True)
|
||||
"""默认时长: 1.33s"""
|
||||
鱼眼波纹 = TransitionMeta("鱼眼波纹", True, "7433711910731649563", "89071756", "f6d9afd9764c5fc849db3ca346d81997", 0.600, True)
|
||||
"""默认时长: 0.60s"""
|
||||
鸿运四叶草 = TransitionMeta("鸿运四叶草", True, "7460402504589644326", "101453156", "107619867b318820747866cf632d2dee", 2.000, True)
|
||||
"""默认时长: 2.00s"""
|
||||
黑板擦除 = TransitionMeta("黑板擦除", True, "7433711910723260979", "89071755", "783cfcdc22f1067cd50142b6731f0b92", 2.000, True)
|
||||
"""默认时长: 2.00s"""
|
||||
黑白摇镜 = TransitionMeta("黑白摇镜", True, "7306819191724577331", "31620427", "cc6bea0aa49c6824aa42d0448d6d0080", 0.700, True)
|
||||
"""默认时长: 0.70s"""
|
||||
黑色反转片 = TransitionMeta("黑色反转片", True, "7202075814085530149", "9683173", "8e31bcdedda0fe123ad1a71a967ecaa1", 0.800, True)
|
||||
"""默认时长: 0.80s"""
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,133 @@
|
||||
"""视频组合动画元数据"""
|
||||
|
||||
from .effect_meta import EffectEnum, AnimationMeta
|
||||
|
||||
class GroupAnimationType(EffectEnum):
|
||||
"""视频组合动画类型"""
|
||||
|
||||
# 免费特效
|
||||
三分割 = AnimationMeta("三分割", False, 0.500, "6873360856541827591", "922958", "558aba214155c31df287c64d9dc2b8e2")
|
||||
三分割_II = AnimationMeta("三分割 II", False, 0.500, "6873360923646497293", "922957", "d7baaf62e894ef166fe291bb84332165")
|
||||
上下分割 = AnimationMeta("上下分割", False, 0.500, "6875935836177699335", "931224", "496fa5c31da1899de0cb0165138cd73f")
|
||||
上下分割_II = AnimationMeta("上下分割 II", False, 0.500, "6875935919661126157", "3144548", "a6be02d01e9aa7277d023f063553543a")
|
||||
上升旋转 = AnimationMeta("上升旋转", False, 0.500, "6813965595915063815", "691841", "0cf52f154d94db3611b8dac8001fde2c")
|
||||
下降向右 = AnimationMeta("下降向右", False, 0.500, "6781683518222111239", "503140", "b5d536ab5791ef12d262982817b6ea0d")
|
||||
下降向左 = AnimationMeta("下降向左", False, 0.500, "6759351225772151303", "446392", "a1e5635da8aaa68df0eee59e202789dd")
|
||||
中间分割 = AnimationMeta("中间分割", False, 0.500, "6856970350270353928", "871868", "b2913d6efb446bda8d753430b8a13a82")
|
||||
中间分割_II = AnimationMeta("中间分割 II", False, 0.500, "6856970411352003080", "871867", "3f62adfd71f2d308f59d4c3651fe5659")
|
||||
叠叠乐 = AnimationMeta("叠叠乐", False, 0.500, "6836319728038842894", "872824", "63c0c0634a0c5f99ec74f839421018b0")
|
||||
叠叠乐_II = AnimationMeta("叠叠乐 II", False, 0.500, "6836319649844433415", "872826", "464c1a4bb1176029ffa3f1b6b7ae25be")
|
||||
叠叠乐_III = AnimationMeta("叠叠乐 III", False, 0.500, "6836319781004513805", "872828", "8c55f6c4f5abf7d41e55a77fc8f5fdad")
|
||||
叠叠乐_IV = AnimationMeta("叠叠乐 IV", False, 0.500, "6836319828656001550", "872830", "1b59e3f39c921c7b45f2cfa2daa6c71d")
|
||||
叠叠乐_V = AnimationMeta("叠叠乐 V", False, 0.500, "6836319888827486728", "872834", "9d5c1a042586999b720b9c4582f15256")
|
||||
叠叠乐_Ⅵ = AnimationMeta("叠叠乐 Ⅵ", False, 0.500, "6839582631345000967", "872836", "1c05ec01a8c9e8fc640a7b095ccf361d")
|
||||
右拉镜 = AnimationMeta("右拉镜", False, 0.500, "6772415374165021191", "471347", "1034060f611109671482d36f4d31fb17")
|
||||
向右下降 = AnimationMeta("向右下降", False, 0.500, "6781683438396117517", "503138", "3076ad170eb3bfc352c857e588defb4c")
|
||||
向右缩小 = AnimationMeta("向右缩小", False, 0.500, "6772415063216099848", "471341", "f5995769a9513563c0417cfe9b916183")
|
||||
向左下降 = AnimationMeta("向左下降", False, 0.500, "6760223716392571395", "447588", "9ba3825d7883b956d5e73f43f59db545")
|
||||
向左缩小 = AnimationMeta("向左缩小", False, 0.500, "6772415148423385607", "471343", "5c2a1617a5aa2f274bc12be4a41eed88")
|
||||
哈哈镜 = AnimationMeta("哈哈镜", False, 0.500, "6832226792556728846", "748348", "d6586e3b2806e4f4930ac34624c2967c")
|
||||
哈哈镜_II = AnimationMeta("哈哈镜 II", False, 0.500, "6832226909875606029", "748350", "8eae60bc0b8c8d210f9f4b059c24ab64")
|
||||
四格滑动 = AnimationMeta("四格滑动", False, 0.500, "6883727868451361293", "945730", "1e8fc914a15209bc51eb0505f2e67816")
|
||||
四格翻转 = AnimationMeta("四格翻转", False, 0.500, "6865578846393995784", "1362932", "88c1ed96cfa3f182a341c27adc7edfdb")
|
||||
四格转动 = AnimationMeta("四格转动", False, 0.500, "6891835548688716302", "957940", "c849845a30f5df0c3b7f4b1620b5c248")
|
||||
四格转动_II = AnimationMeta("四格转动 II", False, 0.500, "6891835601067184653", "957939", "087665cb644cb25f0ffbc99c8cb18237")
|
||||
回弹伸缩 = AnimationMeta("回弹伸缩", False, 0.500, "6795425591014199822", "530249", "2b125e477d54adb475d9834eb209f8c1")
|
||||
夹心饼干 = AnimationMeta("夹心饼干", False, 0.500, "6868146033247916558", "1362936", "23091e7d56610c4253a186488657cd30")
|
||||
夹心饼干_II = AnimationMeta("夹心饼干 II", False, 0.500, "6868146123710665223", "1362934", "09b29b56757a17ad7ca31a57eb8b5726")
|
||||
小火车 = AnimationMeta("小火车", False, 0.500, "6860405888784536072", "885144", "b302925aabfc7ad44b7ff56cf3eeb1af")
|
||||
小火车_II = AnimationMeta("小火车 II", False, 0.500, "6860406007160377863", "885143", "dc3796c0b273ece45e7b919f4e95b13e")
|
||||
小火车_III = AnimationMeta("小火车 III", False, 0.500, "6860406091700769293", "885142", "665257a20f1d22af2ec8d5a22c57c35c")
|
||||
小火车_IV = AnimationMeta("小火车 IV", False, 0.500, "6860406196130550286", "885141", "44d91b6dc8026eb108a2d58de508605a")
|
||||
小陀螺 = AnimationMeta("小陀螺", False, 0.500, "6874487656969933325", "923592", "a2ca54bf1fe5f095558e59d119f89dbb")
|
||||
小陀螺_II = AnimationMeta("小陀螺 II", False, 0.500, "6874487735059485198", "923591", "decf2dddea3ff279910af80c73ec7e9e")
|
||||
左右分割 = AnimationMeta("左右分割", False, 0.500, "6886282872680878599", "948476", "2950fd3e74e3e251a83de19f46d12072")
|
||||
左右分割_II = AnimationMeta("左右分割 II", False, 0.500, "6886282936048423431", "948475", "43bd89b22b945308fe5b7f722cf68c09")
|
||||
左拉镜 = AnimationMeta("左拉镜", False, 0.500, "6772415248973435395", "471345", "81d1a0c1b959c9910f775497cf55cffa")
|
||||
弹入旋转 = AnimationMeta("弹入旋转", False, 0.500, "6810286558826992136", "669963", "03a824f3bfa5b694a0ccbb8e83cc8c93")
|
||||
形变右缩 = AnimationMeta("形变右缩", False, 0.500, "6851395907804467720", "813139", "9add6fd7e0ee139401cb703b95bb307d")
|
||||
形变左缩 = AnimationMeta("形变左缩", False, 0.500, "6851395726937690637", "813140", "114b8e787f082f3fec108ee4b3f1be18")
|
||||
形变缩小 = AnimationMeta("形变缩小", False, 0.500, "6777260789263766030", "487587", "307f8bcc9b47ed8c20e5ac4822bb4659")
|
||||
悠悠球 = AnimationMeta("悠悠球", False, 0.500, "6821451358101574152", "717346", "7f09519094e625c0af9868f528821ad1")
|
||||
悠悠球_II = AnimationMeta("悠悠球 II", False, 0.500, "6821451462904648200", "717348", "5505c62331247b24a5ce39730bcb9051")
|
||||
手机 = AnimationMeta("手机", False, 0.500, "6861892418334102030", "1362928", "55fd386ec6f779110e3b12b89deaa79c")
|
||||
手机_II = AnimationMeta("手机 II", False, 0.500, "6862918279183208973", "1362926", "b861f8270870663e5c3f8bbb1fced93a")
|
||||
手机_III = AnimationMeta("手机 III", False, 0.500, "6862918366550561294", "1362924", "e056d0f8601d91d70e20e61bd63793f5")
|
||||
扭曲拉伸 = AnimationMeta("扭曲拉伸", False, 0.500, "7026278592623415822", "1426278", "ca0a43e525601adf9d14089393610d9c")
|
||||
抖入放大 = AnimationMeta("抖入放大", False, 0.500, "6761360765925462536", "450264", "dcf80421b0f2682c13b062d0c599aac4")
|
||||
拉伸扭曲 = AnimationMeta("拉伸扭曲", False, 0.500, "7025952723027628557", "1425496", "39862f9fa5c934d72d36923f2368de4a")
|
||||
放大弹动 = AnimationMeta("放大弹动", False, 0.500, "7023931891363353101", "1418682", "8ba074c2bba2e21717e17f4e80fb80d7")
|
||||
斜转 = AnimationMeta("斜转", False, 0.500, "6847734302193488392", "872874", "4cc2597d961bafbd3c7877bc3f75f79a")
|
||||
斜转_II = AnimationMeta("斜转 II", False, 0.500, "6847734360636920327", "872876", "b37e163c186d88db144aacd6280c0811")
|
||||
方片转动 = AnimationMeta("方片转动", False, 0.500, "6897114113726485000", "968162", "dfc6082d56863c5e700a0a5a17102abc")
|
||||
方片转动_II = AnimationMeta("方片转动 II", False, 0.500, "6897114201702011405", "968161", "afdb5e78ddf7d480e78cabb527db9241")
|
||||
旋入晃动 = AnimationMeta("旋入晃动", False, 0.500, "6789167874511475207", "519840", "f791a333e80fb4d7c2646c394adc2d25")
|
||||
旋出渐隐 = AnimationMeta("旋出渐隐", False, 0.500, "6824302025698710024", "719940", "40cee4a8c1457ab5e4f15645532fd23e")
|
||||
旋转上升 = AnimationMeta("旋转上升", False, 0.500, "6813965670716281352", "691843", "982059c400ca42676d02f9847d281e1e")
|
||||
旋转伸缩 = AnimationMeta("旋转伸缩", False, 0.500, "6795425422046663182", "530247", "2c211882b63c7115a7c687faf3c79237")
|
||||
旋转回吸 = AnimationMeta("旋转回吸", False, 0.500, "6810286613898203661", "669965", "57c2c2e50d57bc5ea10b8c32f8e850cb")
|
||||
旋转缩小 = AnimationMeta("旋转缩小", False, 0.500, "6759046644462785037", "445858", "a6749bbbebb7a8fb3ad27679989b7401")
|
||||
旋转降落 = AnimationMeta("旋转降落", False, 0.500, "6759046515521491464", "445856", "7c87f107b2dbc7d9abe648f4f6e86e58")
|
||||
晃动旋出 = AnimationMeta("晃动旋出", False, 0.500, "6789167998700622350", "519842", "49fa06c52e99c0fe974343b4da58e94c")
|
||||
水晶 = AnimationMeta("水晶", False, 0.500, "6857333749718192654", "1362920", "de28fd5ff1c5fa607cc09306a5de1fc9")
|
||||
水晶_II = AnimationMeta("水晶 II", False, 0.500, "6857333869541069325", "1362922", "66d0f40fad32ba15e72d6687f12604f8")
|
||||
波动滑出 = AnimationMeta("波动滑出", False, 0.500, "7017646605671076359", "1392376", "c546f43ce65a4977ee11010063ee7b50")
|
||||
海盗船 = AnimationMeta("海盗船", False, 0.500, "6830302168751280648", "1362866", "a5e464c4bb091e8e43077aa05a1b20a8")
|
||||
海盗船_II = AnimationMeta("海盗船 II", False, 0.500, "6830302282995732999", "1362868", "e4b5dc8efea09d3b0f0a7f8e780e489c")
|
||||
海盗船_III = AnimationMeta("海盗船 III", False, 0.500, "6830302335047045639", "1362872", "59258d3cbc5c09058d95ee8721dd83f4")
|
||||
海盗船_IV = AnimationMeta("海盗船 IV", False, 0.500, "6830302424826122765", "1362870", "fa532cb7a9d382c56927facf5cea657b")
|
||||
滑入波动 = AnimationMeta("滑入波动", False, 0.500, "7023747922718102023", "1418546", "7c4a80c235da2050b672f66a0a9e54b3")
|
||||
滑滑梯 = AnimationMeta("滑滑梯", False, 0.500, "6828829568879563271", "741020", "4727fafafc252616d70342eac1117dea")
|
||||
滑滑梯_II = AnimationMeta("滑滑梯 II", False, 0.500, "6828829741013799432", "741022", "1ae8aa09ca773e05cd96aed6569e49a1")
|
||||
百叶窗 = AnimationMeta("百叶窗", False, 0.500, "6771299961171612174", "467361", "f4cf50145a6c09ce363ca7d49ecbc05f")
|
||||
百叶窗_II = AnimationMeta("百叶窗 II", False, 0.500, "6782101071402635790", "506768", "4ad738f1e4cfcde6caca3c405fc54da7")
|
||||
碎块滑动 = AnimationMeta("碎块滑动", False, 0.500, "6778405418969338382", "490068", "408dbd74e95497bd0323693a477ab2a3")
|
||||
碎块滑动_II = AnimationMeta("碎块滑动 II", False, 0.500, "6778300107113632269", "489860", "6f301b82e6b6b1ece2a98e182f6768ba")
|
||||
立方体 = AnimationMeta("立方体", False, 0.500, "6837352063496622599", "872856", "71ae450afeb88ae2620473ab790acf0e")
|
||||
立方体_II = AnimationMeta("立方体 II", False, 0.500, "6834812485023830535", "872858", "efc0e23b864f5fcfbaa77723044c4957")
|
||||
立方体_III = AnimationMeta("立方体 III", False, 0.500, "6834812541118452237", "872860", "dfc2e372bc454764f0b355904542e228")
|
||||
立方体_IV = AnimationMeta("立方体 IV", False, 0.500, "6841793140949520910", "872864", "c66bf1692fe1e6bd6dd2e49eddfcd0c0")
|
||||
立方体_V = AnimationMeta("立方体 V", False, 0.500, "6841793224663634446", "873096", "e3935dbcaf28be18a598eebb8fb79161")
|
||||
绕圈圈 = AnimationMeta("绕圈圈", False, 0.500, "6850287838441771534", "872868", "98bfd8ca3177b85246b18502832232f0")
|
||||
绕圈圈_II = AnimationMeta("绕圈圈 II", False, 0.500, "6850287920255865357", "872872", "10eaa3db7b761a9846764a53912d7c77")
|
||||
绕圈圈_III = AnimationMeta("绕圈圈 III", False, 0.500, "6854782718975152653", "872918", "c2e7ff02916f19a13ada361abddb8f98")
|
||||
绕圈圈_IV = AnimationMeta("绕圈圈 IV", False, 0.500, "6854782786553778695", "872920", "1e7d503bcf05a17f175759e5c6cfbe7b")
|
||||
缩小弹动 = AnimationMeta("缩小弹动", False, 0.500, "7017689072978104869", "1392530", "8ff952ad209f2beac6dfa82b103f769e")
|
||||
缩小旋转 = AnimationMeta("缩小旋转", False, 0.500, "6760119657429996046", "447318", "8fdf7f5cf2dbd5754e523198d71dff49")
|
||||
缩小转出 = AnimationMeta("缩小转出", False, 0.500, "6805018974070247950", "638823", "1e9ab706223c64254aa89156a993a3d7")
|
||||
缩放 = AnimationMeta("缩放", False, 0.500, "6759078592740594184", "446078", "79b143942a4f8b4b9c80b08e37994e00")
|
||||
缩放_II = AnimationMeta("缩放 II", False, 0.500, "6779083172429697544", "493000", "e70e98fcda08b4c01969e1878d7fe9a0")
|
||||
翻转 = AnimationMeta("翻转", False, 0.500, "6843309964732142094", "872838", "5f153d35f1c3098fef8325badc40c5e8")
|
||||
翻转_II = AnimationMeta("翻转 II", False, 0.500, "6843310029689328135", "872840", "befc44f24a2747201d1d75e6a29753ce")
|
||||
翻转_III = AnimationMeta("翻转 III", False, 0.500, "6843310084743762446", "872842", "b8167fc9e9deb2f638788bfc7539ed7f")
|
||||
翻转_IV = AnimationMeta("翻转 IV", False, 0.500, "6843310129736061447", "872844", "9636ccab84e8f2c357812a38b785f6e0")
|
||||
翻转_V = AnimationMeta("翻转 V", False, 0.500, "6843310237902967304", "872848", "4d27983b5b2899b46334d3fd999bc7d8")
|
||||
翻转_VI = AnimationMeta("翻转 VI", False, 0.500, "6843310299991249421", "872850", "8807b174b58ee897667c08e6bee1a4f8")
|
||||
荡秋千 = AnimationMeta("荡秋千", False, 0.500, "6811007755785081357", "680643", "738c6740ca709cafb7045c4e3037cff0")
|
||||
荡秋千_II = AnimationMeta("荡秋千 II", False, 0.500, "6811007833069326862", "680645", "bf46ce3a5478399205c1fc4bbfd7ded0")
|
||||
转入转出 = AnimationMeta("转入转出", False, 0.500, "6805012562174808590", "638793", "bb04a13adc846f9b35a4054c06e5ac59")
|
||||
转入转出_II = AnimationMeta("转入转出 II", False, 0.500, "6818747242258633224", "701967", "e1415d8f52a5837cef9bc29e6c17cc57")
|
||||
转圈圈 = AnimationMeta("转圈圈", False, 0.500, "6829129745226011144", "741502", "234577a311bb87ef23c9b7d82174f584")
|
||||
过山车 = AnimationMeta("过山车", False, 0.500, "6870060878234915342", "911862", "64e30d2e2577f6a95313ed806807baa7")
|
||||
过山车_II = AnimationMeta("过山车 II", False, 0.500, "6870060932928639501", "911861", "240042ee2b35aaa7f30b6e0c03e9ac4c")
|
||||
降落旋转 = AnimationMeta("降落旋转", False, 0.500, "6759075297091392007", "446076", "9c7be518c1cc63a947fdc2e311b724e9")
|
||||
魔方 = AnimationMeta("魔方", False, 0.500, "6870060995365048840", "1362938", "b104d21e0f1b7eb044946f6bf0be1133")
|
||||
魔方_II = AnimationMeta("魔方 II", False, 0.500, "6870061049559650829", "1362940", "53bc750124a30d746adbf44151116fde")
|
||||
|
||||
# 付费特效
|
||||
分身 = AnimationMeta("分身", True, 0.500, "6883761132645913096", "945872", "438dd3c43be7ac470cbcca81169f2cfc")
|
||||
分身_II = AnimationMeta("分身 II", True, 0.500, "6883761226950644231", "945871", "7dbd67e473fbe25e024e0ccc91c48f29")
|
||||
动感摇晃I = AnimationMeta("动感摇晃I", True, 0.500, "7173927429394666020", "6983415", "ceb6b5bf10aab23f1066481cefd5adfb")
|
||||
动感摇晃II = AnimationMeta("动感摇晃II", True, 100.000, "7175103054956466744", "7129471", "4e88c30adc92ca2809d285ab67276467")
|
||||
四格滑动_II = AnimationMeta("四格滑动 II", True, 0.500, "6883727923845534216", "945729", "1e04f7d49030244ee10eafeb832f372e")
|
||||
四格翻转_II = AnimationMeta("四格翻转 II", True, 0.500, "6865579178599649806", "1362930", "840aa022c0a9b3b6b4876dd7084372b7")
|
||||
回忆旋转 = AnimationMeta("回忆旋转", True, 0.500, "7186961278022193722", "8300599", "fa3c068a56733a2149d5c0d03560aad8")
|
||||
坠落 = AnimationMeta("坠落", True, 0.500, "7235902373971890747", "14020637", "0049e2c104b1ae46dbf717ea73b71234")
|
||||
弹动冲屏 = AnimationMeta("弹动冲屏", True, 0.500, "7200308690904158778", "9491799", "179cec03f1ad01245c554a599699d9ad")
|
||||
波动吸收 = AnimationMeta("波动吸收", True, 0.500, "7107468232390349349", "2786424", "ddbc0f962c69263480e6d188bf2f4b63")
|
||||
波动放大 = AnimationMeta("波动放大", True, 0.500, "7111631619768717860", "3113716", "90f87e49deba3845d73b5855dc3fa442")
|
||||
相框滑动 = AnimationMeta("相框滑动", True, 0.500, "7206139216038728248", "10166295", "517a71d78782ebc9a9718acfb865fba9")
|
||||
红酒摇晃 = AnimationMeta("红酒摇晃", True, 0.800, "6903771548436402702", "1417022", "95d79896a437524c4f94dc2902bb3b6c")
|
||||
跳跳糖 = AnimationMeta("跳跳糖", True, 0.700, "7199944821098680890", "9432783", "fc4e0cc6a2f2c775659fa9493cff9fe8")
|
||||
闪光放大 = AnimationMeta("闪光放大", True, 0.500, "7166437469909422623", "6210029", "d73e12e5f219c298b59fcca7f34fadac")
|
||||
闪光放大_II = AnimationMeta("闪光放大 II", True, 0.500, "7166437532568130055", "6210033", "a1a110060307fb02ef62d33d5e571789")
|
||||
@@ -0,0 +1,165 @@
|
||||
"""视频片段入场动画元数据"""
|
||||
|
||||
from .effect_meta import EffectEnum, AnimationMeta
|
||||
|
||||
class IntroType(EffectEnum):
|
||||
"""视频/图片入场动画类型"""
|
||||
|
||||
# 免费特效
|
||||
Kira游动 = AnimationMeta("Kira游动", False, 2.267, "7311984593387655731", "34176967", "05daa2cb2b53e1830a0e657ede749daf")
|
||||
上下抖动 = AnimationMeta("上下抖动", False, 0.500, "6739418390030455300", "431652", "bff95de5e1e4803ea64a52632bcfb361")
|
||||
动感放大 = AnimationMeta("动感放大", False, 0.500, "6740867832570974733", "431662", "3d880239a1fa70fbaedcc7fd20794e22")
|
||||
动感缩小 = AnimationMeta("动感缩小", False, 0.500, "6740868384637850120", "431658", "8357dd30914ef6ba1ba89dd12a83dc3e")
|
||||
向上滑动 = AnimationMeta("向上滑动", False, 0.500, "6798333487523828238", "624739", "91285fcdbc398dd776994fd67b3c93fb")
|
||||
向上转入 = AnimationMeta("向上转入", False, 0.500, "6808401616564130312", "645307", "5bf5677a81740d903c673d6647979f92")
|
||||
向上转入_II = AnimationMeta("向上转入 II", False, 0.500, "6818747060649464327", "701961", "4f2fac081f3d5f7e28c9ba131a397e83")
|
||||
向下滑动 = AnimationMeta("向下滑动", False, 0.500, "6798333705401143816", "624735", "1b122a36e9704adc7ed708dc38b5cde3")
|
||||
向下甩入 = AnimationMeta("向下甩入", False, 0.500, "6739338374441603598", "431638", "afb5afec3c42fa627a007ff609c83792")
|
||||
向右上甩入 = AnimationMeta("向右上甩入", False, 0.500, "6740122731418751495", "431644", "12ae5b6cc0b2bff43e958d5ca2d574fe")
|
||||
向右下甩入 = AnimationMeta("向右下甩入", False, 0.500, "6739395718223499787", "431640", "f821a402edb042a9d68d825cb804ac6e")
|
||||
向右滑动 = AnimationMeta("向右滑动", False, 0.500, "6798333076469453320", "624743", "47da2c90ea02fe7fe43964d6f1a4763e")
|
||||
向右甩入 = AnimationMeta("向右甩入", False, 0.500, "6739338727866241539", "431636", "228f76b86355e74087a9a80647236b88")
|
||||
向右转入 = AnimationMeta("向右转入", False, 0.500, "6805019065761927694", "638825", "6c3e6841393ea481e24f9609795ffdad")
|
||||
向左上甩入 = AnimationMeta("向左上甩入", False, 0.500, "6740122563692728844", "431648", "aa97897803351debd46c9182132c64c5")
|
||||
向左下甩入 = AnimationMeta("向左下甩入", False, 0.500, "6739395445346275853", "431642", "269d5e19ed83faa5f5c72a1401e4564b")
|
||||
向左滑动 = AnimationMeta("向左滑动", False, 0.500, "6798332871267324423", "624747", "5b60ce256ff3e027d8faac4cbf9b333a")
|
||||
向左转入 = AnimationMeta("向左转入", False, 0.500, "6816560956647150093", "699157", "154e410f1e8b2e36a30ff4d5201c8146")
|
||||
左右抖动 = AnimationMeta("左右抖动", False, 0.500, "6739418540421419524", "431654", "7572d7461e38d73c578aa8e4dca7163a")
|
||||
抖动下降 = AnimationMeta("抖动下降", False, 0.500, "6991764455931515422", "1206320", "4e6015e353a96bce299925a8c9fbc1d9")
|
||||
折叠开幕 = AnimationMeta("折叠开幕", False, 1.500, "7239273897491698232", "14506065", "1a5f55beade9f0bcfc16abb0cc048bb0")
|
||||
放大 = AnimationMeta("放大", False, 0.500, "6798332733694153230", "624751", "028a77e121c22a4dd130a46a0ed90714")
|
||||
斜切 = AnimationMeta("斜切", False, 0.700, "7210657307938525751", "10696371", "a385761197d457f4599d231421045230")
|
||||
旋转 = AnimationMeta("旋转", False, 0.500, "6798334070653719054", "624731", "1b4ac2773d9c05ffb34dca05cf91b030")
|
||||
旋转开幕 = AnimationMeta("旋转开幕", False, 1.000, "7186944542409495099", "8295043", "407822a27a67612c3caa3e4223aa32d3")
|
||||
渐显 = AnimationMeta("渐显", False, 0.500, "6798320778182922760", "624705", "ee269b77e45a2466bd3e9cab0cff7137")
|
||||
漩涡旋转 = AnimationMeta("漩涡旋转", False, 0.500, "6782010677520241165", "703281", "edc6024d7570bc32b857956c1535209f")
|
||||
缩小 = AnimationMeta("缩小", False, 0.500, "6798332584276267527", "624755", "280a82a500b34c3d84b078b2475803ff")
|
||||
翻入 = AnimationMeta("翻入", False, 1.170, "7452407076417966619", "98430529", "bd0a96cbfbb58eb67c5f4e86f537b858")
|
||||
跳转开幕 = AnimationMeta("跳转开幕", False, 0.733, "7279999334001676857", "23185431", "817876a62d2d05e4eef9ac4cfa9c70fe")
|
||||
轻微抖动 = AnimationMeta("轻微抖动", False, 0.500, "6739418227031413256", "431664", "7ec99bda70fa6922395d65235991f9e5")
|
||||
轻微抖动_II = AnimationMeta("轻微抖动 II", False, 0.500, "6739418677910704651", "431650", "8e29ab0a86dac5719300064821e8b63d")
|
||||
轻微抖动_III = AnimationMeta("轻微抖动 III", False, 0.500, "6781683302672634382", "503136", "e25fa4efce8d2c62016bc11a0e0d4904")
|
||||
轻微放大 = AnimationMeta("轻微放大", False, 0.500, "6800268825611735559", "629085", "a8eddffa64b3bf8b6befe1e4e6e91df9")
|
||||
钟摆 = AnimationMeta("钟摆", False, 0.500, "6803260897117606414", "636115", "31439e9447cd9709309fd44a22c1ad1c")
|
||||
镜像翻转 = AnimationMeta("镜像翻转", False, 0.500, "6797338697625768455", "646003", "55ec076a5d62f7e80655e60c43f68f80")
|
||||
雨刷 = AnimationMeta("雨刷", False, 0.500, "6802871256849846791", "634681", "3d08753b4ef1c5b6cd560872c13f25ad")
|
||||
雨刷_II = AnimationMeta("雨刷 II", False, 0.500, "6805748897768542727", "640101", "aef16d1fb0f1275265a780b309628d32")
|
||||
|
||||
# 付费特效
|
||||
_2024 = AnimationMeta("2024", True, 1.500, "7309774750677471794", "33056565", "d68370ce25f28ec80d9c0bb7e51e2324")
|
||||
_2025 = AnimationMeta("2025", True, 1.500, "7446306216038371891", "95801149", "58944f40a06bd8f495878ecdcb571345")
|
||||
PASSION = AnimationMeta("PASSION", True, 2.000, "7432237078705869362", "88544178", "a080de8fb1526e31a9dee3e45e459c4e")
|
||||
三屏下滑 = AnimationMeta("三屏下滑", True, 1.830, "7436273289170784818", "90036560", "381d876d9928eb62bde9747611283907")
|
||||
三屏切闪 = AnimationMeta("三屏切闪", True, 1.040, "7434412782289687066", "89308508", "c75441422682a6328f53c83b67d30979")
|
||||
九宫格 = AnimationMeta("九宫格", True, 2.000, "7434746460186350090", "90178902", "9eb29d05c1cd6329ec504d4fa2c57b09")
|
||||
交叉震动 = AnimationMeta("交叉震动", True, 0.833, "7222990639984546360", "12309329", "cde910202607be12ac747e2e76316e7f")
|
||||
交错开幕 = AnimationMeta("交错开幕", True, 1.100, "7280797339042714169", "23387955", "123322fa9ce7c37f0c2c35819f00b524")
|
||||
侧滑 = AnimationMeta("侧滑", True, 0.600, "7239559299196785209", "14524393", "c67d95e820752346af44e2cb515c0115")
|
||||
便利贴 = AnimationMeta("便利贴", True, 0.900, "7379456870265655859", "70486392", "06613663efa8ef29beadf8746019c823")
|
||||
冬季雪花 = AnimationMeta("冬季雪花", True, 2.000, "7447044440868262451", "96136129", "088d30b9eee734c026dcb2d8f11618f4")
|
||||
冰块 = AnimationMeta("冰块", True, 1.300, "7413325383308677683", "82268315", "2224a7b3f79152b77566727a1290f706")
|
||||
冰雪融化 = AnimationMeta("冰雪融化", True, 2.920, "7447044440868278794", "96136131", "0508ed7e6fe8ff42ab78164ffb629836")
|
||||
冲撞 = AnimationMeta("冲撞", True, 2.000, "7215530662986519096", "11320895", "aeadb248c06d074a2d98f425a57999f0")
|
||||
分屏横移 = AnimationMeta("分屏横移", True, 1.000, "7257878167023522365", "18746326", "dcadf2284399fe6200f77fad9a1ec41a")
|
||||
分屏组合 = AnimationMeta("分屏组合", True, 2.960, "7434746460186366515", "89406819", "2defa48676a2b511bbb333ca7d69d72c")
|
||||
分屏翻转 = AnimationMeta("分屏翻转", True, 0.700, "7257782721575916088", "18711457", "013f6255cb0672198f26962bff3f788b")
|
||||
分身模糊 = AnimationMeta("分身模糊", True, 1.500, "7434746460186350131", "89406818", "3573d7a9a1fa61187b074920225113df")
|
||||
划水 = AnimationMeta("划水", True, 0.800, "7226632607939695161", "12811781", "57a259c58a4daddacc897c75ec9c10a4")
|
||||
区域色块滑动 = AnimationMeta("区域色块滑动", True, 2.000, "7436273288608748042", "90036562", "c6f4273c83dfdedaf158bb5e337dce56")
|
||||
十字震动 = AnimationMeta("十字震动", True, 0.800, "7352824361625063987", "54686020", "33d4a2ff79aa2fb88fadd45aee1998e9")
|
||||
卡片扫光 = AnimationMeta("卡片扫光", True, 1.830, "7437386424032186931", "90546137", "9f873b0475f78fe43bbc5f9d58cbcbf7")
|
||||
发光矩形 = AnimationMeta("发光矩形", True, 1.033, "7346511208171704841", "51093680", "64852509d7cb2a578469b3438b94df52")
|
||||
变速扩大 = AnimationMeta("变速扩大", True, 0.960, "7450031573954466314", "97484920", "60a1846c0d3b9fc2e695f8fa442a1061")
|
||||
变速时空 = AnimationMeta("变速时空", True, 1.210, "7437386424036364850", "90546138", "71b1183be83d398f726b090d3fc7b00d")
|
||||
向上滚动 = AnimationMeta("向上滚动", True, 1.000, "7312341574988337690", "34388476", "14e7c85bfa04ecbacc1e63ee386840b7")
|
||||
向上闪入 = AnimationMeta("向上闪入", True, 0.700, "7273389803532456504", "21816946", "ecaffca7c7e1d7744fa296a29f65b366")
|
||||
向下甩动 = AnimationMeta("向下甩动", True, 1.400, "7338320641306661410", "47050546", "060ee66b7f59d3d2c8064be5ae32171c")
|
||||
四屏转换 = AnimationMeta("四屏转换", True, 1.000, "7341283787143123507", "48492378", "fdd9abc8f2abadc0ae6e909779f282e6")
|
||||
圆形开幕 = AnimationMeta("圆形开幕", True, 0.900, "7218210014949806647", "11680735", "2c171ce2c85042bb518cbdc08ced9709")
|
||||
多层环形 = AnimationMeta("多层环形", True, 2.000, "7329444938960081460", "42686363", "54801ad31b13853ad1e3ccf945e89973")
|
||||
多屏分割I = AnimationMeta("多屏分割I", True, 1.420, "7434055685572137509", "89192703", "945cf7d06a8e4cb96900930b8f53b153")
|
||||
多屏分割II = AnimationMeta("多屏分割II", True, 1.830, "7434055685572137499", "89192705", "8772c91f6a723135cee240f40e7c866c")
|
||||
多维空间 = AnimationMeta("多维空间", True, 1.380, "7449596462645645850", "97260799", "905ade2435f618aa8a43a8a63093ac89")
|
||||
展开 = AnimationMeta("展开", True, 0.500, "7221413342257091133", "12088589", "553acdb325d76533d6ecbd6d621d9b9e")
|
||||
幸运圣诞树 = AnimationMeta("幸运圣诞树", True, 2.000, "7447044441371578906", "96136128", "8f367e116b1b08096d810239e5901626")
|
||||
开辟2025 = AnimationMeta("开辟2025", True, 2.000, "7461839463879021083", "101958682", "cc2e0b3ccac6d3c77b4bd6f4004a2f78")
|
||||
弹力分割 = AnimationMeta("弹力分割", True, 1.060, "7267827357627454013", "35994464", "9f5878effce0a857900a4f050ea52318")
|
||||
弹近 = AnimationMeta("弹近", True, 1.500, "7314144465944318502", "35289246", "30c62d3ccb969173e5fa43511894116b")
|
||||
录像带分屏 = AnimationMeta("录像带分屏", True, 2.000, "7436273288600359474", "90036561", "6408ea1b75c87ae2e38b2aed16669434")
|
||||
心形放大 = AnimationMeta("心形放大", True, 1.500, "7042968847070007844", "1487080", "3bb1bb084e5ebf25e67fc078d3c6a119")
|
||||
快速翻页 = AnimationMeta("快速翻页", True, 0.167, "7296381392340914715", "27878991", "6e1d71ff694a87526f9c5bb2c01c927d")
|
||||
手写云朵 = AnimationMeta("手写云朵", True, 1.530, "7468589903001948681", "104144357", "7a0c9770e836caeb1c815acbb4e5f3f5")
|
||||
手机倒数 = AnimationMeta("手机倒数", True, 6.920, "7448898555617497610", "97032631", "276125acc604618051e1bd314beb51d3")
|
||||
扫描 = AnimationMeta("扫描", True, 0.600, "7312335732721324554", "34385508", "191401f0b79c28d7569dfc356ba827b6")
|
||||
抖动变焦 = AnimationMeta("抖动变焦", True, 0.800, "7156911481563386381", "5414507", "04365018fdc27b7e1175b709a739f800")
|
||||
抖动横移 = AnimationMeta("抖动横移", True, 0.567, "7265946978792510010", "20437845", "e4951e1d7abcdbd4e8bf1cf33430def7")
|
||||
报纸拼贴 = AnimationMeta("报纸拼贴", True, 1.500, "7449589619034690074", "97255882", "2f6b5f1c14c895aa722a73de7a5b8a46")
|
||||
报纸拼贴Ⅱ = AnimationMeta("报纸拼贴Ⅱ", True, 1.500, "7449589619038884390", "97255883", "f02f54523dc3088f4d86b2360009b795")
|
||||
拉丝滑入 = AnimationMeta("拉丝滑入", True, 0.500, "7112725640901562887", "3179668", "913b99e9012d50f629c59a31e030b143")
|
||||
拼图 = AnimationMeta("拼图", True, 1.067, "7369889381357720102", "64963350", "4b721a1559eb3451d6cc358468537c49")
|
||||
探灯聚焦 = AnimationMeta("探灯聚焦", True, 2.000, "7435897594074649114", "89895075", "7ec962a4e0a18e6058b890ff3cfa5f4f")
|
||||
斜向拉丝 = AnimationMeta("斜向拉丝", True, 0.667, "7360531434487943743", "58777551", "60ba474a0460cb7e999830c02943e977")
|
||||
旋转圆球 = AnimationMeta("旋转圆球", True, 0.800, "7380298290140549647", "70989966", "19b93b0edea19a73d2cf7f818ace3265")
|
||||
时间倒计时 = AnimationMeta("时间倒计时", True, 2.000, "7448898555617481242", "97032629", "68b1e9bfc8e536dbe58411bb5ceee60b")
|
||||
晃动抽帧 = AnimationMeta("晃动抽帧", True, 2.960, "7435897594070438438", "89895076", "2e2a13b5a090fc91017dd5152d04a682")
|
||||
曝光放射 = AnimationMeta("曝光放射", True, 0.800, "7158737452939612703", "5529363", "09df65728356189436974e08c42bc578")
|
||||
果冻_I = AnimationMeta("果冻 I", True, 0.800, "7171640017574433294", "6725401", "4ef7f9da6b1331109620381229d55429")
|
||||
果冻_II = AnimationMeta("果冻 II", True, 0.800, "7171690870788329992", "6732061", "01d346b0f37b87c25c17a53309189432")
|
||||
枫叶遮罩 = AnimationMeta("枫叶遮罩", True, 2.300, "7436273288612942363", "90036564", "877f92396eab2601eaca2fb422dd8d78")
|
||||
模糊聚焦 = AnimationMeta("模糊聚焦", True, 1.200, "7337937899704291866", "46838778", "38841ccaef6186af6d516eeea116b3c6")
|
||||
横向模糊 = AnimationMeta("横向模糊", True, 0.500, "7301896031673782835", "29805902", "b8b953ad94b16c47601af887d4ccc8c9")
|
||||
水墨 = AnimationMeta("水墨", True, 2.433, "7321672946466951731", "39180627", "9c74b6af409178e996b8e0ed792568bf")
|
||||
水滴遮罩 = AnimationMeta("水滴遮罩", True, 1.960, "7441475431309513267", "93637608", "710525364edbf1465373b6e14c83baba")
|
||||
油画描边变色 = AnimationMeta("油画描边变色", True, 2.000, "7439276108022813193", "92053880", "6284442b7ed8abd5d8e8f6614f97b37e")
|
||||
波纹弹动 = AnimationMeta("波纹弹动", True, 1.200, "7345731405663441460", "50640360", "b29c4c4dbac023b27bac5d32e642f6bb")
|
||||
流金 = AnimationMeta("流金", True, 1.500, "7322367212142989850", "39438403", "6654a74eb923c201fe18765f18d4b367")
|
||||
游蛇开幕 = AnimationMeta("游蛇开幕", True, 2.000, "7461845576447955506", "101962292", "22c162cc37bdf21a5a15421950b68ce4")
|
||||
滑片滑动 = AnimationMeta("滑片滑动", True, 1.400, "7447351620641247781", "96240861", "c0dfe6ccb8f4c5e08a4607fdd10f18db")
|
||||
灼烧出现 = AnimationMeta("灼烧出现", True, 2.880, "7447044441388356106", "96136130", "37f3e9ceaabb3b3a50a353d223149ba3")
|
||||
点开 = AnimationMeta("点开", True, 1.300, "7436667461837001267", "90252347", "d96f9c34b6cb885e6e15bb7ddeceac96")
|
||||
烟雾弹 = AnimationMeta("烟雾弹", True, 1.200, "7226641244938572346", "12815013", "8c5e4642b824c252b5a556bbbcbae767")
|
||||
照片回忆 = AnimationMeta("照片回忆", True, 2.000, "7436273289170784806", "90036563", "991dbb7aaa14639551cdca16c0883ad7")
|
||||
爱心碰撞 = AnimationMeta("爱心碰撞", True, 2.667, "7327872475453198848", "41910725", "119e873890708ee4817c9778dcb20b69")
|
||||
玫瑰 = AnimationMeta("玫瑰", True, 1.533, "7397370569856913947", "77061084", "c3988af5cd8a2ac4e70974fa84cf732a")
|
||||
玻璃聚集 = AnimationMeta("玻璃聚集", True, 1.700, "7340265236101861915", "48072242", "68c8e8f1eba4f4b2e3d35472f8b4822c")
|
||||
画出爱心 = AnimationMeta("画出爱心", True, 1.600, "7248901535894082105", "16211481", "6e5cdc1e7ece582da904ac520440e88a")
|
||||
画面擦除 = AnimationMeta("画面擦除", True, 2.000, "7448898555617481226", "97032630", "a37e8b30f8debf2be5c931369dee8408")
|
||||
砸出波纹 = AnimationMeta("砸出波纹", True, 1.560, "7255594501694034490", "18159482", "644483b024fc852955dd807da067d8e9")
|
||||
神奇弹窗 = AnimationMeta("神奇弹窗", True, 0.500, "7467842885740663306", "103860744", "b2a515917204b3170e9f62a744b5cabd")
|
||||
空间扭曲 = AnimationMeta("空间扭曲", True, 1.160, "7298688232294715931", "28693486", "da3a08519a9315e3625173b71a4d8ee3")
|
||||
立体交叉 = AnimationMeta("立体交叉", True, 0.670, "7434746460190544435", "89406816", "37139f633f7571596e353fc87aa05e48")
|
||||
立体翻转 = AnimationMeta("立体翻转", True, 1.100, "7346505124820292150", "51089258", "bad88fa72b42b3c12099c31654575952")
|
||||
立方分体 = AnimationMeta("立方分体", True, 1.800, "7402167652220670514", "78751449", "d0b7a46baedbeea7461f75308b2f45e4")
|
||||
竖向拼接 = AnimationMeta("竖向拼接", True, 2.460, "7434412782302269962", "89308509", "d52a15d1d7d21a8b3e74496e048d708b")
|
||||
粒子爱心 = AnimationMeta("粒子爱心", True, 3.000, "7468589731727544882", "104144327", "567e5354ca37d56d1bceb25db0b31961")
|
||||
翻书 = AnimationMeta("翻书", True, 1.600, "7452662871550333477", "98557334", "18d7c2ae3935e215ab347f57412511ba")
|
||||
翻卡 = AnimationMeta("翻卡", True, 1.000, "7431502518753956403", "88299576", "3a81e284b4864161bf8a0dd1ecbc2d02")
|
||||
老电视 = AnimationMeta("老电视", True, 1.400, "7290754106417746491", "26091602", "4cbe6bdc6da704e481a40f44266cee0b")
|
||||
聚合 = AnimationMeta("聚合", True, 2.000, "7303524763589153306", "30391788", "c3293067129322c884d0865b99cb11bd")
|
||||
能量立方 = AnimationMeta("能量立方", True, 1.333, "7359472053998588425", "58285135", "301b4ffff8510c87b7174161b2642ca3")
|
||||
脉冲 = AnimationMeta("脉冲", True, 0.900, "7379909514847326732", "70764198", "ae7fac0214409e340db6a600e97303da")
|
||||
色散波纹 = AnimationMeta("色散波纹", True, 0.830, "7299029942870741542", "28824874", "2ce459ce040280d7c4f36ab78a3612e5")
|
||||
荧光爆闪 = AnimationMeta("荧光爆闪", True, 1.000, "7347948517471556096", "51992419", "84d6cfae125a71855b500604748f1e19")
|
||||
负片闪屏 = AnimationMeta("负片闪屏", True, 1.500, "7434055685576331785", "89192704", "4539b2ba073f714f67c5d55846969b3d")
|
||||
转圈圈 = AnimationMeta("转圈圈", True, 0.800, "7246643852411408952", "15726741", "f2c920e366c3c733f1d86a8473aff310")
|
||||
迷幻流光 = AnimationMeta("迷幻流光", True, 1.800, "7395178910083715638", "76511457", "07fc56d6ae64a5569a4d29241ae4ed4e")
|
||||
金沙 = AnimationMeta("金沙", True, 2.000, "7441139821747114523", "93472473", "e0a60138ee45dbbaffe99037bea1f649")
|
||||
钱币遮罩 = AnimationMeta("钱币遮罩", True, 2.000, "7461942207482696242", "102049088", "cb8e64195318a300777e13b2c0222733")
|
||||
镜面组成 = AnimationMeta("镜面组成", True, 1.500, "7350282290984915491", "53224111", "b7bc1db5951ce591ae1597930163300e")
|
||||
闪屏 = AnimationMeta("闪屏", True, 1.200, "7242155802209817147", "14904085", "c2f368ce853ab863a12c686bb99bb41e")
|
||||
闪现 = AnimationMeta("闪现", True, 0.440, "7210363235906622012", "10668047", "6a680c49cd11a05f3eb0e5a3fed165f7")
|
||||
闪电分屏 = AnimationMeta("闪电分屏", True, 2.000, "7437386424032170505", "90546139", "1c963b5daf0a51d593daa20f721bf00e")
|
||||
雪花遮罩 = AnimationMeta("雪花遮罩", True, 1.750, "7442590758760092198", "94174749", "7e3d713bc1cbca8485fafe45e991926f")
|
||||
震动波纹 = AnimationMeta("震动波纹", True, 1.500, "7307196313148330547", "31806105", "95760b6f7efe0016546e38852a981f49")
|
||||
震撼倒数 = AnimationMeta("震撼倒数", True, 3.000, "7446622476928291365", "95912088", "1de39133273edb6e9d4fe9d09fa1a614")
|
||||
震波 = AnimationMeta("震波", True, 0.800, "7115301367786246692", "3297068", "8aaccb8f112aa3cacd80fa79fcc1690f")
|
||||
震波_II = AnimationMeta("震波 II", True, 0.833, "7211042099737662009", "10744265", "f8f236cd1279af3680bcc71dda889d97")
|
||||
震波_III = AnimationMeta("震波 III", True, 1.700, "7288985830578721336", "25545977", "3be0a1f04cf38bf05ed301ebaeb47ef8")
|
||||
鞭炮遮罩 = AnimationMeta("鞭炮遮罩", True, 2.000, "7461915994215158299", "102019912", "f6f0ab25c8fcfedaaf9eef2810f904ed")
|
||||
音量大小 = AnimationMeta("音量大小", True, 2.000, "7462226433700532745", "102188589", "b14936183e0d2fe5f93bd9dd69c35d7f")
|
||||
飞近 = AnimationMeta("飞近", True, 1.600, "7394717122653327910", "76385331", "494edea80cf2f3df65f35b1ea01bdd11")
|
||||
马赛克 = AnimationMeta("马赛克", True, 1.000, "7282703408383922745", "23885083", "273c4952c915c9250f0b9edadac34148")
|
||||
魔方_III = AnimationMeta("魔方 III", True, 1.100, "7432135739745243686", "88465764", "180602469260e0c4d602d42b07077dd7")
|
||||
魔法粒子I = AnimationMeta("魔法粒子I", True, 3.000, "7446622476928291379", "95912089", "5acc75119eb941cf0645b69d2d0fdc7e")
|
||||
魔法粒子II = AnimationMeta("魔法粒子II", True, 3.000, "7446673584296038949", "95966017", "6daa910b7beacaa1fe83f0fe20a793f1")
|
||||
黑白画中画 = AnimationMeta("黑白画中画", True, 2.000, "7436273288608764442", "90036559", "3b710c8ca2702e2a42144d12ff5bd05e")
|
||||
@@ -0,0 +1,134 @@
|
||||
"""视频片段出场动画元数据"""
|
||||
|
||||
from .effect_meta import EffectEnum, AnimationMeta
|
||||
|
||||
class OutroType(EffectEnum):
|
||||
"""视频/图片出场动画类型"""
|
||||
|
||||
# 免费特效
|
||||
Kira游动 = AnimationMeta("Kira游动", False, 2.267, "7312343337199997450", "34389264", "2cefeb684db271dc288ec225f0854264")
|
||||
冰雪融化 = AnimationMeta("冰雪融化", False, 2.830, "7447044440864068122", "96136047", "c3806ca50307f798df80d69543b14233")
|
||||
向上滑动 = AnimationMeta("向上滑动", False, 0.500, "6798333612958683656", "624737", "43ef6ea305ccdd352da4b99ad32e38db")
|
||||
向上转出 = AnimationMeta("向上转出", False, 0.500, "6818747115934585357", "701963", "1df50f9f9efc23d2851835537221b787")
|
||||
向上转出_II = AnimationMeta("向上转出 II", False, 0.500, "6818747169017696781", "701965", "c79f370e70e40c577391e4a59da76c70")
|
||||
向下滑动 = AnimationMeta("向下滑动", False, 0.500, "6798333787986989576", "624733", "d39ba8884ffc4004118c2fa801d6ea97")
|
||||
向右滑动 = AnimationMeta("向右滑动", False, 0.500, "6798333350487527950", "624741", "b768f38810fc11df947c6196a6d882ec")
|
||||
向左滑动 = AnimationMeta("向左滑动", False, 0.500, "6798332972098392584", "624745", "2d14982cf9f87f4eda4e5443df0b4b9e")
|
||||
折叠闭幕 = AnimationMeta("折叠闭幕", False, 1.500, "7239273967310082621", "14506017", "340da8c2704438c157adff1a55f3df0f")
|
||||
放大 = AnimationMeta("放大", False, 0.500, "6798332801864176142", "624749", "01497dc221d288e623a10cac94a5ceca")
|
||||
斜切 = AnimationMeta("斜切", False, 0.700, "7210659943051956797", "10697199", "93fd7d9c4f059c26cd3681dd512c20ed")
|
||||
旋转 = AnimationMeta("旋转", False, 0.500, "6798334141323547143", "624729", "ae8bdfafbae781ad29bc60b438ff461c")
|
||||
旋转闭幕 = AnimationMeta("旋转闭幕", False, 1.000, "6942482728335970823", "1221132", "b235b8a2a8647a211494856315cde2a9")
|
||||
渐隐 = AnimationMeta("渐隐", False, 0.500, "6798320902548230669", "624707", "07d916d9179660641ae0f427315c5591")
|
||||
漩涡旋转 = AnimationMeta("漩涡旋转", False, 0.500, "6778418947361346061", "634701", "1af131118c1c8f0f97898aeebcb4c38e")
|
||||
灼烧出现 = AnimationMeta("灼烧出现", False, 2.960, "7447044440859873801", "96136048", "cfae1a683f11299f0c1d133d436b2746")
|
||||
缩小 = AnimationMeta("缩小", False, 0.500, "6798332648814023181", "624753", "2ef923500a3c5501236774f26ea6855c")
|
||||
翻出 = AnimationMeta("翻出", False, 1.170, "7452359860659687986", "98425486", "a8e91c830363162a11e80acb6665e426")
|
||||
跳转闭幕 = AnimationMeta("跳转闭幕", False, 0.733, "7280420767378969143", "23302677", "82992a12a8ae1227579be0f66d87d75f")
|
||||
轻微放大 = AnimationMeta("轻微放大", False, 0.500, "6800268611807089166", "629083", "fb575b5c3655a74e8cccb6bdf5d54230")
|
||||
镜像翻转 = AnimationMeta("镜像翻转", False, 0.500, "6738353628215513613", "645999", "a24594428fdd0c8078b74659fc1f2679")
|
||||
|
||||
# 付费特效
|
||||
_2024 = AnimationMeta("2024", True, 1.000, "7311958876406944266", "34158075", "93bcb64554588e6f3a0a4ffffa0bb3b5")
|
||||
_2025 = AnimationMeta("2025", True, 1.000, "7446306392748593714", "95801179", "2717769c8ba0483349180e1c46e95baf")
|
||||
PASSION = AnimationMeta("PASSION", True, 1.500, "7432237078710063643", "88544141", "ed1934d9148fbc73e8edf76c7ddb45cd")
|
||||
三屏下滑 = AnimationMeta("三屏下滑", True, 1.830, "7436273288604553766", "90036503", "11fafef6fa74aabd1c2b99bd29ee4f78")
|
||||
三屏切闪 = AnimationMeta("三屏切闪", True, 1.040, "7434412782293881395", "89308379", "604869cd6d8c9b0a932d2000c906d3c6")
|
||||
九宫格 = AnimationMeta("九宫格", True, 2.000, "7434746460190544411", "89406874", "f832a0fb8b57751e82f0ffcef0fb0317")
|
||||
交叉震动 = AnimationMeta("交叉震动", True, 0.466, "7223227564670587452", "12330095", "3a711c053dcadb7856d19778f72a58c1")
|
||||
交错闭幕 = AnimationMeta("交错闭幕", True, 1.100, "7280797214186672701", "23387942", "1804a8bb6a3eb61c8e5720428d4648e7")
|
||||
侧滑 = AnimationMeta("侧滑", True, 0.400, "7239559574095663671", "14524385", "1a661b1d0728177d889353174bfb0bf8")
|
||||
便利贴 = AnimationMeta("便利贴", True, 0.800, "7379884133268328996", "70741835", "ce8f5846f77edba5099b042ef7b6958b")
|
||||
冬季雪花 = AnimationMeta("冬季雪花", True, 2.000, "7447044440868262410", "96136049", "fe72ee1d6384b9f5a489a56beb5dacd6")
|
||||
冰块 = AnimationMeta("冰块", True, 1.300, "7413731112406487604", "82396222", "103cbd9c8058716c95bf41fd65a182a8")
|
||||
冲撞 = AnimationMeta("冲撞", True, 0.767, "7215555273501446716", "11325221", "16e01aa5454653bc89d3b1d8e86ce3a2")
|
||||
分屏横移 = AnimationMeta("分屏横移", True, 0.880, "7257879855063110205", "18746674", "7382c7210c95548bfc88486be3964284")
|
||||
分屏组合 = AnimationMeta("分屏组合", True, 2.960, "7434746460186350117", "89406873", "eacdb5c2875d937855253ffea04ac13e")
|
||||
分屏翻转 = AnimationMeta("分屏翻转", True, 0.560, "7259341241031070268", "19063130", "392b91fd262e9b95e1dcd18274297393")
|
||||
分身模糊 = AnimationMeta("分身模糊", True, 1.500, "7434746460182155827", "89406876", "3ee97e0d0ed3a62f4b0d3a218e669418")
|
||||
划水 = AnimationMeta("划水", True, 0.800, "7226632692354257445", "12811717", "f30ab9f83934eafedb4ee01a3d87a995")
|
||||
区域色块滑动 = AnimationMeta("区域色块滑动", True, 2.000, "7436273288604553755", "90036504", "0f266778630aeea62a69ed0dd471fff5")
|
||||
十字震动 = AnimationMeta("十字震动", True, 0.533, "7352824282289803814", "54685998", "969e17d5d65494d0b10b9111d66802d8")
|
||||
卡片扫光 = AnimationMeta("卡片扫光", True, 1.830, "7437386424036381211", "90546052", "e2711c17d261ee1aef022bbb2110be51")
|
||||
发光矩形 = AnimationMeta("发光矩形", True, 1.133, "7346510998771077659", "51093596", "ccac330a683da920a9638b597ce1f869")
|
||||
变速扩大 = AnimationMeta("变速扩大", True, 1.000, "7450031573958660617", "97484974", "430709c96a8a5fb7cc6e7d36f5babf5b")
|
||||
变速时空 = AnimationMeta("变速时空", True, 1.210, "7437386424027976230", "90546051", "9ef1912cc3f221218c32bc41bb61a548")
|
||||
向上滚动 = AnimationMeta("向上滚动", True, 1.000, "7312341715220697650", "34388502", "92d44450f8557fc1d8d93eb6cbe2a832")
|
||||
向上闪出 = AnimationMeta("向上闪出", True, 0.700, "7273389599978689079", "21816912", "4e39075df8d20d1d938c5bf23b2604fb")
|
||||
向下甩动 = AnimationMeta("向下甩动", True, 1.000, "7338638617322983976", "47191669", "178fe900252c316f5301d805a735ce8e")
|
||||
四屏转换 = AnimationMeta("四屏转换", True, 0.900, "7341284613165158921", "48492502", "cf7d3bd0e7973868861d1e466cb238eb")
|
||||
圆形闭幕 = AnimationMeta("圆形闭幕", True, 0.900, "7218210114052821561", "11680737", "0acd6d992db52febb66a63a3cfc6ea00")
|
||||
多层环形 = AnimationMeta("多层环形", True, 1.633, "7329445038604161536", "42686393", "c684bdf866bada10acb647e5339397a3")
|
||||
多屏分割I = AnimationMeta("多屏分割I", True, 1.460, "7434055685572153907", "89192583", "e1697eeef0685ec658e50900df941cf4")
|
||||
多屏分割II = AnimationMeta("多屏分割II", True, 2.040, "7434055685572137482", "89192581", "f892339326d234719c3069399b6b3e76")
|
||||
多维空间 = AnimationMeta("多维空间", True, 1.380, "7449596462645662235", "97260826", "90d9f339bfada65f43af655eb0905427")
|
||||
幕布 = AnimationMeta("幕布", True, 2.000, "7448986761297924618", "97077809", "b393d8f37b6df766bb7df35fca846169")
|
||||
幸运圣诞树 = AnimationMeta("幸运圣诞树", True, 2.000, "7447044440868262450", "96136050", "177e050b5e468a62a4f36e7c7de7811c")
|
||||
弹力分割 = AnimationMeta("弹力分割", True, 1.060, "7343902820808004123", "49678364", "62adcd0cd61c98d0640e657e63b0be8a")
|
||||
弹远 = AnimationMeta("弹远", True, 1.200, "7314925770181186075", "35749432", "310e6755e6441af5d3405bc80a3be26d")
|
||||
录像带分屏 = AnimationMeta("录像带分屏", True, 2.000, "7436273288608748041", "90036505", "a7bead6f8b55f1cbcbfcffcbd88fb573")
|
||||
心形缩小 = AnimationMeta("心形缩小", True, 1.000, "7034346969086562824", "1463778", "677ec2564241df326a921fa9dc58bd81")
|
||||
快速翻页 = AnimationMeta("快速翻页", True, 0.200, "7296416099606729225", "27895223", "00b26549833daf565f2660d0abcb0462")
|
||||
手写云朵 = AnimationMeta("手写云朵", True, 1.530, "7468589970832232997", "104144380", "e975928331a96536e27764fbc53f6315")
|
||||
扫描 = AnimationMeta("扫描", True, 0.633, "7316816362305753609", "36871694", "a89a479b5228737e62ccd7e77059315f")
|
||||
抖动变焦 = AnimationMeta("抖动变焦", True, 0.500, "7153942002696983047", "5188733", "6e14698c240bfa454836d26eaa44d3bc")
|
||||
抖动横移 = AnimationMeta("抖动横移", True, 0.400, "7265946879060349477", "20437843", "bcebbe81fc2243a3685ab8e550e3415f")
|
||||
折叠 = AnimationMeta("折叠", True, 0.300, "7221420528148419133", "12091673", "7968ce8b7391c3725f2b7667d0e0f80a")
|
||||
报纸拼贴 = AnimationMeta("报纸拼贴", True, 1.500, "7449589619038884389", "97255862", "248c4117dda85e37e36b9174c7f7ec42")
|
||||
报纸拼贴Ⅱ = AnimationMeta("报纸拼贴Ⅱ", True, 1.500, "7449589619038884378", "97255861", "1d139e5602c9b848ae55d3132739c0e5")
|
||||
拉丝滑出 = AnimationMeta("拉丝滑出", True, 0.500, "7114172789287817758", "3240292", "e3018d5ee625a58fdeaa5ccd75d0e2e2")
|
||||
拼图 = AnimationMeta("拼图", True, 1.100, "7369889275233440265", "64963293", "9e1b296804c2f10ce26fcf727d1dd9af")
|
||||
探灯聚焦 = AnimationMeta("探灯聚焦", True, 2.000, "7435897594074632730", "89895171", "3bd76848821228cc1c1a35e4da0f9ea8")
|
||||
斜向拉丝 = AnimationMeta("斜向拉丝", True, 0.500, "7360531353458184715", "58777523", "71a267bc37d3dc0afa3aaae12ec995e7")
|
||||
旋转圆球 = AnimationMeta("旋转圆球", True, 0.800, "7381753028732260916", "71750513", "e824e3d74a50eba64dd87ac11b9bbfb8")
|
||||
晃动抽帧 = AnimationMeta("晃动抽帧", True, 2.960, "7435897594078827035", "89895170", "91c1553757cd96ea14e8cb88fc5d40be")
|
||||
曝光放射 = AnimationMeta("曝光放射", True, 0.500, "7158753896624558628", "5529791", "70911371ae8ec475600c4e30c9db8994")
|
||||
枫叶遮罩 = AnimationMeta("枫叶遮罩", True, 2.300, "7436273288608748058", "90036506", "b4061ff63d82958d6d828f54682b9527")
|
||||
模糊聚焦 = AnimationMeta("模糊聚焦", True, 0.833, "7338742568592609801", "47267179", "2cf9380884a5e9853ecdbb4869b01b0e")
|
||||
横向模糊 = AnimationMeta("横向模糊", True, 0.500, "7301943351320777267", "29824130", "294f0f8ecbe4b4a8b8f2c01f579739f1")
|
||||
水墨 = AnimationMeta("水墨", True, 2.033, "7322073757080621606", "39326538", "533ce039619091d6b9886c2c78ac4aa2")
|
||||
水滴遮罩 = AnimationMeta("水滴遮罩", True, 1.960, "7441475431309513254", "93637552", "06ee7696792a5aa607cecc0d14e7dd91")
|
||||
油画描边变色 = AnimationMeta("油画描边变色", True, 2.000, "7439276108022813235", "92053923", "eb20d401959db40399b8fa89b27e7f38")
|
||||
波纹弹动 = AnimationMeta("波纹弹动", True, 1.200, "7345803511390540288", "50691424", "660ff84eabd735769a72978914e8e82d")
|
||||
流金 = AnimationMeta("流金", True, 1.133, "7322857522648322586", "39682247", "646fc008978735fbf5b5d3cde382fc22")
|
||||
滑片滑动 = AnimationMeta("滑片滑动", True, 1.200, "7447351620637037106", "96240814", "0e879f2bb18535b827df1e78eca89f90")
|
||||
烟雾弹 = AnimationMeta("烟雾弹", True, 0.900, "7229149181762343484", "13090999", "e70e26e7aa770d0deedca54e3eac0323")
|
||||
照片回忆 = AnimationMeta("照片回忆", True, 2.000, "7436273288612942386", "90036502", "b78111677093071510de457f1a8f2019")
|
||||
爱心碰撞 = AnimationMeta("爱心碰撞", True, 2.300, "7328249133079204352", "42112174", "1cf69aac7b9478f5628413aada8c0707")
|
||||
玫瑰 = AnimationMeta("玫瑰", True, 1.400, "7397378784028004891", "77061996", "e19beddf933ed59e1f1d85c8273d9cb1")
|
||||
玻璃爆开 = AnimationMeta("玻璃爆开", True, 0.733, "7347865496508699170", "51922869", "620f6fe34184e1f3cc2284d830c3d1e8")
|
||||
画出爱心 = AnimationMeta("画出爱心", True, 1.100, "7248951676420231735", "16231427", "ad5c127255cc8f2c941f7406f8a36f19")
|
||||
画面擦除 = AnimationMeta("画面擦除", True, 2.000, "7448898555617497626", "97032678", "0ac1cfe94bb7f54b8a38dc0de67b05ca")
|
||||
砸出波纹 = AnimationMeta("砸出波纹", True, 1.366, "7255599483226952249", "18161234", "87e9baa63de40d76f862bb8aa4349de3")
|
||||
空间扭曲 = AnimationMeta("空间扭曲", True, 0.930, "7298918355841323529", "28775864", "04c885b1dbbcf51bcc01e4df931bff72")
|
||||
立体交叉 = AnimationMeta("立体交叉", True, 0.670, "7434746460190544394", "89406875", "75e703c9c10c62dfab467c17f0439261")
|
||||
立体翻转 = AnimationMeta("立体翻转", True, 1.100, "7351333213068857892", "53792520", "82f13f68eb475cfaabaf2a674b50ac8a")
|
||||
立方合体 = AnimationMeta("立方合体", True, 1.600, "7405509410396574242", "79925188", "75c1649483edeac1c8defd88b45839cf")
|
||||
竖向拼接 = AnimationMeta("竖向拼接", True, 2.460, "7434412782285492773", "89308380", "3536cc7c83df33546ece9319b2fcd3ec")
|
||||
粒子爱心 = AnimationMeta("粒子爱心", True, 3.000, "7468589804356112946", "104144349", "1410ac0223ef9473376a151bcabacdfa")
|
||||
翻卡 = AnimationMeta("翻卡", True, 1.000, "7431509039437058586", "88301520", "bd316e6651f053f591dee39cc1460662")
|
||||
老电视 = AnimationMeta("老电视", True, 1.600, "7283429462924857914", "24079477", "50d67778f791d56b12ab5c6da30c37b6")
|
||||
能量立方 = AnimationMeta("能量立方", True, 1.133, "7361364150229930506", "59265410", "f6c5b98ea69f3b2c3265bb3249973250")
|
||||
脉冲 = AnimationMeta("脉冲", True, 0.800, "7379909625870553654", "70764127", "f916cc354e9c5b80698d612397a0c4f7")
|
||||
色散波纹 = AnimationMeta("色散波纹", True, 0.767, "7305961286762762790", "31248281", "5477505f844e9bad12dc9074631564b1")
|
||||
荧光爆闪 = AnimationMeta("荧光爆闪", True, 0.800, "7347994415576650255", "52020801", "6558ab016ce06546d3c380b43480baab")
|
||||
负片闪屏 = AnimationMeta("负片闪屏", True, 1.500, "7434055685567943194", "89192582", "15fe80d4264c5a689efd712535ce51c7")
|
||||
转圈圈 = AnimationMeta("转圈圈", True, 0.800, "7246706359381529125", "15754757", "c03fc00075c5b7e53f8bdc0c6f5c360f")
|
||||
迷幻流光 = AnimationMeta("迷幻流光", True, 1.500, "7395482925006852647", "76594275", "4095d8d554571c3356eefa787c7cdfe9")
|
||||
金沙 = AnimationMeta("金沙", True, 2.000, "7441139691694330378", "93472419", "8eb1d7a9fbcbc2c8df45affa0c13e8a9")
|
||||
钱币遮罩 = AnimationMeta("钱币遮罩", True, 2.000, "7461942340328886835", "102049160", "65b2eab128ce90c90193c62c29013f22")
|
||||
镜面拆分 = AnimationMeta("镜面拆分", True, 1.500, "7405495700961628683", "79917713", "5e549cebedbc7a9453bfc24490b94e67")
|
||||
闪屏 = AnimationMeta("闪屏", True, 0.833, "7243999104114627132", "15215961", "e4ef6b01ae37409046d089c73cd16702")
|
||||
闪现 = AnimationMeta("闪现", True, 0.250, "7186978468087730749", "8303609", "f170e9020eaf5a6f6180c6fd30775400")
|
||||
闪电分屏 = AnimationMeta("闪电分屏", True, 2.000, "7437386424032170506", "90546050", "e9950ce2750bab69fe23a91b4e803473")
|
||||
雪花遮罩 = AnimationMeta("雪花遮罩", True, 1.750, "7442590863349256754", "94174789", "11b7e97fceba9cf1d7babfe764d1bdcb")
|
||||
震动波纹 = AnimationMeta("震动波纹", True, 1.500, "7307196476340310554", "31806349", "cdb162bc674e495b24d38a2cf4bd04b6")
|
||||
震波_III = AnimationMeta("震波 III", True, 0.733, "7289005562124046907", "25555607", "70a42c94712b15ff4fbf198be0336400")
|
||||
鞭炮遮罩 = AnimationMeta("鞭炮遮罩", True, 2.000, "7461923788343480841", "102029466", "0e395a1c73b9bb3e83ae101d4df3f850")
|
||||
音量大小 = AnimationMeta("音量大小", True, 2.000, "7462226526260433418", "102188408", "210be278f95cc7cce8fde314de29ab07")
|
||||
飘散 = AnimationMeta("飘散", True, 2.000, "7305957010518839846", "31245441", "286553fb78795b8044746938e4327d5e")
|
||||
飞远 = AnimationMeta("飞远", True, 1.600, "7394730499492549158", "76392667", "d897f0f656870ca1469ac30d61e9490a")
|
||||
马赛克 = AnimationMeta("马赛克", True, 1.000, "7283415427328250405", "24073041", "6be9c2fd05f76e3902a9967139706468")
|
||||
魔法粒子I = AnimationMeta("魔法粒子I", True, 3.000, "7446622476928291378", "95912176", "118e1dc5094d45b278111675f99fe4d7")
|
||||
魔法粒子II = AnimationMeta("魔法粒子II", True, 3.000, "7446673724146717221", "95966045", "ff56bdebbd3863db982d845635b3c42e")
|
||||
黑白画中画 = AnimationMeta("黑白画中画", True, 2.000, "7436273288612942374", "90036501", "3bdba83de89cf27167d319f5e727647f")
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,808 @@
|
||||
import os
|
||||
import json
|
||||
import math
|
||||
from copy import deepcopy
|
||||
|
||||
from typing import Optional, Literal, Union, overload
|
||||
from typing import Type, Dict, List, Any
|
||||
|
||||
from . import util
|
||||
from . import assets
|
||||
from . import exceptions
|
||||
from .template_mode import ImportedTrack, EditableTrack, ImportedMediaTrack, ImportedTextTrack, ShrinkMode, ExtendMode, import_track
|
||||
from .time_util import Timerange, tim, srt_tstamp
|
||||
from .local_materials import VideoMaterial, AudioMaterial
|
||||
from .segment import BaseSegment, Speed, ClipSettings
|
||||
from .audio_segment import AudioSegment, AudioFade, AudioEffect
|
||||
from .video_segment import VideoSegment, StickerSegment, SegmentAnimations, VideoEffect, Transition, Filter, BackgroundFilling
|
||||
from .effect_segment import EffectSegment, FilterSegment
|
||||
from .text_segment import TextSegment, TextStyle, TextBubble
|
||||
from .track import TrackType, BaseTrack, Track
|
||||
|
||||
from .metadata import VideoSceneEffectType, VideoCharacterEffectType, FilterType
|
||||
|
||||
class ScriptMaterial:
|
||||
"""草稿文件中的素材信息部分"""
|
||||
|
||||
audios: List[AudioMaterial]
|
||||
"""音频素材列表"""
|
||||
videos: List[VideoMaterial]
|
||||
"""视频素材列表"""
|
||||
stickers: List[Dict[str, Any]]
|
||||
"""贴纸素材列表"""
|
||||
texts: List[Dict[str, Any]]
|
||||
"""文本素材列表"""
|
||||
|
||||
audio_effects: List[AudioEffect]
|
||||
"""音频特效列表"""
|
||||
audio_fades: List[AudioFade]
|
||||
"""音频淡入淡出效果列表"""
|
||||
animations: List[SegmentAnimations]
|
||||
"""动画素材列表"""
|
||||
video_effects: List[VideoEffect]
|
||||
"""视频特效列表"""
|
||||
|
||||
speeds: List[Speed]
|
||||
"""变速列表"""
|
||||
masks: List[Dict[str, Any]]
|
||||
"""蒙版列表"""
|
||||
transitions: List[Transition]
|
||||
"""转场效果列表"""
|
||||
filters: List[Union[Filter, TextBubble]]
|
||||
"""滤镜/文本花字/文本气泡列表, 导出到`effects`中"""
|
||||
canvases: List[BackgroundFilling]
|
||||
"""背景填充列表"""
|
||||
|
||||
def __init__(self):
|
||||
self.audios = []
|
||||
self.videos = []
|
||||
self.stickers = []
|
||||
self.texts = []
|
||||
|
||||
self.audio_effects = []
|
||||
self.audio_fades = []
|
||||
self.animations = []
|
||||
self.video_effects = []
|
||||
|
||||
self.speeds = []
|
||||
self.masks = []
|
||||
self.transitions = []
|
||||
self.filters = []
|
||||
self.canvases = []
|
||||
|
||||
@overload
|
||||
def __contains__(self, item: Union[VideoMaterial, AudioMaterial]) -> bool: ...
|
||||
@overload
|
||||
def __contains__(self, item: Union[AudioFade, AudioEffect]) -> bool: ...
|
||||
@overload
|
||||
def __contains__(self, item: Union[SegmentAnimations, VideoEffect, Transition, Filter]) -> bool: ...
|
||||
|
||||
def __contains__(self, item) -> bool:
|
||||
if isinstance(item, VideoMaterial):
|
||||
return item.material_id in [video.material_id for video in self.videos]
|
||||
elif isinstance(item, AudioMaterial):
|
||||
return item.material_id in [audio.material_id for audio in self.audios]
|
||||
elif isinstance(item, AudioFade):
|
||||
return item.fade_id in [fade.fade_id for fade in self.audio_fades]
|
||||
elif isinstance(item, AudioEffect):
|
||||
return item.effect_id in [effect.effect_id for effect in self.audio_effects]
|
||||
elif isinstance(item, SegmentAnimations):
|
||||
return item.animation_id in [ani.animation_id for ani in self.animations]
|
||||
elif isinstance(item, VideoEffect):
|
||||
return item.global_id in [effect.global_id for effect in self.video_effects]
|
||||
elif isinstance(item, Transition):
|
||||
return item.global_id in [transition.global_id for transition in self.transitions]
|
||||
elif isinstance(item, Filter):
|
||||
return item.global_id in [filter_.global_id for filter_ in self.filters]
|
||||
else:
|
||||
raise TypeError("Invalid argument type '%s'" % type(item))
|
||||
|
||||
def export_json(self) -> Dict[str, List[Any]]:
|
||||
return {
|
||||
"ai_translates": [],
|
||||
"audio_balances": [],
|
||||
"audio_effects": [effect.export_json() for effect in self.audio_effects],
|
||||
"audio_fades": [fade.export_json() for fade in self.audio_fades],
|
||||
"audio_track_indexes": [],
|
||||
"audios": [audio.export_json() for audio in self.audios],
|
||||
"beats": [],
|
||||
"canvases": [canvas.export_json() for canvas in self.canvases],
|
||||
"chromas": [],
|
||||
"color_curves": [],
|
||||
"digital_humans": [],
|
||||
"drafts": [],
|
||||
"effects": [_filter.export_json() for _filter in self.filters],
|
||||
"flowers": [],
|
||||
"green_screens": [],
|
||||
"handwrites": [],
|
||||
"hsl": [],
|
||||
"images": [],
|
||||
"log_color_wheels": [],
|
||||
"loudnesses": [],
|
||||
"manual_deformations": [],
|
||||
"masks": self.masks,
|
||||
"material_animations": [ani.export_json() for ani in self.animations],
|
||||
"material_colors": [],
|
||||
"multi_language_refs": [],
|
||||
"placeholders": [],
|
||||
"plugin_effects": [],
|
||||
"primary_color_wheels": [],
|
||||
"realtime_denoises": [],
|
||||
"shapes": [],
|
||||
"smart_crops": [],
|
||||
"smart_relights": [],
|
||||
"sound_channel_mappings": [],
|
||||
"speeds": [spd.export_json() for spd in self.speeds],
|
||||
"stickers": self.stickers,
|
||||
"tail_leaders": [],
|
||||
"text_templates": [],
|
||||
"texts": self.texts,
|
||||
"time_marks": [],
|
||||
"transitions": [transition.export_json() for transition in self.transitions],
|
||||
"video_effects": [effect.export_json() for effect in self.video_effects],
|
||||
"video_trackings": [],
|
||||
"videos": [video.export_json() for video in self.videos],
|
||||
"vocal_beautifys": [],
|
||||
"vocal_separations": []
|
||||
}
|
||||
|
||||
class ScriptFile:
|
||||
"""剪映草稿文件, 大部分接口定义在此"""
|
||||
|
||||
save_path: Optional[str]
|
||||
"""草稿文件保存路径, 仅在模板模式下有效"""
|
||||
content: Dict[str, Any]
|
||||
"""草稿文件内容"""
|
||||
|
||||
width: int
|
||||
"""视频的宽度, 单位为像素"""
|
||||
height: int
|
||||
"""视频的高度, 单位为像素"""
|
||||
fps: int
|
||||
"""视频的帧率"""
|
||||
duration: int
|
||||
"""视频的总时长, 单位为微秒"""
|
||||
|
||||
materials: ScriptMaterial
|
||||
"""草稿文件中的素材信息部分"""
|
||||
tracks: Dict[str, Track]
|
||||
"""轨道信息"""
|
||||
|
||||
imported_materials: Dict[str, List[Dict[str, Any]]]
|
||||
"""导入的素材信息"""
|
||||
imported_tracks: List[ImportedTrack]
|
||||
"""导入的轨道信息"""
|
||||
|
||||
def __init__(self, width: int, height: int, fps: int = 30):
|
||||
"""**创建剪映草稿推荐使用`DraftFolder.create_draft()`而非此方法**
|
||||
|
||||
Args:
|
||||
width (int): 视频宽度, 单位为像素
|
||||
height (int): 视频高度, 单位为像素
|
||||
fps (int, optional): 视频帧率. 默认为30.
|
||||
"""
|
||||
self.save_path = None
|
||||
|
||||
self.width = width
|
||||
self.height = height
|
||||
self.fps = fps
|
||||
self.duration = 0
|
||||
|
||||
self.materials = ScriptMaterial()
|
||||
self.tracks = {}
|
||||
|
||||
self.imported_materials = {}
|
||||
self.imported_tracks = []
|
||||
|
||||
with open(assets.get_asset_path('DRAFT_CONTENT_TEMPLATE'), "r", encoding="utf-8") as f:
|
||||
self.content = json.load(f)
|
||||
|
||||
@staticmethod
|
||||
def load_template(json_path: str) -> "ScriptFile":
|
||||
"""从JSON文件加载草稿模板
|
||||
|
||||
Args:
|
||||
json_path (str): JSON文件路径
|
||||
|
||||
Raises:
|
||||
`FileNotFoundError`: JSON文件不存在
|
||||
"""
|
||||
obj = ScriptFile(**util.provide_ctor_defaults(ScriptFile))
|
||||
obj.save_path = json_path
|
||||
if not os.path.exists(json_path):
|
||||
raise FileNotFoundError("JSON文件 '%s' 不存在" % json_path)
|
||||
with open(json_path, "r", encoding="utf-8") as f:
|
||||
obj.content = json.load(f)
|
||||
|
||||
util.assign_attr_with_json(obj, ["fps", "duration"], obj.content)
|
||||
util.assign_attr_with_json(obj, ["width", "height"], obj.content["canvas_config"])
|
||||
|
||||
obj.imported_materials = deepcopy(obj.content["materials"])
|
||||
obj.imported_tracks = [import_track(track_data) for track_data in obj.content["tracks"]]
|
||||
|
||||
return obj
|
||||
|
||||
def add_material(self, material: Union[VideoMaterial, AudioMaterial]) -> "ScriptFile":
|
||||
"""向草稿文件中添加一个素材"""
|
||||
if material in self.materials: # 素材已存在
|
||||
return self
|
||||
if isinstance(material, VideoMaterial):
|
||||
self.materials.videos.append(material)
|
||||
elif isinstance(material, AudioMaterial):
|
||||
self.materials.audios.append(material)
|
||||
else:
|
||||
raise TypeError("错误的素材类型: '%s'" % type(material))
|
||||
return self
|
||||
|
||||
def add_track(self, track_type: TrackType, track_name: Optional[str] = None, *,
|
||||
mute: bool = False,
|
||||
relative_index: int = 0, absolute_index: Optional[int] = None) -> "ScriptFile":
|
||||
"""向草稿文件中添加一个指定类型、指定名称的轨道, 可以自定义轨道层级
|
||||
|
||||
注意: 主视频轨道(最底层的视频轨道)上的视频片段必须从0s开始, 否则会被剪映强制对齐至0s.
|
||||
|
||||
为避免混淆, 仅在创建第一个同类型轨道时允许不指定名称
|
||||
|
||||
Args:
|
||||
track_type (TrackType): 轨道类型
|
||||
track_name (str, optional): 轨道名称. 仅在创建第一个同类型轨道时允许不指定.
|
||||
mute (bool, optional): 轨道是否静音. 默认不静音.
|
||||
relative_index (int, optional): 相对(同类型轨道的)图层位置, 越高越接近前景. 默认为0.
|
||||
absolute_index (int, optional): 绝对图层位置, 越高越接近前景. 此参数将直接覆盖相应片段的`render_index`属性, 供有经验的用户使用.
|
||||
此参数不能与`relative_index`同时使用.
|
||||
|
||||
Raises:
|
||||
`NameError`: 已存在同类型轨道且未指定名称, 或已存在同名轨道
|
||||
"""
|
||||
|
||||
if track_name is None:
|
||||
if track_type in [track.track_type for track in self.tracks.values()]:
|
||||
raise NameError("'%s' 类型的轨道已存在, 请为新轨道指定名称以避免混淆" % track_type)
|
||||
track_name = track_type.name
|
||||
if track_name in [track.name for track in self.tracks.values()]:
|
||||
raise NameError("名为 '%s' 的轨道已存在" % track_name)
|
||||
|
||||
render_index = track_type.value.render_index + relative_index
|
||||
if absolute_index is not None:
|
||||
render_index = absolute_index
|
||||
|
||||
self.tracks[track_name] = Track(track_type, track_name, render_index, mute)
|
||||
return self
|
||||
|
||||
def _get_track(self, segment_type: Type[BaseSegment], track_name: Optional[str]) -> Track:
|
||||
# 指定轨道名称
|
||||
if track_name is not None:
|
||||
if track_name not in self.tracks:
|
||||
raise NameError("不存在名为 '%s' 的轨道" % track_name)
|
||||
return self.tracks[track_name]
|
||||
# 寻找唯一的同类型的轨道
|
||||
count = sum([1 for track in self.tracks.values() if track.accept_segment_type == segment_type])
|
||||
if count == 0: raise NameError("不存在接受 '%s' 的轨道" % segment_type)
|
||||
if count > 1: raise NameError("存在多个接受 '%s' 的轨道, 请指定轨道名称" % segment_type)
|
||||
|
||||
return next(track for track in self.tracks.values() if track.accept_segment_type == segment_type)
|
||||
|
||||
def add_segment(self, segment: Union[VideoSegment, StickerSegment, AudioSegment, TextSegment],
|
||||
track_name: Optional[str] = None) -> "ScriptFile":
|
||||
"""向指定轨道中添加一个片段
|
||||
|
||||
Args:
|
||||
segment (`VideoSegment`, `StickerSegment`, `AudioSegment`, or `TextSegment`): 要添加的片段
|
||||
track_name (`str`, optional): 添加到的轨道名称. 当此类型的轨道仅有一条时可省略.
|
||||
|
||||
Raises:
|
||||
`NameError`: 未找到指定名称的轨道, 或必须提供`track_name`参数时未提供
|
||||
`TypeError`: 片段类型不匹配轨道类型
|
||||
`SegmentOverlap`: 新片段与已有片段重叠
|
||||
"""
|
||||
target = self._get_track(type(segment), track_name)
|
||||
|
||||
# 加入轨道并更新时长
|
||||
target.add_segment(segment)
|
||||
self.duration = max(self.duration, segment.end)
|
||||
|
||||
# 自动添加相关素材
|
||||
if isinstance(segment, VideoSegment):
|
||||
# 出入场等动画
|
||||
if (segment.animations_instance is not None) and (segment.animations_instance not in self.materials):
|
||||
self.materials.animations.append(segment.animations_instance)
|
||||
# 特效
|
||||
for effect in segment.effects:
|
||||
if effect not in self.materials:
|
||||
self.materials.video_effects.append(effect)
|
||||
# 滤镜
|
||||
for filter_ in segment.filters:
|
||||
if filter_ not in self.materials:
|
||||
self.materials.filters.append(filter_)
|
||||
# 蒙版
|
||||
if segment.mask is not None:
|
||||
self.materials.masks.append(segment.mask.export_json())
|
||||
# 转场
|
||||
if (segment.transition is not None) and (segment.transition not in self.materials):
|
||||
self.materials.transitions.append(segment.transition)
|
||||
# 背景填充
|
||||
if segment.background_filling is not None:
|
||||
self.materials.canvases.append(segment.background_filling)
|
||||
|
||||
self.materials.speeds.append(segment.speed)
|
||||
elif isinstance(segment, StickerSegment):
|
||||
self.materials.stickers.append(segment.export_material())
|
||||
elif isinstance(segment, AudioSegment):
|
||||
# 淡入淡出
|
||||
if (segment.fade is not None) and (segment.fade not in self.materials):
|
||||
self.materials.audio_fades.append(segment.fade)
|
||||
# 特效
|
||||
for effect in segment.effects:
|
||||
if effect not in self.materials:
|
||||
self.materials.audio_effects.append(effect)
|
||||
self.materials.speeds.append(segment.speed)
|
||||
elif isinstance(segment, TextSegment):
|
||||
# 出入场等动画
|
||||
if (segment.animations_instance is not None) and (segment.animations_instance not in self.materials):
|
||||
self.materials.animations.append(segment.animations_instance)
|
||||
# 气泡效果
|
||||
if segment.bubble is not None:
|
||||
self.materials.filters.append(segment.bubble)
|
||||
# 花字效果
|
||||
if segment.effect is not None:
|
||||
self.materials.filters.append(segment.effect)
|
||||
# 字体样式
|
||||
self.materials.texts.append(segment.export_material())
|
||||
|
||||
# 添加片段素材
|
||||
if isinstance(segment, (VideoSegment, AudioSegment)):
|
||||
self.add_material(segment.material_instance)
|
||||
|
||||
return self
|
||||
|
||||
def add_effect(self, effect: Union[VideoSceneEffectType, VideoCharacterEffectType],
|
||||
t_range: Timerange, track_name: Optional[str] = None, *,
|
||||
params: Optional[List[Optional[float]]] = None) -> "ScriptFile":
|
||||
"""向指定的特效轨道中添加一个特效片段
|
||||
|
||||
Args:
|
||||
effect (`VideoSceneEffectType` or `VideoCharacterEffectType`): 特效类型
|
||||
t_range (`Timerange`): 特效片段的时间范围
|
||||
track_name (`str`, optional): 添加到的轨道名称. 当特效轨道仅有一条时可省略.
|
||||
params (`List[Optional[float]]`, optional): 特效参数列表, 参数列表中未提供或为None的项使用默认值.
|
||||
参数取值范围(0~100)与剪映中一致. 某个特效类型有何参数以及具体参数顺序以枚举类成员的annotation为准.
|
||||
|
||||
Raises:
|
||||
`NameError`: 未找到指定名称的轨道, 或必须提供`track_name`参数时未提供
|
||||
`TypeError`: 指定的轨道不是特效轨道
|
||||
`ValueError`: 新片段与已有片段重叠、提供的参数数量超过了该特效类型的参数数量, 或参数值超出范围.
|
||||
"""
|
||||
target = self._get_track(EffectSegment, track_name)
|
||||
|
||||
# 加入轨道并更新时长
|
||||
segment = EffectSegment(effect, t_range, params)
|
||||
target.add_segment(segment)
|
||||
self.duration = max(self.duration, t_range.start + t_range.duration)
|
||||
|
||||
# 自动添加相关素材
|
||||
if segment.effect_inst not in self.materials:
|
||||
self.materials.video_effects.append(segment.effect_inst)
|
||||
return self
|
||||
|
||||
def add_filter(self, filter_meta: FilterType, t_range: Timerange,
|
||||
track_name: Optional[str] = None, intensity: float = 100.0) -> "ScriptFile":
|
||||
"""向指定的滤镜轨道中添加一个滤镜片段
|
||||
|
||||
Args:
|
||||
filter_meta (`FilterType`): 滤镜类型
|
||||
t_range (`Timerange`): 滤镜片段的时间范围
|
||||
track_name (`str`, optional): 添加到的轨道名称. 当滤镜轨道仅有一条时可省略.
|
||||
intensity (`float`, optional): 滤镜强度(0-100). 仅当所选滤镜能够调节强度时有效. 默认为100.
|
||||
|
||||
Raises:
|
||||
`NameError`: 未找到指定名称的轨道, 或必须提供`track_name`参数时未提供
|
||||
`TypeError`: 指定的轨道不是滤镜轨道
|
||||
`ValueError`: 新片段与已有片段重叠
|
||||
"""
|
||||
target = self._get_track(FilterSegment, track_name)
|
||||
|
||||
# 加入轨道并更新时长
|
||||
segment = FilterSegment(filter_meta, t_range, intensity / 100.0) # 转换为0-1范围
|
||||
target.add_segment(segment)
|
||||
self.duration = max(self.duration, t_range.end)
|
||||
|
||||
# 自动添加相关素材
|
||||
self.materials.filters.append(segment.material)
|
||||
return self
|
||||
|
||||
def import_srt(self, srt_path: str, track_name: str, *,
|
||||
time_offset: Union[str, float] = 0.0,
|
||||
style_reference: Optional[TextSegment] = None,
|
||||
text_style: TextStyle = TextStyle(size=5, align=1, auto_wrapping=True),
|
||||
clip_settings: Optional[ClipSettings] = ClipSettings(transform_y=-0.8)) -> "ScriptFile":
|
||||
"""从SRT文件中导入字幕, 支持传入一个`TextSegment`作为样式参考
|
||||
|
||||
注意: 默认不会使用参考片段的`clip_settings`属性, 若需要请显式为此函数传入`clip_settings=None`
|
||||
|
||||
Args:
|
||||
srt_path (`str`): SRT文件路径
|
||||
track_name (`str`): 导入到的文本轨道名称, 若不存在则自动创建
|
||||
style_reference (`TextSegment`, optional): 作为样式参考的文本片段, 若提供则使用其样式.
|
||||
time_offset (`Union[str, float]`, optional): 字幕整体时间偏移, 单位为微秒, 默认为0.
|
||||
text_style (`TextStyle`, optional): 字幕样式, 默认模仿剪映导入字幕时的样式, 会被`style_reference`覆盖.
|
||||
clip_settings (`ClipSettings`, optional): 图像调节设置, 默认模仿剪映导入字幕时的设置, 会覆盖`style_reference`的设置除非指定为`None`.
|
||||
|
||||
Raises:
|
||||
`NameError`: 已存在同名轨道
|
||||
`TypeError`: 轨道类型不匹配
|
||||
"""
|
||||
if style_reference is None and clip_settings is None:
|
||||
raise ValueError("未提供样式参考时请提供`clip_settings`参数")
|
||||
|
||||
time_offset = tim(time_offset)
|
||||
if track_name not in self.tracks:
|
||||
self.add_track(TrackType.text, track_name, relative_index=999) # 在所有文本轨道的最上层
|
||||
|
||||
with open(srt_path, "r", encoding="utf-8-sig") as srt_file:
|
||||
lines = srt_file.readlines()
|
||||
|
||||
def __add_text_segment(text: str, t_range: Timerange) -> None:
|
||||
if style_reference:
|
||||
seg = TextSegment.create_from_template(text, t_range, style_reference)
|
||||
if clip_settings is not None:
|
||||
seg.clip_settings = deepcopy(clip_settings)
|
||||
else:
|
||||
seg = TextSegment(text, t_range, style=text_style, clip_settings=clip_settings)
|
||||
self.add_segment(seg, track_name)
|
||||
|
||||
index = 0
|
||||
text: str = ""
|
||||
text_trange: Timerange
|
||||
read_state: Literal["index", "timestamp", "content"] = "index"
|
||||
while index < len(lines):
|
||||
line = lines[index].strip()
|
||||
if read_state == "index":
|
||||
if len(line) == 0:
|
||||
index += 1
|
||||
continue
|
||||
if not line.isdigit():
|
||||
raise ValueError("Expected a number at line %d, got '%s'" % (index+1, line))
|
||||
index += 1
|
||||
read_state = "timestamp"
|
||||
elif read_state == "timestamp":
|
||||
# 读取时间戳
|
||||
start_str, end_str = line.split(" --> ")
|
||||
start, end = srt_tstamp(start_str), srt_tstamp(end_str)
|
||||
text_trange = Timerange(start + time_offset, end - start)
|
||||
|
||||
index += 1
|
||||
read_state = "content"
|
||||
elif read_state == "content":
|
||||
# 内容结束, 生成片段
|
||||
if len(line) == 0:
|
||||
__add_text_segment(text.strip(), text_trange)
|
||||
|
||||
text = ""
|
||||
read_state = "index"
|
||||
else:
|
||||
text += line + "\n"
|
||||
index += 1
|
||||
|
||||
# 添加最后一个片段
|
||||
if len(text) > 0:
|
||||
__add_text_segment(text.strip(), text_trange)
|
||||
|
||||
return self
|
||||
|
||||
def get_imported_track(self, track_type: Literal[TrackType.video, TrackType.audio, TrackType.text],
|
||||
name: Optional[str] = None, index: Optional[int] = None) -> EditableTrack:
|
||||
"""获取指定类型的导入轨道, 以便在其上进行替换
|
||||
|
||||
推荐使用轨道名称进行筛选(若已知轨道名称)
|
||||
|
||||
Args:
|
||||
track_type (`TrackType.video`, `TrackType.audio` or `TrackType.text`): 轨道类型, 目前只支持音视频和文本轨道
|
||||
name (`str`, optional): 轨道名称, 不指定则不根据名称筛选.
|
||||
index (`int`, optional): 轨道在**同类型的导入轨道**中的下标, 以0为最下层轨道. 不指定则不根据下标筛选.
|
||||
|
||||
Raises:
|
||||
`TrackNotFound`: 未找到满足条件的轨道
|
||||
`AmbiguousTrack`: 找到多个满足条件的轨道
|
||||
"""
|
||||
tracks_of_same_type: List[EditableTrack] = []
|
||||
for track in self.imported_tracks:
|
||||
if track.track_type == track_type:
|
||||
assert isinstance(track, EditableTrack)
|
||||
tracks_of_same_type.append(track)
|
||||
|
||||
ret: List[EditableTrack] = []
|
||||
for ind, track in enumerate(tracks_of_same_type):
|
||||
if (name is not None) and (track.name != name): continue
|
||||
if (index is not None) and (ind != index): continue
|
||||
ret.append(track)
|
||||
|
||||
if len(ret) == 0:
|
||||
raise exceptions.TrackNotFound(
|
||||
"没有找到满足条件的轨道: track_type=%s, name=%s, index=%s" % (track_type, name, index))
|
||||
if len(ret) > 1:
|
||||
raise exceptions.AmbiguousTrack(
|
||||
"找到多个满足条件的轨道: track_type=%s, name=%s, index=%s" % (track_type, name, index))
|
||||
|
||||
return ret[0]
|
||||
|
||||
def import_track(self, source_file: "ScriptFile", track: EditableTrack, *,
|
||||
offset: Union[str, int] = 0,
|
||||
new_name: Optional[str] = None, relative_index: Optional[int] = None) -> "ScriptFile":
|
||||
"""将一个`EditableTrack`导入到当前`ScriptFile`中, 如从模板草稿中导入特定的文本或视频轨道到当前正在编辑的草稿文件中
|
||||
|
||||
注意: 本方法会保留各片段及其素材的id, 因而不支持向同一草稿多次导入同一轨道
|
||||
|
||||
Args:
|
||||
source_file (`ScriptFile`): 源文件,包含要导入的轨道
|
||||
track (`EditableTrack`): 要导入的轨道, 可通过`get_imported_track`方法获取.
|
||||
offset (`str | int`, optional): 轨道的时间偏移量(微秒), 可以是整数微秒值或时间字符串(如"1s"). 默认不添加偏移.
|
||||
new_name (`str`, optional): 新轨道名称, 默认使用源轨道名称.
|
||||
relative_index (`int`, optional): 相对索引,用于调整导入轨道的渲染层级. 默认保持原有层级.
|
||||
"""
|
||||
# 直接拷贝原始轨道结构, 按需修改渲染层级
|
||||
imported_track = deepcopy(track)
|
||||
if relative_index is not None:
|
||||
imported_track.render_index = track.track_type.value.render_index + relative_index
|
||||
if new_name is not None:
|
||||
imported_track.name = new_name
|
||||
|
||||
# 应用偏移量
|
||||
offset_us = tim(offset)
|
||||
if offset_us != 0:
|
||||
for seg in imported_track.segments:
|
||||
seg.target_timerange.start = max(0, seg.target_timerange.start + offset_us)
|
||||
self.imported_tracks.append(imported_track)
|
||||
|
||||
# 收集所有需要复制的素材ID
|
||||
material_ids = set()
|
||||
segments: List[Dict[str, Any]] = track.raw_data.get("segments", [])
|
||||
for segment in segments:
|
||||
# 主素材ID
|
||||
material_id = segment.get("material_id")
|
||||
if material_id:
|
||||
material_ids.add(material_id)
|
||||
|
||||
# extra_material_refs中的素材ID
|
||||
extra_refs: List[str] = segment.get("extra_material_refs", [])
|
||||
material_ids.update(extra_refs)
|
||||
|
||||
# 复制素材
|
||||
for material_type, material_list in source_file.imported_materials.items():
|
||||
for material in material_list:
|
||||
if material.get("id") in material_ids:
|
||||
if material_type not in self.imported_materials:
|
||||
self.imported_materials[material_type] = []
|
||||
self.imported_materials[material_type].append(deepcopy(material))
|
||||
material_ids.remove(material.get("id"))
|
||||
|
||||
assert len(material_ids) == 0, "未找到以下素材: %s" % material_ids
|
||||
|
||||
# 更新总时长
|
||||
self.duration = max(self.duration, track.end_time)
|
||||
|
||||
return self
|
||||
|
||||
def replace_material_by_name(self, material_name: str, material: Union[VideoMaterial, AudioMaterial],
|
||||
replace_crop: bool = False) -> "ScriptFile":
|
||||
"""替换指定名称的素材, 并影响所有引用它的片段
|
||||
|
||||
这种方法不会改变相应片段的时长和引用范围(`source_timerange`), 尤其适合于图片素材
|
||||
|
||||
Args:
|
||||
material_name (`str`): 要替换的素材名称
|
||||
material (`VideoMaterial` or `AudioMaterial`): 新素材, 目前只支持视频和音频
|
||||
replace_crop (`bool`, optional): 是否替换原素材的裁剪设置, 默认为否. 仅对视频素材有效.
|
||||
|
||||
Raises:
|
||||
`MaterialNotFound`: 根据指定名称未找到与新素材同类的素材
|
||||
`AmbiguousMaterial`: 根据指定名称找到多个与新素材同类的素材
|
||||
"""
|
||||
video_mode = isinstance(material, VideoMaterial)
|
||||
# 查找素材
|
||||
target_json_obj: Optional[Dict[str, Any]] = None
|
||||
target_material_list = self.imported_materials["videos" if video_mode else "audios"]
|
||||
name_key = "material_name" if video_mode else "name"
|
||||
for mat in target_material_list:
|
||||
if mat[name_key] == material_name:
|
||||
if target_json_obj is not None:
|
||||
raise exceptions.AmbiguousMaterial(
|
||||
"找到多个名为 '%s', 类型为 '%s' 的素材" % (material_name, type(material)))
|
||||
target_json_obj = mat
|
||||
if target_json_obj is None:
|
||||
raise exceptions.MaterialNotFound("没有找到名为 '%s', 类型为 '%s' 的素材" % (material_name, type(material)))
|
||||
|
||||
# 更新素材信息
|
||||
target_json_obj.update({name_key: material.material_name, "path": material.path, "duration": material.duration})
|
||||
if video_mode:
|
||||
target_json_obj.update({"width": material.width, "height": material.height, "material_type": material.material_type})
|
||||
if replace_crop:
|
||||
target_json_obj.update({"crop": material.crop_settings.export_json()})
|
||||
|
||||
return self
|
||||
|
||||
def replace_material_by_seg(self, track: EditableTrack, segment_index: int, material: Union[VideoMaterial, AudioMaterial],
|
||||
source_timerange: Optional[Timerange] = None, *,
|
||||
handle_shrink: ShrinkMode = ShrinkMode.cut_tail,
|
||||
handle_extend: Union[ExtendMode, List[ExtendMode]] = ExtendMode.cut_material_tail) -> "ScriptFile":
|
||||
"""替换指定音视频轨道上指定片段的素材, 暂不支持变速片段的素材替换
|
||||
|
||||
Args:
|
||||
track (`EditableTrack`): 要替换素材的轨道, 由`get_imported_track`获取
|
||||
segment_index (`int`): 要替换素材的片段下标, 从0开始
|
||||
material (`VideoMaterial` or `AudioMaterial`): 新素材, 必须与原素材类型一致
|
||||
source_timerange (`Timerange`, optional): 从原素材中截取的时间范围, 默认为全时段, 若是图片素材则默认与原片段等长.
|
||||
handle_shrink (`Shrink_mode`, optional): 新素材比原素材短时的处理方式, 默认为裁剪尾部, 使片段长度与素材一致.
|
||||
handle_extend (`Extend_mode` or `List[Extend_mode]`, optional): 新素材比原素材长时的处理方式, 将按顺序逐个尝试直至成功或抛出异常.
|
||||
默认为截断素材尾部, 使片段维持原长不变
|
||||
|
||||
Raises:
|
||||
`IndexError`: `segment_index`越界
|
||||
`TypeError`: 轨道或素材类型不正确
|
||||
`ExtensionFailed`: 新素材比原素材长时处理失败
|
||||
"""
|
||||
if not isinstance(track, ImportedMediaTrack):
|
||||
raise TypeError("指定的轨道(类型为 %s)不支持素材替换" % track.track_type)
|
||||
if not 0 <= segment_index < len(track):
|
||||
raise IndexError("片段下标 %d 超出 [0, %d) 的范围" % (segment_index, len(track)))
|
||||
if not track.check_material_type(material):
|
||||
raise TypeError("指定的素材类型 %s 不匹配轨道类型 %s", (type(material), track.track_type))
|
||||
seg = track.segments[segment_index]
|
||||
|
||||
if isinstance(handle_extend, ExtendMode):
|
||||
handle_extend = [handle_extend]
|
||||
if source_timerange is None:
|
||||
if isinstance(material, VideoMaterial) and (material.material_type == "photo"):
|
||||
source_timerange = Timerange(0, seg.duration)
|
||||
else:
|
||||
source_timerange = Timerange(0, material.duration)
|
||||
|
||||
# 处理时间变化
|
||||
track.process_timerange(segment_index, source_timerange, handle_shrink, handle_extend)
|
||||
|
||||
# 最后替换素材链接
|
||||
track.segments[segment_index].material_id = material.material_id
|
||||
self.add_material(material)
|
||||
|
||||
# TODO: 更新总长
|
||||
return self
|
||||
|
||||
def replace_text(self, track: EditableTrack, segment_index: int, text: Union[str, List[str]],
|
||||
recalc_style: bool = True) -> "ScriptFile":
|
||||
"""替换指定文本轨道上指定片段的文字内容, 支持普通文本片段或文本模板片段
|
||||
|
||||
Args:
|
||||
track (`EditableTrack`): 要替换文字的文本轨道, 由`get_imported_track`获取
|
||||
segment_index (`int`): 要替换文字的片段下标, 从0开始
|
||||
text (`str` or `List[str]`): 新的文字内容, 对于文本模板而言应传入一个字符串列表.
|
||||
recalc_style (`bool`): 是否重新计算字体样式分布, 即调整各字体样式应用范围以尽量维持原有占比不变, 默认开启.
|
||||
|
||||
Raises:
|
||||
`IndexError`: `segment_index`越界
|
||||
`TypeError`: 轨道类型不正确
|
||||
`ValueError`: 文本模板片段的文本数量不匹配
|
||||
"""
|
||||
if not isinstance(track, ImportedTextTrack):
|
||||
raise TypeError("指定的轨道(类型为 %s)不支持文本内容替换" % track.track_type)
|
||||
if not 0 <= segment_index < len(track):
|
||||
raise IndexError("片段下标 %d 超出 [0, %d) 的范围" % (segment_index, len(track)))
|
||||
|
||||
def __recalc_style_range(old_len: int, new_len: int, styles: List[Dict[str, Any]]) -> List[Dict[str, Any]]:
|
||||
"""调整字体样式分布"""
|
||||
new_styles: List[Dict[str, Any]] = []
|
||||
for style in styles:
|
||||
start = math.ceil(style["range"][0] / old_len * new_len)
|
||||
end = math.ceil(style["range"][1] / old_len * new_len)
|
||||
style["range"] = [start, end]
|
||||
if start != end:
|
||||
new_styles.append(style)
|
||||
return new_styles
|
||||
|
||||
replaced: bool = False
|
||||
material_id: str = track.segments[segment_index].material_id
|
||||
# 尝试在文本素材中替换
|
||||
for mat in self.imported_materials["texts"]:
|
||||
if mat["id"] != material_id:
|
||||
continue
|
||||
|
||||
if isinstance(text, list):
|
||||
if len(text) != 1:
|
||||
raise ValueError(f"正常文本片段只能有一个文字内容, 但替换内容是 {text}")
|
||||
text = text[0]
|
||||
|
||||
content = json.loads(mat["content"])
|
||||
if recalc_style:
|
||||
content["styles"] = __recalc_style_range(len(content["text"]), len(text), content["styles"])
|
||||
content["text"] = text
|
||||
mat["content"] = json.dumps(content, ensure_ascii=False)
|
||||
replaced = True
|
||||
break
|
||||
if replaced:
|
||||
return self
|
||||
|
||||
# 尝试在文本模板中替换
|
||||
for template in self.imported_materials["text_templates"]:
|
||||
if template["id"] != material_id:
|
||||
continue
|
||||
|
||||
resources = template["text_info_resources"]
|
||||
if isinstance(text, str):
|
||||
text = [text]
|
||||
if len(text) > len(resources):
|
||||
raise ValueError(f"文字模板'{template['name']}'只有{len(resources)}段文本, 但提供了{len(text)}段替换内容")
|
||||
|
||||
for sub_material_id, new_text in zip(map(lambda x: x["text_material_id"], resources), text):
|
||||
for mat in self.imported_materials["texts"]:
|
||||
if mat["id"] != sub_material_id:
|
||||
continue
|
||||
|
||||
try:
|
||||
content = json.loads(mat["content"])
|
||||
if recalc_style:
|
||||
content["styles"] = __recalc_style_range(len(content["text"]), len(new_text), content["styles"])
|
||||
content["text"] = new_text
|
||||
mat["content"] = json.dumps(content, ensure_ascii=False)
|
||||
except json.JSONDecodeError:
|
||||
mat["content"] = new_text
|
||||
except TypeError:
|
||||
mat["content"] = new_text
|
||||
|
||||
break
|
||||
replaced = True
|
||||
break
|
||||
|
||||
assert replaced, f"未找到指定片段的素材 {material_id}"
|
||||
|
||||
return self
|
||||
|
||||
def inspect_material(self) -> None:
|
||||
"""输出草稿中导入的贴纸、文本气泡以及花字素材的元数据"""
|
||||
print("贴纸素材:")
|
||||
for sticker in self.imported_materials["stickers"]:
|
||||
print("\tResource id: %s '%s'" % (sticker["resource_id"], sticker.get("name", "")))
|
||||
|
||||
print("文字气泡效果:")
|
||||
for effect in self.imported_materials["effects"]:
|
||||
if effect["type"] == "text_shape":
|
||||
print("\tEffect id: %s ,Resource id: %s '%s'" %
|
||||
(effect["effect_id"], effect["resource_id"], effect.get("name", "")))
|
||||
|
||||
print("花字效果:")
|
||||
for effect in self.imported_materials["effects"]:
|
||||
if effect["type"] == "text_effect":
|
||||
print("\tResource id: %s '%s'" % (effect["resource_id"], effect.get("name", "")))
|
||||
|
||||
def dumps(self) -> str:
|
||||
"""将草稿文件内容导出为JSON字符串"""
|
||||
self.content["fps"] = self.fps
|
||||
self.content["duration"] = self.duration
|
||||
self.content["canvas_config"] = {"width": self.width, "height": self.height, "ratio": "original"}
|
||||
self.content["materials"] = self.materials.export_json()
|
||||
|
||||
# 合并导入的素材
|
||||
for material_type, material_list in self.imported_materials.items():
|
||||
if material_type not in self.content["materials"]:
|
||||
self.content["materials"][material_type] = material_list
|
||||
else:
|
||||
self.content["materials"][material_type].extend(material_list)
|
||||
|
||||
# 对轨道排序并导出
|
||||
track_list: List[BaseTrack] = list(self.imported_tracks + list(self.tracks.values())) # 新加入的轨道在列表末尾(上层)
|
||||
track_list.sort(key=lambda track: track.render_index)
|
||||
self.content["tracks"] = [track.export_json() for track in track_list]
|
||||
|
||||
return json.dumps(self.content, ensure_ascii=False, indent=4)
|
||||
|
||||
def dump(self, file_path: str) -> None:
|
||||
"""将草稿文件内容写入文件"""
|
||||
with open(file_path, "w", encoding="utf-8") as f:
|
||||
f.write(self.dumps())
|
||||
|
||||
def save(self) -> None:
|
||||
"""保存草稿文件至打开时的路径
|
||||
|
||||
Raises:
|
||||
`ValueError`: 没有设置保存路径
|
||||
"""
|
||||
if self.save_path is None:
|
||||
raise ValueError("没有设置保存路径, 可能不在模板模式下")
|
||||
self.dump(self.save_path)
|
||||
@@ -0,0 +1,261 @@
|
||||
"""定义片段基类及部分比较通用的属性类"""
|
||||
|
||||
import uuid
|
||||
from typing import Optional, Dict, List, Any, Union
|
||||
|
||||
from .animation import SegmentAnimations
|
||||
from .time_util import Timerange, tim
|
||||
from .keyframe import KeyframeList, KeyframeProperty
|
||||
|
||||
class BaseSegment:
|
||||
"""片段基类"""
|
||||
|
||||
segment_id: str
|
||||
"""片段全局id, 由程序自动生成"""
|
||||
material_id: str
|
||||
"""使用的素材id"""
|
||||
target_timerange: Timerange
|
||||
"""片段在轨道上的时间范围"""
|
||||
|
||||
common_keyframes: List[KeyframeList]
|
||||
"""各属性的关键帧列表"""
|
||||
|
||||
def __init__(self, material_id: str, target_timerange: Timerange):
|
||||
self.segment_id = uuid.uuid4().hex
|
||||
self.material_id = material_id
|
||||
self.target_timerange = target_timerange
|
||||
|
||||
self.common_keyframes = []
|
||||
|
||||
@property
|
||||
def start(self) -> int:
|
||||
"""片段开始时间, 单位为微秒"""
|
||||
return self.target_timerange.start
|
||||
@start.setter
|
||||
def start(self, value: int):
|
||||
self.target_timerange.start = value
|
||||
|
||||
@property
|
||||
def duration(self) -> int:
|
||||
"""片段持续时间, 单位为微秒"""
|
||||
return self.target_timerange.duration
|
||||
@duration.setter
|
||||
def duration(self, value: int):
|
||||
self.target_timerange.duration = value
|
||||
|
||||
@property
|
||||
def end(self) -> int:
|
||||
"""片段结束时间, 单位为微秒"""
|
||||
return self.target_timerange.end
|
||||
|
||||
def overlaps(self, other: "BaseSegment") -> bool:
|
||||
"""判断是否与另一个片段有重叠"""
|
||||
return self.target_timerange.overlaps(other.target_timerange)
|
||||
|
||||
def export_json(self) -> Dict[str, Any]:
|
||||
"""返回通用于各种片段的属性"""
|
||||
return {
|
||||
"enable_adjust": True,
|
||||
"enable_color_correct_adjust": False,
|
||||
"enable_color_curves": True,
|
||||
"enable_color_match_adjust": False,
|
||||
"enable_color_wheels": True,
|
||||
"enable_lut": True,
|
||||
"enable_smart_color_adjust": False,
|
||||
"last_nonzero_volume": 1.0,
|
||||
"reverse": False,
|
||||
"track_attribute": 0,
|
||||
"track_render_index": 0,
|
||||
"visible": True,
|
||||
# 写入自定义字段
|
||||
"id": self.segment_id,
|
||||
"material_id": self.material_id,
|
||||
"target_timerange": self.target_timerange.export_json(),
|
||||
|
||||
"common_keyframes": [kf_list.export_json() for kf_list in self.common_keyframes],
|
||||
"keyframe_refs": [], # 意义不明
|
||||
}
|
||||
|
||||
class Speed:
|
||||
"""播放速度对象, 目前只支持固定速度"""
|
||||
|
||||
global_id: str
|
||||
"""全局id, 由程序自动生成"""
|
||||
speed: float
|
||||
"""播放速度"""
|
||||
|
||||
def __init__(self, speed: float):
|
||||
self.global_id = uuid.uuid4().hex
|
||||
self.speed = speed
|
||||
|
||||
def export_json(self) -> Dict[str, Any]:
|
||||
return {
|
||||
"curve_speed": None,
|
||||
"id": self.global_id,
|
||||
"mode": 0,
|
||||
"speed": self.speed,
|
||||
"type": "speed"
|
||||
}
|
||||
|
||||
class ClipSettings:
|
||||
"""素材片段的图像调节设置"""
|
||||
|
||||
alpha: float
|
||||
"""图像不透明度, 0-1"""
|
||||
flip_horizontal: bool
|
||||
"""是否水平翻转"""
|
||||
flip_vertical: bool
|
||||
"""是否垂直翻转"""
|
||||
rotation: float
|
||||
"""顺时针旋转的**角度**, 可正可负"""
|
||||
scale_x: float
|
||||
"""水平缩放比例"""
|
||||
scale_y: float
|
||||
"""垂直缩放比例"""
|
||||
transform_x: float
|
||||
"""水平位移, 单位为半个画布宽"""
|
||||
transform_y: float
|
||||
"""垂直位移, 单位为半个画布高"""
|
||||
|
||||
def __init__(self, *, alpha: float = 1.0,
|
||||
flip_horizontal: bool = False, flip_vertical: bool = False,
|
||||
rotation: float = 0.0,
|
||||
scale_x: float = 1.0, scale_y: float = 1.0,
|
||||
transform_x: float = 0.0, transform_y: float = 0.0):
|
||||
"""初始化图像调节设置, 默认不作任何图像变换
|
||||
|
||||
Args:
|
||||
alpha (float, optional): 图像不透明度, 0-1. 默认为1.0.
|
||||
flip_horizontal (bool, optional): 是否水平翻转. 默认为False.
|
||||
flip_vertical (bool, optional): 是否垂直翻转. 默认为False.
|
||||
rotation (float, optional): 顺时针旋转的**角度**, 可正可负. 默认为0.0.
|
||||
scale_x (float, optional): 水平缩放比例. 默认为1.0.
|
||||
scale_y (float, optional): 垂直缩放比例. 默认为1.0.
|
||||
transform_x (float, optional): 水平位移, 单位为半个画布宽. 默认为0.0.
|
||||
transform_y (float, optional): 垂直位移, 单位为半个画布高. 默认为0.0.
|
||||
参考: 剪映导入的字幕似乎取此值为-0.8
|
||||
"""
|
||||
self.alpha = alpha
|
||||
self.flip_horizontal, self.flip_vertical = flip_horizontal, flip_vertical
|
||||
self.rotation = rotation
|
||||
self.scale_x, self.scale_y = scale_x, scale_y
|
||||
self.transform_x, self.transform_y = transform_x, transform_y
|
||||
|
||||
def export_json(self) -> Dict[str, Any]:
|
||||
clip_settings_json = {
|
||||
"alpha": self.alpha,
|
||||
"flip": {"horizontal": self.flip_horizontal, "vertical": self.flip_vertical},
|
||||
"rotation": self.rotation,
|
||||
"scale": {"x": self.scale_x, "y": self.scale_y},
|
||||
"transform": {"x": self.transform_x, "y": self.transform_y}
|
||||
}
|
||||
return clip_settings_json
|
||||
|
||||
class MediaSegment(BaseSegment):
|
||||
"""媒体片段基类"""
|
||||
|
||||
source_timerange: Optional[Timerange]
|
||||
"""截取的素材片段的时间范围, 对贴纸而言不存在"""
|
||||
speed: Speed
|
||||
"""播放速度设置"""
|
||||
volume: float
|
||||
"""音量"""
|
||||
change_pitch: bool
|
||||
"""是否跟随变速改变音调"""
|
||||
|
||||
extra_material_refs: List[str]
|
||||
"""附加的素材id列表, 用于链接动画/特效等"""
|
||||
|
||||
def __init__(self, material_id: str, source_timerange: Optional[Timerange], target_timerange: Timerange, speed: float, volume: float, change_pitch: bool):
|
||||
super().__init__(material_id, target_timerange)
|
||||
|
||||
self.source_timerange = source_timerange
|
||||
self.speed = Speed(speed)
|
||||
self.volume = volume
|
||||
self.change_pitch = change_pitch
|
||||
|
||||
self.extra_material_refs = [self.speed.global_id]
|
||||
|
||||
def export_json(self) -> Dict[str, Any]:
|
||||
"""返回通用于音频和视频片段的默认属性"""
|
||||
ret = super().export_json()
|
||||
ret.update({
|
||||
"source_timerange": self.source_timerange.export_json() if self.source_timerange else None,
|
||||
"speed": self.speed.speed,
|
||||
"volume": self.volume,
|
||||
"extra_material_refs": self.extra_material_refs,
|
||||
"is_tone_modify": self.change_pitch,
|
||||
})
|
||||
return ret
|
||||
|
||||
class VisualSegment(MediaSegment):
|
||||
"""视觉片段基类,用于处理所有可见片段(视频、贴纸、文本)的共同属性和行为"""
|
||||
|
||||
clip_settings: ClipSettings
|
||||
"""图像调节设置, 其效果可被关键帧覆盖"""
|
||||
|
||||
uniform_scale: bool
|
||||
"""是否锁定XY轴缩放比例"""
|
||||
|
||||
animations_instance: Optional[SegmentAnimations]
|
||||
"""动画实例, 可能为空
|
||||
|
||||
在放入轨道时自动添加到素材列表中
|
||||
"""
|
||||
|
||||
def __init__(self, material_id: str, source_timerange: Optional[Timerange], target_timerange: Timerange,
|
||||
speed: float, volume: float, change_pitch: bool, *, clip_settings: Optional[ClipSettings]):
|
||||
"""初始化视觉片段基类
|
||||
|
||||
Args:
|
||||
material_id (`str`): 素材id
|
||||
source_timerange (`Timerange`, optional): 截取的素材片段的时间范围
|
||||
target_timerange (`Timerange`): 片段在轨道上的目标时间范围
|
||||
speed (`float`): 播放速度
|
||||
volume (`float`): 音量
|
||||
change_pitch (`bool`): 是否跟随变速改变音调
|
||||
clip_settings (`ClipSettings`, optional): 图像调节设置, 默认不作任何变换
|
||||
"""
|
||||
super().__init__(material_id, source_timerange, target_timerange, speed, volume, change_pitch)
|
||||
|
||||
self.clip_settings = clip_settings if clip_settings is not None else ClipSettings()
|
||||
self.uniform_scale = True
|
||||
self.animations_instance = None
|
||||
|
||||
def add_keyframe(self, _property: KeyframeProperty, time_offset: Union[int, str], value: float) -> "VisualSegment":
|
||||
"""为给定属性创建一个关键帧, 并自动加入到关键帧列表中
|
||||
|
||||
Args:
|
||||
_property (`KeyframeProperty`): 要控制的属性
|
||||
time_offset (`int` or `str`): 关键帧的时间偏移量, 单位为微秒. 若传入字符串则会调用`tim()`函数进行解析.
|
||||
value (`float`): 属性在`time_offset`处的值
|
||||
|
||||
Raises:
|
||||
`ValueError`: 试图同时设置`uniform_scale`以及`scale_x`或`scale_y`其中一者
|
||||
"""
|
||||
if (_property == KeyframeProperty.scale_x or _property == KeyframeProperty.scale_y) and self.uniform_scale:
|
||||
self.uniform_scale = False
|
||||
elif _property == KeyframeProperty.uniform_scale:
|
||||
if not self.uniform_scale:
|
||||
raise ValueError("已设置 scale_x 或 scale_y 时, 不能再设置 uniform_scale")
|
||||
_property = KeyframeProperty.scale_x
|
||||
|
||||
if isinstance(time_offset, str): time_offset = tim(time_offset)
|
||||
|
||||
for kf_list in self.common_keyframes:
|
||||
if kf_list.keyframe_property == _property:
|
||||
kf_list.add_keyframe(time_offset, value)
|
||||
return self
|
||||
kf_list = KeyframeList(_property)
|
||||
kf_list.add_keyframe(time_offset, value)
|
||||
self.common_keyframes.append(kf_list)
|
||||
return self
|
||||
|
||||
def export_json(self) -> Dict[str, Any]:
|
||||
"""导出通用于所有视觉片段的JSON数据"""
|
||||
json_dict = super().export_json()
|
||||
json_dict.update({
|
||||
"clip": self.clip_settings.export_json(),
|
||||
"uniform_scale": {"on": self.uniform_scale, "value": 1.0},
|
||||
})
|
||||
return json_dict
|
||||
@@ -0,0 +1,221 @@
|
||||
"""与模板模式相关的类及函数等"""
|
||||
|
||||
from enum import Enum
|
||||
from copy import deepcopy
|
||||
|
||||
from . import util
|
||||
from . import exceptions
|
||||
from .time_util import Timerange
|
||||
from .segment import BaseSegment
|
||||
from .track import BaseTrack, TrackType
|
||||
from .local_materials import VideoMaterial, AudioMaterial
|
||||
|
||||
from typing import List, Dict, Any
|
||||
|
||||
class ShrinkMode(Enum):
|
||||
"""处理替换素材时素材变短情况的方法"""
|
||||
|
||||
cut_head = "cut_head"
|
||||
"""裁剪头部, 即后移片段起始点"""
|
||||
cut_tail = "cut_tail"
|
||||
"""裁剪尾部, 即前移片段终止点"""
|
||||
|
||||
cut_tail_align = "cut_tail_align"
|
||||
"""裁剪尾部并消除间隙, 即前移片段终止点, 后续片段也依次前移"""
|
||||
|
||||
shrink = "shrink"
|
||||
"""保持中间点不变, 两端点向中间靠拢"""
|
||||
|
||||
class ExtendMode(Enum):
|
||||
"""处理替换素材时素材变长情况的方法"""
|
||||
|
||||
cut_material_tail = "cut_material_tail"
|
||||
"""裁剪素材尾部(覆盖`source_timerange`参数), 使得片段维持原长不变, 此方法总是成功"""
|
||||
|
||||
extend_head = "extend_head"
|
||||
"""延伸头部, 即尝试前移片段起始点, 与前续片段重合时失败"""
|
||||
extend_tail = "extend_tail"
|
||||
"""延伸尾部, 即尝试后移片段终止点, 与后续片段重合时失败"""
|
||||
|
||||
push_tail = "push_tail"
|
||||
"""延伸尾部, 若有必要则依次后移后续片段, 此方法总是成功"""
|
||||
|
||||
class ImportedSegment(BaseSegment):
|
||||
"""导入的片段"""
|
||||
|
||||
raw_data: Dict[str, Any]
|
||||
"""原始json数据"""
|
||||
|
||||
__DATA_ATTRS = ["material_id", "target_timerange"]
|
||||
def __init__(self, json_data: Dict[str, Any]):
|
||||
self.raw_data = deepcopy(json_data)
|
||||
|
||||
util.assign_attr_with_json(self, self.__DATA_ATTRS, json_data)
|
||||
|
||||
def export_json(self) -> Dict[str, Any]:
|
||||
json_data = deepcopy(self.raw_data)
|
||||
json_data.update(util.export_attr_to_json(self, self.__DATA_ATTRS))
|
||||
return json_data
|
||||
|
||||
class ImportedMediaSegment(ImportedSegment):
|
||||
"""导入的视频/音频片段"""
|
||||
|
||||
source_timerange: Timerange
|
||||
"""片段取用的素材时间范围"""
|
||||
|
||||
__DATA_ATTRS = ["source_timerange"]
|
||||
def __init__(self, json_data: Dict[str, Any]):
|
||||
super().__init__(json_data)
|
||||
|
||||
util.assign_attr_with_json(self, self.__DATA_ATTRS, json_data)
|
||||
|
||||
def export_json(self) -> Dict[str, Any]:
|
||||
json_data = super().export_json()
|
||||
json_data.update(util.export_attr_to_json(self, self.__DATA_ATTRS))
|
||||
return json_data
|
||||
|
||||
|
||||
class ImportedTrack(BaseTrack):
|
||||
"""模板模式下导入的轨道"""
|
||||
|
||||
raw_data: Dict[str, Any]
|
||||
"""原始轨道数据"""
|
||||
|
||||
def __init__(self, json_data: Dict[str, Any]):
|
||||
self.track_type = TrackType.from_name(json_data["type"])
|
||||
self.name = json_data["name"]
|
||||
self.track_id = json_data["id"]
|
||||
self.render_index = max([int(seg["render_index"]) for seg in json_data["segments"]], default=0)
|
||||
|
||||
self.raw_data = deepcopy(json_data)
|
||||
|
||||
def export_json(self) -> Dict[str, Any]:
|
||||
ret = deepcopy(self.raw_data)
|
||||
ret.update({
|
||||
"name": self.name,
|
||||
"id": self.track_id
|
||||
})
|
||||
return ret
|
||||
|
||||
class EditableTrack(ImportedTrack):
|
||||
"""模板模式下导入且可修改的轨道(音视频及文本轨道)"""
|
||||
|
||||
segments: List[ImportedSegment]
|
||||
"""该轨道包含的片段列表"""
|
||||
|
||||
def __len__(self):
|
||||
return len(self.segments)
|
||||
|
||||
@property
|
||||
def start_time(self) -> int:
|
||||
"""轨道起始时间, 微秒"""
|
||||
if len(self.segments) == 0:
|
||||
return 0
|
||||
return self.segments[0].target_timerange.start
|
||||
|
||||
@property
|
||||
def end_time(self) -> int:
|
||||
"""轨道结束时间, 微秒"""
|
||||
if len(self.segments) == 0:
|
||||
return 0
|
||||
return self.segments[-1].target_timerange.end
|
||||
|
||||
def export_json(self) -> Dict[str, Any]:
|
||||
ret = super().export_json()
|
||||
# 为每个片段写入render_index
|
||||
segment_exports = [seg.export_json() for seg in self.segments]
|
||||
for seg in segment_exports:
|
||||
seg["render_index"] = self.render_index
|
||||
ret["segments"] = segment_exports
|
||||
return ret
|
||||
|
||||
class ImportedTextTrack(EditableTrack):
|
||||
"""模板模式下导入的文本轨道"""
|
||||
|
||||
def __init__(self, json_data: Dict[str, Any]):
|
||||
super().__init__(json_data)
|
||||
self.segments = [ImportedSegment(seg) for seg in json_data["segments"]]
|
||||
|
||||
class ImportedMediaTrack(EditableTrack):
|
||||
"""模板模式下导入的音频/视频轨道"""
|
||||
|
||||
segments: List[ImportedMediaSegment]
|
||||
"""该轨道包含的片段列表"""
|
||||
|
||||
def __init__(self, json_data: Dict[str, Any]):
|
||||
super().__init__(json_data)
|
||||
self.segments = [ImportedMediaSegment(seg) for seg in json_data["segments"]]
|
||||
|
||||
def check_material_type(self, material: object) -> bool:
|
||||
"""检查素材类型是否与轨道类型匹配"""
|
||||
if self.track_type == TrackType.video and isinstance(material, VideoMaterial):
|
||||
return True
|
||||
if self.track_type == TrackType.audio and isinstance(material, AudioMaterial):
|
||||
return True
|
||||
return False
|
||||
|
||||
def process_timerange(self, seg_index: int, src_timerange: Timerange,
|
||||
shrink: ShrinkMode, extend: List[ExtendMode]) -> None:
|
||||
"""处理素材替换的时间范围变更"""
|
||||
seg = self.segments[seg_index]
|
||||
new_duration = src_timerange.duration
|
||||
|
||||
# 时长变短
|
||||
delta_duration = abs(new_duration - seg.duration)
|
||||
if new_duration < seg.duration:
|
||||
if shrink == ShrinkMode.cut_head:
|
||||
seg.start += delta_duration
|
||||
elif shrink == ShrinkMode.cut_tail:
|
||||
seg.duration -= delta_duration
|
||||
elif shrink == ShrinkMode.cut_tail_align:
|
||||
seg.duration -= delta_duration
|
||||
for i in range(seg_index+1, len(self.segments)): # 后续片段也依次前移相应值(保持间隙)
|
||||
self.segments[i].start -= delta_duration
|
||||
elif shrink == ShrinkMode.shrink:
|
||||
seg.duration -= delta_duration
|
||||
seg.start += delta_duration // 2
|
||||
else:
|
||||
raise ValueError(f"Unsupported shrink mode: {shrink}")
|
||||
# 时长变长
|
||||
elif new_duration > seg.duration:
|
||||
success_flag = False
|
||||
prev_seg_end = int(0) if seg_index == 0 else self.segments[seg_index-1].target_timerange.end
|
||||
next_seg_start = int(1e15) if seg_index == len(self.segments)-1 else self.segments[seg_index+1].start
|
||||
for mode in extend:
|
||||
if mode == ExtendMode.extend_head:
|
||||
if seg.start - delta_duration >= prev_seg_end:
|
||||
seg.start -= delta_duration
|
||||
success_flag = True
|
||||
elif mode == ExtendMode.extend_tail:
|
||||
if seg.target_timerange.end + delta_duration <= next_seg_start:
|
||||
seg.duration += delta_duration
|
||||
success_flag = True
|
||||
elif mode == ExtendMode.push_tail:
|
||||
shift_duration = max(0, seg.target_timerange.end + delta_duration - next_seg_start)
|
||||
seg.duration += delta_duration
|
||||
if shift_duration > 0: # 有必要时后移后续片段
|
||||
for i in range(seg_index+1, len(self.segments)):
|
||||
self.segments[i].start += shift_duration
|
||||
success_flag = True
|
||||
elif mode == ExtendMode.cut_material_tail:
|
||||
src_timerange.duration = seg.duration
|
||||
success_flag = True
|
||||
else:
|
||||
raise ValueError(f"Unsupported extend mode: {mode}")
|
||||
|
||||
if success_flag:
|
||||
break
|
||||
if not success_flag:
|
||||
raise exceptions.ExtensionFailed(f"未能将片段延长至 {new_duration}μs, 尝试过以下方法: {extend}")
|
||||
|
||||
# 写入素材时间范围
|
||||
seg.source_timerange = src_timerange
|
||||
|
||||
def import_track(json_data: Dict[str, Any]) -> ImportedTrack:
|
||||
"""导入轨道"""
|
||||
track_type = TrackType.from_name(json_data["type"])
|
||||
if not track_type.value.allow_modify:
|
||||
return ImportedTrack(json_data)
|
||||
if track_type == TrackType.text:
|
||||
return ImportedTextTrack(json_data)
|
||||
return ImportedMediaTrack(json_data)
|
||||
@@ -0,0 +1,457 @@
|
||||
"""定义文本片段及其相关类"""
|
||||
|
||||
import json
|
||||
import uuid
|
||||
from copy import deepcopy
|
||||
|
||||
from typing import Dict, Tuple, Any
|
||||
from typing import Union, Optional, Literal
|
||||
|
||||
from .time_util import Timerange, tim
|
||||
from .segment import ClipSettings, VisualSegment
|
||||
from .animation import SegmentAnimations, Text_animation
|
||||
|
||||
from .metadata import FontType, EffectMeta
|
||||
from .metadata import TextIntro, TextOutro, TextLoopAnim
|
||||
|
||||
class TextStyle:
|
||||
"""字体样式类"""
|
||||
|
||||
size: float
|
||||
"""字体大小"""
|
||||
|
||||
bold: bool
|
||||
"""是否加粗"""
|
||||
italic: bool
|
||||
"""是否斜体"""
|
||||
underline: bool
|
||||
"""是否加下划线"""
|
||||
|
||||
color: Tuple[float, float, float]
|
||||
"""字体颜色, RGB三元组, 取值范围为[0, 1]"""
|
||||
alpha: float
|
||||
"""字体不透明度"""
|
||||
|
||||
align: Literal[0, 1, 2]
|
||||
"""对齐方式"""
|
||||
vertical: bool
|
||||
"""是否为竖排文本"""
|
||||
|
||||
letter_spacing: int
|
||||
"""字符间距"""
|
||||
line_spacing: int
|
||||
"""行间距"""
|
||||
|
||||
auto_wrapping: bool
|
||||
"""是否自动换行"""
|
||||
max_line_width: float
|
||||
"""最大行宽, 取值范围为[0, 1]"""
|
||||
|
||||
def __init__(self, *, size: float = 8.0, bold: bool = False, italic: bool = False, underline: bool = False,
|
||||
color: Tuple[float, float, float] = (1.0, 1.0, 1.0), alpha: float = 1.0,
|
||||
align: Literal[0, 1, 2] = 0, vertical: bool = False,
|
||||
letter_spacing: int = 0, line_spacing: int = 0,
|
||||
auto_wrapping: bool = False, max_line_width: float = 0.82):
|
||||
"""
|
||||
Args:
|
||||
size (`float`, optional): 字体大小, 默认为8.0
|
||||
bold (`bool`, optional): 是否加粗, 默认为否
|
||||
italic (`bool`, optional): 是否斜体, 默认为否
|
||||
underline (`bool`, optional): 是否加下划线, 默认为否
|
||||
color (`Tuple[float, float, float]`, optional): 字体颜色, RGB三元组, 取值范围为[0, 1], 默认为白色
|
||||
alpha (`float`, optional): 字体不透明度, 取值范围[0, 1], 默认不透明
|
||||
align (`int`, optional): 对齐方式, 0: 左对齐, 1: 居中, 2: 右对齐, 默认为左对齐
|
||||
vertical (`bool`, optional): 是否为竖排文本, 默认为否
|
||||
letter_spacing (`int`, optional): 字符间距, 定义与剪映中一致, 默认为0
|
||||
line_spacing (`int`, optional): 行间距, 定义与剪映中一致, 默认为0
|
||||
auto_wrapping (`bool`, optional): 是否自动换行, 默认关闭
|
||||
max_line_width (`float`, optional): 每行最大行宽占屏幕宽度比例, 取值范围为[0, 1], 默认为0.82
|
||||
"""
|
||||
self.size = size
|
||||
self.bold = bold
|
||||
self.italic = italic
|
||||
self.underline = underline
|
||||
|
||||
self.color = color
|
||||
self.alpha = alpha
|
||||
|
||||
self.align = align
|
||||
self.vertical = vertical
|
||||
|
||||
self.letter_spacing = letter_spacing
|
||||
self.line_spacing = line_spacing
|
||||
|
||||
self.auto_wrapping = auto_wrapping
|
||||
self.max_line_width = max_line_width
|
||||
|
||||
class TextBorder:
|
||||
"""文本描边的参数"""
|
||||
|
||||
alpha: float
|
||||
"""描边不透明度"""
|
||||
color: Tuple[float, float, float]
|
||||
"""描边颜色, RGB三元组, 取值范围为[0, 1]"""
|
||||
width: float
|
||||
"""描边宽度"""
|
||||
|
||||
def __init__(self, *, alpha: float = 1.0, color: Tuple[float, float, float] = (0.0, 0.0, 0.0), width: float = 40.0):
|
||||
"""
|
||||
Args:
|
||||
alpha (`float`, optional): 描边不透明度, 取值范围[0, 1], 默认为1.0
|
||||
color (`Tuple[float, float, float]`, optional): 描边颜色, RGB三元组, 取值范围为[0, 1], 默认为黑色
|
||||
width (`float`, optional): 描边宽度, 与剪映中一致, 取值范围为[0, 100], 默认为40.0
|
||||
"""
|
||||
self.alpha = alpha
|
||||
self.color = color
|
||||
self.width = width / 100.0 * 0.2 # 此映射可能不完全正确
|
||||
|
||||
def export_json(self) -> Dict[str, Any]:
|
||||
"""导出JSON数据, 放置在素材content的styles中"""
|
||||
return {
|
||||
"content": {
|
||||
"solid": {
|
||||
"alpha": self.alpha,
|
||||
"color": list(self.color),
|
||||
}
|
||||
},
|
||||
"width": self.width
|
||||
}
|
||||
|
||||
class TextBackground:
|
||||
"""文本背景参数"""
|
||||
|
||||
style: Literal[1, 2]
|
||||
"""背景样式"""
|
||||
|
||||
alpha: float
|
||||
"""背景不透明度"""
|
||||
color: str
|
||||
"""背景颜色, 格式为'#RRGGBB'"""
|
||||
round_radius: float
|
||||
"""背景圆角半径"""
|
||||
height: float
|
||||
"""背景高度"""
|
||||
width: float
|
||||
"""背景宽度"""
|
||||
horizontal_offset: float
|
||||
"""背景水平偏移"""
|
||||
vertical_offset: float
|
||||
"""背景竖直偏移"""
|
||||
|
||||
def __init__(self, *, color: str, style: Literal[1, 2] = 1, alpha: float = 1.0, round_radius: float = 0.0,
|
||||
height: float = 0.14, width: float = 0.14,
|
||||
horizontal_offset: float = 0.5, vertical_offset: float = 0.5):
|
||||
"""
|
||||
Args:
|
||||
color (`str`): 背景颜色, 格式为'#RRGGBB'
|
||||
style (`int`, optional): 背景样式, 1和2分别对应剪映中的两种样式, 默认为1
|
||||
alpha (`float`, optional): 背景不透明度, 与剪映中一致, 取值范围[0, 1], 默认为1.0
|
||||
round_radius (`float`, optional): 背景圆角半径, 与剪映中一致, 取值范围[0, 1], 默认为0.0
|
||||
height (`float`, optional): 背景高度, 与剪映中一致, 取值范围为[0, 1], 默认为0.14
|
||||
width (`float`, optional): 背景宽度, 与剪映中一致, 取值范围为[0, 1], 默认为0.14
|
||||
horizontal_offset (`float`, optional): 背景水平偏移, 与剪映中一致, 取值范围为[0, 1], 默认为0.5
|
||||
vertical_offset (`float`, optional): 背景竖直偏移, 与剪映中一致, 取值范围为[0, 1], 默认为0.5
|
||||
"""
|
||||
self.style = style
|
||||
|
||||
self.alpha = alpha
|
||||
self.color = color
|
||||
self.round_radius = round_radius
|
||||
self.height = height
|
||||
self.width = width
|
||||
self.horizontal_offset = horizontal_offset * 2 - 1
|
||||
self.vertical_offset = vertical_offset * 2 - 1
|
||||
|
||||
def export_json(self) -> Dict[str, Any]:
|
||||
"""生成子JSON数据, 在TextSegment导出时合并到其中"""
|
||||
return {
|
||||
"background_style": self.style,
|
||||
"background_color": self.color,
|
||||
"background_alpha": self.alpha,
|
||||
"background_round_radius": self.round_radius,
|
||||
"background_height": self.height,
|
||||
"background_width": self.width,
|
||||
"background_horizontal_offset": self.horizontal_offset,
|
||||
"background_vertical_offset": self.vertical_offset,
|
||||
}
|
||||
|
||||
class TextBubble:
|
||||
"""文本气泡素材, 与滤镜素材本质上一致"""
|
||||
|
||||
global_id: str
|
||||
"""气泡全局id, 由程序自动生成"""
|
||||
|
||||
effect_id: str
|
||||
resource_id: str
|
||||
|
||||
def __init__(self, effect_id: str, resource_id: str):
|
||||
self.global_id = uuid.uuid4().hex
|
||||
self.effect_id = effect_id
|
||||
self.resource_id = resource_id
|
||||
|
||||
def export_json(self) -> Dict[str, Any]:
|
||||
return {
|
||||
"apply_target_type": 0,
|
||||
"effect_id": self.effect_id,
|
||||
"id": self.global_id,
|
||||
"resource_id": self.resource_id,
|
||||
"type": "text_shape",
|
||||
"value": 1.0,
|
||||
# 不导出path和request_id
|
||||
}
|
||||
|
||||
class TextEffect(TextBubble):
|
||||
"""文本花字素材, 与滤镜素材本质上也一致"""
|
||||
|
||||
def export_json(self) -> Dict[str, Any]:
|
||||
ret = super().export_json()
|
||||
ret["type"] = "text_effect"
|
||||
ret["source_platform"] = 1
|
||||
return ret
|
||||
|
||||
class TextShadow:
|
||||
"""文本阴影参数"""
|
||||
|
||||
alpha: float
|
||||
"""阴影不透明度, 取值范围为[0, 1]"""
|
||||
color: Tuple[float, float, float]
|
||||
"""阴影颜色, RGB三元组, 取值范围为[0, 1]"""
|
||||
diffuse: float
|
||||
"""阴影扩散程度, 此处定义与剪映中一致, 取值范围为[0, 100]"""
|
||||
distance: float
|
||||
"""阴影距离, 取值范围为[0, 100]"""
|
||||
angle: float
|
||||
"""阴影角度, 取值范围为[-180, 180]"""
|
||||
|
||||
def __init__(self, *, alpha: float = 1.0, color: Tuple[float, float, float] = (0.0, 0.0, 0.0),
|
||||
diffuse: float = 15.0, distance: float = 5.0, angle: float = -45.0):
|
||||
"""
|
||||
Args:
|
||||
alpha (`float`, optional): 阴影不透明度, 取值范围为[0, 1], 默认为1.0
|
||||
color (`Tuple[float, float, float]`, optional): 阴影颜色, RGB三元组, 取值范围为[0, 1], 默认为黑色
|
||||
diffuse (`float`, optional): 阴影扩散程度, 此处定义与剪映中一致, 取值范围为[0, 100], 默认为15.0
|
||||
distance (`float`, optional): 阴影距离, 取值范围为[0, 100], 默认为5.0
|
||||
angle (`float`, optional): 阴影角度, 取值范围为[-180, 180], 默认为-45.0
|
||||
"""
|
||||
self.alpha = alpha
|
||||
self.color = color
|
||||
self.diffuse = diffuse
|
||||
self.distance = distance
|
||||
self.angle = angle
|
||||
|
||||
def export_json(self) -> Dict[str, Any]:
|
||||
return {
|
||||
"diffuse": self.diffuse / 100.0 / 6, # /6是剪映自带的映射
|
||||
"alpha": self.alpha,
|
||||
"distance": self.distance,
|
||||
"content": {
|
||||
"solid": {
|
||||
"color": list(self.color),
|
||||
}
|
||||
},
|
||||
"angle": self.angle
|
||||
}
|
||||
|
||||
class TextSegment(VisualSegment):
|
||||
"""文本片段类, 目前仅支持设置基本的字体样式"""
|
||||
|
||||
text: str
|
||||
"""文本内容"""
|
||||
font: Optional[EffectMeta]
|
||||
"""字体类型"""
|
||||
style: TextStyle
|
||||
"""字体样式"""
|
||||
|
||||
border: Optional[TextBorder]
|
||||
"""文本描边参数, None表示无描边"""
|
||||
background: Optional[TextBackground]
|
||||
"""文本背景参数, None表示无背景"""
|
||||
shadow: Optional[TextShadow]
|
||||
"""文本阴影参数, None表示无阴影"""
|
||||
|
||||
bubble: Optional[TextBubble]
|
||||
"""文本气泡效果, 在放入轨道时加入素材列表中"""
|
||||
effect: Optional[TextEffect]
|
||||
"""文本花字效果, 在放入轨道时加入素材列表中, 目前仅支持一部分花字效果"""
|
||||
|
||||
def __init__(self, text: str, timerange: Timerange, *,
|
||||
font: Optional[FontType] = None,
|
||||
style: Optional[TextStyle] = None, clip_settings: Optional[ClipSettings] = None,
|
||||
border: Optional[TextBorder] = None, background: Optional[TextBackground] = None,
|
||||
shadow: Optional[TextShadow] = None):
|
||||
"""创建文本片段, 并指定其时间信息、字体样式及图像调节设置
|
||||
|
||||
片段创建完成后, 可通过`ScriptFile.add_segment`方法将其添加到轨道中
|
||||
|
||||
Args:
|
||||
text (`str`): 文本内容
|
||||
timerange (`Timerange`): 片段在轨道上的时间范围
|
||||
font (`Font_type`, optional): 字体类型, 默认为系统字体
|
||||
style (`TextStyle`, optional): 字体样式, 包含大小/颜色/对齐/透明度等.
|
||||
clip_settings (`ClipSettings`, optional): 图像调节设置, 默认不做任何变换
|
||||
border (`TextBorder`, optional): 文本描边参数, 默认无描边
|
||||
background (`TextBackground`, optional): 文本背景参数, 默认无背景
|
||||
shadow (`TextShadow`, optional): 文本阴影参数, 默认无阴影
|
||||
"""
|
||||
super().__init__(uuid.uuid4().hex, None, timerange, 1.0, 1.0, False, clip_settings=clip_settings)
|
||||
|
||||
self.text = text
|
||||
self.font = font.value if font else None
|
||||
self.style = style or TextStyle()
|
||||
self.border = border
|
||||
self.background = background
|
||||
self.shadow = shadow
|
||||
|
||||
self.bubble = None
|
||||
self.effect = None
|
||||
|
||||
@classmethod
|
||||
def create_from_template(cls, text: str, timerange: Timerange, template: "TextSegment") -> "TextSegment":
|
||||
"""根据模板创建新的文本片段, 并指定其文本内容"""
|
||||
new_segment = cls(text, timerange, style=deepcopy(template.style), clip_settings=deepcopy(template.clip_settings),
|
||||
border=deepcopy(template.border), background=deepcopy(template.background),
|
||||
shadow=deepcopy(template.shadow))
|
||||
new_segment.font = deepcopy(template.font)
|
||||
|
||||
# 处理动画等
|
||||
if template.animations_instance:
|
||||
new_segment.animations_instance = deepcopy(template.animations_instance)
|
||||
new_segment.animations_instance.animation_id = uuid.uuid4().hex
|
||||
new_segment.extra_material_refs.append(new_segment.animations_instance.animation_id)
|
||||
if template.bubble:
|
||||
new_segment.add_bubble(template.bubble.effect_id, template.bubble.resource_id)
|
||||
if template.effect:
|
||||
new_segment.add_effect(template.effect.effect_id)
|
||||
|
||||
return new_segment
|
||||
|
||||
def add_animation(self, animation_type: Union[TextIntro, TextOutro, TextLoopAnim],
|
||||
duration: Union[str, float, None] = None) -> "TextSegment":
|
||||
"""将给定的入场/出场/循环动画添加到此片段的动画列表中, 出入场动画的持续时间可以自行设置, 循环动画则会自动填满其余无动画部分
|
||||
|
||||
注意: 若希望同时使用循环动画和入出场动画, 请**先添加出入场动画再添加循环动画**
|
||||
|
||||
Args:
|
||||
animation_type (`TextIntro`, `TextOutro` or `TextLoopAnim`): 文本动画类型.
|
||||
duration (`str` or `float`, optional): 动画持续时间, 单位为微秒, 仅对入场/出场动画有效.
|
||||
若传入字符串则会调用`tim()`函数进行解析. 默认使用动画的时长
|
||||
"""
|
||||
if duration is None:
|
||||
duration = animation_type.value.duration
|
||||
duration = min(tim(duration), self.target_timerange.duration)
|
||||
|
||||
if isinstance(animation_type, TextIntro):
|
||||
start = 0
|
||||
elif isinstance(animation_type, TextOutro):
|
||||
start = self.target_timerange.duration - duration
|
||||
elif isinstance(animation_type, TextLoopAnim):
|
||||
intro_trange = self.animations_instance and self.animations_instance.get_animation_trange("in")
|
||||
outro_trange = self.animations_instance and self.animations_instance.get_animation_trange("out")
|
||||
start = intro_trange.start if intro_trange else 0
|
||||
duration = self.target_timerange.duration - start - (outro_trange.duration if outro_trange else 0)
|
||||
else:
|
||||
raise TypeError("Invalid animation type %s" % type(animation_type))
|
||||
|
||||
if self.animations_instance is None:
|
||||
self.animations_instance = SegmentAnimations()
|
||||
self.extra_material_refs.append(self.animations_instance.animation_id)
|
||||
|
||||
self.animations_instance.add_animation(Text_animation(animation_type, start, duration))
|
||||
|
||||
return self
|
||||
|
||||
def add_bubble(self, effect_id: str, resource_id: str) -> "TextSegment":
|
||||
"""根据素材信息添加气泡效果, 相应素材信息可通过`ScriptFile.inspect_material`从模板中获取
|
||||
|
||||
Args:
|
||||
effect_id (`str`): 气泡效果的effect_id
|
||||
resource_id (`str`): 气泡效果的resource_id
|
||||
"""
|
||||
self.bubble = TextBubble(effect_id, resource_id)
|
||||
self.extra_material_refs.append(self.bubble.global_id)
|
||||
return self
|
||||
|
||||
def add_effect(self, effect_id: str) -> "TextSegment":
|
||||
"""根据素材信息添加花字效果, 相应素材信息可通过`ScriptFile.inspect_material`从模板中获取
|
||||
|
||||
Args:
|
||||
effect_id (`str`): 花字效果的effect_id, 也同时是其resource_id
|
||||
"""
|
||||
self.effect = TextEffect(effect_id, effect_id)
|
||||
self.extra_material_refs.append(self.effect.global_id)
|
||||
return self
|
||||
|
||||
def export_material(self) -> Dict[str, Any]:
|
||||
"""与此文本片段联系的素材, 以此不再单独定义Text_material类"""
|
||||
# 叠加各类效果的flag
|
||||
check_flag: int = 7
|
||||
if self.border:
|
||||
check_flag |= 8
|
||||
if self.background:
|
||||
check_flag |= 16
|
||||
if self.shadow:
|
||||
check_flag |= 32
|
||||
|
||||
content_json = {
|
||||
"styles": [
|
||||
{
|
||||
"fill": {
|
||||
"alpha": 1.0,
|
||||
"content": {
|
||||
"render_type": "solid",
|
||||
"solid": {
|
||||
"alpha": 1.0,
|
||||
"color": list(self.style.color)
|
||||
}
|
||||
}
|
||||
},
|
||||
"range": [0, len(self.text)],
|
||||
"size": self.style.size,
|
||||
"bold": self.style.bold,
|
||||
"italic": self.style.italic,
|
||||
"underline": self.style.underline,
|
||||
"strokes": [self.border.export_json()] if self.border else []
|
||||
}
|
||||
],
|
||||
"text": self.text
|
||||
}
|
||||
if self.font:
|
||||
content_json["styles"][0]["font"] = {
|
||||
"id": self.font.resource_id,
|
||||
"path": "D:" # 并不会真正在此处放置字体文件
|
||||
}
|
||||
if self.effect:
|
||||
content_json["styles"][0]["effectStyle"] = {
|
||||
"id": self.effect.effect_id,
|
||||
"path": "C:" # 并不会真正在此处放置素材文件
|
||||
}
|
||||
if self.shadow:
|
||||
content_json["styles"][0]["shadows"] = [self.shadow.export_json()]
|
||||
|
||||
ret = {
|
||||
"id": self.material_id,
|
||||
"content": json.dumps(content_json, ensure_ascii=False),
|
||||
|
||||
"typesetting": int(self.style.vertical),
|
||||
"alignment": self.style.align,
|
||||
"letter_spacing": self.style.letter_spacing * 0.05,
|
||||
"line_spacing": 0.02 + self.style.line_spacing * 0.05,
|
||||
|
||||
"line_feed": 1,
|
||||
"line_max_width": self.style.max_line_width,
|
||||
"force_apply_line_max_width": False,
|
||||
|
||||
"check_flag": check_flag,
|
||||
|
||||
"type": "subtitle" if self.style.auto_wrapping else "text",
|
||||
|
||||
# 混合 (+4)
|
||||
"global_alpha": self.style.alpha,
|
||||
|
||||
# 发光 (+64),属性由extra_material_refs记录
|
||||
}
|
||||
|
||||
if self.background:
|
||||
ret.update(self.background.export_json())
|
||||
|
||||
return ret
|
||||
@@ -0,0 +1,99 @@
|
||||
"""定义时间范围类以及与时间相关的辅助函数"""
|
||||
|
||||
from typing import Union
|
||||
from typing import Dict
|
||||
|
||||
SEC = 1000000
|
||||
"""一秒=1e6微秒"""
|
||||
|
||||
def tim(inp: Union[str, float]) -> int:
|
||||
"""将输入的字符串转换为微秒, 也可直接输入微秒数
|
||||
|
||||
支持类似 "1h52m3s" 或 "0.15s" 这样的格式, 可包含负号以表示负偏移
|
||||
"""
|
||||
if isinstance(inp, (int, float)):
|
||||
return int(round(inp))
|
||||
|
||||
sign: int = 1
|
||||
inp = inp.strip().lower()
|
||||
if inp.startswith("-"):
|
||||
sign = -1
|
||||
inp = inp[1:]
|
||||
|
||||
last_index: int = 0
|
||||
total_time: float = 0
|
||||
for unit, factor in zip(["h", "m", "s"], [3600*SEC, 60*SEC, SEC]):
|
||||
unit_index = inp.find(unit)
|
||||
if unit_index == -1: continue
|
||||
|
||||
total_time += float(inp[last_index:unit_index]) * factor
|
||||
last_index = unit_index + 1
|
||||
|
||||
return int(round(total_time) * sign)
|
||||
|
||||
class Timerange:
|
||||
"""记录了起始时间及持续长度的时间范围"""
|
||||
start: int
|
||||
"""起始时间, 单位为微秒"""
|
||||
duration: int
|
||||
"""持续长度, 单位为微秒"""
|
||||
|
||||
def __init__(self, start: int, duration: int):
|
||||
"""构造一个时间范围
|
||||
|
||||
Args:
|
||||
start (int): 起始时间, 单位为微秒
|
||||
duration (int): 持续长度, 单位为微秒
|
||||
"""
|
||||
|
||||
self.start = start
|
||||
self.duration = duration
|
||||
|
||||
@classmethod
|
||||
def import_json(cls, json_obj: Dict[str, str]) -> "Timerange":
|
||||
"""从json对象中恢复Timerange"""
|
||||
return cls(int(json_obj["start"]), int(json_obj["duration"]))
|
||||
|
||||
@property
|
||||
def end(self) -> int:
|
||||
"""结束时间, 单位为微秒"""
|
||||
return self.start + self.duration
|
||||
|
||||
def __eq__(self, other: object) -> bool:
|
||||
if not isinstance(other, Timerange):
|
||||
return False
|
||||
return self.start == other.start and self.duration == other.duration
|
||||
|
||||
def overlaps(self, other: "Timerange") -> bool:
|
||||
"""判断两个时间范围是否有重叠"""
|
||||
return not (self.end <= other.start or other.end <= self.start)
|
||||
|
||||
def __repr__(self) -> str:
|
||||
return f"Timerange(start={self.start}, duration={self.duration})"
|
||||
|
||||
def __str__(self) -> str:
|
||||
return f"[start={self.start}, end={self.end}]"
|
||||
|
||||
def export_json(self) -> Dict[str, int]:
|
||||
return {"start": self.start, "duration": self.duration}
|
||||
|
||||
def trange(start: Union[str, float], duration: Union[str, float]) -> Timerange:
|
||||
"""Timerange的简便构造函数, 接受字符串或微秒数作为参数
|
||||
|
||||
支持类似 "1h52m3s" 或 "0.15s" 这样的格式
|
||||
|
||||
Args:
|
||||
start (Union[str, float]): 起始时间
|
||||
duration (Union[str, float]): 持续长度, 注意**不是结束时间**
|
||||
"""
|
||||
return Timerange(tim(start), tim(duration))
|
||||
|
||||
def srt_tstamp(srt_tstamp: str) -> int:
|
||||
"""解析srt中的时间戳字符串, 返回微秒数"""
|
||||
sec_str, ms_str = srt_tstamp.split(",")
|
||||
parts = sec_str.split(":") + [ms_str]
|
||||
|
||||
total_time = 0
|
||||
for value, factor in zip(parts, [3600*SEC, 60*SEC, SEC, 1000]):
|
||||
total_time += int(value) * factor
|
||||
return total_time
|
||||
@@ -0,0 +1,138 @@
|
||||
"""轨道类及其元数据"""
|
||||
|
||||
import uuid
|
||||
|
||||
from enum import Enum
|
||||
from typing import TypeVar, Generic, Type
|
||||
from typing import Dict, List, Any, Union
|
||||
from dataclasses import dataclass
|
||||
from abc import ABC, abstractmethod
|
||||
|
||||
from .exceptions import SegmentOverlap
|
||||
from .segment import BaseSegment
|
||||
from .video_segment import VideoSegment, StickerSegment
|
||||
from .audio_segment import AudioSegment
|
||||
from .text_segment import TextSegment
|
||||
from .effect_segment import EffectSegment, FilterSegment
|
||||
|
||||
@dataclass
|
||||
class Track_meta:
|
||||
"""与轨道类型关联的轨道元数据"""
|
||||
|
||||
segment_type: Union[Type[VideoSegment], Type[AudioSegment],
|
||||
Type[EffectSegment], Type[FilterSegment],
|
||||
Type[TextSegment], Type[StickerSegment], None]
|
||||
"""与轨道关联的片段类型"""
|
||||
render_index: int
|
||||
"""默认渲染顺序, 值越大越接近前景"""
|
||||
allow_modify: bool
|
||||
"""当被导入时, 是否允许修改"""
|
||||
|
||||
class TrackType(Enum):
|
||||
"""轨道类型枚举
|
||||
|
||||
变量名对应type属性, 值表示相应的轨道元数据
|
||||
"""
|
||||
|
||||
video = Track_meta(VideoSegment, 0, True)
|
||||
audio = Track_meta(AudioSegment, 0, True)
|
||||
effect = Track_meta(EffectSegment, 10000, False)
|
||||
filter = Track_meta(FilterSegment, 11000, False)
|
||||
sticker = Track_meta(StickerSegment, 14000, False)
|
||||
text = Track_meta(TextSegment, 15000, True) # 原本是14000, 避免与sticker冲突改为15000
|
||||
|
||||
adjust = Track_meta(None, 0, False)
|
||||
"""仅供导入时使用, 不要尝试新建此类型的轨道"""
|
||||
|
||||
@staticmethod
|
||||
def from_name(name: str) -> "TrackType":
|
||||
"""根据名称获取轨道类型枚举"""
|
||||
for t in TrackType:
|
||||
if t.name == name:
|
||||
return t
|
||||
raise ValueError("Invalid track type: %s" % name)
|
||||
|
||||
|
||||
class BaseTrack(ABC):
|
||||
"""轨道基类"""
|
||||
|
||||
track_type: TrackType
|
||||
"""轨道类型"""
|
||||
name: str
|
||||
"""轨道名称"""
|
||||
track_id: str
|
||||
"""轨道全局ID"""
|
||||
render_index: int
|
||||
"""渲染顺序, 值越大越接近前景"""
|
||||
|
||||
@abstractmethod
|
||||
def export_json(self) -> Dict[str, Any]: ...
|
||||
|
||||
Seg_type = TypeVar("Seg_type", bound=BaseSegment)
|
||||
class Track(BaseTrack, Generic[Seg_type]):
|
||||
"""非模板模式下的轨道"""
|
||||
|
||||
mute: bool
|
||||
"""是否静音"""
|
||||
|
||||
segments: List[Seg_type]
|
||||
"""该轨道包含的片段列表"""
|
||||
|
||||
def __init__(self, track_type: TrackType, name: str, render_index: int, mute: bool):
|
||||
self.track_type = track_type
|
||||
self.name = name
|
||||
self.track_id = uuid.uuid4().hex
|
||||
self.render_index = render_index
|
||||
|
||||
self.mute = mute
|
||||
self.segments = []
|
||||
|
||||
@property
|
||||
def end_time(self) -> int:
|
||||
"""轨道结束时间, 微秒"""
|
||||
if len(self.segments) == 0:
|
||||
return 0
|
||||
return self.segments[-1].target_timerange.end
|
||||
|
||||
@property
|
||||
def accept_segment_type(self) -> Type[Seg_type]:
|
||||
"""返回该轨道允许的片段类型"""
|
||||
return self.track_type.value.segment_type # type: ignore
|
||||
|
||||
def add_segment(self, segment: Seg_type) -> "Track[Seg_type]":
|
||||
"""向轨道中添加一个片段, 添加的片段必须匹配轨道类型且不与现有片段重叠
|
||||
|
||||
Args:
|
||||
segment (Seg_type): 要添加的片段
|
||||
|
||||
Raises:
|
||||
`TypeError`: 新片段类型与轨道类型不匹配
|
||||
`SegmentOverlap`: 新片段与现有片段重叠
|
||||
"""
|
||||
if not isinstance(segment, self.accept_segment_type):
|
||||
raise TypeError("New segment (%s) is not of the same type as the track (%s)" % (type(segment), self.accept_segment_type))
|
||||
|
||||
# 检查片段是否重叠
|
||||
for seg in self.segments:
|
||||
if seg.overlaps(segment):
|
||||
raise SegmentOverlap("New segment overlaps with existing segment [start: {}, end: {}]"
|
||||
.format(segment.target_timerange.start, segment.target_timerange.end))
|
||||
|
||||
self.segments.append(segment)
|
||||
return self
|
||||
|
||||
def export_json(self) -> Dict[str, Any]:
|
||||
# 为每个片段写入render_index
|
||||
segment_exports = [seg.export_json() for seg in self.segments]
|
||||
for seg in segment_exports:
|
||||
seg["render_index"] = self.render_index
|
||||
|
||||
return {
|
||||
"attribute": int(self.mute),
|
||||
"flag": 0,
|
||||
"id": self.track_id,
|
||||
"is_default_name": len(self.name) == 0,
|
||||
"name": self.name,
|
||||
"segments": segment_exports,
|
||||
"type": self.track_type.name
|
||||
}
|
||||
@@ -0,0 +1,58 @@
|
||||
"""辅助函数,主要与模板模式有关"""
|
||||
|
||||
import inspect
|
||||
|
||||
from typing import Union, Type
|
||||
from typing import List, Dict, Any
|
||||
|
||||
JsonExportable = Union[int, float, bool, str, List["JsonExportable"], Dict[str, "JsonExportable"]]
|
||||
|
||||
def provide_ctor_defaults(cls: Type) -> Dict[str, Any]:
|
||||
"""为构造函数提供默认值,以绕开构造函数的参数限制"""
|
||||
|
||||
signature = inspect.signature(cls.__init__)
|
||||
provided_defaults: Dict[str, Any] = {}
|
||||
|
||||
for name, param in signature.parameters.items():
|
||||
if name == 'self': continue
|
||||
if param.default is not inspect.Parameter.empty: continue
|
||||
|
||||
if param.annotation is int or param.annotation is float:
|
||||
provided_defaults[name] = 0
|
||||
elif param.annotation is str:
|
||||
provided_defaults[name] = ""
|
||||
elif param.annotation is bool:
|
||||
provided_defaults[name] = False
|
||||
else:
|
||||
raise ValueError(f"Unsupported parameter type: {param.annotation}")
|
||||
|
||||
return provided_defaults
|
||||
|
||||
def assign_attr_with_json(obj: object, attrs: List[str], json_data: Dict[str, Any]):
|
||||
"""根据json数据赋值给指定的对象属性
|
||||
|
||||
若有复杂类型,则尝试调用其`import_json`方法进行构造
|
||||
"""
|
||||
type_hints: Dict[str, Type] = {}
|
||||
for cls in obj.__class__.__mro__:
|
||||
if '__annotations__' in cls.__dict__:
|
||||
type_hints.update(cls.__annotations__)
|
||||
|
||||
for attr in attrs:
|
||||
if hasattr(type_hints[attr], 'import_json'):
|
||||
obj.__setattr__(attr, type_hints[attr].import_json(json_data[attr]))
|
||||
else:
|
||||
obj.__setattr__(attr, type_hints[attr](json_data[attr]))
|
||||
|
||||
def export_attr_to_json(obj: object, attrs: List[str]) -> Dict[str, JsonExportable]:
|
||||
"""将对象属性导出为json数据
|
||||
|
||||
若有复杂类型,则尝试调用其`export_json`方法进行导出
|
||||
"""
|
||||
json_data: Dict[str, Any] = {}
|
||||
for attr in attrs:
|
||||
if hasattr(getattr(obj, attr), 'export_json'):
|
||||
json_data[attr] = getattr(obj, attr).export_json()
|
||||
else:
|
||||
json_data[attr] = getattr(obj, attr)
|
||||
return json_data
|
||||
@@ -0,0 +1,528 @@
|
||||
"""定义视频片段及其相关类
|
||||
|
||||
包含图像调节设置、动画效果、特效、转场等相关类
|
||||
"""
|
||||
|
||||
import uuid
|
||||
from copy import deepcopy
|
||||
|
||||
from typing import Optional, Literal, Union
|
||||
from typing import Dict, List, Tuple, Any
|
||||
|
||||
from .time_util import tim, Timerange
|
||||
from .segment import VisualSegment, ClipSettings
|
||||
from .local_materials import VideoMaterial
|
||||
from .animation import SegmentAnimations, VideoAnimation
|
||||
|
||||
from .metadata import EffectMeta, EffectParamInstance
|
||||
from .metadata import MaskMeta, MaskType, FilterType, TransitionType
|
||||
from .metadata import IntroType, OutroType, GroupAnimationType
|
||||
from .metadata import VideoSceneEffectType, VideoCharacterEffectType
|
||||
|
||||
class Mask:
|
||||
"""蒙版对象"""
|
||||
|
||||
mask_meta: MaskMeta
|
||||
"""蒙版元数据"""
|
||||
global_id: str
|
||||
"""蒙版全局id, 由程序自动生成"""
|
||||
|
||||
center_x: float
|
||||
"""蒙版中心x坐标, 以半素材宽为单位"""
|
||||
center_y: float
|
||||
"""蒙版中心y坐标, 以半素材高为单位"""
|
||||
width: float
|
||||
height: float
|
||||
aspect_ratio: float
|
||||
|
||||
rotation: float
|
||||
invert: bool
|
||||
feather: float
|
||||
"""羽化程度, 0-1"""
|
||||
round_corner: float
|
||||
"""矩形蒙版的圆角, 0-1"""
|
||||
|
||||
def __init__(self, mask_meta: MaskMeta,
|
||||
cx: float, cy: float, w: float, h: float,
|
||||
ratio: float, rot: float, inv: bool, feather: float, round_corner: float):
|
||||
self.mask_meta = mask_meta
|
||||
self.global_id = uuid.uuid4().hex
|
||||
|
||||
self.center_x, self.center_y = cx, cy
|
||||
self.width, self.height = w, h
|
||||
self.aspect_ratio = ratio
|
||||
|
||||
self.rotation = rot
|
||||
self.invert = inv
|
||||
self.feather = feather
|
||||
self.round_corner = round_corner
|
||||
|
||||
def export_json(self) -> Dict[str, Any]:
|
||||
return {
|
||||
"config": {
|
||||
"aspectRatio": self.aspect_ratio,
|
||||
"centerX": self.center_x,
|
||||
"centerY": self.center_y,
|
||||
"feather": self.feather,
|
||||
"height": self.height,
|
||||
"invert": self.invert,
|
||||
"rotation": self.rotation,
|
||||
"roundCorner": self.round_corner,
|
||||
"width": self.width
|
||||
},
|
||||
"id": self.global_id,
|
||||
"name": self.mask_meta.name,
|
||||
"platform": "all",
|
||||
"position_info": "",
|
||||
"resource_type": self.mask_meta.resource_type,
|
||||
"resource_id": self.mask_meta.resource_id,
|
||||
"type": "mask"
|
||||
# 不导出path字段
|
||||
}
|
||||
|
||||
class VideoEffect:
|
||||
"""视频特效素材"""
|
||||
|
||||
name: str
|
||||
"""特效名称"""
|
||||
global_id: str
|
||||
"""特效全局id, 由程序自动生成"""
|
||||
effect_id: str
|
||||
"""某种特效id, 由剪映本身提供"""
|
||||
resource_id: str
|
||||
"""资源id, 由剪映本身提供"""
|
||||
|
||||
effect_type: Literal["video_effect", "face_effect"]
|
||||
apply_target_type: Literal[0, 2]
|
||||
"""应用目标类型, 0: 片段, 2: 全局"""
|
||||
|
||||
adjust_params: List[EffectParamInstance]
|
||||
|
||||
def __init__(self, effect_meta: Union[VideoSceneEffectType, VideoCharacterEffectType],
|
||||
params: Optional[List[Optional[float]]] = None, *,
|
||||
apply_target_type: Literal[0, 2] = 0):
|
||||
"""根据给定的特效元数据及参数列表构造一个视频特效对象, params的范围是0~100"""
|
||||
|
||||
self.name = effect_meta.value.name
|
||||
self.global_id = uuid.uuid4().hex
|
||||
self.effect_id = effect_meta.value.effect_id
|
||||
self.resource_id = effect_meta.value.resource_id
|
||||
self.adjust_params = []
|
||||
|
||||
if isinstance(effect_meta, VideoSceneEffectType):
|
||||
self.effect_type = "video_effect"
|
||||
elif isinstance(effect_meta, VideoCharacterEffectType):
|
||||
self.effect_type = "face_effect"
|
||||
else:
|
||||
raise TypeError("Invalid effect meta type %s" % type(effect_meta))
|
||||
self.apply_target_type = apply_target_type
|
||||
|
||||
self.adjust_params = effect_meta.value.parse_params(params)
|
||||
|
||||
def export_json(self) -> Dict[str, Any]:
|
||||
return {
|
||||
"adjust_params": [param.export_json() for param in self.adjust_params],
|
||||
"apply_target_type": self.apply_target_type,
|
||||
"apply_time_range": None,
|
||||
"category_id": "", # 一律设为空
|
||||
"category_name": "", # 一律设为空
|
||||
"common_keyframes": [],
|
||||
"disable_effect_faces": [],
|
||||
"effect_id": self.effect_id,
|
||||
"formula_id": "",
|
||||
"id": self.global_id,
|
||||
"name": self.name,
|
||||
"platform": "all",
|
||||
"render_index": 11000,
|
||||
"resource_id": self.resource_id,
|
||||
"source_platform": 0,
|
||||
"time_range": None,
|
||||
"track_render_index": 0,
|
||||
"type": self.effect_type,
|
||||
"value": 1.0,
|
||||
"version": ""
|
||||
# 不导出path、request_id和algorithm_artifact_path字段
|
||||
}
|
||||
|
||||
class Filter:
|
||||
"""滤镜素材"""
|
||||
|
||||
global_id: str
|
||||
"""滤镜全局id, 由程序自动生成"""
|
||||
|
||||
effect_meta: EffectMeta
|
||||
"""滤镜的元数据"""
|
||||
intensity: float
|
||||
"""滤镜强度(滤镜的唯一参数)"""
|
||||
|
||||
apply_target_type: Literal[0, 2]
|
||||
"""应用目标类型, 0: 片段, 2: 全局"""
|
||||
|
||||
def __init__(self, meta: EffectMeta, intensity: float, *,
|
||||
apply_target_type: Literal[0, 2] = 0):
|
||||
"""根据给定的滤镜元数据及强度构造滤镜素材对象"""
|
||||
|
||||
self.global_id = uuid.uuid4().hex
|
||||
self.effect_meta = meta
|
||||
self.intensity = intensity
|
||||
self.apply_target_type = apply_target_type
|
||||
|
||||
def export_json(self) -> Dict[str, Any]:
|
||||
return {
|
||||
"adjust_params": [],
|
||||
"algorithm_artifact_path": "",
|
||||
"apply_target_type": self.apply_target_type,
|
||||
"bloom_params": None,
|
||||
"category_id": "", # 一律设为空
|
||||
"category_name": "", # 一律设为空
|
||||
"color_match_info": {
|
||||
"source_feature_path": "",
|
||||
"target_feature_path": "",
|
||||
"target_image_path": ""
|
||||
},
|
||||
"effect_id": self.effect_meta.effect_id,
|
||||
"enable_skin_tone_correction": False,
|
||||
"exclusion_group": [],
|
||||
"face_adjust_params": [],
|
||||
"formula_id": "",
|
||||
"id": self.global_id,
|
||||
"intensity_key": "",
|
||||
"multi_language_current": "",
|
||||
"name": self.effect_meta.name,
|
||||
"panel_id": "",
|
||||
"platform": "all",
|
||||
"resource_id": self.effect_meta.resource_id,
|
||||
"source_platform": 1,
|
||||
"sub_type": "none",
|
||||
"time_range": None,
|
||||
"type": "filter",
|
||||
"value": self.intensity,
|
||||
"version": ""
|
||||
# 不导出path和request_id
|
||||
}
|
||||
|
||||
class Transition:
|
||||
"""转场对象"""
|
||||
|
||||
name: str
|
||||
"""转场名称"""
|
||||
global_id: str
|
||||
"""转场全局id, 由程序自动生成"""
|
||||
effect_id: str
|
||||
"""转场效果id, 由剪映本身提供"""
|
||||
resource_id: str
|
||||
"""资源id, 由剪映本身提供"""
|
||||
|
||||
duration: int
|
||||
"""转场持续时间, 单位为微秒"""
|
||||
is_overlap: bool
|
||||
"""是否与上一个片段重叠(?)"""
|
||||
|
||||
def __init__(self, effect_meta: TransitionType, duration: Optional[int] = None):
|
||||
"""根据给定的转场元数据及持续时间构造一个转场对象"""
|
||||
self.name = effect_meta.value.name
|
||||
self.global_id = uuid.uuid4().hex
|
||||
self.effect_id = effect_meta.value.effect_id
|
||||
self.resource_id = effect_meta.value.resource_id
|
||||
|
||||
self.duration = duration if duration is not None else effect_meta.value.default_duration
|
||||
self.is_overlap = effect_meta.value.is_overlap
|
||||
|
||||
def export_json(self) -> Dict[str, Any]:
|
||||
return {
|
||||
"category_id": "", # 一律设为空
|
||||
"category_name": "", # 一律设为空
|
||||
"duration": self.duration,
|
||||
"effect_id": self.effect_id,
|
||||
"id": self.global_id,
|
||||
"is_overlap": self.is_overlap,
|
||||
"name": self.name,
|
||||
"platform": "all",
|
||||
"resource_id": self.resource_id,
|
||||
"type": "transition"
|
||||
# 不导出path和request_id字段
|
||||
}
|
||||
|
||||
class BackgroundFilling:
|
||||
"""背景填充对象"""
|
||||
|
||||
global_id: str
|
||||
"""背景填充全局id, 由程序自动生成"""
|
||||
fill_type: Literal["canvas_blur", "canvas_color"]
|
||||
"""背景填充类型"""
|
||||
blur: float
|
||||
"""模糊程度, 0-1"""
|
||||
color: str
|
||||
"""背景颜色, 格式为'#RRGGBBAA'"""
|
||||
|
||||
def __init__(self, fill_type: Literal["canvas_blur", "canvas_color"], blur: float, color: str):
|
||||
self.global_id = uuid.uuid4().hex
|
||||
self.fill_type = fill_type
|
||||
self.blur = blur
|
||||
self.color = color
|
||||
|
||||
def export_json(self) -> Dict[str, Any]:
|
||||
return {
|
||||
"id": self.global_id,
|
||||
"type": self.fill_type,
|
||||
"blur": self.blur,
|
||||
"color": self.color,
|
||||
"source_platform": 0,
|
||||
}
|
||||
|
||||
class VideoSegment(VisualSegment):
|
||||
"""安放在轨道上的一个视频/图片片段"""
|
||||
|
||||
material_instance: VideoMaterial
|
||||
"""素材实例"""
|
||||
material_size: Tuple[int, int]
|
||||
"""素材尺寸"""
|
||||
|
||||
effects: List[VideoEffect]
|
||||
"""特效列表
|
||||
|
||||
在放入轨道时自动添加到素材列表中
|
||||
"""
|
||||
filters: List[Filter]
|
||||
"""滤镜列表
|
||||
|
||||
在放入轨道时自动添加到素材列表中
|
||||
"""
|
||||
mask: Optional[Mask]
|
||||
"""蒙版实例, 可能为空
|
||||
|
||||
在放入轨道时自动添加到素材列表中
|
||||
"""
|
||||
transition: Optional[Transition]
|
||||
"""转场实例, 可能为空
|
||||
|
||||
在放入轨道时自动添加到素材列表中
|
||||
"""
|
||||
background_filling: Optional[BackgroundFilling]
|
||||
"""背景填充实例, 可能为空
|
||||
|
||||
在放入轨道时自动添加到素材列表中
|
||||
"""
|
||||
|
||||
def __init__(self, material: Union[VideoMaterial, str], target_timerange: Timerange, *,
|
||||
source_timerange: Optional[Timerange] = None, speed: Optional[float] = None, volume: float = 1.0,
|
||||
change_pitch: bool = False, clip_settings: Optional[ClipSettings] = None):
|
||||
"""利用给定的视频/图片素材构建一个轨道片段, 并指定其时间信息及图像调节设置
|
||||
|
||||
Args:
|
||||
material (`VideoMaterial` or `str`): 素材实例或素材路径, 若为路径则自动构造素材实例(此时不能指定`cropSettings`参数)
|
||||
target_timerange (`Timerange`): 片段在轨道上的目标时间范围
|
||||
source_timerange (`Timerange`, optional): 截取的素材片段的时间范围, 默认从开头根据`speed`截取与`target_timerange`等长的一部分
|
||||
speed (`float`, optional): 播放速度, 默认为1.0. 此项与`source_timerange`同时指定时, 将覆盖`target_timerange`中的时长
|
||||
volume (`float`, optional): 音量, 默认为1.0
|
||||
change_pitch (`bool`, optional): 是否跟随变速改变音调, 默认为否
|
||||
clip_settings (`ClipSettings`, optional): 图像调节设置, 默认不作任何变换
|
||||
|
||||
Raises:
|
||||
`ValueError`: 指定的或计算出的`source_timerange`超出了素材的时长范围
|
||||
"""
|
||||
if isinstance(material, str):
|
||||
material = VideoMaterial(material)
|
||||
|
||||
if source_timerange is not None and speed is not None:
|
||||
target_timerange = Timerange(target_timerange.start, round(source_timerange.duration / speed))
|
||||
elif source_timerange is not None and speed is None:
|
||||
speed = source_timerange.duration / target_timerange.duration
|
||||
else: # source_timerange is None
|
||||
speed = speed if speed is not None else 1.0
|
||||
source_timerange = Timerange(0, round(target_timerange.duration * speed))
|
||||
|
||||
if source_timerange.end > material.duration:
|
||||
raise ValueError(f"截取的素材时间范围 {source_timerange} 超出了素材时长({material.duration})")
|
||||
|
||||
super().__init__(material.material_id, source_timerange, target_timerange, speed,
|
||||
volume, change_pitch, clip_settings=clip_settings)
|
||||
|
||||
self.material_instance = deepcopy(material)
|
||||
self.material_size = (material.width, material.height)
|
||||
self.effects = []
|
||||
self.filters = []
|
||||
self.transition = None
|
||||
self.mask = None
|
||||
self.background_filling = None
|
||||
|
||||
def add_animation(self, animation_type: Union[IntroType, OutroType, GroupAnimationType],
|
||||
duration: Optional[Union[int, str]] = None) -> "VideoSegment":
|
||||
"""将给定的入场/出场/组合动画添加到此片段的动画列表中
|
||||
|
||||
Args:
|
||||
animation_type (`IntroType`, `OutroType`, or `GroupAnimationType`): 动画类型
|
||||
duration (`int` or `str`, optional): 动画持续时间, 单位为微秒. 若传入字符串则会调用`tim()`函数进行解析.
|
||||
若不指定则使用动画类型定义的默认值. 理论上只适用于入场和出场动画.
|
||||
"""
|
||||
if duration is not None:
|
||||
duration = tim(duration)
|
||||
if isinstance(animation_type, IntroType):
|
||||
start = 0
|
||||
duration = duration or animation_type.value.duration
|
||||
elif isinstance(animation_type, OutroType):
|
||||
duration = duration or animation_type.value.duration
|
||||
start = self.target_timerange.duration - duration
|
||||
elif isinstance(animation_type, GroupAnimationType):
|
||||
start = 0
|
||||
duration = duration or self.target_timerange.duration
|
||||
else:
|
||||
raise TypeError("Invalid animation type %s" % type(animation_type))
|
||||
|
||||
if self.animations_instance is None:
|
||||
self.animations_instance = SegmentAnimations()
|
||||
self.extra_material_refs.append(self.animations_instance.animation_id)
|
||||
|
||||
self.animations_instance.add_animation(VideoAnimation(animation_type, start, duration))
|
||||
|
||||
return self
|
||||
|
||||
def add_effect(self, effect_type: Union[VideoSceneEffectType, VideoCharacterEffectType],
|
||||
params: Optional[List[Optional[float]]] = None) -> "VideoSegment":
|
||||
"""为视频片段添加一个作用于整个片段的特效
|
||||
|
||||
Args:
|
||||
effect_type (`VideoSceneEffectType` or `VideoCharacterEffectType`): 特效类型
|
||||
params (`List[Optional[float]]`, optional): 特效参数列表, 参数列表中未提供或为None的项使用默认值.
|
||||
参数取值范围(0~100)与剪映中一致. 某个特效类型有何参数以及具体参数顺序以枚举类成员的annotation为准.
|
||||
|
||||
Raises:
|
||||
`ValueError`: 提供的参数数量超过了该特效类型的参数数量, 或参数值超出范围.
|
||||
"""
|
||||
if params is not None and len(params) > len(effect_type.value.params):
|
||||
raise ValueError("为音频效果 %s 传入了过多的参数" % effect_type.value.name)
|
||||
|
||||
effect_inst = VideoEffect(effect_type, params)
|
||||
self.effects.append(effect_inst)
|
||||
self.extra_material_refs.append(effect_inst.global_id)
|
||||
|
||||
return self
|
||||
|
||||
def add_filter(self, filter_type: FilterType, intensity: float = 100.0) -> "VideoSegment":
|
||||
"""为视频片段添加一个滤镜
|
||||
|
||||
Args:
|
||||
filter_type (`FilterType`): 滤镜类型
|
||||
intensity (`float`, optional): 滤镜强度(0-100), 仅当所选滤镜能够调节强度时有效. 默认为100.
|
||||
"""
|
||||
filter_inst = Filter(filter_type.value, intensity / 100.0) # 转化为0~1范围
|
||||
self.filters.append(filter_inst)
|
||||
self.extra_material_refs.append(filter_inst.global_id)
|
||||
|
||||
return self
|
||||
|
||||
def add_mask(self, mask_type: MaskType, *, center_x: float = 0.0, center_y: float = 0.0, size: float = 0.5,
|
||||
rotation: float = 0.0, feather: float = 0.0, invert: bool = False,
|
||||
rect_width: Optional[float] = None, round_corner: Optional[float] = None) -> "VideoSegment":
|
||||
"""为视频片段添加蒙版
|
||||
|
||||
Args:
|
||||
mask_type (`MaskType`): 蒙版类型
|
||||
center_x (`float`, optional): 蒙版中心点X坐标(以素材的像素为单位), 默认设置在素材中心
|
||||
center_y (`float`, optional): 蒙版中心点Y坐标(以素材的像素为单位), 默认设置在素材中心
|
||||
size (`float`, optional): 蒙版的"主要尺寸"(镜面的可视部分高度/圆形直径/爱心高度等), 以占素材高度的比例表示, 默认为0.5
|
||||
rotation (`float`, optional): 蒙版顺时针旋转的**角度**, 默认不旋转
|
||||
feather (`float`, optional): 蒙版的羽化参数, 取值范围0~100, 默认无羽化
|
||||
invert (`bool`, optional): 是否反转蒙版, 默认不反转
|
||||
rect_width (`float`, optional): 矩形蒙版的宽度, 仅在蒙版类型为矩形时允许设置, 以占素材宽度的比例表示, 默认与`size`相同
|
||||
round_corner (`float`, optional): 矩形蒙版的圆角参数, 仅在蒙版类型为矩形时允许设置, 取值范围0~100, 默认为0
|
||||
|
||||
Raises:
|
||||
`ValueError`: 试图添加多个蒙版或不正确地设置了`rect_width`及`round_corner`
|
||||
"""
|
||||
|
||||
if self.mask is not None:
|
||||
raise ValueError("当前片段已有蒙版, 不能再添加新的蒙版")
|
||||
if (rect_width is not None or round_corner is not None) and mask_type != MaskType.矩形:
|
||||
raise ValueError("`rect_width` 以及 `round_corner` 仅在蒙版类型为矩形时允许设置")
|
||||
if rect_width is None and mask_type == MaskType.矩形:
|
||||
rect_width = size
|
||||
if round_corner is None:
|
||||
round_corner = 0
|
||||
|
||||
width = rect_width or size * self.material_size[1] * mask_type.value.default_aspect_ratio / self.material_size[0]
|
||||
self.mask = Mask(mask_type.value, center_x / (self.material_size[0] / 2), center_y / (self.material_size[1] / 2),
|
||||
w=width, h=size, ratio=mask_type.value.default_aspect_ratio,
|
||||
rot=rotation, inv=invert, feather=feather/100, round_corner=round_corner/100)
|
||||
self.extra_material_refs.append(self.mask.global_id)
|
||||
return self
|
||||
|
||||
def add_transition(self, transition_type: TransitionType, *, duration: Optional[Union[int, str]] = None) -> "VideoSegment":
|
||||
"""为视频片段添加转场, 注意转场应当添加在**前面的**片段上
|
||||
|
||||
Args:
|
||||
transition_type (`TransitionType`): 转场类型
|
||||
duration (`int` or `str`, optional): 转场持续时间, 单位为微秒. 若传入字符串则会调用`tim()`函数进行解析. 若不指定则使用转场类型定义的默认值.
|
||||
|
||||
Raises:
|
||||
`ValueError`: 试图添加多个转场.
|
||||
"""
|
||||
if self.transition is not None:
|
||||
raise ValueError("当前片段已有转场, 不能再添加新的转场")
|
||||
if isinstance(duration, str): duration = tim(duration)
|
||||
|
||||
self.transition = Transition(transition_type, duration)
|
||||
self.extra_material_refs.append(self.transition.global_id)
|
||||
return self
|
||||
|
||||
def add_background_filling(self, fill_type: Literal["blur", "color"], blur: float = 0.0625, color: str = "#00000000") -> "VideoSegment":
|
||||
"""为视频片段添加背景填充
|
||||
|
||||
注意: 背景填充仅对底层视频轨道上的片段生效
|
||||
|
||||
Args:
|
||||
fill_type (`blur` or `color`): 填充类型, `blur`表示模糊, `color`表示颜色.
|
||||
blur (`float`, optional): 模糊程度, 0.0-1.0. 仅在`fill_type`为`blur`时有效. 剪映中的四档模糊数值分别为0.0625, 0.375, 0.75和1.0, 默认为0.0625.
|
||||
color (`str`, optional): 填充颜色, 格式为'#RRGGBBAA'. 仅在`fill_type`为`color`时有效.
|
||||
|
||||
Raises:
|
||||
`ValueError`: 当前片段已有背景填充效果或`fill_type`无效.
|
||||
"""
|
||||
if self.background_filling is not None:
|
||||
raise ValueError("当前片段已有背景填充效果")
|
||||
|
||||
if fill_type == "blur":
|
||||
self.background_filling = BackgroundFilling("canvas_blur", blur, color)
|
||||
elif fill_type == "color":
|
||||
self.background_filling = BackgroundFilling("canvas_color", blur, color)
|
||||
else:
|
||||
raise ValueError(f"无效的背景填充类型 {fill_type}")
|
||||
|
||||
self.extra_material_refs.append(self.background_filling.global_id)
|
||||
return self
|
||||
|
||||
def export_json(self) -> Dict[str, Any]:
|
||||
json_dict = super().export_json()
|
||||
json_dict.update({
|
||||
"hdr_settings": {"intensity": 1.0, "mode": 1, "nits": 1000},
|
||||
})
|
||||
return json_dict
|
||||
|
||||
class StickerSegment(VisualSegment):
|
||||
"""安放在轨道上的一个贴纸片段"""
|
||||
|
||||
resource_id: str
|
||||
"""贴纸资源id"""
|
||||
|
||||
def __init__(self, resource_id: str, target_timerange: Timerange, *, clip_settings: Optional[ClipSettings] = None):
|
||||
"""根据贴纸resource_id构建一个贴纸片段, 并指定其时间信息及图像调节设置
|
||||
|
||||
片段创建完成后, 可通过`ScriptFile.add_segment`方法将其添加到轨道中
|
||||
|
||||
Args:
|
||||
resource_id (`str`): 贴纸resource_id, 可通过`ScriptFile.inspect_material`从模板中获取
|
||||
target_timerange (`Timerange`): 片段在轨道上的目标时间范围
|
||||
clip_settings (`ClipSettings`, optional): 图像调节设置, 默认不作任何变换
|
||||
"""
|
||||
super().__init__(uuid.uuid4().hex, None, target_timerange, 1.0, 1.0, False, clip_settings=clip_settings)
|
||||
self.resource_id = resource_id
|
||||
|
||||
def export_material(self) -> Dict[str, Any]:
|
||||
"""创建极简的贴纸素材对象, 以此不再单独定义贴纸素材类"""
|
||||
return {
|
||||
"id": self.material_id,
|
||||
"resource_id": self.resource_id,
|
||||
"sticker_id": self.resource_id,
|
||||
"source_platform": 1,
|
||||
"type": "sticker",
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
from .v1 import router as v1_router
|
||||
|
||||
__all__ = ["v1_router"]
|
||||
@@ -0,0 +1,54 @@
|
||||
from email import message
|
||||
from fastapi import APIRouter, Request
|
||||
from src.schemas.create_draft import CreateDraftRequest, CreateDraftResponse
|
||||
from src.schemas.add_videos import AddVideosRequest, AddVideosResponse
|
||||
from src.schemas.save_draft import SaveDraftRequest, SaveDraftResponse
|
||||
from src import service
|
||||
|
||||
|
||||
router = APIRouter(prefix="/v1", tags=["v1"])
|
||||
|
||||
@router.post("/create_draft", response_model=CreateDraftResponse)
|
||||
def create_draft(request: Request, cdr: CreateDraftRequest):
|
||||
"""
|
||||
创建剪映草稿 (v1版本)
|
||||
"""
|
||||
|
||||
# 调用service层处理业务逻辑
|
||||
draft_url, message = service.create_draft(
|
||||
width=cdr.width,
|
||||
height=cdr.height
|
||||
)
|
||||
|
||||
return CreateDraftResponse(message=message, draft_url=draft_url)
|
||||
|
||||
@router.post("/save_draft", response_model=SaveDraftResponse)
|
||||
def save_draft(request: Request, sdr: SaveDraftRequest):
|
||||
"""
|
||||
保存剪映草稿 (v1版本)
|
||||
"""
|
||||
# 调用service层处理业务逻辑
|
||||
draft_url, message = service.save_draft(
|
||||
draft_url=sdr.draft_url,
|
||||
)
|
||||
|
||||
return SaveDraftResponse(message=message, draft_url=draft_url)
|
||||
|
||||
@router.post("/add_videos", response_model=AddVideosResponse)
|
||||
def add_videos(request: Request, avr: AddVideosRequest):
|
||||
"""
|
||||
向剪映草稿添加视频 (v1版本)
|
||||
"""
|
||||
|
||||
# 调用service层处理业务逻辑
|
||||
draft_url, message = service.add_videos(
|
||||
draft_url=avr.draft_url,
|
||||
video_infos=avr.video_infos,
|
||||
alpha=avr.alpha,
|
||||
scale_x=avr.scale_x,
|
||||
scale_y=avr.scale_y,
|
||||
transform_x=avr.transform_x,
|
||||
transform_y=avr.transform_y
|
||||
)
|
||||
|
||||
return AddVideosResponse(message=message, draft_url=draft_url)
|
||||
@@ -0,0 +1,4 @@
|
||||
from .create_draft import CreateDraftRequest, CreateDraftResponse
|
||||
from .add_videos import AddVideosRequest, AddVideosResponse
|
||||
|
||||
__all__ = ["CreateDraftRequest", "CreateDraftResponse", "AddVideosRequest", "AddVideosResponse"]
|
||||
@@ -0,0 +1,17 @@
|
||||
from pydantic import BaseModel, Field
|
||||
|
||||
|
||||
class AddVideosRequest(BaseModel):
|
||||
"""批量添加视频请求参数"""
|
||||
draft_url: str = Field(default="", description="草稿URL")
|
||||
video_infos: str = Field(default="", description="视频信息列表, 用JSON字符串表示")
|
||||
alpha: float = Field(default=1.0, description="全局透明度[0, 1]")
|
||||
scale_x: float = Field(default=1.0, description="X轴缩放比例, 建议范围[0.1, 5.0]")
|
||||
scale_y: float = Field(default=1.0, description="Y轴缩放比例, 建议范围[0.1, 5.0]")
|
||||
transform_x: int = Field(default=0, description="X轴位置偏移(像素)")
|
||||
transform_y: int = Field(default=0, description="Y轴位置偏移(像素)")
|
||||
|
||||
class AddVideosResponse(BaseModel):
|
||||
"""添加视频响应参数"""
|
||||
message: str = Field(default="", description="响应消息")
|
||||
draft_url: str = Field(default="", description="草稿URL")
|
||||
@@ -0,0 +1,13 @@
|
||||
from pydantic import BaseModel, Field
|
||||
|
||||
|
||||
class CreateDraftRequest(BaseModel):
|
||||
"""创建草稿请求参数"""
|
||||
height: int = Field(default=1080, ge=1, description="视频高度")
|
||||
width: int = Field(default=1920, ge=1, description="视频宽度")
|
||||
|
||||
|
||||
class CreateDraftResponse(BaseModel):
|
||||
"""创建草稿响应参数"""
|
||||
message: str = Field(default="", description="响应消息")
|
||||
draft_url: str = Field(default="", description="草稿URL")
|
||||
@@ -0,0 +1,12 @@
|
||||
from pydantic import BaseModel, Field
|
||||
|
||||
|
||||
class SaveDraftRequest(BaseModel):
|
||||
"""创建草稿请求参数"""
|
||||
draft_url: str = Field(default="", description="草稿URL")
|
||||
|
||||
|
||||
class SaveDraftResponse(BaseModel):
|
||||
"""创建草稿响应参数"""
|
||||
message: str = Field(default="", description="响应消息")
|
||||
draft_url: str = Field(default="", description="草稿URL")
|
||||
@@ -0,0 +1,5 @@
|
||||
from .create_draft import create_draft
|
||||
from .add_videos import add_videos
|
||||
from .save_draft import save_draft
|
||||
|
||||
__all__ = ["create_draft", "add_videos", "save_draft"]
|
||||
@@ -0,0 +1,118 @@
|
||||
from src.utils.logger import logger
|
||||
from src.pyJianYingDraft import trange, IntroType, trange
|
||||
import src.pyJianYingDraft as draft
|
||||
import os
|
||||
from src.utils import helper
|
||||
import config
|
||||
|
||||
|
||||
def add_video_to_draft(draft_folder, draft_id, video_path):
|
||||
"""
|
||||
向剪映草稿中添加本地视频
|
||||
|
||||
:param draft_folder: 草稿根目录(如 "C:/JianyingPro Drafts")
|
||||
:param draft_id: 草稿ID(草稿文件夹名称)
|
||||
:param video_path: 本地视频文件路径
|
||||
:return: 操作状态消息
|
||||
"""
|
||||
try:
|
||||
# 1. 验证视频文件存在性
|
||||
if not os.path.exists(video_path):
|
||||
return f"视频文件不存在: {video_path}"
|
||||
|
||||
# 2. 初始化草稿文件夹对象
|
||||
draft_folder_obj = draft.Draft_folder(draft_folder)
|
||||
|
||||
logger.info("2. init draft")
|
||||
|
||||
# 3. 加载指定草稿
|
||||
script = draft_folder_obj.load_template(draft_id)
|
||||
# 添加音频、视频和文本轨道
|
||||
script.add_track(draft.TrackType.audio).add_track(draft.TrackType.video).add_track(draft.TrackType.text)
|
||||
|
||||
logger.info(f"3. load draft: {draft_id}")
|
||||
|
||||
# 4. 添加视频轨道
|
||||
video_track = script.get_imported_track(draft.TrackType.video)
|
||||
logger.info(f"4. add video track: {video_track}")
|
||||
|
||||
# 5. 创建视频素材并添加到草稿
|
||||
video_segment = draft.VideoSegment(video_path, trange("0s", "4.2s"))
|
||||
video_segment.add_animation(IntroType.斜切) # 添加一个入场动画"斜切"
|
||||
logger.info(f"5. add video segment: {video_segment}")
|
||||
|
||||
# 6. 添加视频片段到轨道
|
||||
script.add_segment(video_segment)
|
||||
|
||||
logger.info(f"6. add video segment to track: {video_segment}")
|
||||
|
||||
# 7. 保存草稿
|
||||
script.save()
|
||||
|
||||
logger.info(f"7. save draft: {draft_id}")
|
||||
|
||||
return f"视频 '{os.path.basename(video_path)}' 成功添加到草稿 '{draft_id}' 的轨道末尾"
|
||||
|
||||
except Exception as e:
|
||||
logger.error(f"10. error: {str(e)}")
|
||||
return f"操作失败: {str(e)}"
|
||||
|
||||
def add_videos(
|
||||
draft_url: str,
|
||||
video_infos: str,
|
||||
alpha: float = 1.0,
|
||||
scale_x: float = 1.0,
|
||||
scale_y: float = 1.0,
|
||||
transform_x: int = 0,
|
||||
transform_y: int = 0
|
||||
) -> (str, str):
|
||||
"""
|
||||
添加视频到剪映草稿的业务逻辑
|
||||
文档:https://jy-api.fyshark.com/docs/API_ADD_VIDEOS.md
|
||||
|
||||
Args:
|
||||
draft_url: "" // [必选] 草稿URL
|
||||
video_infos: [
|
||||
{
|
||||
"video_url": "https://example.com/video1.mp4", // [必选] 视频文件的URL地址
|
||||
"width": 1920, // [必选] 视频宽度
|
||||
"height": 1080, // [必选] 视频高度
|
||||
"start": 0, // [必选] 视频在时间轴上的开始时间
|
||||
"end": 12000000, // [必选] 视频在时间轴上的结束时间
|
||||
"duration": 12000000, // [必选] 视频总时长(微秒)
|
||||
"mask": "", // 遮罩类型
|
||||
"transition": "", // 转场效果名称
|
||||
"transition_duration": 500000, // 转场持续时间(微秒)
|
||||
"volume": 1.0, // 音量大小[0, 1]
|
||||
}
|
||||
] // [必选]
|
||||
alpha: 全局透明度[0, 1]
|
||||
scale_x: X轴缩放比例
|
||||
scale_y: Y轴缩放比例
|
||||
transform_x: X轴位置偏移(像素)
|
||||
transform_y: Y轴位置偏移(像素)
|
||||
|
||||
Returns:
|
||||
"message": "视频批量添加成功",
|
||||
"draft_url": "https://ts.fyshark.com/#/cozeToJianyin?drafId=...",
|
||||
"track_id": "video-track-uuid",
|
||||
"video_ids": ["video1-uuid", "video2-uuid", "video3-uuid"],
|
||||
"segment_ids": ["segment1-uuid", "segment2-uuid", "segment3-uuid"],
|
||||
"videos_count": 3,
|
||||
"total_duration": 15000000
|
||||
"""
|
||||
|
||||
logger.info(f"add_videos_service: {draft_url}, {video_infos}, {alpha}, {scale_x}, {scale_y}, {transform_x}, {transform_y}")
|
||||
|
||||
# 提取草稿ID
|
||||
draft_id = helper.get_url_param(draft_url, "draft_id")
|
||||
if not draft_id:
|
||||
return "", "无效的草稿URL"
|
||||
|
||||
# 下载视频
|
||||
video_path = helper.download("https://assets.jcaigc.cn/min.mp4", ".", "test")
|
||||
|
||||
# 添加视频
|
||||
add_video_to_draft(config.DRAFT_DIR, draft_id, video_path)
|
||||
|
||||
return draft_url, "批量添加视频成功"
|
||||
@@ -0,0 +1,41 @@
|
||||
from src.utils.logger import logger
|
||||
import config
|
||||
import src.pyJianYingDraft as draft
|
||||
from src.utils.draft_cache import update_cache
|
||||
import datetime
|
||||
import uuid
|
||||
|
||||
|
||||
def create_draft(width: int, height: int) -> (str, str):
|
||||
"""
|
||||
创建剪映草稿的业务逻辑
|
||||
|
||||
Args:
|
||||
width: 草稿宽度
|
||||
height: 草稿高度
|
||||
|
||||
Returns:
|
||||
draft_url: 草稿URL
|
||||
message: 响应消息,如果成功,就返回“创建草稿成功”,如果失败,则包含具体的错误信息
|
||||
"""
|
||||
# 生成一个草稿ID
|
||||
timestamp = datetime.datetime.now().strftime("%Y%m%d%H%M%S")
|
||||
unique_id = uuid.uuid4().hex[:8]
|
||||
draft_id = f"{timestamp}{unique_id}"
|
||||
logger.info(f"draft_id: {draft_id}, width: {width}, height: {height}")
|
||||
|
||||
draft_folder = draft.Draft_folder(config.DRAFT_DIR)
|
||||
|
||||
# 创建剪映草稿
|
||||
try:
|
||||
script = draft_folder.create_draft(draft_id, width, height, allow_replace=True)
|
||||
except Exception as e:
|
||||
logger.error(f"create draft failed: {e}")
|
||||
return "", f"创建草稿失败"
|
||||
|
||||
# 缓存草稿
|
||||
update_cache(draft_id, script)
|
||||
|
||||
logger.info(f"create draft success: {draft_id}")
|
||||
return config.DRAFT_URL + "?draft_id=" + draft_id, "创建草稿成功"
|
||||
|
||||
@@ -0,0 +1,34 @@
|
||||
from src.utils.logger import logger
|
||||
import src.pyJianYingDraft as draft
|
||||
from src.utils.draft_cache import DRAFT_CACHE
|
||||
from src.utils import helper
|
||||
import config
|
||||
import os
|
||||
|
||||
|
||||
def save_draft(draft_url: str) -> (str, str):
|
||||
"""
|
||||
保存剪映草稿的业务逻辑
|
||||
|
||||
Args:
|
||||
draft_url: 草稿URL
|
||||
|
||||
Returns:
|
||||
draft_url: 草稿URL
|
||||
message: 响应消息,如果成功就返回"草稿保存成功",失败就返回具体错误信息
|
||||
"""
|
||||
|
||||
# 从URL中提取草稿ID
|
||||
draft_id = helper.get_url_param(draft_url, "draft_id")
|
||||
if (not draft_id) or (draft_id not in DRAFT_CACHE):
|
||||
return "", "无效的草稿URL"
|
||||
|
||||
# 从缓存中获取草稿
|
||||
script = DRAFT_CACHE[draft_id]
|
||||
|
||||
# 保存草稿
|
||||
script.save()
|
||||
|
||||
logger.info(f"save draft success: %s", os.path.join(config.DRAFT_DIR, draft_id))
|
||||
return draft_url, "草稿保存成功"
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
# 工具实现
|
||||
@@ -0,0 +1,19 @@
|
||||
from collections import OrderedDict
|
||||
import src.pyJianYingDraft as draft
|
||||
from typing import Dict
|
||||
|
||||
# Modify global variable, use OrderedDict to implement LRU cache, limit the maximum number to 10000
|
||||
DRAFT_CACHE: Dict[str, 'draft.Script_file'] = OrderedDict() # Use Dict for type hinting
|
||||
MAX_CACHE_SIZE = 10000
|
||||
|
||||
def update_cache(key: str, value: draft.Script_file) -> None:
|
||||
"""Update LRU cache"""
|
||||
if key in DRAFT_CACHE:
|
||||
# 如果当前key已经存在,就删除旧的
|
||||
DRAFT_CACHE.pop(key)
|
||||
elif len(DRAFT_CACHE) >= MAX_CACHE_SIZE:
|
||||
print(f"{key}, Cache is full, deleting the least recently used item")
|
||||
# 如果缓存已满,就删除最近最少使用的项(即第一个项)
|
||||
DRAFT_CACHE.popitem(last=False)
|
||||
# 添加到缓存的末尾(最近使用的)
|
||||
DRAFT_CACHE[key] = value
|
||||
@@ -0,0 +1,87 @@
|
||||
from urllib.parse import urlparse, parse_qs
|
||||
import os
|
||||
import requests
|
||||
import mimetypes
|
||||
|
||||
|
||||
def get_url_param(url: str, key: str, default=None):
|
||||
"""
|
||||
从 URL 中提取指定查询参数的值(返回第一个值)。
|
||||
若参数不存在,返回 default。
|
||||
"""
|
||||
query = parse_qs(urlparse(url).query)
|
||||
return query.get(key, [default])[0]
|
||||
|
||||
def download(url, save_dir, filename, limit=30*1024*1024, timeout=300) -> str:
|
||||
"""
|
||||
下载文件并根据Content-Type判断文件类型
|
||||
|
||||
Args:
|
||||
url: 文件的URL地址
|
||||
save_dir: 文件保存目录
|
||||
filename: 文件名
|
||||
limit: 文件大小限制(字节),默认30MB
|
||||
timeout: 整体下载超时时间(秒),默认5分钟
|
||||
|
||||
Returns:
|
||||
完整的文件路径
|
||||
|
||||
Raises:
|
||||
Exception: 下载过程中出现任何错误
|
||||
"""
|
||||
save_path = os.path.join(save_dir, filename)
|
||||
|
||||
try:
|
||||
# 发送GET请求下载文件
|
||||
response = requests.get(url, stream=True, timeout=timeout)
|
||||
response.raise_for_status()
|
||||
|
||||
# 获取Content-Type
|
||||
content_type = response.headers.get('Content-Type', '').split(';')[0].strip()
|
||||
|
||||
# 如果没有扩展名,则根据Content-Type猜测扩展名
|
||||
if '.' not in filename:
|
||||
extension = mimetypes.guess_extension(content_type)
|
||||
if extension:
|
||||
filename += extension
|
||||
# 更新保存路径
|
||||
save_path = os.path.join(save_dir, filename)
|
||||
|
||||
# 下载文件并实时检查大小
|
||||
downloaded_size = 0
|
||||
with open(save_path, 'wb') as f:
|
||||
for chunk in response.iter_content(chunk_size=8192):
|
||||
if chunk:
|
||||
f.write(chunk)
|
||||
downloaded_size += len(chunk)
|
||||
|
||||
# 检查文件大小是否超过限制
|
||||
if downloaded_size > limit:
|
||||
# 删除部分下载的文件
|
||||
f.close()
|
||||
os.remove(save_path)
|
||||
raise Exception(f"文件大小超过{limit/1024/1024:.2f}MB限制")
|
||||
|
||||
# 验证下载完整性(如果服务器提供了Content-Length)
|
||||
content_length = response.headers.get('Content-Length')
|
||||
if content_length and os.path.getsize(save_path) != int(content_length):
|
||||
os.remove(save_path)
|
||||
raise Exception(f"文件下载不完整: 期望{content_length}字节, 实际{os.path.getsize(save_path)}字节")
|
||||
|
||||
return save_path
|
||||
|
||||
except requests.exceptions.RequestException as e:
|
||||
# 清理可能已部分下载的文件
|
||||
if os.path.exists(save_path):
|
||||
os.remove(save_path)
|
||||
raise Exception(f"下载失败: {str(e)}")
|
||||
except IOError as e:
|
||||
# 清理可能已部分下载的文件
|
||||
if os.path.exists(save_path):
|
||||
os.remove(save_path)
|
||||
raise Exception(f"文件写入失败: {str(e)}")
|
||||
except Exception as e:
|
||||
# 清理可能已部分下载的文件
|
||||
if os.path.exists(save_path):
|
||||
os.remove(save_path)
|
||||
raise e
|
||||
@@ -0,0 +1,42 @@
|
||||
from logging.config import dictConfig
|
||||
import logging
|
||||
import os
|
||||
|
||||
class RelativePathFormatter(logging.Formatter):
|
||||
def __init__(self, *args, project_root: str = None, **kwargs):
|
||||
super().__init__(*args, **kwargs)
|
||||
# 把项目根目录传进来
|
||||
self.project_root = project_root or os.getcwd()
|
||||
|
||||
def format(self, record: logging.LogRecord) -> str:
|
||||
record.rel_path = os.path.relpath(record.pathname, self.project_root)
|
||||
return super().format(record)
|
||||
|
||||
LOGGING_CONFIG = {
|
||||
"version": 1,
|
||||
"disable_existing_loggers": False,
|
||||
"formatters": {
|
||||
"default": {
|
||||
"()": RelativePathFormatter,
|
||||
"fmt": "%(asctime)s.%(msecs)03d | %(levelname)s | %(name)s | %(rel_path)s:%(lineno)d | %(message)s",
|
||||
"datefmt": "%Y-%m-%d %H:%M:%S",
|
||||
},
|
||||
},
|
||||
"handlers": {
|
||||
"default": {
|
||||
"formatter": "default",
|
||||
"class": "logging.StreamHandler",
|
||||
"stream": "ext://sys.stdout",
|
||||
},
|
||||
},
|
||||
"loggers": {
|
||||
"uvicorn": {"handlers": ["default"], "level": "INFO", "propagate": False},
|
||||
"uvicorn.error": {"level": "INFO"},
|
||||
"uvicorn.access": {"handlers": ["default"], "level": "INFO", "propagate": False},
|
||||
"src.utils.logger": {"handlers": ["default"], "level": "INFO", "propagate": False}
|
||||
},
|
||||
}
|
||||
|
||||
dictConfig(LOGGING_CONFIG)
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
@@ -0,0 +1,2 @@
|
||||
|
||||
# 空文件,标识tests为Python包
|
||||
@@ -0,0 +1,25 @@
|
||||
import pytest
|
||||
from fastapi.testclient import TestClient
|
||||
from main import app
|
||||
|
||||
client = TestClient(app)
|
||||
|
||||
|
||||
def test_v1_create_draft():
|
||||
"""测试v1版本的create_draft接口"""
|
||||
response = client.post("/openapi/v1/create_draft", params={"height": 1080, "width": 1920})
|
||||
assert response.status_code == 200
|
||||
assert "message" in response.json()
|
||||
assert "draft_id" in response.json()
|
||||
assert response.json()["message"] == "草稿创建成功"
|
||||
|
||||
|
||||
def test_version_not_found():
|
||||
"""测试不存在的API版本"""
|
||||
response = client.post("/openapi/v2/create_draft", params={"height": 1080, "width": 1920})
|
||||
assert response.status_code == 404
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
# 运行测试
|
||||
pytest.main(["-v", "test_api_version.py"])
|
||||
@@ -0,0 +1,42 @@
|
||||
import pytest
|
||||
from fastapi.testclient import TestClient
|
||||
from main import app
|
||||
from src.service.create_draft import create_draft_service
|
||||
from src.schemas.create_draft import CreateDraftRequest
|
||||
|
||||
client = TestClient(app)
|
||||
|
||||
|
||||
def test_create_draft_service(mocker):
|
||||
"""测试创建草稿的服务函数"""
|
||||
# 模拟draft_dir和pyJianYingDraft
|
||||
mock_draft_dir = "test/draft/dir"
|
||||
mock_draft_folder = mocker.patch("pyJianYingDraft.DraftFolder")
|
||||
mock_script = mocker.Mock()
|
||||
mock_draft_folder.return_value.create_draft.return_value = mock_script
|
||||
|
||||
# 调用服务函数
|
||||
draft_id = create_draft_service(
|
||||
draft_dir=mock_draft_dir,
|
||||
width=1920,
|
||||
height=1080
|
||||
)
|
||||
|
||||
# 验证调用
|
||||
mock_draft_folder.assert_called_once_with(mock_draft_dir)
|
||||
mock_draft_folder.return_value.create_draft.assert_called_once()
|
||||
mock_script.save.assert_called_once()
|
||||
assert draft_id is not None
|
||||
|
||||
|
||||
def test_create_draft_api():
|
||||
"""测试创建草稿的API接口"""
|
||||
response = client.post("/openapi/v1/create_draft", json={"height": 1080, "width": 1920})
|
||||
assert response.status_code == 200
|
||||
assert "message" in response.json()
|
||||
assert "draft_id" in response.json()
|
||||
assert response.json()["message"] == "草稿创建成功"
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
pytest.main(["-v", "test_draft_service.py"])
|
||||
@@ -0,0 +1,28 @@
|
||||
import os
|
||||
import asyncio
|
||||
from fastapi import FastAPI, Request
|
||||
from src.middlewares import init_env_middleware
|
||||
from src.constants.setttings import DRAFT_DIR
|
||||
|
||||
# 创建测试应用
|
||||
app = FastAPI()
|
||||
|
||||
# 注册中间件
|
||||
app.middleware("http")(init_env_middleware)
|
||||
|
||||
# 测试路由
|
||||
@app.get("/")
|
||||
async def test(request: Request):
|
||||
return {
|
||||
"message": "测试成功",
|
||||
"draft_dir": os.environ.get("DRAFT_DIR"),
|
||||
"today_draft_dir": os.environ.get("TODAY_DRAFT_DIR"),
|
||||
"dir_exists": os.path.exists(DRAFT_DIR)
|
||||
}
|
||||
|
||||
# 运行测试
|
||||
if __name__ == "__main__":
|
||||
import uvicorn
|
||||
print("启动测试服务器...")
|
||||
print(f"草稿目录: {DRAFT_DIR}")
|
||||
uvicorn.run(app, host="0.0.0.0", port=8000)
|
||||
@@ -0,0 +1,48 @@
|
||||
import requests
|
||||
|
||||
|
||||
def test_create_draft_with_custom_params():
|
||||
"""测试使用自定义参数创建草稿"""
|
||||
# 测试不同的参数值
|
||||
test_cases = [
|
||||
(1080, 1920), # 默认值
|
||||
(720, 1280), # 720p
|
||||
(2160, 3840) # 4K
|
||||
]
|
||||
|
||||
# 假设API运行在本地8000端口
|
||||
base_url = "http://localhost:60000"
|
||||
endpoint = "/openapi/v1/create_draft"
|
||||
url = f"{base_url}{endpoint}"
|
||||
|
||||
for height, width in test_cases:
|
||||
print(f"Testing with height={height}, width={width}")
|
||||
# 使用JSON body传递参数
|
||||
try:
|
||||
response = requests.post(
|
||||
url,
|
||||
json={"height": height, "width": width}
|
||||
)
|
||||
print(f"Response status code: {response.status_code}")
|
||||
print(f"Response body: {response.json()}")
|
||||
|
||||
if response.status_code != 200:
|
||||
print(f"Error: Request failed with status code {response.status_code}")
|
||||
continue
|
||||
|
||||
if "message" not in response.json() or "draft_id" not in response.json():
|
||||
print("Error: Response missing required fields")
|
||||
continue
|
||||
|
||||
if response.json()["message"] != "草稿创建成功":
|
||||
print(f"Error: Unexpected message: {response.json()["message"]}")
|
||||
continue
|
||||
|
||||
print("Test passed!")
|
||||
except Exception as e:
|
||||
print(f"Error occurred: {e}")
|
||||
print("Make sure the server is running on http://localhost:8000")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
test_create_draft_with_custom_params()
|
||||
@@ -0,0 +1,616 @@
|
||||
version = 1
|
||||
revision = 3
|
||||
requires-python = ">=3.11"
|
||||
|
||||
[[package]]
|
||||
name = "annotated-types"
|
||||
version = "0.7.0"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/ee/67/531ea369ba64dcff5ec9c3402f9f51bf748cec26dde048a2f973a4eea7f5/annotated_types-0.7.0.tar.gz", hash = "sha256:aff07c09a53a08bc8cfccb9c85b05f1aa9a2a6f23728d790723543408344ce89", size = 16081, upload-time = "2024-05-20T21:33:25.928Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl", hash = "sha256:1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53", size = 13643, upload-time = "2024-05-20T21:33:24.1Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "anyio"
|
||||
version = "4.10.0"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
dependencies = [
|
||||
{ name = "idna" },
|
||||
{ name = "sniffio" },
|
||||
{ name = "typing-extensions", marker = "python_full_version < '3.13'" },
|
||||
]
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/f1/b4/636b3b65173d3ce9a38ef5f0522789614e590dab6a8d505340a4efe4c567/anyio-4.10.0.tar.gz", hash = "sha256:3f3fae35c96039744587aa5b8371e7e8e603c0702999535961dd336026973ba6", size = 213252, upload-time = "2025-08-04T08:54:26.451Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/6f/12/e5e0282d673bb9746bacfb6e2dba8719989d3660cdb2ea79aee9a9651afb/anyio-4.10.0-py3-none-any.whl", hash = "sha256:60e474ac86736bbfd6f210f7a61218939c318f43f9972497381f1c5e930ed3d1", size = 107213, upload-time = "2025-08-04T08:54:24.882Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "capcut-mate"
|
||||
version = "1.0.0"
|
||||
source = { virtual = "." }
|
||||
dependencies = [
|
||||
{ name = "email-validator" },
|
||||
{ name = "fastapi" },
|
||||
{ name = "pymediainfo" },
|
||||
{ name = "requests" },
|
||||
{ name = "uiautomation" },
|
||||
{ name = "uvicorn", extra = ["standard"] },
|
||||
]
|
||||
|
||||
[package.metadata]
|
||||
requires-dist = [
|
||||
{ name = "email-validator", specifier = ">=2.2.0" },
|
||||
{ name = "fastapi", specifier = ">=0.100.0" },
|
||||
{ name = "pymediainfo", specifier = ">=7.0.1" },
|
||||
{ name = "requests", specifier = ">=2.32.5" },
|
||||
{ name = "uiautomation", specifier = ">=2.0.29" },
|
||||
{ name = "uvicorn", extras = ["standard"], specifier = ">=0.35.0" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "certifi"
|
||||
version = "2025.8.3"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/dc/67/960ebe6bf230a96cda2e0abcf73af550ec4f090005363542f0765df162e0/certifi-2025.8.3.tar.gz", hash = "sha256:e564105f78ded564e3ae7c923924435e1daa7463faeab5bb932bc53ffae63407", size = 162386, upload-time = "2025-08-03T03:07:47.08Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/e5/48/1549795ba7742c948d2ad169c1c8cdbae65bc450d6cd753d124b17c8cd32/certifi-2025.8.3-py3-none-any.whl", hash = "sha256:f6c12493cfb1b06ba2ff328595af9350c65d6644968e5d3a2ffd78699af217a5", size = 161216, upload-time = "2025-08-03T03:07:45.777Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "charset-normalizer"
|
||||
version = "3.4.3"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/83/2d/5fd176ceb9b2fc619e63405525573493ca23441330fcdaee6bef9460e924/charset_normalizer-3.4.3.tar.gz", hash = "sha256:6fce4b8500244f6fcb71465d4a4930d132ba9ab8e71a7859e6a5d59851068d14", size = 122371, upload-time = "2025-08-09T07:57:28.46Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/7f/b5/991245018615474a60965a7c9cd2b4efbaabd16d582a5547c47ee1c7730b/charset_normalizer-3.4.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:b256ee2e749283ef3ddcff51a675ff43798d92d746d1a6e4631bf8c707d22d0b", size = 204483, upload-time = "2025-08-09T07:55:53.12Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/c7/2a/ae245c41c06299ec18262825c1569c5d3298fc920e4ddf56ab011b417efd/charset_normalizer-3.4.3-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:13faeacfe61784e2559e690fc53fa4c5ae97c6fcedb8eb6fb8d0a15b475d2c64", size = 145520, upload-time = "2025-08-09T07:55:54.712Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/3a/a4/b3b6c76e7a635748c4421d2b92c7b8f90a432f98bda5082049af37ffc8e3/charset_normalizer-3.4.3-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:00237675befef519d9af72169d8604a067d92755e84fe76492fef5441db05b91", size = 158876, upload-time = "2025-08-09T07:55:56.024Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/e2/e6/63bb0e10f90a8243c5def74b5b105b3bbbfb3e7bb753915fe333fb0c11ea/charset_normalizer-3.4.3-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:585f3b2a80fbd26b048a0be90c5aae8f06605d3c92615911c3a2b03a8a3b796f", size = 156083, upload-time = "2025-08-09T07:55:57.582Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/87/df/b7737ff046c974b183ea9aa111b74185ac8c3a326c6262d413bd5a1b8c69/charset_normalizer-3.4.3-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0e78314bdc32fa80696f72fa16dc61168fda4d6a0c014e0380f9d02f0e5d8a07", size = 150295, upload-time = "2025-08-09T07:55:59.147Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/61/f1/190d9977e0084d3f1dc169acd060d479bbbc71b90bf3e7bf7b9927dec3eb/charset_normalizer-3.4.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:96b2b3d1a83ad55310de8c7b4a2d04d9277d5591f40761274856635acc5fcb30", size = 148379, upload-time = "2025-08-09T07:56:00.364Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/4c/92/27dbe365d34c68cfe0ca76f1edd70e8705d82b378cb54ebbaeabc2e3029d/charset_normalizer-3.4.3-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:939578d9d8fd4299220161fdd76e86c6a251987476f5243e8864a7844476ba14", size = 160018, upload-time = "2025-08-09T07:56:01.678Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/99/04/baae2a1ea1893a01635d475b9261c889a18fd48393634b6270827869fa34/charset_normalizer-3.4.3-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:fd10de089bcdcd1be95a2f73dbe6254798ec1bda9f450d5828c96f93e2536b9c", size = 157430, upload-time = "2025-08-09T07:56:02.87Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/2f/36/77da9c6a328c54d17b960c89eccacfab8271fdaaa228305330915b88afa9/charset_normalizer-3.4.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:1e8ac75d72fa3775e0b7cb7e4629cec13b7514d928d15ef8ea06bca03ef01cae", size = 151600, upload-time = "2025-08-09T07:56:04.089Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/64/d4/9eb4ff2c167edbbf08cdd28e19078bf195762e9bd63371689cab5ecd3d0d/charset_normalizer-3.4.3-cp311-cp311-win32.whl", hash = "sha256:6cf8fd4c04756b6b60146d98cd8a77d0cdae0e1ca20329da2ac85eed779b6849", size = 99616, upload-time = "2025-08-09T07:56:05.658Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/f4/9c/996a4a028222e7761a96634d1820de8a744ff4327a00ada9c8942033089b/charset_normalizer-3.4.3-cp311-cp311-win_amd64.whl", hash = "sha256:31a9a6f775f9bcd865d88ee350f0ffb0e25936a7f930ca98995c05abf1faf21c", size = 107108, upload-time = "2025-08-09T07:56:07.176Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/e9/5e/14c94999e418d9b87682734589404a25854d5f5d0408df68bc15b6ff54bb/charset_normalizer-3.4.3-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:e28e334d3ff134e88989d90ba04b47d84382a828c061d0d1027b1b12a62b39b1", size = 205655, upload-time = "2025-08-09T07:56:08.475Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/7d/a8/c6ec5d389672521f644505a257f50544c074cf5fc292d5390331cd6fc9c3/charset_normalizer-3.4.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0cacf8f7297b0c4fcb74227692ca46b4a5852f8f4f24b3c766dd94a1075c4884", size = 146223, upload-time = "2025-08-09T07:56:09.708Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/fc/eb/a2ffb08547f4e1e5415fb69eb7db25932c52a52bed371429648db4d84fb1/charset_normalizer-3.4.3-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:c6fd51128a41297f5409deab284fecbe5305ebd7e5a1f959bee1c054622b7018", size = 159366, upload-time = "2025-08-09T07:56:11.326Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/82/10/0fd19f20c624b278dddaf83b8464dcddc2456cb4b02bb902a6da126b87a1/charset_normalizer-3.4.3-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:3cfb2aad70f2c6debfbcb717f23b7eb55febc0bb23dcffc0f076009da10c6392", size = 157104, upload-time = "2025-08-09T07:56:13.014Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/16/ab/0233c3231af734f5dfcf0844aa9582d5a1466c985bbed6cedab85af9bfe3/charset_normalizer-3.4.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1606f4a55c0fd363d754049cdf400175ee96c992b1f8018b993941f221221c5f", size = 151830, upload-time = "2025-08-09T07:56:14.428Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/ae/02/e29e22b4e02839a0e4a06557b1999d0a47db3567e82989b5bb21f3fbbd9f/charset_normalizer-3.4.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:027b776c26d38b7f15b26a5da1044f376455fb3766df8fc38563b4efbc515154", size = 148854, upload-time = "2025-08-09T07:56:16.051Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/05/6b/e2539a0a4be302b481e8cafb5af8792da8093b486885a1ae4d15d452bcec/charset_normalizer-3.4.3-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:42e5088973e56e31e4fa58eb6bd709e42fc03799c11c42929592889a2e54c491", size = 160670, upload-time = "2025-08-09T07:56:17.314Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/31/e7/883ee5676a2ef217a40ce0bffcc3d0dfbf9e64cbcfbdf822c52981c3304b/charset_normalizer-3.4.3-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:cc34f233c9e71701040d772aa7490318673aa7164a0efe3172b2981218c26d93", size = 158501, upload-time = "2025-08-09T07:56:18.641Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/c1/35/6525b21aa0db614cf8b5792d232021dca3df7f90a1944db934efa5d20bb1/charset_normalizer-3.4.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:320e8e66157cc4e247d9ddca8e21f427efc7a04bbd0ac8a9faf56583fa543f9f", size = 153173, upload-time = "2025-08-09T07:56:20.289Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/50/ee/f4704bad8201de513fdc8aac1cabc87e38c5818c93857140e06e772b5892/charset_normalizer-3.4.3-cp312-cp312-win32.whl", hash = "sha256:fb6fecfd65564f208cbf0fba07f107fb661bcd1a7c389edbced3f7a493f70e37", size = 99822, upload-time = "2025-08-09T07:56:21.551Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/39/f5/3b3836ca6064d0992c58c7561c6b6eee1b3892e9665d650c803bd5614522/charset_normalizer-3.4.3-cp312-cp312-win_amd64.whl", hash = "sha256:86df271bf921c2ee3818f0522e9a5b8092ca2ad8b065ece5d7d9d0e9f4849bcc", size = 107543, upload-time = "2025-08-09T07:56:23.115Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/65/ca/2135ac97709b400c7654b4b764daf5c5567c2da45a30cdd20f9eefe2d658/charset_normalizer-3.4.3-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:14c2a87c65b351109f6abfc424cab3927b3bdece6f706e4d12faaf3d52ee5efe", size = 205326, upload-time = "2025-08-09T07:56:24.721Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/71/11/98a04c3c97dd34e49c7d247083af03645ca3730809a5509443f3c37f7c99/charset_normalizer-3.4.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:41d1fc408ff5fdfb910200ec0e74abc40387bccb3252f3f27c0676731df2b2c8", size = 146008, upload-time = "2025-08-09T07:56:26.004Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/60/f5/4659a4cb3c4ec146bec80c32d8bb16033752574c20b1252ee842a95d1a1e/charset_normalizer-3.4.3-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:1bb60174149316da1c35fa5233681f7c0f9f514509b8e399ab70fea5f17e45c9", size = 159196, upload-time = "2025-08-09T07:56:27.25Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/86/9e/f552f7a00611f168b9a5865a1414179b2c6de8235a4fa40189f6f79a1753/charset_normalizer-3.4.3-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:30d006f98569de3459c2fc1f2acde170b7b2bd265dc1943e87e1a4efe1b67c31", size = 156819, upload-time = "2025-08-09T07:56:28.515Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/7e/95/42aa2156235cbc8fa61208aded06ef46111c4d3f0de233107b3f38631803/charset_normalizer-3.4.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:416175faf02e4b0810f1f38bcb54682878a4af94059a1cd63b8747244420801f", size = 151350, upload-time = "2025-08-09T07:56:29.716Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/c2/a9/3865b02c56f300a6f94fc631ef54f0a8a29da74fb45a773dfd3dcd380af7/charset_normalizer-3.4.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:6aab0f181c486f973bc7262a97f5aca3ee7e1437011ef0c2ec04b5a11d16c927", size = 148644, upload-time = "2025-08-09T07:56:30.984Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/77/d9/cbcf1a2a5c7d7856f11e7ac2d782aec12bdfea60d104e60e0aa1c97849dc/charset_normalizer-3.4.3-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:fdabf8315679312cfa71302f9bd509ded4f2f263fb5b765cf1433b39106c3cc9", size = 160468, upload-time = "2025-08-09T07:56:32.252Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/f6/42/6f45efee8697b89fda4d50580f292b8f7f9306cb2971d4b53f8914e4d890/charset_normalizer-3.4.3-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:bd28b817ea8c70215401f657edef3a8aa83c29d447fb0b622c35403780ba11d5", size = 158187, upload-time = "2025-08-09T07:56:33.481Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/70/99/f1c3bdcfaa9c45b3ce96f70b14f070411366fa19549c1d4832c935d8e2c3/charset_normalizer-3.4.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:18343b2d246dc6761a249ba1fb13f9ee9a2bcd95decc767319506056ea4ad4dc", size = 152699, upload-time = "2025-08-09T07:56:34.739Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/a3/ad/b0081f2f99a4b194bcbb1934ef3b12aa4d9702ced80a37026b7607c72e58/charset_normalizer-3.4.3-cp313-cp313-win32.whl", hash = "sha256:6fb70de56f1859a3f71261cbe41005f56a7842cc348d3aeb26237560bfa5e0ce", size = 99580, upload-time = "2025-08-09T07:56:35.981Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/9a/8f/ae790790c7b64f925e5c953b924aaa42a243fb778fed9e41f147b2a5715a/charset_normalizer-3.4.3-cp313-cp313-win_amd64.whl", hash = "sha256:cf1ebb7d78e1ad8ec2a8c4732c7be2e736f6e5123a4146c5b89c9d1f585f8cef", size = 107366, upload-time = "2025-08-09T07:56:37.339Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/8e/91/b5a06ad970ddc7a0e513112d40113e834638f4ca1120eb727a249fb2715e/charset_normalizer-3.4.3-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:3cd35b7e8aedeb9e34c41385fda4f73ba609e561faedfae0a9e75e44ac558a15", size = 204342, upload-time = "2025-08-09T07:56:38.687Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/ce/ec/1edc30a377f0a02689342f214455c3f6c2fbedd896a1d2f856c002fc3062/charset_normalizer-3.4.3-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b89bc04de1d83006373429975f8ef9e7932534b8cc9ca582e4db7d20d91816db", size = 145995, upload-time = "2025-08-09T07:56:40.048Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/17/e5/5e67ab85e6d22b04641acb5399c8684f4d37caf7558a53859f0283a650e9/charset_normalizer-3.4.3-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:2001a39612b241dae17b4687898843f254f8748b796a2e16f1051a17078d991d", size = 158640, upload-time = "2025-08-09T07:56:41.311Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/f1/e5/38421987f6c697ee3722981289d554957c4be652f963d71c5e46a262e135/charset_normalizer-3.4.3-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:8dcfc373f888e4fb39a7bc57e93e3b845e7f462dacc008d9749568b1c4ece096", size = 156636, upload-time = "2025-08-09T07:56:43.195Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/a0/e4/5a075de8daa3ec0745a9a3b54467e0c2967daaaf2cec04c845f73493e9a1/charset_normalizer-3.4.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:18b97b8404387b96cdbd30ad660f6407799126d26a39ca65729162fd810a99aa", size = 150939, upload-time = "2025-08-09T07:56:44.819Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/02/f7/3611b32318b30974131db62b4043f335861d4d9b49adc6d57c1149cc49d4/charset_normalizer-3.4.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:ccf600859c183d70eb47e05a44cd80a4ce77394d1ac0f79dbd2dd90a69a3a049", size = 148580, upload-time = "2025-08-09T07:56:46.684Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/7e/61/19b36f4bd67f2793ab6a99b979b4e4f3d8fc754cbdffb805335df4337126/charset_normalizer-3.4.3-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:53cd68b185d98dde4ad8990e56a58dea83a4162161b1ea9272e5c9182ce415e0", size = 159870, upload-time = "2025-08-09T07:56:47.941Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/06/57/84722eefdd338c04cf3030ada66889298eaedf3e7a30a624201e0cbe424a/charset_normalizer-3.4.3-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:30a96e1e1f865f78b030d65241c1ee850cdf422d869e9028e2fc1d5e4db73b92", size = 157797, upload-time = "2025-08-09T07:56:49.756Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/72/2a/aff5dd112b2f14bcc3462c312dce5445806bfc8ab3a7328555da95330e4b/charset_normalizer-3.4.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:d716a916938e03231e86e43782ca7878fb602a125a91e7acb8b5112e2e96ac16", size = 152224, upload-time = "2025-08-09T07:56:51.369Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/b7/8c/9839225320046ed279c6e839d51f028342eb77c91c89b8ef2549f951f3ec/charset_normalizer-3.4.3-cp314-cp314-win32.whl", hash = "sha256:c6dbd0ccdda3a2ba7c2ecd9d77b37f3b5831687d8dc1b6ca5f56a4880cc7b7ce", size = 100086, upload-time = "2025-08-09T07:56:52.722Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/ee/7a/36fbcf646e41f710ce0a563c1c9a343c6edf9be80786edeb15b6f62e17db/charset_normalizer-3.4.3-cp314-cp314-win_amd64.whl", hash = "sha256:73dc19b562516fc9bcf6e5d6e596df0b4eb98d87e4f79f3ae71840e6ed21361c", size = 107400, upload-time = "2025-08-09T07:56:55.172Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/8a/1f/f041989e93b001bc4e44bb1669ccdcf54d3f00e628229a85b08d330615c5/charset_normalizer-3.4.3-py3-none-any.whl", hash = "sha256:ce571ab16d890d23b5c278547ba694193a45011ff86a9162a71307ed9f86759a", size = 53175, upload-time = "2025-08-09T07:57:26.864Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "click"
|
||||
version = "8.2.1"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
dependencies = [
|
||||
{ name = "colorama", marker = "sys_platform == 'win32'" },
|
||||
]
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/60/6c/8ca2efa64cf75a977a0d7fac081354553ebe483345c734fb6b6515d96bbc/click-8.2.1.tar.gz", hash = "sha256:27c491cc05d968d271d5a1db13e3b5a184636d9d930f148c50b038f0d0646202", size = 286342, upload-time = "2025-05-20T23:19:49.832Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/85/32/10bb5764d90a8eee674e9dc6f4db6a0ab47c8c4d0d83c27f7c39ac415a4d/click-8.2.1-py3-none-any.whl", hash = "sha256:61a3265b914e850b85317d0b3109c7f8cd35a670f963866005d6ef1d5175a12b", size = 102215, upload-time = "2025-05-20T23:19:47.796Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "colorama"
|
||||
version = "0.4.6"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/d8/53/6f443c9a4a8358a93a6792e2acffb9d9d5cb0a5cfd8802644b7b1c9a02e4/colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44", size = 27697, upload-time = "2022-10-25T02:36:22.414Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6", size = 25335, upload-time = "2022-10-25T02:36:20.889Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "comtypes"
|
||||
version = "1.4.12"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/b6/b8/3af03195b9de515448292169c6d6d7a630de02bedf891a47b809638c186f/comtypes-1.4.12.zip", hash = "sha256:3ff06c442c2de8a2b25785407f244eb5b6f809d21cf068a855071ba80a76876f", size = 280541, upload-time = "2025-08-27T23:47:33.155Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/2d/01/89285549c5138009db68f26c80f2174d0ec82a858547df0cc40a8b0a47d6/comtypes-1.4.12-py3-none-any.whl", hash = "sha256:e0fa9cc19c489fa7feea4c1710f4575c717e2673edef5b99bf99efd507908e44", size = 253704, upload-time = "2025-08-27T23:47:31.58Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "dnspython"
|
||||
version = "2.7.0"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/b5/4a/263763cb2ba3816dd94b08ad3a33d5fdae34ecb856678773cc40a3605829/dnspython-2.7.0.tar.gz", hash = "sha256:ce9c432eda0dc91cf618a5cedf1a4e142651196bbcd2c80e89ed5a907e5cfaf1", size = 345197, upload-time = "2024-10-05T20:14:59.362Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/68/1b/e0a87d256e40e8c888847551b20a017a6b98139178505dc7ffb96f04e954/dnspython-2.7.0-py3-none-any.whl", hash = "sha256:b4c34b7d10b51bcc3a5071e7b8dee77939f1e878477eeecc965e9835f63c6c86", size = 313632, upload-time = "2024-10-05T20:14:57.687Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "email-validator"
|
||||
version = "2.2.0"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
dependencies = [
|
||||
{ name = "dnspython" },
|
||||
{ name = "idna" },
|
||||
]
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/48/ce/13508a1ec3f8bb981ae4ca79ea40384becc868bfae97fd1c942bb3a001b1/email_validator-2.2.0.tar.gz", hash = "sha256:cb690f344c617a714f22e66ae771445a1ceb46821152df8e165c5f9a364582b7", size = 48967, upload-time = "2024-06-20T11:30:30.034Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/d7/ee/bf0adb559ad3c786f12bcbc9296b3f5675f529199bef03e2df281fa1fadb/email_validator-2.2.0-py3-none-any.whl", hash = "sha256:561977c2d73ce3611850a06fa56b414621e0c8faa9d66f2611407d87465da631", size = 33521, upload-time = "2024-06-20T11:30:28.248Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "fastapi"
|
||||
version = "0.116.1"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
dependencies = [
|
||||
{ name = "pydantic" },
|
||||
{ name = "starlette" },
|
||||
{ name = "typing-extensions" },
|
||||
]
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/78/d7/6c8b3bfe33eeffa208183ec037fee0cce9f7f024089ab1c5d12ef04bd27c/fastapi-0.116.1.tar.gz", hash = "sha256:ed52cbf946abfd70c5a0dccb24673f0670deeb517a88b3544d03c2a6bf283143", size = 296485, upload-time = "2025-07-11T16:22:32.057Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/e5/47/d63c60f59a59467fda0f93f46335c9d18526d7071f025cb5b89d5353ea42/fastapi-0.116.1-py3-none-any.whl", hash = "sha256:c46ac7c312df840f0c9e220f7964bada936781bc4e2e6eb71f1c4d7553786565", size = 95631, upload-time = "2025-07-11T16:22:30.485Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "h11"
|
||||
version = "0.16.0"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/01/ee/02a2c011bdab74c6fb3c75474d40b3052059d95df7e73351460c8588d963/h11-0.16.0.tar.gz", hash = "sha256:4e35b956cf45792e4caa5885e69fba00bdbc6ffafbfa020300e549b208ee5ff1", size = 101250, upload-time = "2025-04-24T03:35:25.427Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl", hash = "sha256:63cf8bbe7522de3bf65932fda1d9c2772064ffb3dae62d55932da54b31cb6c86", size = 37515, upload-time = "2025-04-24T03:35:24.344Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "httptools"
|
||||
version = "0.6.4"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/a7/9a/ce5e1f7e131522e6d3426e8e7a490b3a01f39a6696602e1c4f33f9e94277/httptools-0.6.4.tar.gz", hash = "sha256:4e93eee4add6493b59a5c514da98c939b244fce4a0d8879cd3f466562f4b7d5c", size = 240639, upload-time = "2024-10-16T19:45:08.902Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/7b/26/bb526d4d14c2774fe07113ca1db7255737ffbb119315839af2065abfdac3/httptools-0.6.4-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:f47f8ed67cc0ff862b84a1189831d1d33c963fb3ce1ee0c65d3b0cbe7b711069", size = 199029, upload-time = "2024-10-16T19:44:18.427Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/a6/17/3e0d3e9b901c732987a45f4f94d4e2c62b89a041d93db89eafb262afd8d5/httptools-0.6.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:0614154d5454c21b6410fdf5262b4a3ddb0f53f1e1721cfd59d55f32138c578a", size = 103492, upload-time = "2024-10-16T19:44:19.515Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/b7/24/0fe235d7b69c42423c7698d086d4db96475f9b50b6ad26a718ef27a0bce6/httptools-0.6.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f8787367fbdfccae38e35abf7641dafc5310310a5987b689f4c32cc8cc3ee975", size = 462891, upload-time = "2024-10-16T19:44:21.067Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/b1/2f/205d1f2a190b72da6ffb5f41a3736c26d6fa7871101212b15e9b5cd8f61d/httptools-0.6.4-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:40b0f7fe4fd38e6a507bdb751db0379df1e99120c65fbdc8ee6c1d044897a636", size = 459788, upload-time = "2024-10-16T19:44:22.958Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/6e/4c/d09ce0eff09057a206a74575ae8f1e1e2f0364d20e2442224f9e6612c8b9/httptools-0.6.4-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:40a5ec98d3f49904b9fe36827dcf1aadfef3b89e2bd05b0e35e94f97c2b14721", size = 433214, upload-time = "2024-10-16T19:44:24.513Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/3e/d2/84c9e23edbccc4a4c6f96a1b8d99dfd2350289e94f00e9ccc7aadde26fb5/httptools-0.6.4-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:dacdd3d10ea1b4ca9df97a0a303cbacafc04b5cd375fa98732678151643d4988", size = 434120, upload-time = "2024-10-16T19:44:26.295Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/d0/46/4d8e7ba9581416de1c425b8264e2cadd201eb709ec1584c381f3e98f51c1/httptools-0.6.4-cp311-cp311-win_amd64.whl", hash = "sha256:288cd628406cc53f9a541cfaf06041b4c71d751856bab45e3702191f931ccd17", size = 88565, upload-time = "2024-10-16T19:44:29.188Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/bb/0e/d0b71465c66b9185f90a091ab36389a7352985fe857e352801c39d6127c8/httptools-0.6.4-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:df017d6c780287d5c80601dafa31f17bddb170232d85c066604d8558683711a2", size = 200683, upload-time = "2024-10-16T19:44:30.175Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/e2/b8/412a9bb28d0a8988de3296e01efa0bd62068b33856cdda47fe1b5e890954/httptools-0.6.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:85071a1e8c2d051b507161f6c3e26155b5c790e4e28d7f236422dbacc2a9cc44", size = 104337, upload-time = "2024-10-16T19:44:31.786Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/9b/01/6fb20be3196ffdc8eeec4e653bc2a275eca7f36634c86302242c4fbb2760/httptools-0.6.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:69422b7f458c5af875922cdb5bd586cc1f1033295aa9ff63ee196a87519ac8e1", size = 508796, upload-time = "2024-10-16T19:44:32.825Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/f7/d8/b644c44acc1368938317d76ac991c9bba1166311880bcc0ac297cb9d6bd7/httptools-0.6.4-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:16e603a3bff50db08cd578d54f07032ca1631450ceb972c2f834c2b860c28ea2", size = 510837, upload-time = "2024-10-16T19:44:33.974Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/52/d8/254d16a31d543073a0e57f1c329ca7378d8924e7e292eda72d0064987486/httptools-0.6.4-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:ec4f178901fa1834d4a060320d2f3abc5c9e39766953d038f1458cb885f47e81", size = 485289, upload-time = "2024-10-16T19:44:35.111Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/5f/3c/4aee161b4b7a971660b8be71a92c24d6c64372c1ab3ae7f366b3680df20f/httptools-0.6.4-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:f9eb89ecf8b290f2e293325c646a211ff1c2493222798bb80a530c5e7502494f", size = 489779, upload-time = "2024-10-16T19:44:36.253Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/12/b7/5cae71a8868e555f3f67a50ee7f673ce36eac970f029c0c5e9d584352961/httptools-0.6.4-cp312-cp312-win_amd64.whl", hash = "sha256:db78cb9ca56b59b016e64b6031eda5653be0589dba2b1b43453f6e8b405a0970", size = 88634, upload-time = "2024-10-16T19:44:37.357Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/94/a3/9fe9ad23fd35f7de6b91eeb60848986058bd8b5a5c1e256f5860a160cc3e/httptools-0.6.4-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:ade273d7e767d5fae13fa637f4d53b6e961fb7fd93c7797562663f0171c26660", size = 197214, upload-time = "2024-10-16T19:44:38.738Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/ea/d9/82d5e68bab783b632023f2fa31db20bebb4e89dfc4d2293945fd68484ee4/httptools-0.6.4-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:856f4bc0478ae143bad54a4242fccb1f3f86a6e1be5548fecfd4102061b3a083", size = 102431, upload-time = "2024-10-16T19:44:39.818Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/96/c1/cb499655cbdbfb57b577734fde02f6fa0bbc3fe9fb4d87b742b512908dff/httptools-0.6.4-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:322d20ea9cdd1fa98bd6a74b77e2ec5b818abdc3d36695ab402a0de8ef2865a3", size = 473121, upload-time = "2024-10-16T19:44:41.189Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/af/71/ee32fd358f8a3bb199b03261f10921716990808a675d8160b5383487a317/httptools-0.6.4-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4d87b29bd4486c0093fc64dea80231f7c7f7eb4dc70ae394d70a495ab8436071", size = 473805, upload-time = "2024-10-16T19:44:42.384Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/8a/0a/0d4df132bfca1507114198b766f1737d57580c9ad1cf93c1ff673e3387be/httptools-0.6.4-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:342dd6946aa6bda4b8f18c734576106b8a31f2fe31492881a9a160ec84ff4bd5", size = 448858, upload-time = "2024-10-16T19:44:43.959Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/1e/6a/787004fdef2cabea27bad1073bf6a33f2437b4dbd3b6fb4a9d71172b1c7c/httptools-0.6.4-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:4b36913ba52008249223042dca46e69967985fb4051951f94357ea681e1f5dc0", size = 452042, upload-time = "2024-10-16T19:44:45.071Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/4d/dc/7decab5c404d1d2cdc1bb330b1bf70e83d6af0396fd4fc76fc60c0d522bf/httptools-0.6.4-cp313-cp313-win_amd64.whl", hash = "sha256:28908df1b9bb8187393d5b5db91435ccc9c8e891657f9cbb42a2541b44c82fc8", size = 87682, upload-time = "2024-10-16T19:44:46.46Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "idna"
|
||||
version = "3.10"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/f1/70/7703c29685631f5a7590aa73f1f1d3fa9a380e654b86af429e0934a32f7d/idna-3.10.tar.gz", hash = "sha256:12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9", size = 190490, upload-time = "2024-09-15T18:07:39.745Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/76/c6/c88e154df9c4e1a2a66ccf0005a88dfb2650c1dffb6f5ce603dfbd452ce3/idna-3.10-py3-none-any.whl", hash = "sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3", size = 70442, upload-time = "2024-09-15T18:07:37.964Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "pydantic"
|
||||
version = "2.11.7"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
dependencies = [
|
||||
{ name = "annotated-types" },
|
||||
{ name = "pydantic-core" },
|
||||
{ name = "typing-extensions" },
|
||||
{ name = "typing-inspection" },
|
||||
]
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/00/dd/4325abf92c39ba8623b5af936ddb36ffcfe0beae70405d456ab1fb2f5b8c/pydantic-2.11.7.tar.gz", hash = "sha256:d989c3c6cb79469287b1569f7447a17848c998458d49ebe294e975b9baf0f0db", size = 788350, upload-time = "2025-06-14T08:33:17.137Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/6a/c0/ec2b1c8712ca690e5d61979dee872603e92b8a32f94cc1b72d53beab008a/pydantic-2.11.7-py3-none-any.whl", hash = "sha256:dde5df002701f6de26248661f6835bbe296a47bf73990135c7d07ce741b9623b", size = 444782, upload-time = "2025-06-14T08:33:14.905Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "pydantic-core"
|
||||
version = "2.33.2"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
dependencies = [
|
||||
{ name = "typing-extensions" },
|
||||
]
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/ad/88/5f2260bdfae97aabf98f1778d43f69574390ad787afb646292a638c923d4/pydantic_core-2.33.2.tar.gz", hash = "sha256:7cb8bc3605c29176e1b105350d2e6474142d7c1bd1d9327c4a9bdb46bf827acc", size = 435195, upload-time = "2025-04-23T18:33:52.104Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/3f/8d/71db63483d518cbbf290261a1fc2839d17ff89fce7089e08cad07ccfce67/pydantic_core-2.33.2-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:4c5b0a576fb381edd6d27f0a85915c6daf2f8138dc5c267a57c08a62900758c7", size = 2028584, upload-time = "2025-04-23T18:31:03.106Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/24/2f/3cfa7244ae292dd850989f328722d2aef313f74ffc471184dc509e1e4e5a/pydantic_core-2.33.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:e799c050df38a639db758c617ec771fd8fb7a5f8eaaa4b27b101f266b216a246", size = 1855071, upload-time = "2025-04-23T18:31:04.621Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/b3/d3/4ae42d33f5e3f50dd467761304be2fa0a9417fbf09735bc2cce003480f2a/pydantic_core-2.33.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dc46a01bf8d62f227d5ecee74178ffc448ff4e5197c756331f71efcc66dc980f", size = 1897823, upload-time = "2025-04-23T18:31:06.377Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/f4/f3/aa5976e8352b7695ff808599794b1fba2a9ae2ee954a3426855935799488/pydantic_core-2.33.2-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a144d4f717285c6d9234a66778059f33a89096dfb9b39117663fd8413d582dcc", size = 1983792, upload-time = "2025-04-23T18:31:07.93Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/d5/7a/cda9b5a23c552037717f2b2a5257e9b2bfe45e687386df9591eff7b46d28/pydantic_core-2.33.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:73cf6373c21bc80b2e0dc88444f41ae60b2f070ed02095754eb5a01df12256de", size = 2136338, upload-time = "2025-04-23T18:31:09.283Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/2b/9f/b8f9ec8dd1417eb9da784e91e1667d58a2a4a7b7b34cf4af765ef663a7e5/pydantic_core-2.33.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3dc625f4aa79713512d1976fe9f0bc99f706a9dee21dfd1810b4bbbf228d0e8a", size = 2730998, upload-time = "2025-04-23T18:31:11.7Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/47/bc/cd720e078576bdb8255d5032c5d63ee5c0bf4b7173dd955185a1d658c456/pydantic_core-2.33.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:881b21b5549499972441da4758d662aeea93f1923f953e9cbaff14b8b9565aef", size = 2003200, upload-time = "2025-04-23T18:31:13.536Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/ca/22/3602b895ee2cd29d11a2b349372446ae9727c32e78a94b3d588a40fdf187/pydantic_core-2.33.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:bdc25f3681f7b78572699569514036afe3c243bc3059d3942624e936ec93450e", size = 2113890, upload-time = "2025-04-23T18:31:15.011Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/ff/e6/e3c5908c03cf00d629eb38393a98fccc38ee0ce8ecce32f69fc7d7b558a7/pydantic_core-2.33.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:fe5b32187cbc0c862ee201ad66c30cf218e5ed468ec8dc1cf49dec66e160cc4d", size = 2073359, upload-time = "2025-04-23T18:31:16.393Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/12/e7/6a36a07c59ebefc8777d1ffdaf5ae71b06b21952582e4b07eba88a421c79/pydantic_core-2.33.2-cp311-cp311-musllinux_1_1_armv7l.whl", hash = "sha256:bc7aee6f634a6f4a95676fcb5d6559a2c2a390330098dba5e5a5f28a2e4ada30", size = 2245883, upload-time = "2025-04-23T18:31:17.892Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/16/3f/59b3187aaa6cc0c1e6616e8045b284de2b6a87b027cce2ffcea073adf1d2/pydantic_core-2.33.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:235f45e5dbcccf6bd99f9f472858849f73d11120d76ea8707115415f8e5ebebf", size = 2241074, upload-time = "2025-04-23T18:31:19.205Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/e0/ed/55532bb88f674d5d8f67ab121a2a13c385df382de2a1677f30ad385f7438/pydantic_core-2.33.2-cp311-cp311-win32.whl", hash = "sha256:6368900c2d3ef09b69cb0b913f9f8263b03786e5b2a387706c5afb66800efd51", size = 1910538, upload-time = "2025-04-23T18:31:20.541Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/fe/1b/25b7cccd4519c0b23c2dd636ad39d381abf113085ce4f7bec2b0dc755eb1/pydantic_core-2.33.2-cp311-cp311-win_amd64.whl", hash = "sha256:1e063337ef9e9820c77acc768546325ebe04ee38b08703244c1309cccc4f1bab", size = 1952909, upload-time = "2025-04-23T18:31:22.371Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/49/a9/d809358e49126438055884c4366a1f6227f0f84f635a9014e2deb9b9de54/pydantic_core-2.33.2-cp311-cp311-win_arm64.whl", hash = "sha256:6b99022f1d19bc32a4c2a0d544fc9a76e3be90f0b3f4af413f87d38749300e65", size = 1897786, upload-time = "2025-04-23T18:31:24.161Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/18/8a/2b41c97f554ec8c71f2a8a5f85cb56a8b0956addfe8b0efb5b3d77e8bdc3/pydantic_core-2.33.2-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:a7ec89dc587667f22b6a0b6579c249fca9026ce7c333fc142ba42411fa243cdc", size = 2009000, upload-time = "2025-04-23T18:31:25.863Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/a1/02/6224312aacb3c8ecbaa959897af57181fb6cf3a3d7917fd44d0f2917e6f2/pydantic_core-2.33.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:3c6db6e52c6d70aa0d00d45cdb9b40f0433b96380071ea80b09277dba021ddf7", size = 1847996, upload-time = "2025-04-23T18:31:27.341Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/d6/46/6dcdf084a523dbe0a0be59d054734b86a981726f221f4562aed313dbcb49/pydantic_core-2.33.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4e61206137cbc65e6d5256e1166f88331d3b6238e082d9f74613b9b765fb9025", size = 1880957, upload-time = "2025-04-23T18:31:28.956Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/ec/6b/1ec2c03837ac00886ba8160ce041ce4e325b41d06a034adbef11339ae422/pydantic_core-2.33.2-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:eb8c529b2819c37140eb51b914153063d27ed88e3bdc31b71198a198e921e011", size = 1964199, upload-time = "2025-04-23T18:31:31.025Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/2d/1d/6bf34d6adb9debd9136bd197ca72642203ce9aaaa85cfcbfcf20f9696e83/pydantic_core-2.33.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c52b02ad8b4e2cf14ca7b3d918f3eb0ee91e63b3167c32591e57c4317e134f8f", size = 2120296, upload-time = "2025-04-23T18:31:32.514Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/e0/94/2bd0aaf5a591e974b32a9f7123f16637776c304471a0ab33cf263cf5591a/pydantic_core-2.33.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:96081f1605125ba0855dfda83f6f3df5ec90c61195421ba72223de35ccfb2f88", size = 2676109, upload-time = "2025-04-23T18:31:33.958Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/f9/41/4b043778cf9c4285d59742281a769eac371b9e47e35f98ad321349cc5d61/pydantic_core-2.33.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f57a69461af2a5fa6e6bbd7a5f60d3b7e6cebb687f55106933188e79ad155c1", size = 2002028, upload-time = "2025-04-23T18:31:39.095Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/cb/d5/7bb781bf2748ce3d03af04d5c969fa1308880e1dca35a9bd94e1a96a922e/pydantic_core-2.33.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:572c7e6c8bb4774d2ac88929e3d1f12bc45714ae5ee6d9a788a9fb35e60bb04b", size = 2100044, upload-time = "2025-04-23T18:31:41.034Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/fe/36/def5e53e1eb0ad896785702a5bbfd25eed546cdcf4087ad285021a90ed53/pydantic_core-2.33.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:db4b41f9bd95fbe5acd76d89920336ba96f03e149097365afe1cb092fceb89a1", size = 2058881, upload-time = "2025-04-23T18:31:42.757Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/01/6c/57f8d70b2ee57fc3dc8b9610315949837fa8c11d86927b9bb044f8705419/pydantic_core-2.33.2-cp312-cp312-musllinux_1_1_armv7l.whl", hash = "sha256:fa854f5cf7e33842a892e5c73f45327760bc7bc516339fda888c75ae60edaeb6", size = 2227034, upload-time = "2025-04-23T18:31:44.304Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/27/b9/9c17f0396a82b3d5cbea4c24d742083422639e7bb1d5bf600e12cb176a13/pydantic_core-2.33.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:5f483cfb75ff703095c59e365360cb73e00185e01aaea067cd19acffd2ab20ea", size = 2234187, upload-time = "2025-04-23T18:31:45.891Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/b0/6a/adf5734ffd52bf86d865093ad70b2ce543415e0e356f6cacabbc0d9ad910/pydantic_core-2.33.2-cp312-cp312-win32.whl", hash = "sha256:9cb1da0f5a471435a7bc7e439b8a728e8b61e59784b2af70d7c169f8dd8ae290", size = 1892628, upload-time = "2025-04-23T18:31:47.819Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/43/e4/5479fecb3606c1368d496a825d8411e126133c41224c1e7238be58b87d7e/pydantic_core-2.33.2-cp312-cp312-win_amd64.whl", hash = "sha256:f941635f2a3d96b2973e867144fde513665c87f13fe0e193c158ac51bfaaa7b2", size = 1955866, upload-time = "2025-04-23T18:31:49.635Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/0d/24/8b11e8b3e2be9dd82df4b11408a67c61bb4dc4f8e11b5b0fc888b38118b5/pydantic_core-2.33.2-cp312-cp312-win_arm64.whl", hash = "sha256:cca3868ddfaccfbc4bfb1d608e2ccaaebe0ae628e1416aeb9c4d88c001bb45ab", size = 1888894, upload-time = "2025-04-23T18:31:51.609Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/46/8c/99040727b41f56616573a28771b1bfa08a3d3fe74d3d513f01251f79f172/pydantic_core-2.33.2-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:1082dd3e2d7109ad8b7da48e1d4710c8d06c253cbc4a27c1cff4fbcaa97a9e3f", size = 2015688, upload-time = "2025-04-23T18:31:53.175Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/3a/cc/5999d1eb705a6cefc31f0b4a90e9f7fc400539b1a1030529700cc1b51838/pydantic_core-2.33.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f517ca031dfc037a9c07e748cefd8d96235088b83b4f4ba8939105d20fa1dcd6", size = 1844808, upload-time = "2025-04-23T18:31:54.79Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/6f/5e/a0a7b8885c98889a18b6e376f344da1ef323d270b44edf8174d6bce4d622/pydantic_core-2.33.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0a9f2c9dd19656823cb8250b0724ee9c60a82f3cdf68a080979d13092a3b0fef", size = 1885580, upload-time = "2025-04-23T18:31:57.393Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/3b/2a/953581f343c7d11a304581156618c3f592435523dd9d79865903272c256a/pydantic_core-2.33.2-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:2b0a451c263b01acebe51895bfb0e1cc842a5c666efe06cdf13846c7418caa9a", size = 1973859, upload-time = "2025-04-23T18:31:59.065Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/e6/55/f1a813904771c03a3f97f676c62cca0c0a4138654107c1b61f19c644868b/pydantic_core-2.33.2-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1ea40a64d23faa25e62a70ad163571c0b342b8bf66d5fa612ac0dec4f069d916", size = 2120810, upload-time = "2025-04-23T18:32:00.78Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/aa/c3/053389835a996e18853ba107a63caae0b9deb4a276c6b472931ea9ae6e48/pydantic_core-2.33.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0fb2d542b4d66f9470e8065c5469ec676978d625a8b7a363f07d9a501a9cb36a", size = 2676498, upload-time = "2025-04-23T18:32:02.418Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/eb/3c/f4abd740877a35abade05e437245b192f9d0ffb48bbbbd708df33d3cda37/pydantic_core-2.33.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9fdac5d6ffa1b5a83bca06ffe7583f5576555e6c8b3a91fbd25ea7780f825f7d", size = 2000611, upload-time = "2025-04-23T18:32:04.152Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/59/a7/63ef2fed1837d1121a894d0ce88439fe3e3b3e48c7543b2a4479eb99c2bd/pydantic_core-2.33.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:04a1a413977ab517154eebb2d326da71638271477d6ad87a769102f7c2488c56", size = 2107924, upload-time = "2025-04-23T18:32:06.129Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/04/8f/2551964ef045669801675f1cfc3b0d74147f4901c3ffa42be2ddb1f0efc4/pydantic_core-2.33.2-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:c8e7af2f4e0194c22b5b37205bfb293d166a7344a5b0d0eaccebc376546d77d5", size = 2063196, upload-time = "2025-04-23T18:32:08.178Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/26/bd/d9602777e77fc6dbb0c7db9ad356e9a985825547dce5ad1d30ee04903918/pydantic_core-2.33.2-cp313-cp313-musllinux_1_1_armv7l.whl", hash = "sha256:5c92edd15cd58b3c2d34873597a1e20f13094f59cf88068adb18947df5455b4e", size = 2236389, upload-time = "2025-04-23T18:32:10.242Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/42/db/0e950daa7e2230423ab342ae918a794964b053bec24ba8af013fc7c94846/pydantic_core-2.33.2-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:65132b7b4a1c0beded5e057324b7e16e10910c106d43675d9bd87d4f38dde162", size = 2239223, upload-time = "2025-04-23T18:32:12.382Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/58/4d/4f937099c545a8a17eb52cb67fe0447fd9a373b348ccfa9a87f141eeb00f/pydantic_core-2.33.2-cp313-cp313-win32.whl", hash = "sha256:52fb90784e0a242bb96ec53f42196a17278855b0f31ac7c3cc6f5c1ec4811849", size = 1900473, upload-time = "2025-04-23T18:32:14.034Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/a0/75/4a0a9bac998d78d889def5e4ef2b065acba8cae8c93696906c3a91f310ca/pydantic_core-2.33.2-cp313-cp313-win_amd64.whl", hash = "sha256:c083a3bdd5a93dfe480f1125926afcdbf2917ae714bdb80b36d34318b2bec5d9", size = 1955269, upload-time = "2025-04-23T18:32:15.783Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/f9/86/1beda0576969592f1497b4ce8e7bc8cbdf614c352426271b1b10d5f0aa64/pydantic_core-2.33.2-cp313-cp313-win_arm64.whl", hash = "sha256:e80b087132752f6b3d714f041ccf74403799d3b23a72722ea2e6ba2e892555b9", size = 1893921, upload-time = "2025-04-23T18:32:18.473Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/a4/7d/e09391c2eebeab681df2b74bfe6c43422fffede8dc74187b2b0bf6fd7571/pydantic_core-2.33.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:61c18fba8e5e9db3ab908620af374db0ac1baa69f0f32df4f61ae23f15e586ac", size = 1806162, upload-time = "2025-04-23T18:32:20.188Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/f1/3d/847b6b1fed9f8ed3bb95a9ad04fbd0b212e832d4f0f50ff4d9ee5a9f15cf/pydantic_core-2.33.2-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:95237e53bb015f67b63c91af7518a62a8660376a6a0db19b89acc77a4d6199f5", size = 1981560, upload-time = "2025-04-23T18:32:22.354Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/6f/9a/e73262f6c6656262b5fdd723ad90f518f579b7bc8622e43a942eec53c938/pydantic_core-2.33.2-cp313-cp313t-win_amd64.whl", hash = "sha256:c2fc0a768ef76c15ab9238afa6da7f69895bb5d1ee83aeea2e3509af4472d0b9", size = 1935777, upload-time = "2025-04-23T18:32:25.088Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/7b/27/d4ae6487d73948d6f20dddcd94be4ea43e74349b56eba82e9bdee2d7494c/pydantic_core-2.33.2-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:dd14041875d09cc0f9308e37a6f8b65f5585cf2598a53aa0123df8b129d481f8", size = 2025200, upload-time = "2025-04-23T18:33:14.199Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/f1/b8/b3cb95375f05d33801024079b9392a5ab45267a63400bf1866e7ce0f0de4/pydantic_core-2.33.2-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:d87c561733f66531dced0da6e864f44ebf89a8fba55f31407b00c2f7f9449593", size = 1859123, upload-time = "2025-04-23T18:33:16.555Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/05/bc/0d0b5adeda59a261cd30a1235a445bf55c7e46ae44aea28f7bd6ed46e091/pydantic_core-2.33.2-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2f82865531efd18d6e07a04a17331af02cb7a651583c418df8266f17a63c6612", size = 1892852, upload-time = "2025-04-23T18:33:18.513Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/3e/11/d37bdebbda2e449cb3f519f6ce950927b56d62f0b84fd9cb9e372a26a3d5/pydantic_core-2.33.2-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2bfb5112df54209d820d7bf9317c7a6c9025ea52e49f46b6a2060104bba37de7", size = 2067484, upload-time = "2025-04-23T18:33:20.475Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/8c/55/1f95f0a05ce72ecb02a8a8a1c3be0579bbc29b1d5ab68f1378b7bebc5057/pydantic_core-2.33.2-pp311-pypy311_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:64632ff9d614e5eecfb495796ad51b0ed98c453e447a76bcbeeb69615079fc7e", size = 2108896, upload-time = "2025-04-23T18:33:22.501Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/53/89/2b2de6c81fa131f423246a9109d7b2a375e83968ad0800d6e57d0574629b/pydantic_core-2.33.2-pp311-pypy311_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:f889f7a40498cc077332c7ab6b4608d296d852182211787d4f3ee377aaae66e8", size = 2069475, upload-time = "2025-04-23T18:33:24.528Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/b8/e9/1f7efbe20d0b2b10f6718944b5d8ece9152390904f29a78e68d4e7961159/pydantic_core-2.33.2-pp311-pypy311_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:de4b83bb311557e439b9e186f733f6c645b9417c84e2eb8203f3f820a4b988bf", size = 2239013, upload-time = "2025-04-23T18:33:26.621Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/3c/b2/5309c905a93811524a49b4e031e9851a6b00ff0fb668794472ea7746b448/pydantic_core-2.33.2-pp311-pypy311_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:82f68293f055f51b51ea42fafc74b6aad03e70e191799430b90c13d643059ebb", size = 2238715, upload-time = "2025-04-23T18:33:28.656Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/32/56/8a7ca5d2cd2cda1d245d34b1c9a942920a718082ae8e54e5f3e5a58b7add/pydantic_core-2.33.2-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:329467cecfb529c925cf2bbd4d60d2c509bc2fb52a20c1045bf09bb70971a9c1", size = 2066757, upload-time = "2025-04-23T18:33:30.645Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "pymediainfo"
|
||||
version = "7.0.1"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/4d/80/80a6fb21005b81e30f6193d45cba13857df09f5d483e0551fa6fbb3aaeed/pymediainfo-7.0.1.tar.gz", hash = "sha256:0d5df59ecc615e24c56f303b8f651579c6accab7265715e5d429186d7ba21514", size = 441563, upload-time = "2025-02-12T14:33:15.038Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/a6/4a/d895646df3d3ff617b54d7f06a02ed9d6f5b86673030a543927310e0f7ed/pymediainfo-7.0.1-py3-none-macosx_10_10_universal2.whl", hash = "sha256:286f3bf6299be0997093254e0f371855bc5cf2aaf8641d19455a011e3ee3a84d", size = 6983332, upload-time = "2025-02-12T14:42:47.412Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/77/df/bc6b5a08e908c64a81f6ff169716d408ce7380ceff44e1eceb095f49e0dc/pymediainfo-7.0.1-py3-none-manylinux_2_27_aarch64.whl", hash = "sha256:3648e2379fa67bd02433d1e28c707df3a53834dd480680615a9fefd2266f1182", size = 5768082, upload-time = "2025-02-12T14:33:10.543Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/02/10/a9bc1446a48d3a15940eb1af79a71978f368f27e2cc86f9ec3ec2d206a20/pymediainfo-7.0.1-py3-none-manylinux_2_27_x86_64.whl", hash = "sha256:cde98112f1ce486589b17a12e5da42085faea996224f7c67fa45b8c1dca719c6", size = 6001553, upload-time = "2025-02-12T14:33:12.663Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/ed/7f/c48f8514cb60c9ff9be81b6f383e73e66c7461ef854a1b62628e3c823f13/pymediainfo-7.0.1-py3-none-win32.whl", hash = "sha256:01bcaf82b72cefbf4b96f13b2547e1b2e0e734bab7173d7c33f7f01acc07c98b", size = 3125046, upload-time = "2025-02-12T15:04:39.89Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/e7/26/9d50c2a330541bc36c0ea7ce29eeff5b0c35c2624139660df8bcfa9ae3ce/pymediainfo-7.0.1-py3-none-win_amd64.whl", hash = "sha256:13224fa7590e198763b8baf072e704ea81d334e71aa32a469091460e243893c7", size = 3271232, upload-time = "2025-02-12T15:07:13.672Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "python-dotenv"
|
||||
version = "1.1.1"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/f6/b0/4bc07ccd3572a2f9df7e6782f52b0c6c90dcbb803ac4a167702d7d0dfe1e/python_dotenv-1.1.1.tar.gz", hash = "sha256:a8a6399716257f45be6a007360200409fce5cda2661e3dec71d23dc15f6189ab", size = 41978, upload-time = "2025-06-24T04:21:07.341Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/5f/ed/539768cf28c661b5b068d66d96a2f155c4971a5d55684a514c1a0e0dec2f/python_dotenv-1.1.1-py3-none-any.whl", hash = "sha256:31f23644fe2602f88ff55e1f5c79ba497e01224ee7737937930c448e4d0e24dc", size = 20556, upload-time = "2025-06-24T04:21:06.073Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "pyyaml"
|
||||
version = "6.0.2"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/54/ed/79a089b6be93607fa5cdaedf301d7dfb23af5f25c398d5ead2525b063e17/pyyaml-6.0.2.tar.gz", hash = "sha256:d584d9ec91ad65861cc08d42e834324ef890a082e591037abe114850ff7bbc3e", size = 130631, upload-time = "2024-08-06T20:33:50.674Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/f8/aa/7af4e81f7acba21a4c6be026da38fd2b872ca46226673c89a758ebdc4fd2/PyYAML-6.0.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:cc1c1159b3d456576af7a3e4d1ba7e6924cb39de8f67111c735f6fc832082774", size = 184612, upload-time = "2024-08-06T20:32:03.408Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/8b/62/b9faa998fd185f65c1371643678e4d58254add437edb764a08c5a98fb986/PyYAML-6.0.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1e2120ef853f59c7419231f3bf4e7021f1b936f6ebd222406c3b60212205d2ee", size = 172040, upload-time = "2024-08-06T20:32:04.926Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/ad/0c/c804f5f922a9a6563bab712d8dcc70251e8af811fce4524d57c2c0fd49a4/PyYAML-6.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5d225db5a45f21e78dd9358e58a98702a0302f2659a3c6cd320564b75b86f47c", size = 736829, upload-time = "2024-08-06T20:32:06.459Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/51/16/6af8d6a6b210c8e54f1406a6b9481febf9c64a3109c541567e35a49aa2e7/PyYAML-6.0.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5ac9328ec4831237bec75defaf839f7d4564be1e6b25ac710bd1a96321cc8317", size = 764167, upload-time = "2024-08-06T20:32:08.338Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/75/e4/2c27590dfc9992f73aabbeb9241ae20220bd9452df27483b6e56d3975cc5/PyYAML-6.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3ad2a3decf9aaba3d29c8f537ac4b243e36bef957511b4766cb0057d32b0be85", size = 762952, upload-time = "2024-08-06T20:32:14.124Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/9b/97/ecc1abf4a823f5ac61941a9c00fe501b02ac3ab0e373c3857f7d4b83e2b6/PyYAML-6.0.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:ff3824dc5261f50c9b0dfb3be22b4567a6f938ccce4587b38952d85fd9e9afe4", size = 735301, upload-time = "2024-08-06T20:32:16.17Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/45/73/0f49dacd6e82c9430e46f4a027baa4ca205e8b0a9dce1397f44edc23559d/PyYAML-6.0.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:797b4f722ffa07cc8d62053e4cff1486fa6dc094105d13fea7b1de7d8bf71c9e", size = 756638, upload-time = "2024-08-06T20:32:18.555Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/22/5f/956f0f9fc65223a58fbc14459bf34b4cc48dec52e00535c79b8db361aabd/PyYAML-6.0.2-cp311-cp311-win32.whl", hash = "sha256:11d8f3dd2b9c1207dcaf2ee0bbbfd5991f571186ec9cc78427ba5bd32afae4b5", size = 143850, upload-time = "2024-08-06T20:32:19.889Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/ed/23/8da0bbe2ab9dcdd11f4f4557ccaf95c10b9811b13ecced089d43ce59c3c8/PyYAML-6.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:e10ce637b18caea04431ce14fabcf5c64a1c61ec9c56b071a4b7ca131ca52d44", size = 161980, upload-time = "2024-08-06T20:32:21.273Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/86/0c/c581167fc46d6d6d7ddcfb8c843a4de25bdd27e4466938109ca68492292c/PyYAML-6.0.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:c70c95198c015b85feafc136515252a261a84561b7b1d51e3384e0655ddf25ab", size = 183873, upload-time = "2024-08-06T20:32:25.131Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/a8/0c/38374f5bb272c051e2a69281d71cba6fdb983413e6758b84482905e29a5d/PyYAML-6.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ce826d6ef20b1bc864f0a68340c8b3287705cae2f8b4b1d932177dcc76721725", size = 173302, upload-time = "2024-08-06T20:32:26.511Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/c3/93/9916574aa8c00aa06bbac729972eb1071d002b8e158bd0e83a3b9a20a1f7/PyYAML-6.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1f71ea527786de97d1a0cc0eacd1defc0985dcf6b3f17bb77dcfc8c34bec4dc5", size = 739154, upload-time = "2024-08-06T20:32:28.363Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/95/0f/b8938f1cbd09739c6da569d172531567dbcc9789e0029aa070856f123984/PyYAML-6.0.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9b22676e8097e9e22e36d6b7bda33190d0d400f345f23d4065d48f4ca7ae0425", size = 766223, upload-time = "2024-08-06T20:32:30.058Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/b9/2b/614b4752f2e127db5cc206abc23a8c19678e92b23c3db30fc86ab731d3bd/PyYAML-6.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:80bab7bfc629882493af4aa31a4cfa43a4c57c83813253626916b8c7ada83476", size = 767542, upload-time = "2024-08-06T20:32:31.881Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/d4/00/dd137d5bcc7efea1836d6264f049359861cf548469d18da90cd8216cf05f/PyYAML-6.0.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:0833f8694549e586547b576dcfaba4a6b55b9e96098b36cdc7ebefe667dfed48", size = 731164, upload-time = "2024-08-06T20:32:37.083Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/c9/1f/4f998c900485e5c0ef43838363ba4a9723ac0ad73a9dc42068b12aaba4e4/PyYAML-6.0.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8b9c7197f7cb2738065c481a0461e50ad02f18c78cd75775628afb4d7137fb3b", size = 756611, upload-time = "2024-08-06T20:32:38.898Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/df/d1/f5a275fdb252768b7a11ec63585bc38d0e87c9e05668a139fea92b80634c/PyYAML-6.0.2-cp312-cp312-win32.whl", hash = "sha256:ef6107725bd54b262d6dedcc2af448a266975032bc85ef0172c5f059da6325b4", size = 140591, upload-time = "2024-08-06T20:32:40.241Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/0c/e8/4f648c598b17c3d06e8753d7d13d57542b30d56e6c2dedf9c331ae56312e/PyYAML-6.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:7e7401d0de89a9a855c839bc697c079a4af81cf878373abd7dc625847d25cbd8", size = 156338, upload-time = "2024-08-06T20:32:41.93Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/ef/e3/3af305b830494fa85d95f6d95ef7fa73f2ee1cc8ef5b495c7c3269fb835f/PyYAML-6.0.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:efdca5630322a10774e8e98e1af481aad470dd62c3170801852d752aa7a783ba", size = 181309, upload-time = "2024-08-06T20:32:43.4Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/45/9f/3b1c20a0b7a3200524eb0076cc027a970d320bd3a6592873c85c92a08731/PyYAML-6.0.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:50187695423ffe49e2deacb8cd10510bc361faac997de9efef88badc3bb9e2d1", size = 171679, upload-time = "2024-08-06T20:32:44.801Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/7c/9a/337322f27005c33bcb656c655fa78325b730324c78620e8328ae28b64d0c/PyYAML-6.0.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0ffe8360bab4910ef1b9e87fb812d8bc0a308b0d0eef8c8f44e0254ab3b07133", size = 733428, upload-time = "2024-08-06T20:32:46.432Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/a3/69/864fbe19e6c18ea3cc196cbe5d392175b4cf3d5d0ac1403ec3f2d237ebb5/PyYAML-6.0.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:17e311b6c678207928d649faa7cb0d7b4c26a0ba73d41e99c4fff6b6c3276484", size = 763361, upload-time = "2024-08-06T20:32:51.188Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/04/24/b7721e4845c2f162d26f50521b825fb061bc0a5afcf9a386840f23ea19fa/PyYAML-6.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:70b189594dbe54f75ab3a1acec5f1e3faa7e8cf2f1e08d9b561cb41b845f69d5", size = 759523, upload-time = "2024-08-06T20:32:53.019Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/2b/b2/e3234f59ba06559c6ff63c4e10baea10e5e7df868092bf9ab40e5b9c56b6/PyYAML-6.0.2-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:41e4e3953a79407c794916fa277a82531dd93aad34e29c2a514c2c0c5fe971cc", size = 726660, upload-time = "2024-08-06T20:32:54.708Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/fe/0f/25911a9f080464c59fab9027482f822b86bf0608957a5fcc6eaac85aa515/PyYAML-6.0.2-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:68ccc6023a3400877818152ad9a1033e3db8625d899c72eacb5a668902e4d652", size = 751597, upload-time = "2024-08-06T20:32:56.985Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/14/0d/e2c3b43bbce3cf6bd97c840b46088a3031085179e596d4929729d8d68270/PyYAML-6.0.2-cp313-cp313-win32.whl", hash = "sha256:bc2fa7c6b47d6bc618dd7fb02ef6fdedb1090ec036abab80d4681424b84c1183", size = 140527, upload-time = "2024-08-06T20:33:03.001Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/fa/de/02b54f42487e3d3c6efb3f89428677074ca7bf43aae402517bc7cca949f3/PyYAML-6.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:8388ee1976c416731879ac16da0aff3f63b286ffdd57cdeb95f3f2e085687563", size = 156446, upload-time = "2024-08-06T20:33:04.33Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "requests"
|
||||
version = "2.32.5"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
dependencies = [
|
||||
{ name = "certifi" },
|
||||
{ name = "charset-normalizer" },
|
||||
{ name = "idna" },
|
||||
{ name = "urllib3" },
|
||||
]
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/c9/74/b3ff8e6c8446842c3f5c837e9c3dfcfe2018ea6ecef224c710c85ef728f4/requests-2.32.5.tar.gz", hash = "sha256:dbba0bac56e100853db0ea71b82b4dfd5fe2bf6d3754a8893c3af500cec7d7cf", size = 134517, upload-time = "2025-08-18T20:46:02.573Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/1e/db/4254e3eabe8020b458f1a747140d32277ec7a271daf1d235b70dc0b4e6e3/requests-2.32.5-py3-none-any.whl", hash = "sha256:2462f94637a34fd532264295e186976db0f5d453d1cdd31473c85a6a161affb6", size = 64738, upload-time = "2025-08-18T20:46:00.542Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "sniffio"
|
||||
version = "1.3.1"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/a2/87/a6771e1546d97e7e041b6ae58d80074f81b7d5121207425c964ddf5cfdbd/sniffio-1.3.1.tar.gz", hash = "sha256:f4324edc670a0f49750a81b895f35c3adb843cca46f0530f79fc1babb23789dc", size = 20372, upload-time = "2024-02-25T23:20:04.057Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/e9/44/75a9c9421471a6c4805dbf2356f7c181a29c1879239abab1ea2cc8f38b40/sniffio-1.3.1-py3-none-any.whl", hash = "sha256:2f6da418d1f1e0fddd844478f41680e794e6051915791a034ff65e5f100525a2", size = 10235, upload-time = "2024-02-25T23:20:01.196Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "starlette"
|
||||
version = "0.47.2"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
dependencies = [
|
||||
{ name = "anyio" },
|
||||
{ name = "typing-extensions", marker = "python_full_version < '3.13'" },
|
||||
]
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/04/57/d062573f391d062710d4088fa1369428c38d51460ab6fedff920efef932e/starlette-0.47.2.tar.gz", hash = "sha256:6ae9aa5db235e4846decc1e7b79c4f346adf41e9777aebeb49dfd09bbd7023d8", size = 2583948, upload-time = "2025-07-20T17:31:58.522Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/f7/1f/b876b1f83aef204198a42dc101613fefccb32258e5428b5f9259677864b4/starlette-0.47.2-py3-none-any.whl", hash = "sha256:c5847e96134e5c5371ee9fac6fdf1a67336d5815e09eb2a01fdb57a351ef915b", size = 72984, upload-time = "2025-07-20T17:31:56.738Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "typing-extensions"
|
||||
version = "4.14.1"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/98/5a/da40306b885cc8c09109dc2e1abd358d5684b1425678151cdaed4731c822/typing_extensions-4.14.1.tar.gz", hash = "sha256:38b39f4aeeab64884ce9f74c94263ef78f3c22467c8724005483154c26648d36", size = 107673, upload-time = "2025-07-04T13:28:34.16Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/b5/00/d631e67a838026495268c2f6884f3711a15a9a2a96cd244fdaea53b823fb/typing_extensions-4.14.1-py3-none-any.whl", hash = "sha256:d1e1e3b58374dc93031d6eda2420a48ea44a36c2b4766a4fdeb3710755731d76", size = 43906, upload-time = "2025-07-04T13:28:32.743Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "typing-inspection"
|
||||
version = "0.4.1"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
dependencies = [
|
||||
{ name = "typing-extensions" },
|
||||
]
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/f8/b1/0c11f5058406b3af7609f121aaa6b609744687f1d158b3c3a5bf4cc94238/typing_inspection-0.4.1.tar.gz", hash = "sha256:6ae134cc0203c33377d43188d4064e9b357dba58cff3185f22924610e70a9d28", size = 75726, upload-time = "2025-05-21T18:55:23.885Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/17/69/cd203477f944c353c31bade965f880aa1061fd6bf05ded0726ca845b6ff7/typing_inspection-0.4.1-py3-none-any.whl", hash = "sha256:389055682238f53b04f7badcb49b989835495a96700ced5dab2d8feae4b26f51", size = 14552, upload-time = "2025-05-21T18:55:22.152Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "uiautomation"
|
||||
version = "2.0.29"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
dependencies = [
|
||||
{ name = "comtypes" },
|
||||
]
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/bc/23/8238b5cb73e54c3618ce4d443c1830a2749264a0d61a9b61637096b8dc7a/uiautomation-2.0.29.tar.gz", hash = "sha256:3c169112043ce21065aead1d79c3baebdafc9cf03bd24ded02b2db11d423d88d", size = 203970, upload-time = "2025-08-05T05:14:41.194Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/b0/27/b9c4b33b4129805fa2c437fa13da06c71e74213ae46da098d194d89834fe/uiautomation-2.0.29-py3-none-any.whl", hash = "sha256:5dd51c9e77e70470142a13d903be67f256c445e7cf20b47ada0ece2bdaff9f32", size = 198985, upload-time = "2025-08-05T05:14:39.552Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "urllib3"
|
||||
version = "2.5.0"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/15/22/9ee70a2574a4f4599c47dd506532914ce044817c7752a79b6a51286319bc/urllib3-2.5.0.tar.gz", hash = "sha256:3fc47733c7e419d4bc3f6b3dc2b4f890bb743906a30d56ba4a5bfa4bbff92760", size = 393185, upload-time = "2025-06-18T14:07:41.644Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/a7/c2/fe1e52489ae3122415c51f387e221dd0773709bad6c6cdaa599e8a2c5185/urllib3-2.5.0-py3-none-any.whl", hash = "sha256:e6b01673c0fa6a13e374b50871808eb3bf7046c4b125b216f6bf1cc604cff0dc", size = 129795, upload-time = "2025-06-18T14:07:40.39Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "uvicorn"
|
||||
version = "0.35.0"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
dependencies = [
|
||||
{ name = "click" },
|
||||
{ name = "h11" },
|
||||
]
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/5e/42/e0e305207bb88c6b8d3061399c6a961ffe5fbb7e2aa63c9234df7259e9cd/uvicorn-0.35.0.tar.gz", hash = "sha256:bc662f087f7cf2ce11a1d7fd70b90c9f98ef2e2831556dd078d131b96cc94a01", size = 78473, upload-time = "2025-06-28T16:15:46.058Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/d2/e2/dc81b1bd1dcfe91735810265e9d26bc8ec5da45b4c0f6237e286819194c3/uvicorn-0.35.0-py3-none-any.whl", hash = "sha256:197535216b25ff9b785e29a0b79199f55222193d47f820816e7da751e9bc8d4a", size = 66406, upload-time = "2025-06-28T16:15:44.816Z" },
|
||||
]
|
||||
|
||||
[package.optional-dependencies]
|
||||
standard = [
|
||||
{ name = "colorama", marker = "sys_platform == 'win32'" },
|
||||
{ name = "httptools" },
|
||||
{ name = "python-dotenv" },
|
||||
{ name = "pyyaml" },
|
||||
{ name = "uvloop", marker = "platform_python_implementation != 'PyPy' and sys_platform != 'cygwin' and sys_platform != 'win32'" },
|
||||
{ name = "watchfiles" },
|
||||
{ name = "websockets" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "uvloop"
|
||||
version = "0.21.0"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/af/c0/854216d09d33c543f12a44b393c402e89a920b1a0a7dc634c42de91b9cf6/uvloop-0.21.0.tar.gz", hash = "sha256:3bf12b0fda68447806a7ad847bfa591613177275d35b6724b1ee573faa3704e3", size = 2492741, upload-time = "2024-10-14T23:38:35.489Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/57/a7/4cf0334105c1160dd6819f3297f8700fda7fc30ab4f61fbf3e725acbc7cc/uvloop-0.21.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:c0f3fa6200b3108919f8bdabb9a7f87f20e7097ea3c543754cabc7d717d95cf8", size = 1447410, upload-time = "2024-10-14T23:37:33.612Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/8c/7c/1517b0bbc2dbe784b563d6ab54f2ef88c890fdad77232c98ed490aa07132/uvloop-0.21.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:0878c2640cf341b269b7e128b1a5fed890adc4455513ca710d77d5e93aa6d6a0", size = 805476, upload-time = "2024-10-14T23:37:36.11Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/ee/ea/0bfae1aceb82a503f358d8d2fa126ca9dbdb2ba9c7866974faec1cb5875c/uvloop-0.21.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b9fb766bb57b7388745d8bcc53a359b116b8a04c83a2288069809d2b3466c37e", size = 3960855, upload-time = "2024-10-14T23:37:37.683Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/8a/ca/0864176a649838b838f36d44bf31c451597ab363b60dc9e09c9630619d41/uvloop-0.21.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8a375441696e2eda1c43c44ccb66e04d61ceeffcd76e4929e527b7fa401b90fb", size = 3973185, upload-time = "2024-10-14T23:37:40.226Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/30/bf/08ad29979a936d63787ba47a540de2132169f140d54aa25bc8c3df3e67f4/uvloop-0.21.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:baa0e6291d91649c6ba4ed4b2f982f9fa165b5bbd50a9e203c416a2797bab3c6", size = 3820256, upload-time = "2024-10-14T23:37:42.839Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/da/e2/5cf6ef37e3daf2f06e651aae5ea108ad30df3cb269102678b61ebf1fdf42/uvloop-0.21.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:4509360fcc4c3bd2c70d87573ad472de40c13387f5fda8cb58350a1d7475e58d", size = 3937323, upload-time = "2024-10-14T23:37:45.337Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/8c/4c/03f93178830dc7ce8b4cdee1d36770d2f5ebb6f3d37d354e061eefc73545/uvloop-0.21.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:359ec2c888397b9e592a889c4d72ba3d6befba8b2bb01743f72fffbde663b59c", size = 1471284, upload-time = "2024-10-14T23:37:47.833Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/43/3e/92c03f4d05e50f09251bd8b2b2b584a2a7f8fe600008bcc4523337abe676/uvloop-0.21.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:f7089d2dc73179ce5ac255bdf37c236a9f914b264825fdaacaded6990a7fb4c2", size = 821349, upload-time = "2024-10-14T23:37:50.149Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/a6/ef/a02ec5da49909dbbfb1fd205a9a1ac4e88ea92dcae885e7c961847cd51e2/uvloop-0.21.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:baa4dcdbd9ae0a372f2167a207cd98c9f9a1ea1188a8a526431eef2f8116cc8d", size = 4580089, upload-time = "2024-10-14T23:37:51.703Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/06/a7/b4e6a19925c900be9f98bec0a75e6e8f79bb53bdeb891916609ab3958967/uvloop-0.21.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:86975dca1c773a2c9864f4c52c5a55631038e387b47eaf56210f873887b6c8dc", size = 4693770, upload-time = "2024-10-14T23:37:54.122Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/ce/0c/f07435a18a4b94ce6bd0677d8319cd3de61f3a9eeb1e5f8ab4e8b5edfcb3/uvloop-0.21.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:461d9ae6660fbbafedd07559c6a2e57cd553b34b0065b6550685f6653a98c1cb", size = 4451321, upload-time = "2024-10-14T23:37:55.766Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/8f/eb/f7032be105877bcf924709c97b1bf3b90255b4ec251f9340cef912559f28/uvloop-0.21.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:183aef7c8730e54c9a3ee3227464daed66e37ba13040bb3f350bc2ddc040f22f", size = 4659022, upload-time = "2024-10-14T23:37:58.195Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/3f/8d/2cbef610ca21539f0f36e2b34da49302029e7c9f09acef0b1c3b5839412b/uvloop-0.21.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:bfd55dfcc2a512316e65f16e503e9e450cab148ef11df4e4e679b5e8253a5281", size = 1468123, upload-time = "2024-10-14T23:38:00.688Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/93/0d/b0038d5a469f94ed8f2b2fce2434a18396d8fbfb5da85a0a9781ebbdec14/uvloop-0.21.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:787ae31ad8a2856fc4e7c095341cccc7209bd657d0e71ad0dc2ea83c4a6fa8af", size = 819325, upload-time = "2024-10-14T23:38:02.309Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/50/94/0a687f39e78c4c1e02e3272c6b2ccdb4e0085fda3b8352fecd0410ccf915/uvloop-0.21.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5ee4d4ef48036ff6e5cfffb09dd192c7a5027153948d85b8da7ff705065bacc6", size = 4582806, upload-time = "2024-10-14T23:38:04.711Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/d2/19/f5b78616566ea68edd42aacaf645adbf71fbd83fc52281fba555dc27e3f1/uvloop-0.21.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f3df876acd7ec037a3d005b3ab85a7e4110422e4d9c1571d4fc89b0fc41b6816", size = 4701068, upload-time = "2024-10-14T23:38:06.385Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/47/57/66f061ee118f413cd22a656de622925097170b9380b30091b78ea0c6ea75/uvloop-0.21.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:bd53ecc9a0f3d87ab847503c2e1552b690362e005ab54e8a48ba97da3924c0dc", size = 4454428, upload-time = "2024-10-14T23:38:08.416Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/63/9a/0962b05b308494e3202d3f794a6e85abe471fe3cafdbcf95c2e8c713aabd/uvloop-0.21.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:a5c39f217ab3c663dc699c04cbd50c13813e31d917642d459fdcec07555cc553", size = 4660018, upload-time = "2024-10-14T23:38:10.888Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "watchfiles"
|
||||
version = "1.1.0"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
dependencies = [
|
||||
{ name = "anyio" },
|
||||
]
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/2a/9a/d451fcc97d029f5812e898fd30a53fd8c15c7bbd058fd75cfc6beb9bd761/watchfiles-1.1.0.tar.gz", hash = "sha256:693ed7ec72cbfcee399e92c895362b6e66d63dac6b91e2c11ae03d10d503e575", size = 94406, upload-time = "2025-06-15T19:06:59.42Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/8b/78/7401154b78ab484ccaaeef970dc2af0cb88b5ba8a1b415383da444cdd8d3/watchfiles-1.1.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:c9649dfc57cc1f9835551deb17689e8d44666315f2e82d337b9f07bd76ae3aa2", size = 405751, upload-time = "2025-06-15T19:05:07.679Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/76/63/e6c3dbc1f78d001589b75e56a288c47723de28c580ad715eb116639152b5/watchfiles-1.1.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:406520216186b99374cdb58bc48e34bb74535adec160c8459894884c983a149c", size = 397313, upload-time = "2025-06-15T19:05:08.764Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/6c/a2/8afa359ff52e99af1632f90cbf359da46184207e893a5f179301b0c8d6df/watchfiles-1.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cb45350fd1dc75cd68d3d72c47f5b513cb0578da716df5fba02fff31c69d5f2d", size = 450792, upload-time = "2025-06-15T19:05:09.869Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/1d/bf/7446b401667f5c64972a57a0233be1104157fc3abf72c4ef2666c1bd09b2/watchfiles-1.1.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:11ee4444250fcbeb47459a877e5e80ed994ce8e8d20283857fc128be1715dac7", size = 458196, upload-time = "2025-06-15T19:05:11.91Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/58/2f/501ddbdfa3fa874ea5597c77eeea3d413579c29af26c1091b08d0c792280/watchfiles-1.1.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bda8136e6a80bdea23e5e74e09df0362744d24ffb8cd59c4a95a6ce3d142f79c", size = 484788, upload-time = "2025-06-15T19:05:13.373Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/61/1e/9c18eb2eb5c953c96bc0e5f626f0e53cfef4bd19bd50d71d1a049c63a575/watchfiles-1.1.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b915daeb2d8c1f5cee4b970f2e2c988ce6514aace3c9296e58dd64dc9aa5d575", size = 597879, upload-time = "2025-06-15T19:05:14.725Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/8b/6c/1467402e5185d89388b4486745af1e0325007af0017c3384cc786fff0542/watchfiles-1.1.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ed8fc66786de8d0376f9f913c09e963c66e90ced9aa11997f93bdb30f7c872a8", size = 477447, upload-time = "2025-06-15T19:05:15.775Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/2b/a1/ec0a606bde4853d6c4a578f9391eeb3684a9aea736a8eb217e3e00aa89a1/watchfiles-1.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fe4371595edf78c41ef8ac8df20df3943e13defd0efcb732b2e393b5a8a7a71f", size = 453145, upload-time = "2025-06-15T19:05:17.17Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/90/b9/ef6f0c247a6a35d689fc970dc7f6734f9257451aefb30def5d100d6246a5/watchfiles-1.1.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:b7c5f6fe273291f4d414d55b2c80d33c457b8a42677ad14b4b47ff025d0893e4", size = 626539, upload-time = "2025-06-15T19:05:18.557Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/34/44/6ffda5537085106ff5aaa762b0d130ac6c75a08015dd1621376f708c94de/watchfiles-1.1.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:7738027989881e70e3723c75921f1efa45225084228788fc59ea8c6d732eb30d", size = 624472, upload-time = "2025-06-15T19:05:19.588Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/c3/e3/71170985c48028fa3f0a50946916a14055e741db11c2e7bc2f3b61f4d0e3/watchfiles-1.1.0-cp311-cp311-win32.whl", hash = "sha256:622d6b2c06be19f6e89b1d951485a232e3b59618def88dbeda575ed8f0d8dbf2", size = 279348, upload-time = "2025-06-15T19:05:20.856Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/89/1b/3e39c68b68a7a171070f81fc2561d23ce8d6859659406842a0e4bebf3bba/watchfiles-1.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:48aa25e5992b61debc908a61ab4d3f216b64f44fdaa71eb082d8b2de846b7d12", size = 292607, upload-time = "2025-06-15T19:05:21.937Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/61/9f/2973b7539f2bdb6ea86d2c87f70f615a71a1fc2dba2911795cea25968aea/watchfiles-1.1.0-cp311-cp311-win_arm64.whl", hash = "sha256:00645eb79a3faa70d9cb15c8d4187bb72970b2470e938670240c7998dad9f13a", size = 285056, upload-time = "2025-06-15T19:05:23.12Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/f6/b8/858957045a38a4079203a33aaa7d23ea9269ca7761c8a074af3524fbb240/watchfiles-1.1.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:9dc001c3e10de4725c749d4c2f2bdc6ae24de5a88a339c4bce32300a31ede179", size = 402339, upload-time = "2025-06-15T19:05:24.516Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/80/28/98b222cca751ba68e88521fabd79a4fab64005fc5976ea49b53fa205d1fa/watchfiles-1.1.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:d9ba68ec283153dead62cbe81872d28e053745f12335d037de9cbd14bd1877f5", size = 394409, upload-time = "2025-06-15T19:05:25.469Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/86/50/dee79968566c03190677c26f7f47960aff738d32087087bdf63a5473e7df/watchfiles-1.1.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:130fc497b8ee68dce163e4254d9b0356411d1490e868bd8790028bc46c5cc297", size = 450939, upload-time = "2025-06-15T19:05:26.494Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/40/45/a7b56fb129700f3cfe2594a01aa38d033b92a33dddce86c8dfdfc1247b72/watchfiles-1.1.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:50a51a90610d0845a5931a780d8e51d7bd7f309ebc25132ba975aca016b576a0", size = 457270, upload-time = "2025-06-15T19:05:27.466Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/b5/c8/fa5ef9476b1d02dc6b5e258f515fcaaecf559037edf8b6feffcbc097c4b8/watchfiles-1.1.0-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dc44678a72ac0910bac46fa6a0de6af9ba1355669b3dfaf1ce5f05ca7a74364e", size = 483370, upload-time = "2025-06-15T19:05:28.548Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/98/68/42cfcdd6533ec94f0a7aab83f759ec11280f70b11bfba0b0f885e298f9bd/watchfiles-1.1.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a543492513a93b001975ae283a51f4b67973662a375a403ae82f420d2c7205ee", size = 598654, upload-time = "2025-06-15T19:05:29.997Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/d3/74/b2a1544224118cc28df7e59008a929e711f9c68ce7d554e171b2dc531352/watchfiles-1.1.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8ac164e20d17cc285f2b94dc31c384bc3aa3dd5e7490473b3db043dd70fbccfd", size = 478667, upload-time = "2025-06-15T19:05:31.172Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/8c/77/e3362fe308358dc9f8588102481e599c83e1b91c2ae843780a7ded939a35/watchfiles-1.1.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f7590d5a455321e53857892ab8879dce62d1f4b04748769f5adf2e707afb9d4f", size = 452213, upload-time = "2025-06-15T19:05:32.299Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/6e/17/c8f1a36540c9a1558d4faf08e909399e8133599fa359bf52ec8fcee5be6f/watchfiles-1.1.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:37d3d3f7defb13f62ece99e9be912afe9dd8a0077b7c45ee5a57c74811d581a4", size = 626718, upload-time = "2025-06-15T19:05:33.415Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/26/45/fb599be38b4bd38032643783d7496a26a6f9ae05dea1a42e58229a20ac13/watchfiles-1.1.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:7080c4bb3efd70a07b1cc2df99a7aa51d98685be56be6038c3169199d0a1c69f", size = 623098, upload-time = "2025-06-15T19:05:34.534Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/a1/e7/fdf40e038475498e160cd167333c946e45d8563ae4dd65caf757e9ffe6b4/watchfiles-1.1.0-cp312-cp312-win32.whl", hash = "sha256:cbcf8630ef4afb05dc30107bfa17f16c0896bb30ee48fc24bf64c1f970f3b1fd", size = 279209, upload-time = "2025-06-15T19:05:35.577Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/3f/d3/3ae9d5124ec75143bdf088d436cba39812122edc47709cd2caafeac3266f/watchfiles-1.1.0-cp312-cp312-win_amd64.whl", hash = "sha256:cbd949bdd87567b0ad183d7676feb98136cde5bb9025403794a4c0db28ed3a47", size = 292786, upload-time = "2025-06-15T19:05:36.559Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/26/2f/7dd4fc8b5f2b34b545e19629b4a018bfb1de23b3a496766a2c1165ca890d/watchfiles-1.1.0-cp312-cp312-win_arm64.whl", hash = "sha256:0a7d40b77f07be87c6faa93d0951a0fcd8cbca1ddff60a1b65d741bac6f3a9f6", size = 284343, upload-time = "2025-06-15T19:05:37.5Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/d3/42/fae874df96595556a9089ade83be34a2e04f0f11eb53a8dbf8a8a5e562b4/watchfiles-1.1.0-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:5007f860c7f1f8df471e4e04aaa8c43673429047d63205d1630880f7637bca30", size = 402004, upload-time = "2025-06-15T19:05:38.499Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/fa/55/a77e533e59c3003d9803c09c44c3651224067cbe7fb5d574ddbaa31e11ca/watchfiles-1.1.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:20ecc8abbd957046f1fe9562757903f5eaf57c3bce70929fda6c7711bb58074a", size = 393671, upload-time = "2025-06-15T19:05:39.52Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/05/68/b0afb3f79c8e832e6571022611adbdc36e35a44e14f129ba09709aa4bb7a/watchfiles-1.1.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f2f0498b7d2a3c072766dba3274fe22a183dbea1f99d188f1c6c72209a1063dc", size = 449772, upload-time = "2025-06-15T19:05:40.897Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/ff/05/46dd1f6879bc40e1e74c6c39a1b9ab9e790bf1f5a2fe6c08b463d9a807f4/watchfiles-1.1.0-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:239736577e848678e13b201bba14e89718f5c2133dfd6b1f7846fa1b58a8532b", size = 456789, upload-time = "2025-06-15T19:05:42.045Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/8b/ca/0eeb2c06227ca7f12e50a47a3679df0cd1ba487ea19cf844a905920f8e95/watchfiles-1.1.0-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:eff4b8d89f444f7e49136dc695599a591ff769300734446c0a86cba2eb2f9895", size = 482551, upload-time = "2025-06-15T19:05:43.781Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/31/47/2cecbd8694095647406645f822781008cc524320466ea393f55fe70eed3b/watchfiles-1.1.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:12b0a02a91762c08f7264e2e79542f76870c3040bbc847fb67410ab81474932a", size = 597420, upload-time = "2025-06-15T19:05:45.244Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/d9/7e/82abc4240e0806846548559d70f0b1a6dfdca75c1b4f9fa62b504ae9b083/watchfiles-1.1.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:29e7bc2eee15cbb339c68445959108803dc14ee0c7b4eea556400131a8de462b", size = 477950, upload-time = "2025-06-15T19:05:46.332Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/25/0d/4d564798a49bf5482a4fa9416dea6b6c0733a3b5700cb8a5a503c4b15853/watchfiles-1.1.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d9481174d3ed982e269c090f780122fb59cee6c3796f74efe74e70f7780ed94c", size = 451706, upload-time = "2025-06-15T19:05:47.459Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/81/b5/5516cf46b033192d544102ea07c65b6f770f10ed1d0a6d388f5d3874f6e4/watchfiles-1.1.0-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:80f811146831c8c86ab17b640801c25dc0a88c630e855e2bef3568f30434d52b", size = 625814, upload-time = "2025-06-15T19:05:48.654Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/0c/dd/7c1331f902f30669ac3e754680b6edb9a0dd06dea5438e61128111fadd2c/watchfiles-1.1.0-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:60022527e71d1d1fda67a33150ee42869042bce3d0fcc9cc49be009a9cded3fb", size = 622820, upload-time = "2025-06-15T19:05:50.088Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/1b/14/36d7a8e27cd128d7b1009e7715a7c02f6c131be9d4ce1e5c3b73d0e342d8/watchfiles-1.1.0-cp313-cp313-win32.whl", hash = "sha256:32d6d4e583593cb8576e129879ea0991660b935177c0f93c6681359b3654bfa9", size = 279194, upload-time = "2025-06-15T19:05:51.186Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/25/41/2dd88054b849aa546dbeef5696019c58f8e0774f4d1c42123273304cdb2e/watchfiles-1.1.0-cp313-cp313-win_amd64.whl", hash = "sha256:f21af781a4a6fbad54f03c598ab620e3a77032c5878f3d780448421a6e1818c7", size = 292349, upload-time = "2025-06-15T19:05:52.201Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/c8/cf/421d659de88285eb13941cf11a81f875c176f76a6d99342599be88e08d03/watchfiles-1.1.0-cp313-cp313-win_arm64.whl", hash = "sha256:5366164391873ed76bfdf618818c82084c9db7fac82b64a20c44d335eec9ced5", size = 283836, upload-time = "2025-06-15T19:05:53.265Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/45/10/6faf6858d527e3599cc50ec9fcae73590fbddc1420bd4fdccfebffeedbc6/watchfiles-1.1.0-cp313-cp313t-macosx_10_12_x86_64.whl", hash = "sha256:17ab167cca6339c2b830b744eaf10803d2a5b6683be4d79d8475d88b4a8a4be1", size = 400343, upload-time = "2025-06-15T19:05:54.252Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/03/20/5cb7d3966f5e8c718006d0e97dfe379a82f16fecd3caa7810f634412047a/watchfiles-1.1.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:328dbc9bff7205c215a7807da7c18dce37da7da718e798356212d22696404339", size = 392916, upload-time = "2025-06-15T19:05:55.264Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/8c/07/d8f1176328fa9e9581b6f120b017e286d2a2d22ae3f554efd9515c8e1b49/watchfiles-1.1.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f7208ab6e009c627b7557ce55c465c98967e8caa8b11833531fdf95799372633", size = 449582, upload-time = "2025-06-15T19:05:56.317Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/66/e8/80a14a453cf6038e81d072a86c05276692a1826471fef91df7537dba8b46/watchfiles-1.1.0-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a8f6f72974a19efead54195bc9bed4d850fc047bb7aa971268fd9a8387c89011", size = 456752, upload-time = "2025-06-15T19:05:57.359Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/5a/25/0853b3fe0e3c2f5af9ea60eb2e781eade939760239a72c2d38fc4cc335f6/watchfiles-1.1.0-cp313-cp313t-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d181ef50923c29cf0450c3cd47e2f0557b62218c50b2ab8ce2ecaa02bd97e670", size = 481436, upload-time = "2025-06-15T19:05:58.447Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/fe/9e/4af0056c258b861fbb29dcb36258de1e2b857be4a9509e6298abcf31e5c9/watchfiles-1.1.0-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:adb4167043d3a78280d5d05ce0ba22055c266cf8655ce942f2fb881262ff3cdf", size = 596016, upload-time = "2025-06-15T19:05:59.59Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/c5/fa/95d604b58aa375e781daf350897aaaa089cff59d84147e9ccff2447c8294/watchfiles-1.1.0-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8c5701dc474b041e2934a26d31d39f90fac8a3dee2322b39f7729867f932b1d4", size = 476727, upload-time = "2025-06-15T19:06:01.086Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/65/95/fe479b2664f19be4cf5ceeb21be05afd491d95f142e72d26a42f41b7c4f8/watchfiles-1.1.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b067915e3c3936966a8607f6fe5487df0c9c4afb85226613b520890049deea20", size = 451864, upload-time = "2025-06-15T19:06:02.144Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/d3/8a/3c4af14b93a15ce55901cd7a92e1a4701910f1768c78fb30f61d2b79785b/watchfiles-1.1.0-cp313-cp313t-musllinux_1_1_aarch64.whl", hash = "sha256:9c733cda03b6d636b4219625a4acb5c6ffb10803338e437fb614fef9516825ef", size = 625626, upload-time = "2025-06-15T19:06:03.578Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/da/f5/cf6aa047d4d9e128f4b7cde615236a915673775ef171ff85971d698f3c2c/watchfiles-1.1.0-cp313-cp313t-musllinux_1_1_x86_64.whl", hash = "sha256:cc08ef8b90d78bfac66f0def80240b0197008e4852c9f285907377b2947ffdcb", size = 622744, upload-time = "2025-06-15T19:06:05.066Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/2c/00/70f75c47f05dea6fd30df90f047765f6fc2d6eb8b5a3921379b0b04defa2/watchfiles-1.1.0-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:9974d2f7dc561cce3bb88dfa8eb309dab64c729de85fba32e98d75cf24b66297", size = 402114, upload-time = "2025-06-15T19:06:06.186Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/53/03/acd69c48db4a1ed1de26b349d94077cca2238ff98fd64393f3e97484cae6/watchfiles-1.1.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:c68e9f1fcb4d43798ad8814c4c1b61547b014b667216cb754e606bfade587018", size = 393879, upload-time = "2025-06-15T19:06:07.369Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/2f/c8/a9a2a6f9c8baa4eceae5887fecd421e1b7ce86802bcfc8b6a942e2add834/watchfiles-1.1.0-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:95ab1594377effac17110e1352989bdd7bdfca9ff0e5eeccd8c69c5389b826d0", size = 450026, upload-time = "2025-06-15T19:06:08.476Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/fe/51/d572260d98388e6e2b967425c985e07d47ee6f62e6455cefb46a6e06eda5/watchfiles-1.1.0-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:fba9b62da882c1be1280a7584ec4515d0a6006a94d6e5819730ec2eab60ffe12", size = 457917, upload-time = "2025-06-15T19:06:09.988Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/c6/2d/4258e52917bf9f12909b6ec314ff9636276f3542f9d3807d143f27309104/watchfiles-1.1.0-cp314-cp314-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3434e401f3ce0ed6b42569128b3d1e3af773d7ec18751b918b89cd49c14eaafb", size = 483602, upload-time = "2025-06-15T19:06:11.088Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/84/99/bee17a5f341a4345fe7b7972a475809af9e528deba056f8963d61ea49f75/watchfiles-1.1.0-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fa257a4d0d21fcbca5b5fcba9dca5a78011cb93c0323fb8855c6d2dfbc76eb77", size = 596758, upload-time = "2025-06-15T19:06:12.197Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/40/76/e4bec1d59b25b89d2b0716b41b461ed655a9a53c60dc78ad5771fda5b3e6/watchfiles-1.1.0-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7fd1b3879a578a8ec2076c7961076df540b9af317123f84569f5a9ddee64ce92", size = 477601, upload-time = "2025-06-15T19:06:13.391Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/1f/fa/a514292956f4a9ce3c567ec0c13cce427c158e9f272062685a8a727d08fc/watchfiles-1.1.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:62cc7a30eeb0e20ecc5f4bd113cd69dcdb745a07c68c0370cea919f373f65d9e", size = 451936, upload-time = "2025-06-15T19:06:14.656Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/32/5d/c3bf927ec3bbeb4566984eba8dd7a8eb69569400f5509904545576741f88/watchfiles-1.1.0-cp314-cp314-musllinux_1_1_aarch64.whl", hash = "sha256:891c69e027748b4a73847335d208e374ce54ca3c335907d381fde4e41661b13b", size = 626243, upload-time = "2025-06-15T19:06:16.232Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/e6/65/6e12c042f1a68c556802a84d54bb06d35577c81e29fba14019562479159c/watchfiles-1.1.0-cp314-cp314-musllinux_1_1_x86_64.whl", hash = "sha256:12fe8eaffaf0faa7906895b4f8bb88264035b3f0243275e0bf24af0436b27259", size = 623073, upload-time = "2025-06-15T19:06:17.457Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/89/ab/7f79d9bf57329e7cbb0a6fd4c7bd7d0cee1e4a8ef0041459f5409da3506c/watchfiles-1.1.0-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:bfe3c517c283e484843cb2e357dd57ba009cff351edf45fb455b5fbd1f45b15f", size = 400872, upload-time = "2025-06-15T19:06:18.57Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/df/d5/3f7bf9912798e9e6c516094db6b8932df53b223660c781ee37607030b6d3/watchfiles-1.1.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:a9ccbf1f129480ed3044f540c0fdbc4ee556f7175e5ab40fe077ff6baf286d4e", size = 392877, upload-time = "2025-06-15T19:06:19.55Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/0d/c5/54ec7601a2798604e01c75294770dbee8150e81c6e471445d7601610b495/watchfiles-1.1.0-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ba0e3255b0396cac3cc7bbace76404dd72b5438bf0d8e7cefa2f79a7f3649caa", size = 449645, upload-time = "2025-06-15T19:06:20.66Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/0a/04/c2f44afc3b2fce21ca0b7802cbd37ed90a29874f96069ed30a36dfe57c2b/watchfiles-1.1.0-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:4281cd9fce9fc0a9dbf0fc1217f39bf9cf2b4d315d9626ef1d4e87b84699e7e8", size = 457424, upload-time = "2025-06-15T19:06:21.712Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/9f/b0/eec32cb6c14d248095261a04f290636da3df3119d4040ef91a4a50b29fa5/watchfiles-1.1.0-cp314-cp314t-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6d2404af8db1329f9a3c9b79ff63e0ae7131986446901582067d9304ae8aaf7f", size = 481584, upload-time = "2025-06-15T19:06:22.777Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/d1/e2/ca4bb71c68a937d7145aa25709e4f5d68eb7698a25ce266e84b55d591bbd/watchfiles-1.1.0-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e78b6ed8165996013165eeabd875c5dfc19d41b54f94b40e9fff0eb3193e5e8e", size = 596675, upload-time = "2025-06-15T19:06:24.226Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/a1/dd/b0e4b7fb5acf783816bc950180a6cd7c6c1d2cf7e9372c0ea634e722712b/watchfiles-1.1.0-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:249590eb75ccc117f488e2fabd1bfa33c580e24b96f00658ad88e38844a040bb", size = 477363, upload-time = "2025-06-15T19:06:25.42Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/69/c4/088825b75489cb5b6a761a4542645718893d395d8c530b38734f19da44d2/watchfiles-1.1.0-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d05686b5487cfa2e2c28ff1aa370ea3e6c5accfe6435944ddea1e10d93872147", size = 452240, upload-time = "2025-06-15T19:06:26.552Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/10/8c/22b074814970eeef43b7c44df98c3e9667c1f7bf5b83e0ff0201b0bd43f9/watchfiles-1.1.0-cp314-cp314t-musllinux_1_1_aarch64.whl", hash = "sha256:d0e10e6f8f6dc5762adee7dece33b722282e1f59aa6a55da5d493a97282fedd8", size = 625607, upload-time = "2025-06-15T19:06:27.606Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/32/fa/a4f5c2046385492b2273213ef815bf71a0d4c1943b784fb904e184e30201/watchfiles-1.1.0-cp314-cp314t-musllinux_1_1_x86_64.whl", hash = "sha256:af06c863f152005c7592df1d6a7009c836a247c9d8adb78fef8575a5a98699db", size = 623315, upload-time = "2025-06-15T19:06:29.076Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/8c/6b/686dcf5d3525ad17b384fd94708e95193529b460a1b7bf40851f1328ec6e/watchfiles-1.1.0-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:0ece16b563b17ab26eaa2d52230c9a7ae46cf01759621f4fbbca280e438267b3", size = 406910, upload-time = "2025-06-15T19:06:49.335Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/f3/d3/71c2dcf81dc1edcf8af9f4d8d63b1316fb0a2dd90cbfd427e8d9dd584a90/watchfiles-1.1.0-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:51b81e55d40c4b4aa8658427a3ee7ea847c591ae9e8b81ef94a90b668999353c", size = 398816, upload-time = "2025-06-15T19:06:50.433Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/b8/fa/12269467b2fc006f8fce4cd6c3acfa77491dd0777d2a747415f28ccc8c60/watchfiles-1.1.0-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f2bcdc54ea267fe72bfc7d83c041e4eb58d7d8dc6f578dfddb52f037ce62f432", size = 451584, upload-time = "2025-06-15T19:06:51.834Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/bd/d3/254cea30f918f489db09d6a8435a7de7047f8cb68584477a515f160541d6/watchfiles-1.1.0-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:923fec6e5461c42bd7e3fd5ec37492c6f3468be0499bc0707b4bbbc16ac21792", size = 454009, upload-time = "2025-06-15T19:06:52.896Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "websockets"
|
||||
version = "15.0.1"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/21/e6/26d09fab466b7ca9c7737474c52be4f76a40301b08362eb2dbc19dcc16c1/websockets-15.0.1.tar.gz", hash = "sha256:82544de02076bafba038ce055ee6412d68da13ab47f0c60cab827346de828dee", size = 177016, upload-time = "2025-03-05T20:03:41.606Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/9f/32/18fcd5919c293a398db67443acd33fde142f283853076049824fc58e6f75/websockets-15.0.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:823c248b690b2fd9303ba00c4f66cd5e2d8c3ba4aa968b2779be9532a4dad431", size = 175423, upload-time = "2025-03-05T20:01:56.276Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/76/70/ba1ad96b07869275ef42e2ce21f07a5b0148936688c2baf7e4a1f60d5058/websockets-15.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:678999709e68425ae2593acf2e3ebcbcf2e69885a5ee78f9eb80e6e371f1bf57", size = 173082, upload-time = "2025-03-05T20:01:57.563Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/86/f2/10b55821dd40eb696ce4704a87d57774696f9451108cff0d2824c97e0f97/websockets-15.0.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d50fd1ee42388dcfb2b3676132c78116490976f1300da28eb629272d5d93e905", size = 173330, upload-time = "2025-03-05T20:01:59.063Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/a5/90/1c37ae8b8a113d3daf1065222b6af61cc44102da95388ac0018fcb7d93d9/websockets-15.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d99e5546bf73dbad5bf3547174cd6cb8ba7273062a23808ffea025ecb1cf8562", size = 182878, upload-time = "2025-03-05T20:02:00.305Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/8e/8d/96e8e288b2a41dffafb78e8904ea7367ee4f891dafc2ab8d87e2124cb3d3/websockets-15.0.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:66dd88c918e3287efc22409d426c8f729688d89a0c587c88971a0faa2c2f3792", size = 181883, upload-time = "2025-03-05T20:02:03.148Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/93/1f/5d6dbf551766308f6f50f8baf8e9860be6182911e8106da7a7f73785f4c4/websockets-15.0.1-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8dd8327c795b3e3f219760fa603dcae1dcc148172290a8ab15158cf85a953413", size = 182252, upload-time = "2025-03-05T20:02:05.29Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/d4/78/2d4fed9123e6620cbf1706c0de8a1632e1a28e7774d94346d7de1bba2ca3/websockets-15.0.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:8fdc51055e6ff4adeb88d58a11042ec9a5eae317a0a53d12c062c8a8865909e8", size = 182521, upload-time = "2025-03-05T20:02:07.458Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/e7/3b/66d4c1b444dd1a9823c4a81f50231b921bab54eee2f69e70319b4e21f1ca/websockets-15.0.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:693f0192126df6c2327cce3baa7c06f2a117575e32ab2308f7f8216c29d9e2e3", size = 181958, upload-time = "2025-03-05T20:02:09.842Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/08/ff/e9eed2ee5fed6f76fdd6032ca5cd38c57ca9661430bb3d5fb2872dc8703c/websockets-15.0.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:54479983bd5fb469c38f2f5c7e3a24f9a4e70594cd68cd1fa6b9340dadaff7cf", size = 181918, upload-time = "2025-03-05T20:02:11.968Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/d8/75/994634a49b7e12532be6a42103597b71098fd25900f7437d6055ed39930a/websockets-15.0.1-cp311-cp311-win32.whl", hash = "sha256:16b6c1b3e57799b9d38427dda63edcbe4926352c47cf88588c0be4ace18dac85", size = 176388, upload-time = "2025-03-05T20:02:13.32Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/98/93/e36c73f78400a65f5e236cd376713c34182e6663f6889cd45a4a04d8f203/websockets-15.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:27ccee0071a0e75d22cb35849b1db43f2ecd3e161041ac1ee9d2352ddf72f065", size = 176828, upload-time = "2025-03-05T20:02:14.585Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/51/6b/4545a0d843594f5d0771e86463606a3988b5a09ca5123136f8a76580dd63/websockets-15.0.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:3e90baa811a5d73f3ca0bcbf32064d663ed81318ab225ee4f427ad4e26e5aff3", size = 175437, upload-time = "2025-03-05T20:02:16.706Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/f4/71/809a0f5f6a06522af902e0f2ea2757f71ead94610010cf570ab5c98e99ed/websockets-15.0.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:592f1a9fe869c778694f0aa806ba0374e97648ab57936f092fd9d87f8bc03665", size = 173096, upload-time = "2025-03-05T20:02:18.832Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/3d/69/1a681dd6f02180916f116894181eab8b2e25b31e484c5d0eae637ec01f7c/websockets-15.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:0701bc3cfcb9164d04a14b149fd74be7347a530ad3bbf15ab2c678a2cd3dd9a2", size = 173332, upload-time = "2025-03-05T20:02:20.187Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/a6/02/0073b3952f5bce97eafbb35757f8d0d54812b6174ed8dd952aa08429bcc3/websockets-15.0.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e8b56bdcdb4505c8078cb6c7157d9811a85790f2f2b3632c7d1462ab5783d215", size = 183152, upload-time = "2025-03-05T20:02:22.286Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/74/45/c205c8480eafd114b428284840da0b1be9ffd0e4f87338dc95dc6ff961a1/websockets-15.0.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0af68c55afbd5f07986df82831c7bff04846928ea8d1fd7f30052638788bc9b5", size = 182096, upload-time = "2025-03-05T20:02:24.368Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/14/8f/aa61f528fba38578ec553c145857a181384c72b98156f858ca5c8e82d9d3/websockets-15.0.1-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:64dee438fed052b52e4f98f76c5790513235efaa1ef7f3f2192c392cd7c91b65", size = 182523, upload-time = "2025-03-05T20:02:25.669Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/ec/6d/0267396610add5bc0d0d3e77f546d4cd287200804fe02323797de77dbce9/websockets-15.0.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:d5f6b181bb38171a8ad1d6aa58a67a6aa9d4b38d0f8c5f496b9e42561dfc62fe", size = 182790, upload-time = "2025-03-05T20:02:26.99Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/02/05/c68c5adbf679cf610ae2f74a9b871ae84564462955d991178f95a1ddb7dd/websockets-15.0.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:5d54b09eba2bada6011aea5375542a157637b91029687eb4fdb2dab11059c1b4", size = 182165, upload-time = "2025-03-05T20:02:30.291Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/29/93/bb672df7b2f5faac89761cb5fa34f5cec45a4026c383a4b5761c6cea5c16/websockets-15.0.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:3be571a8b5afed347da347bfcf27ba12b069d9d7f42cb8c7028b5e98bbb12597", size = 182160, upload-time = "2025-03-05T20:02:31.634Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/ff/83/de1f7709376dc3ca9b7eeb4b9a07b4526b14876b6d372a4dc62312bebee0/websockets-15.0.1-cp312-cp312-win32.whl", hash = "sha256:c338ffa0520bdb12fbc527265235639fb76e7bc7faafbb93f6ba80d9c06578a9", size = 176395, upload-time = "2025-03-05T20:02:33.017Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/7d/71/abf2ebc3bbfa40f391ce1428c7168fb20582d0ff57019b69ea20fa698043/websockets-15.0.1-cp312-cp312-win_amd64.whl", hash = "sha256:fcd5cf9e305d7b8338754470cf69cf81f420459dbae8a3b40cee57417f4614a7", size = 176841, upload-time = "2025-03-05T20:02:34.498Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/cb/9f/51f0cf64471a9d2b4d0fc6c534f323b664e7095640c34562f5182e5a7195/websockets-15.0.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:ee443ef070bb3b6ed74514f5efaa37a252af57c90eb33b956d35c8e9c10a1931", size = 175440, upload-time = "2025-03-05T20:02:36.695Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/8a/05/aa116ec9943c718905997412c5989f7ed671bc0188ee2ba89520e8765d7b/websockets-15.0.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:5a939de6b7b4e18ca683218320fc67ea886038265fd1ed30173f5ce3f8e85675", size = 173098, upload-time = "2025-03-05T20:02:37.985Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/ff/0b/33cef55ff24f2d92924923c99926dcce78e7bd922d649467f0eda8368923/websockets-15.0.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:746ee8dba912cd6fc889a8147168991d50ed70447bf18bcda7039f7d2e3d9151", size = 173329, upload-time = "2025-03-05T20:02:39.298Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/31/1d/063b25dcc01faa8fada1469bdf769de3768b7044eac9d41f734fd7b6ad6d/websockets-15.0.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:595b6c3969023ecf9041b2936ac3827e4623bfa3ccf007575f04c5a6aa318c22", size = 183111, upload-time = "2025-03-05T20:02:40.595Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/93/53/9a87ee494a51bf63e4ec9241c1ccc4f7c2f45fff85d5bde2ff74fcb68b9e/websockets-15.0.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3c714d2fc58b5ca3e285461a4cc0c9a66bd0e24c5da9911e30158286c9b5be7f", size = 182054, upload-time = "2025-03-05T20:02:41.926Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/ff/b2/83a6ddf56cdcbad4e3d841fcc55d6ba7d19aeb89c50f24dd7e859ec0805f/websockets-15.0.1-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0f3c1e2ab208db911594ae5b4f79addeb3501604a165019dd221c0bdcabe4db8", size = 182496, upload-time = "2025-03-05T20:02:43.304Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/98/41/e7038944ed0abf34c45aa4635ba28136f06052e08fc2168520bb8b25149f/websockets-15.0.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:229cf1d3ca6c1804400b0a9790dc66528e08a6a1feec0d5040e8b9eb14422375", size = 182829, upload-time = "2025-03-05T20:02:48.812Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/e0/17/de15b6158680c7623c6ef0db361da965ab25d813ae54fcfeae2e5b9ef910/websockets-15.0.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:756c56e867a90fb00177d530dca4b097dd753cde348448a1012ed6c5131f8b7d", size = 182217, upload-time = "2025-03-05T20:02:50.14Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/33/2b/1f168cb6041853eef0362fb9554c3824367c5560cbdaad89ac40f8c2edfc/websockets-15.0.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:558d023b3df0bffe50a04e710bc87742de35060580a293c2a984299ed83bc4e4", size = 182195, upload-time = "2025-03-05T20:02:51.561Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/86/eb/20b6cdf273913d0ad05a6a14aed4b9a85591c18a987a3d47f20fa13dcc47/websockets-15.0.1-cp313-cp313-win32.whl", hash = "sha256:ba9e56e8ceeeedb2e080147ba85ffcd5cd0711b89576b83784d8605a7df455fa", size = 176393, upload-time = "2025-03-05T20:02:53.814Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/1b/6c/c65773d6cab416a64d191d6ee8a8b1c68a09970ea6909d16965d26bfed1e/websockets-15.0.1-cp313-cp313-win_amd64.whl", hash = "sha256:e09473f095a819042ecb2ab9465aee615bd9c2028e4ef7d933600a8401c79561", size = 176837, upload-time = "2025-03-05T20:02:55.237Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/fa/a8/5b41e0da817d64113292ab1f8247140aac61cbf6cfd085d6a0fa77f4984f/websockets-15.0.1-py3-none-any.whl", hash = "sha256:f7a866fbc1e97b5c617ee4116daaa09b722101d4a3c170c787450ba409f9736f", size = 169743, upload-time = "2025-03-05T20:03:39.41Z" },
|
||||
]
|
||||
Reference in New Issue
Block a user