Spaces:
Running
Running
""" | |
合并生成最终脚本 | |
""" | |
import os | |
import json | |
from typing import List, Dict, Tuple | |
def merge_script( | |
plot_points: List[Dict], | |
output_path: str | |
): | |
"""合并生成最终脚本 | |
Args: | |
plot_points: 校对后的剧情点 | |
output_path: 输出文件路径,如果提供则保存到文件 | |
Returns: | |
str: 最终合并的脚本 | |
""" | |
def parse_timestamp(ts: str) -> Tuple[float, float]: | |
"""解析时间戳,返回开始和结束时间(秒)""" | |
start, end = ts.split('-') | |
def parse_time(time_str: str) -> float: | |
time_str = time_str.strip() | |
if ',' in time_str: | |
time_parts, ms_parts = time_str.split(',') | |
ms = float(ms_parts) / 1000 | |
else: | |
time_parts = time_str | |
ms = 0 | |
hours, minutes, seconds = map(int, time_parts.split(':')) | |
return hours * 3600 + minutes * 60 + seconds + ms | |
return parse_time(start), parse_time(end) | |
def format_timestamp(seconds: float) -> str: | |
"""将秒数转换为时间戳格式 HH:MM:SS""" | |
hours = int(seconds // 3600) | |
minutes = int((seconds % 3600) // 60) | |
secs = int(seconds % 60) | |
return f"{hours:02d}:{minutes:02d}:{secs:02d}" | |
# 创建包含所有信息的临时列表 | |
final_script = [] | |
# 处理原生画面条目 | |
number = 1 | |
for plot_point in plot_points: | |
start, end = parse_timestamp(plot_point["timestamp"]) | |
script_item = { | |
"_id": number, | |
"timestamp": plot_point["timestamp"], | |
"picture": plot_point["picture"], | |
"narration": f"播放原生_{os.urandom(4).hex()}", | |
"OST": 1, # OST=0 仅保留解说 OST=2 保留解说和原声 | |
} | |
final_script.append(script_item) | |
number += 1 | |
# 保存结果 | |
with open(output_path, 'w', encoding='utf-8') as f: | |
json.dump(final_script, f, ensure_ascii=False, indent=4) | |
print(f"脚本生成完成:{output_path}") | |
return final_script | |