#!/usr/bin/env python
# -*- coding: UTF-8 -*-
"""
@Project: 短剧混剪-剪辑脚本生成
@File : script_generation.py
@Description: 基于剧情理解和字幕直接生成短剧混剪脚本
"""
from ..base import ParameterizedPrompt, PromptMetadata, ModelType, OutputFormat
class ScriptGenerationPrompt(ParameterizedPrompt):
"""短剧混剪脚本生成提示词"""
def __init__(self):
metadata = PromptMetadata(
name="script_generation",
category="short_drama_editing",
version="v1.0",
description="基于剧情理解和原始字幕直接生成短剧混剪脚本,不生成解说文案",
model_type=ModelType.TEXT,
output_format=OutputFormat.JSON,
tags=["短剧", "混剪", "剪辑脚本", "时间戳", "多视频", "原声"],
parameters=[
"drama_name",
"drama_genre",
"plot_analysis",
"subtitle_content",
"custom_clips",
],
)
super().__init__(
metadata,
required_parameters=["plot_analysis", "subtitle_content", "custom_clips"],
)
self._system_prompt = (
"你是一名专业短剧混剪剪辑师。你必须严格输出JSON,"
"只从字幕中选择真实存在的可剪辑原声片段,不生成解说文案。"
)
def get_template(self) -> str:
return """# 短剧混剪脚本生成任务
## 目标
根据剧情理解和原始字幕,为短剧《${drama_name}》生成一份可直接裁剪的混剪 JSON 脚本。
短剧混剪与短剧解说的区别:
- 不生成解说文案。
- 不需要用户审核旁白。
- 直接从剧情理解中选择能串成故事线的原片片段。
- 每个片段默认保留原声,OST 必须为 1。
## 用户选择的短剧类型
${drama_genre}
## 需要生成的片段数量
${custom_clips}
## 剧情理解材料
${plot_analysis}
## 原始字幕(含视频编号和局部时间戳)
${subtitle_content}
## 选择原则
1. 选择 ${custom_clips} 个片段,尽量形成“开端 -> 冲突升级 -> 高潮/反转 -> 悬念或阶段结果”的完整观看路径。
2. 只能使用原始字幕中真实存在的视频编号、视频文件名和时间范围。
3. timestamp 必须是对应 video_id 内部的局部时间戳,格式为 "HH:MM:SS,mmm-HH:MM:SS,mmm"。
4. 同一个 video_id 内的片段不得交叉或重叠;整体顺序要服务剧情理解,单个视频内尽量按时间顺序。
5. 优先选择关键对白、身份揭露、情绪爆发、反转、冲突升级和能看懂前因后果的片段。
6. 单个片段建议 5-45 秒;不要只截 1-2 秒的孤立金句,也不要截过长的流水账。
7. 如果两个关键剧情之间跳跃太大,优先选择包含上下文的连续时间段,而不是硬切爆点。
8. picture 要描述画面中人物、动作、情绪、场景和该片段的剧情作用。
9. narration 字段必须写成“播放原片+_id”,例如 _id 为 3 时写“播放原片3”。
10. OST 必须为 1,表示保留原片原声。
## 字段规则
- _id:从 1 开始连续递增。
- video_id:来自字幕分段标题,例如“视频 2”就填 2;单视频填 1。
- video_name:对应视频文件名,必须从字幕分段标题提取;单视频也要填写。
- timestamp:必须来自对应视频字幕时间轴。
- picture:非空字符串。
- narration:固定为“播放原片+_id”。
- OST:固定为 1。
## 输出格式
只输出严格 JSON:
{
"items": [
{
"_id": 1,
"video_id": 1,
"video_name": "1.mp4",
"timestamp": "00:00:01,000-00:00:12,500",
"picture": "女主被当众羞辱仍然强撑,冲突正式爆发,为后续逆袭埋下情绪钩子",
"narration": "播放原片1",
"OST": 1
}
]
}
现在请生成短剧混剪脚本。"""