mirror of
https://github.com/sun-guannan/CapCutAPI.git
synced 2025-11-25 03:15:00 +08:00
87 lines
3.0 KiB
Python
87 lines
3.0 KiB
Python
import pyJianYingDraft as draft
|
||
from pyJianYingDraft import trange
|
||
from typing import Optional, Dict
|
||
from pyJianYingDraft import exceptions
|
||
from create_draft import get_or_create_draft
|
||
from util import generate_draft_url
|
||
|
||
def add_sticker_impl(
|
||
resource_id: str,
|
||
start: float,
|
||
end: float,
|
||
draft_id: str = None,
|
||
transform_y: float = 0,
|
||
transform_x: float = 0,
|
||
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,
|
||
track_name: str = "sticker_main",
|
||
relative_index: int = 0,
|
||
width: int = 1080,
|
||
height: int = 1920
|
||
) -> Dict[str, str]:
|
||
"""
|
||
向指定草稿添加贴纸
|
||
:param resource_id: 贴纸资源ID
|
||
:param start: 开始时间(秒)
|
||
:param end: 结束时间(秒)
|
||
:param draft_id: 草稿ID(可选,默认None则创建新草稿)
|
||
:param transform_y: Y轴位置(默认0,屏幕中间)
|
||
:param transform_x: X轴位置(默认0,屏幕中间)
|
||
:param alpha: 图像不透明度,范围0-1(默认1.0,完全不透明)
|
||
:param flip_horizontal: 是否水平翻转(默认False)
|
||
:param flip_vertical: 是否垂直翻转(默认False)
|
||
:param rotation: 顺时针旋转的角度,可正可负(默认0.0)
|
||
:param scale_x: 水平缩放比例(默认1.0)
|
||
:param scale_y: 垂直缩放比例(默认1.0)
|
||
:param track_name: 轨道名称
|
||
:param relative_index: 相对(同类型轨道的)图层位置,越高越接近前景(默认0)
|
||
:param width: 视频宽度,默认1080
|
||
:param height: 视频高度,默认1920
|
||
:return: 更新后的草稿信息
|
||
"""
|
||
# 获取或创建草稿
|
||
draft_id, script = get_or_create_draft(
|
||
draft_id=draft_id,
|
||
width=width,
|
||
height=height
|
||
)
|
||
|
||
# 添加贴纸轨道
|
||
if track_name is not None:
|
||
try:
|
||
imported_track = script.get_imported_track(draft.Track_type.sticker, name=track_name)
|
||
# 如果没有抛出异常,说明轨道已存在
|
||
except exceptions.TrackNotFound:
|
||
# 轨道不存在,创建新轨道
|
||
script.add_track(draft.Track_type.sticker, track_name=track_name, relative_index=relative_index)
|
||
else:
|
||
script.add_track(draft.Track_type.sticker, relative_index=relative_index)
|
||
|
||
# 创建贴纸片段
|
||
sticker_segment = draft.Sticker_segment(
|
||
resource_id,
|
||
trange(f"{start}s", f"{end-start}s"),
|
||
clip_settings=draft.Clip_settings(
|
||
transform_y=transform_y,
|
||
transform_x=transform_x,
|
||
alpha=alpha,
|
||
flip_horizontal=flip_horizontal,
|
||
flip_vertical=flip_vertical,
|
||
rotation=rotation,
|
||
scale_x=scale_x,
|
||
scale_y=scale_y
|
||
)
|
||
)
|
||
|
||
# 添加贴纸片段到轨道
|
||
script.add_segment(sticker_segment, track_name=track_name)
|
||
|
||
return {
|
||
"draft_id": draft_id,
|
||
"draft_url": generate_draft_url(draft_id)
|
||
}
|