pycapcut 0.0.1__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- pyJianYingDraft/__init__.py +276 -0
- pyJianYingDraft/animation.py +140 -0
- pyJianYingDraft/assets/__init__.py +45 -0
- pyJianYingDraft/assets/draft_content_template.json +125 -0
- pyJianYingDraft/assets/draft_meta_info.json +67 -0
- pyJianYingDraft/audio_segment.py +225 -0
- pyJianYingDraft/draft_content_template.json +119 -0
- pyJianYingDraft/draft_folder.py +153 -0
- pyJianYingDraft/effect_segment.py +36 -0
- pyJianYingDraft/exceptions.py +23 -0
- pyJianYingDraft/jianying_controller.py +230 -0
- pyJianYingDraft/keyframe.py +94 -0
- pyJianYingDraft/local_materials.py +198 -0
- pyJianYingDraft/metadata/__init__.py +51 -0
- pyJianYingDraft/metadata/animation_meta.py +689 -0
- pyJianYingDraft/metadata/audio_effect_meta.py +367 -0
- pyJianYingDraft/metadata/audio_scene_effect.py +252 -0
- pyJianYingDraft/metadata/effect_meta.py +191 -0
- pyJianYingDraft/metadata/filter_meta.py +603 -0
- pyJianYingDraft/metadata/font_meta.py +341 -0
- pyJianYingDraft/metadata/mask_meta.py +15 -0
- pyJianYingDraft/metadata/speech_to_song.py +12 -0
- pyJianYingDraft/metadata/text_intro.py +152 -0
- pyJianYingDraft/metadata/text_loop.py +105 -0
- pyJianYingDraft/metadata/text_outro.py +105 -0
- pyJianYingDraft/metadata/tone_effect.py +107 -0
- pyJianYingDraft/metadata/transition_meta.py +733 -0
- pyJianYingDraft/metadata/video_character_effect.py +1913 -0
- pyJianYingDraft/metadata/video_effect_meta.py +9619 -0
- pyJianYingDraft/metadata/video_group_animation.py +131 -0
- pyJianYingDraft/metadata/video_intro.py +103 -0
- pyJianYingDraft/metadata/video_outro.py +80 -0
- pyJianYingDraft/metadata/video_scene_effect.py +7706 -0
- pyJianYingDraft/script_file.py +808 -0
- pyJianYingDraft/segment.py +256 -0
- pyJianYingDraft/template_mode.py +221 -0
- pyJianYingDraft/text_segment.py +436 -0
- pyJianYingDraft/time_util.py +99 -0
- pyJianYingDraft/track.py +138 -0
- pyJianYingDraft/util.py +58 -0
- pyJianYingDraft/video_segment.py +526 -0
- pycapcut/__init__.py +276 -0
- pycapcut/animation.py +140 -0
- pycapcut/assets/__init__.py +45 -0
- pycapcut/assets/draft_content_template.json +132 -0
- pycapcut/assets/draft_meta_info.json +73 -0
- pycapcut/audio_segment.py +225 -0
- pycapcut/draft_folder.py +153 -0
- pycapcut/effect_segment.py +36 -0
- pycapcut/exceptions.py +23 -0
- pycapcut/jianying_controller.py +230 -0
- pycapcut/keyframe.py +94 -0
- pycapcut/local_materials.py +198 -0
- pycapcut/metadata/__init__.py +51 -0
- pycapcut/metadata/audio_scene_effect.py +252 -0
- pycapcut/metadata/effect_meta.py +191 -0
- pycapcut/metadata/filter_meta.py +603 -0
- pycapcut/metadata/font_meta.py +341 -0
- pycapcut/metadata/mask_meta.py +15 -0
- pycapcut/metadata/speech_to_song.py +12 -0
- pycapcut/metadata/text_intro.py +152 -0
- pycapcut/metadata/text_loop.py +105 -0
- pycapcut/metadata/text_outro.py +105 -0
- pycapcut/metadata/tone_effect.py +107 -0
- pycapcut/metadata/transition_meta.py +733 -0
- pycapcut/metadata/video_character_effect.py +1913 -0
- pycapcut/metadata/video_group_animation.py +131 -0
- pycapcut/metadata/video_intro.py +103 -0
- pycapcut/metadata/video_outro.py +80 -0
- pycapcut/metadata/video_scene_effect.py +7706 -0
- pycapcut/script_file.py +808 -0
- pycapcut/segment.py +256 -0
- pycapcut/template_mode.py +221 -0
- pycapcut/text_segment.py +436 -0
- pycapcut/time_util.py +99 -0
- pycapcut/track.py +138 -0
- pycapcut/util.py +58 -0
- pycapcut/video_segment.py +526 -0
- pycapcut-0.0.1.dist-info/METADATA +77 -0
- pycapcut-0.0.1.dist-info/RECORD +88 -0
- pycapcut-0.0.1.dist-info/WHEEL +5 -0
- pycapcut-0.0.1.dist-info/top_level.txt +1 -0
- tools/__init__.py +17 -0
- tools/build_release.py +270 -0
- tools/code_generator.py +247 -0
- tools/extract_all.py +256 -0
- tools/extractor_base.py +132 -0
- tools/jianying_extractor.py +262 -0
pycapcut/keyframe.py
ADDED
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
import uuid
|
|
2
|
+
|
|
3
|
+
from enum import Enum
|
|
4
|
+
from typing import Dict, List, Any
|
|
5
|
+
|
|
6
|
+
class Keyframe:
|
|
7
|
+
"""一个关键帧(关键点), 目前只支持线性插值"""
|
|
8
|
+
|
|
9
|
+
kf_id: str
|
|
10
|
+
"""关键帧全局id, 自动生成"""
|
|
11
|
+
time_offset: int
|
|
12
|
+
"""相对于素材起始点的时间偏移量"""
|
|
13
|
+
values: List[float]
|
|
14
|
+
"""关键帧的值, 似乎一般只有一个元素"""
|
|
15
|
+
|
|
16
|
+
def __init__(self, time_offset: int, value: float):
|
|
17
|
+
"""给定时间偏移量及关键值, 初始化关键帧"""
|
|
18
|
+
self.kf_id = uuid.uuid4().hex
|
|
19
|
+
|
|
20
|
+
self.time_offset = time_offset
|
|
21
|
+
self.values = [value]
|
|
22
|
+
|
|
23
|
+
def export_json(self) -> Dict[str, Any]:
|
|
24
|
+
return {
|
|
25
|
+
# 默认值
|
|
26
|
+
"curveType": "Line",
|
|
27
|
+
"graphID": "",
|
|
28
|
+
"left_control": {"x": 0.0, "y": 0.0},
|
|
29
|
+
"right_control": {"x": 0.0, "y": 0.0},
|
|
30
|
+
# 自定义属性
|
|
31
|
+
"id": self.kf_id,
|
|
32
|
+
"time_offset": self.time_offset,
|
|
33
|
+
"values": self.values
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
class KeyframeProperty(Enum):
|
|
37
|
+
"""关键帧所控制的属性类型"""
|
|
38
|
+
|
|
39
|
+
position_x = "KFTypePositionX"
|
|
40
|
+
"""右移为正, 此处的数值应该为`剪映中显示的值` / `草稿宽度`, 也即单位是半个画布宽"""
|
|
41
|
+
position_y = "KFTypePositionY"
|
|
42
|
+
"""上移为正, 此处的数值应该为`剪映中显示的值` / `草稿高度`, 也即单位是半个画布高"""
|
|
43
|
+
rotation = "KFTypeRotation"
|
|
44
|
+
"""顺时针旋转的**角度**"""
|
|
45
|
+
|
|
46
|
+
scale_x = "KFTypeScaleX"
|
|
47
|
+
"""单独控制X轴缩放比例(1.0为不缩放), 与`uniform_scale`互斥"""
|
|
48
|
+
scale_y = "KFTypeScaleY"
|
|
49
|
+
"""单独控制Y轴缩放比例(1.0为不缩放), 与`uniform_scale`互斥"""
|
|
50
|
+
uniform_scale = "UNIFORM_SCALE"
|
|
51
|
+
"""同时控制X轴及Y轴缩放比例(1.0为不缩放), 与`scale_x`和`scale_y`互斥"""
|
|
52
|
+
|
|
53
|
+
alpha = "KFTypeAlpha"
|
|
54
|
+
"""不透明度, 1.0为完全不透明, 仅对`VideoSegment`有效"""
|
|
55
|
+
saturation = "KFTypeSaturation"
|
|
56
|
+
"""饱和度, 0.0为原始饱和度, 范围为-1.0到1.0, 仅对`VideoSegment`有效"""
|
|
57
|
+
contrast = "KFTypeContrast"
|
|
58
|
+
"""对比度, 0.0为原始对比度, 范围为-1.0到1.0, 仅对`VideoSegment`有效"""
|
|
59
|
+
brightness = "KFTypeBrightness"
|
|
60
|
+
"""亮度, 0.0为原始亮度, 范围为-1.0到1.0, 仅对`VideoSegment`有效"""
|
|
61
|
+
|
|
62
|
+
volume = "KFTypeVolume"
|
|
63
|
+
"""音量, 1.0为原始音量, 仅对`AudioSegment`和`VideoSegment`有效"""
|
|
64
|
+
|
|
65
|
+
class KeyframeList:
|
|
66
|
+
"""关键帧列表, 记录与某个特定属性相关的一系列关键帧"""
|
|
67
|
+
|
|
68
|
+
list_id: str
|
|
69
|
+
"""关键帧列表全局id, 自动生成"""
|
|
70
|
+
keyframe_property: KeyframeProperty
|
|
71
|
+
"""关键帧对应的属性"""
|
|
72
|
+
keyframes: List[Keyframe]
|
|
73
|
+
"""关键帧列表"""
|
|
74
|
+
|
|
75
|
+
def __init__(self, keyframe_property: KeyframeProperty):
|
|
76
|
+
"""为给定的关键帧属性初始化关键帧列表"""
|
|
77
|
+
self.list_id = uuid.uuid4().hex
|
|
78
|
+
|
|
79
|
+
self.keyframe_property = keyframe_property
|
|
80
|
+
self.keyframes = []
|
|
81
|
+
|
|
82
|
+
def add_keyframe(self, time_offset: int, value: float):
|
|
83
|
+
"""给定时间偏移量及关键值, 向此关键帧列表中添加一个关键帧"""
|
|
84
|
+
keyframe = Keyframe(time_offset, value)
|
|
85
|
+
self.keyframes.append(keyframe)
|
|
86
|
+
self.keyframes.sort(key=lambda x: x.time_offset)
|
|
87
|
+
|
|
88
|
+
def export_json(self) -> Dict[str, Any]:
|
|
89
|
+
return {
|
|
90
|
+
"id": self.list_id,
|
|
91
|
+
"keyframe_list": [kf.export_json() for kf in self.keyframes],
|
|
92
|
+
"material_id": "",
|
|
93
|
+
"property_type": self.keyframe_property.value
|
|
94
|
+
}
|
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
import os
|
|
2
|
+
import uuid
|
|
3
|
+
import pymediainfo
|
|
4
|
+
|
|
5
|
+
from typing import Optional, Literal
|
|
6
|
+
from typing import Dict, Any
|
|
7
|
+
|
|
8
|
+
class CropSettings:
|
|
9
|
+
"""素材的裁剪设置, 各属性均在0-1之间, 注意素材的坐标原点在左上角"""
|
|
10
|
+
|
|
11
|
+
upper_left_x: float
|
|
12
|
+
upper_left_y: float
|
|
13
|
+
upper_right_x: float
|
|
14
|
+
upper_right_y: float
|
|
15
|
+
lower_left_x: float
|
|
16
|
+
lower_left_y: float
|
|
17
|
+
lower_right_x: float
|
|
18
|
+
lower_right_y: float
|
|
19
|
+
|
|
20
|
+
def __init__(self, *, upper_left_x: float = 0.0, upper_left_y: float = 0.0,
|
|
21
|
+
upper_right_x: float = 1.0, upper_right_y: float = 0.0,
|
|
22
|
+
lower_left_x: float = 0.0, lower_left_y: float = 1.0,
|
|
23
|
+
lower_right_x: float = 1.0, lower_right_y: float = 1.0):
|
|
24
|
+
"""初始化裁剪设置, 默认参数表示不裁剪"""
|
|
25
|
+
self.upper_left_x = upper_left_x
|
|
26
|
+
self.upper_left_y = upper_left_y
|
|
27
|
+
self.upper_right_x = upper_right_x
|
|
28
|
+
self.upper_right_y = upper_right_y
|
|
29
|
+
self.lower_left_x = lower_left_x
|
|
30
|
+
self.lower_left_y = lower_left_y
|
|
31
|
+
self.lower_right_x = lower_right_x
|
|
32
|
+
self.lower_right_y = lower_right_y
|
|
33
|
+
|
|
34
|
+
def export_json(self) -> Dict[str, Any]:
|
|
35
|
+
return {
|
|
36
|
+
"upper_left_x": self.upper_left_x,
|
|
37
|
+
"upper_left_y": self.upper_left_y,
|
|
38
|
+
"upper_right_x": self.upper_right_x,
|
|
39
|
+
"upper_right_y": self.upper_right_y,
|
|
40
|
+
"lower_left_x": self.lower_left_x,
|
|
41
|
+
"lower_left_y": self.lower_left_y,
|
|
42
|
+
"lower_right_x": self.lower_right_x,
|
|
43
|
+
"lower_right_y": self.lower_right_y
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
class VideoMaterial:
|
|
47
|
+
"""本地视频素材(视频或图片), 一份素材可以在多个片段中使用"""
|
|
48
|
+
|
|
49
|
+
material_id: str
|
|
50
|
+
"""素材全局id, 自动生成"""
|
|
51
|
+
local_material_id: str
|
|
52
|
+
"""素材本地id, 意义暂不明确"""
|
|
53
|
+
material_name: str
|
|
54
|
+
"""素材名称"""
|
|
55
|
+
path: str
|
|
56
|
+
"""素材文件路径"""
|
|
57
|
+
duration: int
|
|
58
|
+
"""素材时长, 单位为微秒"""
|
|
59
|
+
height: int
|
|
60
|
+
"""素材高度"""
|
|
61
|
+
width: int
|
|
62
|
+
"""素材宽度"""
|
|
63
|
+
crop_settings: CropSettings
|
|
64
|
+
"""素材裁剪设置"""
|
|
65
|
+
material_type: Literal["video", "photo"]
|
|
66
|
+
"""素材类型: 视频或图片"""
|
|
67
|
+
|
|
68
|
+
def __init__(self, path: str, material_name: Optional[str] = None, crop_settings: CropSettings = CropSettings()):
|
|
69
|
+
"""从指定位置加载视频(或图片)素材
|
|
70
|
+
|
|
71
|
+
Args:
|
|
72
|
+
path (`str`): 素材文件路径, 支持mp4, mov, avi等常见视频文件及jpg, jpeg, png等图片文件.
|
|
73
|
+
material_name (`str`, optional): 素材名称, 如果不指定, 默认使用文件名作为素材名称.
|
|
74
|
+
crop_settings (`CropSettings`, optional): 素材裁剪设置, 默认不裁剪.
|
|
75
|
+
|
|
76
|
+
Raises:
|
|
77
|
+
`FileNotFoundError`: 素材文件不存在.
|
|
78
|
+
`ValueError`: 不支持的素材文件类型.
|
|
79
|
+
"""
|
|
80
|
+
path = os.path.abspath(path)
|
|
81
|
+
postfix = os.path.splitext(path)[1]
|
|
82
|
+
if not os.path.exists(path):
|
|
83
|
+
raise FileNotFoundError(f"找不到 {path}")
|
|
84
|
+
|
|
85
|
+
self.material_name = material_name if material_name else os.path.basename(path)
|
|
86
|
+
self.material_id = uuid.uuid3(uuid.NAMESPACE_DNS, self.material_name).hex
|
|
87
|
+
self.path = path
|
|
88
|
+
self.crop_settings = crop_settings
|
|
89
|
+
self.local_material_id = ""
|
|
90
|
+
|
|
91
|
+
if not pymediainfo.MediaInfo.can_parse():
|
|
92
|
+
raise ValueError(f"不支持的视频素材类型 '{postfix}'")
|
|
93
|
+
|
|
94
|
+
info: pymediainfo.MediaInfo = \
|
|
95
|
+
pymediainfo.MediaInfo.parse(path, mediainfo_options={"File_TestContinuousFileNames": "0"}) # type: ignore
|
|
96
|
+
# 有视频轨道的视为视频素材
|
|
97
|
+
if len(info.video_tracks):
|
|
98
|
+
self.material_type = "video"
|
|
99
|
+
self.duration = int(info.video_tracks[0].duration * 1e3) # type: ignore
|
|
100
|
+
self.width, self.height = info.video_tracks[0].width, info.video_tracks[0].height # type: ignore
|
|
101
|
+
# gif文件使用imageio库获取长度
|
|
102
|
+
elif postfix.lower() == ".gif":
|
|
103
|
+
import imageio
|
|
104
|
+
gif = imageio.get_reader(path)
|
|
105
|
+
|
|
106
|
+
self.material_type = "video"
|
|
107
|
+
self.duration = int(round(gif.get_meta_data()['duration'] * gif.get_length() * 1e3))
|
|
108
|
+
self.width, self.height = info.image_tracks[0].width, info.image_tracks[0].height # type: ignore
|
|
109
|
+
gif.close()
|
|
110
|
+
elif len(info.image_tracks):
|
|
111
|
+
self.material_type = "photo"
|
|
112
|
+
self.duration = 10800000000 # 相当于3h
|
|
113
|
+
self.width, self.height = info.image_tracks[0].width, info.image_tracks[0].height # type: ignore
|
|
114
|
+
else:
|
|
115
|
+
raise ValueError(f"输入的素材文件 {path} 没有视频轨道或图片轨道")
|
|
116
|
+
|
|
117
|
+
def export_json(self) -> Dict[str, Any]:
|
|
118
|
+
video_material_json = {
|
|
119
|
+
"audio_fade": None,
|
|
120
|
+
"category_id": "",
|
|
121
|
+
"category_name": "local",
|
|
122
|
+
"check_flag": 63487,
|
|
123
|
+
"crop": self.crop_settings.export_json(),
|
|
124
|
+
"crop_ratio": "free",
|
|
125
|
+
"crop_scale": 1.0,
|
|
126
|
+
"duration": self.duration,
|
|
127
|
+
"height": self.height,
|
|
128
|
+
"id": self.material_id,
|
|
129
|
+
"local_material_id": self.local_material_id,
|
|
130
|
+
"material_id": self.material_id,
|
|
131
|
+
"material_name": self.material_name,
|
|
132
|
+
"media_path": "",
|
|
133
|
+
"path": self.path,
|
|
134
|
+
"type": self.material_type,
|
|
135
|
+
"width": self.width
|
|
136
|
+
}
|
|
137
|
+
return video_material_json
|
|
138
|
+
|
|
139
|
+
class AudioMaterial:
|
|
140
|
+
"""本地音频素材"""
|
|
141
|
+
|
|
142
|
+
material_id: str
|
|
143
|
+
"""素材全局id, 自动生成"""
|
|
144
|
+
material_name: str
|
|
145
|
+
"""素材名称"""
|
|
146
|
+
path: str
|
|
147
|
+
"""素材文件路径"""
|
|
148
|
+
|
|
149
|
+
duration: int
|
|
150
|
+
"""素材时长, 单位为微秒"""
|
|
151
|
+
|
|
152
|
+
def __init__(self, path: str, material_name: Optional[str] = None):
|
|
153
|
+
"""从指定位置加载音频素材, 注意视频文件不应该作为音频素材使用
|
|
154
|
+
|
|
155
|
+
Args:
|
|
156
|
+
path (`str`): 素材文件路径, 支持mp3, wav等常见音频文件.
|
|
157
|
+
material_name (`str`, optional): 素材名称, 如果不指定, 默认使用文件名作为素材名称.
|
|
158
|
+
|
|
159
|
+
Raises:
|
|
160
|
+
`FileNotFoundError`: 素材文件不存在.
|
|
161
|
+
`ValueError`: 不支持的素材文件类型.
|
|
162
|
+
"""
|
|
163
|
+
path = os.path.abspath(path)
|
|
164
|
+
if not os.path.exists(path):
|
|
165
|
+
raise FileNotFoundError(f"找不到 {path}")
|
|
166
|
+
|
|
167
|
+
self.material_name = material_name if material_name else os.path.basename(path)
|
|
168
|
+
self.material_id = uuid.uuid3(uuid.NAMESPACE_DNS, self.material_name).hex
|
|
169
|
+
self.path = path
|
|
170
|
+
|
|
171
|
+
if not pymediainfo.MediaInfo.can_parse():
|
|
172
|
+
raise ValueError("不支持的音频素材类型 %s" % os.path.splitext(path)[1])
|
|
173
|
+
info: pymediainfo.MediaInfo = pymediainfo.MediaInfo.parse(path) # type: ignore
|
|
174
|
+
if len(info.video_tracks):
|
|
175
|
+
raise ValueError("音频素材不应包含视频轨道")
|
|
176
|
+
if not len(info.audio_tracks):
|
|
177
|
+
raise ValueError(f"给定的素材文件 {path} 没有音频轨道")
|
|
178
|
+
self.duration = int(info.audio_tracks[0].duration * 1e3) # type: ignore
|
|
179
|
+
|
|
180
|
+
def export_json(self) -> Dict[str, Any]:
|
|
181
|
+
return {
|
|
182
|
+
"app_id": 0,
|
|
183
|
+
"category_id": "",
|
|
184
|
+
"category_name": "local",
|
|
185
|
+
"check_flag": 3,
|
|
186
|
+
"copyright_limit_type": "none",
|
|
187
|
+
"duration": self.duration,
|
|
188
|
+
"effect_id": "",
|
|
189
|
+
"formula_id": "",
|
|
190
|
+
"id": self.material_id,
|
|
191
|
+
"local_material_id": self.material_id,
|
|
192
|
+
"music_id": self.material_id,
|
|
193
|
+
"name": self.material_name,
|
|
194
|
+
"path": self.path,
|
|
195
|
+
"source_platform": 0,
|
|
196
|
+
"type": "extract_music",
|
|
197
|
+
"wave_points": []
|
|
198
|
+
}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
"""记录各种特效/音效/滤镜等的元数据"""
|
|
2
|
+
|
|
3
|
+
from .effect_meta import EffectMeta, EffectParamInstance
|
|
4
|
+
from .effect_meta import AnimationMeta
|
|
5
|
+
|
|
6
|
+
# 视频特效
|
|
7
|
+
from .video_scene_effect import VideoSceneEffectType
|
|
8
|
+
from .video_character_effect import VideoCharacterEffectType
|
|
9
|
+
|
|
10
|
+
# 视频动画
|
|
11
|
+
from .video_intro import IntroType
|
|
12
|
+
from .video_outro import OutroType
|
|
13
|
+
from .video_group_animation import GroupAnimationType
|
|
14
|
+
|
|
15
|
+
# 音频特效
|
|
16
|
+
from .audio_scene_effect import AudioSceneEffectType
|
|
17
|
+
from .tone_effect import ToneEffectType
|
|
18
|
+
from .speech_to_song import SpeechToSongType
|
|
19
|
+
|
|
20
|
+
# 文本动画
|
|
21
|
+
from .text_intro import TextIntro
|
|
22
|
+
from .text_outro import TextOutro
|
|
23
|
+
from .text_loop import TextLoopAnim
|
|
24
|
+
|
|
25
|
+
# 其它
|
|
26
|
+
from .font_meta import FontType
|
|
27
|
+
from .mask_meta import MaskType, MaskMeta
|
|
28
|
+
from .filter_meta import FilterType
|
|
29
|
+
from .transition_meta import TransitionType
|
|
30
|
+
|
|
31
|
+
__all__ = [
|
|
32
|
+
"AnimationMeta",
|
|
33
|
+
"EffectMeta",
|
|
34
|
+
"EffectParamInstance",
|
|
35
|
+
"MaskType",
|
|
36
|
+
"MaskMeta",
|
|
37
|
+
"FilterType",
|
|
38
|
+
"FontType",
|
|
39
|
+
"TransitionType",
|
|
40
|
+
"IntroType",
|
|
41
|
+
"OutroType",
|
|
42
|
+
"GroupAnimationType",
|
|
43
|
+
"TextIntro",
|
|
44
|
+
"TextOutro",
|
|
45
|
+
"TextLoopAnim",
|
|
46
|
+
"AudioSceneEffectType",
|
|
47
|
+
"ToneEffectType",
|
|
48
|
+
"SpeechToSongType",
|
|
49
|
+
"VideoSceneEffectType",
|
|
50
|
+
"VideoCharacterEffectType"
|
|
51
|
+
]
|
|
@@ -0,0 +1,252 @@
|
|
|
1
|
+
from .effect_meta import EffectEnum
|
|
2
|
+
from .effect_meta import EffectMeta, EffectParam
|
|
3
|
+
|
|
4
|
+
class AudioSceneEffectType(EffectEnum):
|
|
5
|
+
"""剪映自带的音频“场景音”效果类型"""
|
|
6
|
+
|
|
7
|
+
# 免费
|
|
8
|
+
_8bit = EffectMeta("8bit", False, "7161319747584266766", "5723961", "8d24238329ea5c250e33ae241d5adae2", [
|
|
9
|
+
EffectParam("change_voice_param_pitch_shift", 0.500, 0.000, 1.000),
|
|
10
|
+
EffectParam("change_voice_param_timbre", 1.000, 0.000, 1.000),
|
|
11
|
+
EffectParam("change_voice_param_strength", 1.000, 0.000, 1.000)])
|
|
12
|
+
"""参数:
|
|
13
|
+
- change_voice_param_pitch_shift: 默认0.50, 0.00 ~ 1.00
|
|
14
|
+
- change_voice_param_timbre: 默认1.00, 0.00 ~ 1.00
|
|
15
|
+
- change_voice_param_strength: 默认1.00, 0.00 ~ 1.00
|
|
16
|
+
"""
|
|
17
|
+
低保真 = EffectMeta("低保真", False, "7024390914537689614", "2672762", "7ddbd39a691a66a021f684cab756a89a", [
|
|
18
|
+
EffectParam("强弱", 1.000, 0.000, 1.000)])
|
|
19
|
+
"""参数:
|
|
20
|
+
- 强弱: 默认1.00, 0.00 ~ 1.00
|
|
21
|
+
"""
|
|
22
|
+
合成器 = EffectMeta("合成器", False, "7018011500577034759", "2672753", "394efea5922637bcd8288e0fb3c2372e", [
|
|
23
|
+
EffectParam("强弱", 1.000, 0.000, 1.000)])
|
|
24
|
+
"""参数:
|
|
25
|
+
- 强弱: 默认1.00, 0.00 ~ 1.00
|
|
26
|
+
"""
|
|
27
|
+
回音 = EffectMeta("回音", False, "7018011608408396325", "5723901", "5377f66109693f2d473df5ea6ec8f791", [
|
|
28
|
+
EffectParam("change_voice_param_quantity", 0.800, 0.000, 1.000),
|
|
29
|
+
EffectParam("change_voice_param_strength", 0.762, 0.000, 1.000)])
|
|
30
|
+
"""参数:
|
|
31
|
+
- change_voice_param_quantity: 默认0.80, 0.00 ~ 1.00
|
|
32
|
+
- change_voice_param_strength: 默认0.76, 0.00 ~ 1.00
|
|
33
|
+
"""
|
|
34
|
+
扩音器 = EffectMeta("扩音器", False, "7018011975514853924", "2672749", "13169f6ab9957ff005d316239bef0045", [
|
|
35
|
+
EffectParam("强弱", 1.000, 0.000, 1.000)])
|
|
36
|
+
"""参数:
|
|
37
|
+
- 强弱: 默认1.00, 0.00 ~ 1.00
|
|
38
|
+
"""
|
|
39
|
+
水下 = EffectMeta("水下", False, "7106404450444513806", "2673077", "53956694a8b68b2855faa2adc043b5b1", [
|
|
40
|
+
EffectParam("深度", 0.500, 0.000, 1.000)])
|
|
41
|
+
"""参数:
|
|
42
|
+
- 深度: 默认0.50, 0.00 ~ 1.00
|
|
43
|
+
"""
|
|
44
|
+
没电了 = EffectMeta("没电了", False, "7018012193769656845", "2672747", "87f91614bac060840ad5a57ef2b0c9ca", [
|
|
45
|
+
EffectParam("强弱", 1.000, 0.000, 1.000)])
|
|
46
|
+
"""参数:
|
|
47
|
+
- 强弱: 默认1.00, 0.00 ~ 1.00
|
|
48
|
+
"""
|
|
49
|
+
环绕音 = EffectMeta("环绕音", False, "7161319847819743780", "5723960", "fa9a4cb20d3488bf79e176571d5841f5", [
|
|
50
|
+
EffectParam("change_voice_param_center_position", 0.500, 0.000, 1.000),
|
|
51
|
+
EffectParam("change_voice_param_surrounding_frequency", 0.500, 0.000, 1.000)])
|
|
52
|
+
"""参数:
|
|
53
|
+
- change_voice_param_center_position: 默认0.50, 0.00 ~ 1.00
|
|
54
|
+
- change_voice_param_surrounding_frequency: 默认0.50, 0.00 ~ 1.00
|
|
55
|
+
"""
|
|
56
|
+
电音 = EffectMeta("电音", False, "7018011438379700773", "2672754", "d893a319d5175d9f09f70ddef1f79980", [
|
|
57
|
+
EffectParam("强弱", 1.000, 0.000, 1.000)])
|
|
58
|
+
"""参数:
|
|
59
|
+
- 强弱: 默认1.00, 0.00 ~ 1.00
|
|
60
|
+
"""
|
|
61
|
+
颤音 = EffectMeta("颤音", False, "7018011370289369637", "2672755", "c5e4874f83337e1cb9f8322fb843c901", [
|
|
62
|
+
EffectParam("频率", 0.714, 0.000, 1.000),
|
|
63
|
+
EffectParam("幅度", 0.905, 0.000, 1.000)])
|
|
64
|
+
"""参数:
|
|
65
|
+
- 频率: 默认0.71, 0.00 ~ 1.00
|
|
66
|
+
- 幅度: 默认0.91, 0.00 ~ 1.00
|
|
67
|
+
"""
|
|
68
|
+
麦霸 = EffectMeta("麦霸", False, "7018012141332468260", "2672748", "3eedef5ef82b32912203a1f4fb901182", [
|
|
69
|
+
EffectParam("空间大小", 0.052, 0.000, 1.000),
|
|
70
|
+
EffectParam("强弱", 0.450, 0.000, 1.000)])
|
|
71
|
+
"""参数:
|
|
72
|
+
- 空间大小: 默认0.05, 0.00 ~ 1.00
|
|
73
|
+
- 强弱: 默认0.45, 0.00 ~ 1.00
|
|
74
|
+
"""
|
|
75
|
+
黑胶 = EffectMeta("黑胶", False, "7024391411764040205", "2672761", "59e61d687a0f612bfae43bccf770f090", [
|
|
76
|
+
EffectParam("强弱", 1.000, 0.000, 1.000),
|
|
77
|
+
EffectParam("噪点", 0.743, 0.000, 1.000)])
|
|
78
|
+
"""参数:
|
|
79
|
+
- 强弱: 默认1.00, 0.00 ~ 1.00
|
|
80
|
+
- 噪点: 默认0.74, 0.00 ~ 1.00
|
|
81
|
+
"""
|
|
82
|
+
|
|
83
|
+
# 付费
|
|
84
|
+
_3d环绕音 = EffectMeta("3d环绕音", True, "7350214888242811455", "53187169", "577c3d8e5312012b1d98ba5fc0b206d0", [
|
|
85
|
+
EffectParam("强度", 0.000, 0.000, 1.000)])
|
|
86
|
+
"""参数:
|
|
87
|
+
- 强度: 默认0.00, 0.00 ~ 1.00
|
|
88
|
+
"""
|
|
89
|
+
Autotune = EffectMeta("Autotune", True, "7360900806851170828", "58979352", "1477f4ca8307e2fa4ee2243d98d8b837", [
|
|
90
|
+
EffectParam("强度", 1.000, 0.000, 1.000)])
|
|
91
|
+
"""参数:
|
|
92
|
+
- 强度: 默认1.00, 0.00 ~ 1.00
|
|
93
|
+
"""
|
|
94
|
+
下雨 = EffectMeta("下雨", True, "7375069649446113804", "68076030", "83bb223637d5368384c47e3d2b061b62", [
|
|
95
|
+
EffectParam("strength", 1.000, 0.000, 1.000),
|
|
96
|
+
EffectParam("noise", 0.743, 0.000, 1.000)])
|
|
97
|
+
"""参数:
|
|
98
|
+
- strength: 默认1.00, 0.00 ~ 1.00
|
|
99
|
+
- noise: 默认0.74, 0.00 ~ 1.00
|
|
100
|
+
"""
|
|
101
|
+
乡村大喇叭 = EffectMeta("乡村大喇叭", True, "7282691036197950009", "23897651", "c996243ac50d235f00e5931e5ecadc52", [
|
|
102
|
+
EffectParam("强度", 1.000, 0.000, 1.000)])
|
|
103
|
+
"""参数:
|
|
104
|
+
- 强度: 默认1.00, 0.00 ~ 1.00
|
|
105
|
+
"""
|
|
106
|
+
人声增强 = EffectMeta("人声增强", True, "7106404399756349983", "2673078", "626f988dbd2cbd17acaa24d08451e314", [
|
|
107
|
+
EffectParam("强弱", 1.000, 0.000, 1.000)])
|
|
108
|
+
"""参数:
|
|
109
|
+
- 强弱: 默认1.00, 0.00 ~ 1.00
|
|
110
|
+
"""
|
|
111
|
+
低音增强 = EffectMeta("低音增强", True, "7106404304247853604", "2673080", "e7c09c96d10c163269fc4e35c1f4b1ee", [
|
|
112
|
+
EffectParam("change_voice_param_strength", 1.000, 0.000, 1.000)])
|
|
113
|
+
"""参数:
|
|
114
|
+
- change_voice_param_strength: 默认1.00, 0.00 ~ 1.00
|
|
115
|
+
"""
|
|
116
|
+
停车场 = EffectMeta("停车场", True, "7372150242524795446", "66413024", "d2dd515293081a8573485159db5a71e0", [
|
|
117
|
+
EffectParam("strength", 1.000, 0.000, 1.000)])
|
|
118
|
+
"""参数:
|
|
119
|
+
- strength: 默认1.00, 0.00 ~ 1.00
|
|
120
|
+
"""
|
|
121
|
+
冰川之下 = EffectMeta("冰川之下", True, "7375068986829967883", "68076029", "6b9cda93f6d75b9a3b19b2e8eb6ad40f", [
|
|
122
|
+
EffectParam("strength", 1.000, 0.000, 1.000),
|
|
123
|
+
EffectParam("noise", 0.743, 0.000, 1.000)])
|
|
124
|
+
"""参数:
|
|
125
|
+
- strength: 默认1.00, 0.00 ~ 1.00
|
|
126
|
+
- noise: 默认0.74, 0.00 ~ 1.00
|
|
127
|
+
"""
|
|
128
|
+
刮风 = EffectMeta("刮风", True, "7375069247275274771", "68076028", "8600891882159f364d8c53e4f703cff4", [
|
|
129
|
+
EffectParam("strength", 1.000, 0.000, 1.000),
|
|
130
|
+
EffectParam("noise", 0.743, 0.000, 1.000)])
|
|
131
|
+
"""参数:
|
|
132
|
+
- strength: 默认1.00, 0.00 ~ 1.00
|
|
133
|
+
- noise: 默认0.74, 0.00 ~ 1.00
|
|
134
|
+
"""
|
|
135
|
+
噪音混响 = EffectMeta("噪音混响", True, "7382844688987853349", "72110975", "3b3b09b530b0a64666f1c5b6d20d4018", [
|
|
136
|
+
EffectParam("strength", 1.000, 0.000, 1.000)])
|
|
137
|
+
"""参数:
|
|
138
|
+
- strength: 默认1.00, 0.00 ~ 1.00
|
|
139
|
+
"""
|
|
140
|
+
地狱 = EffectMeta("地狱", True, "7375069113988682281", "68076027", "5ec03c41ada16530949daa4106c85a90", [
|
|
141
|
+
EffectParam("strength", 1.000, 0.000, 1.000),
|
|
142
|
+
EffectParam("noise", 0.743, 0.000, 1.000)])
|
|
143
|
+
"""参数:
|
|
144
|
+
- strength: 默认1.00, 0.00 ~ 1.00
|
|
145
|
+
- noise: 默认0.74, 0.00 ~ 1.00
|
|
146
|
+
"""
|
|
147
|
+
复古收音机 = EffectMeta("复古收音机", True, "7350215379714576907", "53187166", "301d642d131aabff7ea8c3b717b36a79", [
|
|
148
|
+
EffectParam("强度", 1.000, 0.000, 1.000)])
|
|
149
|
+
"""参数:
|
|
150
|
+
- 强度: 默认1.00, 0.00 ~ 1.00
|
|
151
|
+
"""
|
|
152
|
+
失真电子 = EffectMeta("失真电子", True, "7350215296801575443", "53187167", "a1c00df42076ed1bd6a81f2d30b94566", [
|
|
153
|
+
EffectParam("强度", 1.000, 0.000, 1.000)])
|
|
154
|
+
"""参数:
|
|
155
|
+
- 强度: 默认1.00, 0.00 ~ 1.00
|
|
156
|
+
"""
|
|
157
|
+
对讲机 = EffectMeta("对讲机", True, "7350214704284832275", "53187168", "016dbdb3c786896c92bb936ece11acf6", [
|
|
158
|
+
EffectParam("强度", 1.000, 0.000, 1.000)])
|
|
159
|
+
"""参数:
|
|
160
|
+
- 强度: 默认1.00, 0.00 ~ 1.00
|
|
161
|
+
"""
|
|
162
|
+
房间 = EffectMeta("房间", True, "7282691385872880165", "23880629", "639f5c0c6b20418aaeb0e144da21151c", [
|
|
163
|
+
EffectParam("强度", 1.000, 0.000, 1.000)])
|
|
164
|
+
"""参数:
|
|
165
|
+
- 强度: 默认1.00, 0.00 ~ 1.00
|
|
166
|
+
"""
|
|
167
|
+
捂嘴 = EffectMeta("捂嘴", True, "7372405649684042292", "66552320", "9f9a8270c0005a480547d6ddf2a9293a", [
|
|
168
|
+
EffectParam("strength", 1.000, 0.000, 1.000)])
|
|
169
|
+
"""参数:
|
|
170
|
+
- strength: 默认1.00, 0.00 ~ 1.00
|
|
171
|
+
"""
|
|
172
|
+
教堂 = EffectMeta("教堂", True, "7282691146759803429", "23882063", "96dc71756d0025e96a504b42d988b2ac", [
|
|
173
|
+
EffectParam("强度", 1.000, 0.000, 1.000)])
|
|
174
|
+
"""参数:
|
|
175
|
+
- 强度: 默认1.00, 0.00 ~ 1.00
|
|
176
|
+
"""
|
|
177
|
+
教室 = EffectMeta("教室", True, "7282687783833965113", "23897703", "678c14a6f63f75e03daa062a254081f7", [
|
|
178
|
+
EffectParam("强度", 1.000, 0.000, 1.000)])
|
|
179
|
+
"""参数:
|
|
180
|
+
- 强度: 默认1.00, 0.00 ~ 1.00
|
|
181
|
+
"""
|
|
182
|
+
机器人2 = EffectMeta("机器人2", True, "7372150541738054156", "66413023", "952f3feddf3555939adbbfd1c1869474", [
|
|
183
|
+
EffectParam("strength", 1.000, 0.000, 1.000)])
|
|
184
|
+
"""参数:
|
|
185
|
+
- strength: 默认1.00, 0.00 ~ 1.00
|
|
186
|
+
"""
|
|
187
|
+
沙漠 = EffectMeta("沙漠", True, "7375069515530375691", "68076025", "099c935428943c9c3662b15b35b1ee36", [
|
|
188
|
+
EffectParam("strength", 1.000, 0.000, 1.000),
|
|
189
|
+
EffectParam("noise", 0.743, 0.000, 1.000)])
|
|
190
|
+
"""参数:
|
|
191
|
+
- strength: 默认1.00, 0.00 ~ 1.00
|
|
192
|
+
- noise: 默认0.74, 0.00 ~ 1.00
|
|
193
|
+
"""
|
|
194
|
+
派对 = EffectMeta("派对", True, "7381685442795541042", "71718513", "723386ab87f938779a3369436234d903", [
|
|
195
|
+
EffectParam("strength", 1.000, 0.000, 1.000),
|
|
196
|
+
EffectParam("noise", 0.743, 0.000, 1.000)])
|
|
197
|
+
"""参数:
|
|
198
|
+
- strength: 默认1.00, 0.00 ~ 1.00
|
|
199
|
+
- noise: 默认0.74, 0.00 ~ 1.00
|
|
200
|
+
"""
|
|
201
|
+
深海回声 = EffectMeta("深海回声", True, "7350215168413929995", "53187172", "37a16a2dc77540b7d70fe301e482d4f2", [
|
|
202
|
+
EffectParam("强度", 1.000, 0.000, 1.000)])
|
|
203
|
+
"""参数:
|
|
204
|
+
- 强度: 默认1.00, 0.00 ~ 1.00
|
|
205
|
+
"""
|
|
206
|
+
电话 = EffectMeta("电话", True, "7264894634285863483", "20255003", "5da5a98b8c926c0dcc1c3c8bc3f3012f", [
|
|
207
|
+
EffectParam("强弱", 0.700, 0.000, 1.000)])
|
|
208
|
+
"""参数:
|
|
209
|
+
- 强弱: 默认0.70, 0.00 ~ 1.00
|
|
210
|
+
"""
|
|
211
|
+
留声机 = EffectMeta("留声机", True, "7282687663872676408", "23897797", "e692fae669650c948451b5811a04e7e6", [
|
|
212
|
+
EffectParam("强度", 1.000, 0.000, 1.000)])
|
|
213
|
+
"""参数:
|
|
214
|
+
- 强度: 默认1.00, 0.00 ~ 1.00
|
|
215
|
+
"""
|
|
216
|
+
百老汇 = EffectMeta("百老汇", True, "7372150379150053907", "66413025", "73e3a35496b9766d0400165844be72f1", [
|
|
217
|
+
EffectParam("strength", 1.000, 0.000, 1.000)])
|
|
218
|
+
"""参数:
|
|
219
|
+
- strength: 默认1.00, 0.00 ~ 1.00
|
|
220
|
+
"""
|
|
221
|
+
空灵感 = EffectMeta("空灵感", True, "7350215092975178252", "53187171", "aa1887a8b3375d20df6bf9438d62083a", [
|
|
222
|
+
EffectParam("强度", 1.000, 0.000, 1.000)])
|
|
223
|
+
"""参数:
|
|
224
|
+
- 强度: 默认1.00, 0.00 ~ 1.00
|
|
225
|
+
"""
|
|
226
|
+
空谷回声 = EffectMeta("空谷回声", True, "7350214991628210727", "53187170", "9913daa32167a17c1f41ad2f5596c411", [
|
|
227
|
+
EffectParam("强度", 1.000, 0.000, 1.000)])
|
|
228
|
+
"""参数:
|
|
229
|
+
- 强度: 默认1.00, 0.00 ~ 1.00
|
|
230
|
+
"""
|
|
231
|
+
老式电话 = EffectMeta("老式电话", True, "7282691476843139621", "23880011", "2eb835175e1e72e9d86b09bf513077cf", [
|
|
232
|
+
EffectParam("强度", 1.000, 0.000, 1.000)])
|
|
233
|
+
"""参数:
|
|
234
|
+
- 强度: 默认1.00, 0.00 ~ 1.00
|
|
235
|
+
"""
|
|
236
|
+
言灵术 = EffectMeta("言灵术", True, "7382844601435951653", "72110974", "7184386e75226a36942c60a5d5bb5618", [
|
|
237
|
+
EffectParam("strength", 1.000, 0.000, 1.000)])
|
|
238
|
+
"""参数:
|
|
239
|
+
- strength: 默认1.00, 0.00 ~ 1.00
|
|
240
|
+
"""
|
|
241
|
+
豪宅回声 = EffectMeta("豪宅回声", True, "7360900963294515775", "58979353", "7c20b5fba991f3188f14d7cdb0de1fa1", [
|
|
242
|
+
EffectParam("强度", 1.000, 0.000, 1.000)])
|
|
243
|
+
"""参数:
|
|
244
|
+
- 强度: 默认1.00, 0.00 ~ 1.00
|
|
245
|
+
"""
|
|
246
|
+
迷幻电子 = EffectMeta("迷幻电子", True, "7375069381769826879", "68076026", "ce220d25a6f95bd31a81f6421bbf2525", [
|
|
247
|
+
EffectParam("strength", 1.000, 0.000, 1.000),
|
|
248
|
+
EffectParam("noise", 0.743, 0.000, 1.000)])
|
|
249
|
+
"""参数:
|
|
250
|
+
- strength: 默认1.00, 0.00 ~ 1.00
|
|
251
|
+
- noise: 默认0.74, 0.00 ~ 1.00
|
|
252
|
+
"""
|