统一转场时长的处理方式。

This commit is contained in:
Hommy
2026-07-20 13:21:56 +08:00
parent 0dc6282ce7
commit 74c6183fe8
2 changed files with 15 additions and 18 deletions
+6 -9
View File
@@ -59,7 +59,7 @@ def add_images(
"out_animation_duration": "", // [可选] 出场动画时长(微秒)
"loop_animation_duration": "", // [可选] 循环动画时长(微秒)
"transition": "", // [可选] 转场效果类型
"transition_duration": 500000 // [可选] 转场效果时长(微秒,范围100000-2500000)
"transition_duration": "" // [可选] 转场时长(微秒),未指定则用转场类型默认时长
}
]
alpha: 全局透明度[0, 1],默认值为1.0
@@ -432,8 +432,10 @@ def add_image_to_draft(
if transition_enum:
transition_duration = image.get('transition_duration')
if transition_duration is not None:
if transition_duration is not None and transition_duration != "":
transition_duration = int(transition_duration)
else:
transition_duration = None
video_segment.add_transition(transition_enum, duration=transition_duration)
logger.info(f"Successfully added transition '{image['transition']}' to image segment")
else:
@@ -526,7 +528,7 @@ def parse_image_data(json_str: str) -> List[Dict[str, Any]]:
"out_animation_duration": "", // [可选] 出场动画时长(微秒)
"loop_animation_duration": "", // [可选] 循环动画时长(微秒)
"transition": "", // [可选] 转场效果类型
"transition_duration": 500000 // [可选] 转场效果时长(微秒,范围100000-2500000)
"transition_duration": "" // [可选] 转场时长(微秒),未指定则用转场类型默认时长
}
]
@@ -584,7 +586,7 @@ def parse_image_data(json_str: str) -> List[Dict[str, Any]]:
"out_animation_duration": item.get("out_animation_duration", None), # 默认无出场动画时长
"loop_animation_duration": item.get("loop_animation_duration", None), # 默认无循环动画时长
"transition": item.get("transition", None), # 默认无转场
"transition_duration": item.get("transition_duration", 500000) # 默认转场时长500000微秒
"transition_duration": item.get("transition_duration", None), # 默认转场类型自身时长
}
# 验证数值范围(仅校验显式传入的尺寸)
@@ -614,11 +616,6 @@ def parse_image_data(json_str: str) -> List[Dict[str, Any]]:
)
raise CustomException(CustomError.INVALID_IMAGE_INFO, f"the {i}th item has invalid end time")
# 验证转场时长范围
if processed_item["transition_duration"] < 100000 or processed_item["transition_duration"] > 2500000:
logger.warning(f"Transition duration {processed_item['transition_duration']} out of range [100000, 2500000], using default 500000")
processed_item["transition_duration"] = 500000
result.append(processed_item)
logger.debug(f"Processed image item {i+1}: {processed_item}")
+9 -9
View File
@@ -55,7 +55,7 @@ def add_videos(
"duration": 12000000.0, // [可选] 视频总时长 (微秒),如果不传则默认为 end-start
"mask": "", // 遮罩类型 [可选],默认值为 None
"transition": "", // 转场效果名称 [可选],默认值为 None
"transition_duration": 500000.0, // 转场持续时间 (微秒)[可选],默认值为 500000
"transition_duration": "", // [可选] 转场时长(微秒),未指定则用转场类型默认时长
"volume": 1.0, // 音量大小 [0, 10][可选],默认值为 1.0,10 为最大音量
}
] // [必选]
@@ -463,7 +463,11 @@ def add_video_to_draft(
if transition_name:
transition_type = find_transition_type_by_name(transition_name)
if transition_type:
transition_duration = video.get('transition_duration', 500000) # 默认500ms
transition_duration = video.get('transition_duration')
if transition_duration is not None and transition_duration != "":
transition_duration = int(transition_duration)
else:
transition_duration = None
try:
video_segment.add_transition(transition_type, duration=transition_duration)
logger.info(f"Added transition '{transition_name}' with duration {transition_duration}us")
@@ -526,7 +530,7 @@ def parse_video_data(json_str: str) -> List[Dict[str, Any]]:
"duration": 12000000.0, // [可选] 视频总时长(微秒),如果不传则默认为end-start
"mask": "", // 遮罩类型[可选],默认值为None
"transition": "", // 转场效果名称[可选],默认值为None
"transition_duration": 500000.0, // 转场持续时间(微秒)[可选],默认值为500000
"transition_duration": "", // [可选] 转场时长(微秒),未指定则用转场类型默认时长
"volume": 1.0, // 音量大小[0, 10][可选],默认值为1.0,10为最大音量
}
]
@@ -591,8 +595,8 @@ def parse_video_data(json_str: str) -> List[Dict[str, Any]]:
"duration": duration,
"mask": item.get("mask", None), # 默认值 None
"transition": item.get("transition", None), # 默认值 None
"transition_duration": item.get("transition_duration", 500000), # 默认值 500000
"volume": item.get("volume", 1.0) # 默认值 1.0
"transition_duration": item.get("transition_duration", None), # 默认用转场类型自身时长
"volume": 1.0 if item.get("volume") is None else item.get("volume"),
}
# 验证数值范围:用户传入范围 [0, 10],超范围时给默认值
@@ -600,10 +604,6 @@ def parse_video_data(json_str: str) -> List[Dict[str, Any]]:
logger.warning(f"Volume {processed_item['volume']} out of range [0, 10], using default 1.0")
processed_item["volume"] = 1.0
if processed_item["transition_duration"] < 0:
# 转场持续时间必须为非负数,给默认值
processed_item["transition_duration"] = 500000
result.append(processed_item)
return result