shot-list-skill

star 2

口播稿转分镜清单技能。将口播稿转化为可执行的 JSON 分镜清单,输出符合 Seedream/Seedance/FFmpeg/Azure TTS API 规范的参数。

Ddhjx-code By Ddhjx-code schedule Updated 2/27/2026

name: shot-list-skill description: 口播稿转分镜清单技能。将任意口播稿转化为可执行的 JSON 分镜清单,输出符合 Seedream/Seedance/FFmpeg/Azure TTS API 规范的参数。


口播稿转分镜清单技能(通用版)

[技能说明] 将任意口播稿转化为分镜执行清单(shot-list.json),输出符合 Seedream/Seedance/FFmpeg/Azure TTS API 规范的可执行参数。

核心特性

  • 通用性:不依赖特定内容模板,适用于任何类型的口播稿
  • 动态提取:从口播稿中自动提取时间、人物、地点、事件等信息
  • 智能分段:根据文本结构和长度自动生成合理镜头序列
  • 一致性保障:自动处理人物和场景的视觉连贯性

[约束条件]

  • 单个视频时长:1-15 秒(Seedance 硬性限制)
  • 图像分辨率:1920x1080(16:9 横屏)
  • 视频分辨率:1080p
  • 输出格式:JSON
  • 旁白文本长度限制:≤ 1024 字符(Azure TTS text 字段硬性限制)
  • 旁白文本应保留口播稿原始内容,尽量不精简
  • 长旁白通过拆分为多个镜头来适配(每镜头 ≤ 15秒)

[文件结构] shot-list-skill/ ├── SKILL.md # 本文件 ├── api-spec.md # API 规范(包含核心设计原则) ├── core/ # 核心模块 │ ├── script-parser-rules.md # 口播稿解析规则 │ ├── shot-generation-rules.md # 镜头生成规则 │ ├── prompt-generation-rules.md # Prompt生成规则 │ ├── continuity-rules.md # 连贯性规则 │ └── data-structures.md # 数据结构定义 └── templates/ └── shot-list-template.md # 输出模板


工作流程

整体流程图

口播稿输入
    ↓
[阶段1:脚本解析]
    ├─ 提取段落结构(开场、章节、结尾)
    ├─ 提取时间信息(年份、朝代、时代)
    ├─ 提取人物信息(姓名、身份、动作)
    ├─ 提取地点信息(地名、场景描述)
    └─ 提取事件信息(核心事件、描述)
    ↓
[阶段2:分段处理]
    ├─ 为每个段落确定镜头类型
    │   ├─ 开场/结尾 → title_card
    │   ├─ 章节标题 → title_card
    │   ├─ 过渡/抽象概念 → transition
    │   └─ 具体内容 → content_scene
    └─ 计算每个段落的镜头数量(基于文本长度)
    ↓
[阶段3:镜头生成]
    ├─ 为每个镜头分配时长(≤15秒)
    ├─ 生成时间码(连续无断裂)
    └─ 确定镜头类型(title_card/transition/content_scene)
    ↓
[阶段4:Prompt生成]
    ├─ title_card:标题 + 装饰元素
    ├─ transition:抽象概念的具体化描述
    └─ content_scene:具体场景的视觉描述
    ↓
[阶段5:一致性处理]
    ├─ 为同一人物分配 character_id
    ├─ 建立人物引用链(reference_image)
    ├─ 为同一场景保持视觉特征
    └─ 设置 seed 参数确保可复现
    ↓
[阶段6:参数生成]
    ├─ 生成图像参数(prompt、size、seed、reference_image)
    ├─ 生成视频参数(tool、effect、depends_on)
    ├─ 生成音频参数(voice、ssml、text)
    └─ 生成转场参数(type、duration)
    ↓
输出 shot-list.json

详细规则

阶段1:脚本解析规则

参考:core/script-parser-rules.md

目标:从口播稿中提取结构化信息

提取内容

  1. 段落结构:识别开场白、章节标题、结尾语
  2. 时间信息:年份、朝代、时代描述
  3. 人物信息:姓名、身份、动作描述
  4. 地点信息:地名、场景类型、环境描述
  5. 事件信息:核心事件、事件描述

提取方法

  • 使用正则表达式匹配时间模式(如"公元XXX年"、"XXX朝"、"XXX时代")
  • 使用上下文分析识别人物和地点
  • 保留原始文本作为旁白内容

阶段2:分段处理规则

参考:core/shot-generation-rules.md

目标:将口播稿段落转换为镜头序列

镜头类型判断

段落类型 镜头类型 说明
开场白 title_card + transition 节目标题 + 时光隧道效果
章节标题 title_card 章节标题卡
过渡段落 transition 抽象概念、时间跨越
具体事件 content_scene 具体历史场景、事件描述
结尾语 title_card + transition 感谢语 + 历史回顾

镜头数量计算

  • 基于文本长度和阅读速度(约 3-4 字/秒)
  • 每个镜头时长 5-15 秒
  • 长段落自动拆分为多个镜头

阶段3:镜头生成规则

时长分配原则

  • 标题卡:6-10 秒
  • 转场镜头:8-12 秒
  • 内容镜头:10-15 秒
  • 结尾镜头:12-15 秒

时间码计算

  • 从 00:00 开始
  • 累加每个镜头的 duration
  • 格式:MM:SS-MM:SS

镜头编号

  • 格式:shot_001, shot_002, ...
  • 连续无断裂
  • 按时间顺序排列

阶段4:Prompt生成与优化

参考:core/prompt-generation-rules.md

步骤4.1:生成 Prompt

  • title_card:标题 + 装饰元素
  • transition:抽象概念的具体化描述
  • content_scene:具体场景的视觉描述

步骤4.2:判断 needs_text

  • title_card:needs_text = true
  • transition/content_scene:检查是否包含文字指示词(标题、年份、标记等)

步骤4.3:选择模型

  • needs_text = true:使用 doubao-seedream-4.5
  • needs_text = false:使用 doubao-seedream-3.0

步骤4.4:过滤敏感词

  • 过滤词汇:革命、台湾、共产党、苏维埃、共产主义
  • 替换为:**
  • 确保所有 prompt 都经过过滤

步骤4.5:设置参数

  • 设置 needs_text 字段
  • 设置 model 字段
  • 设置其他参数(size、seed、reference_image)

通用Prompt模板

1. 标题卡 Prompt

[视觉风格],[标题内容]。
[装饰元素描述],[背景描述]。
电影质感,16:9横屏,[整体氛围]。

示例

历史纪录片风格,标题卡片"历史上的今天"。
金色边框装饰,中央大字标题,下方副标题"2026年2月25日"。
背景是历史时光隧道效果,展现从古代到现代的时间流动。
电影质感,16:9横屏,庄重大气。

2. 转场镜头 Prompt

[视觉风格],[抽象概念的具体化描述]。
[具体元素列举],[视觉细节]。
电影质感,16:9横屏,[整体氛围]。

关键原则

  • 将抽象概念转化为具体的视觉元素
  • 列举关键的时间点、事件、场景
  • 使用连接词建立视觉联系

示例

历史纪录片风格,横向时间轴画面。
背景是深邃的宇宙星空。时间轴从左到右延伸,标记了公元138年(罗马帝国)、628年(波斯萨珊)、645年(玄奘取经)、1836年(左轮手枪)、1901年(美国钢铁)、1921年(苏联扩张)、1961年(科威特独立)、1980年(苏里南**)、2026年(中国外交部)。每个年份用金色光点标记,金色光芒连接各个光点。
电影质感,16:9横屏,宏大史诗感。

3. 内容场景 Prompt

[视觉风格],[时代描述]。
[人物描述],[人物动作],[场景环境]。
[光影氛围],[色调描述]。
电影质感,16:9横屏,[整体氛围]。

示例

历史纪录片风格,古罗马帝国时代。
哈德良皇帝身着紫色镶边托加长袍,头戴橄榄枝冠冕,坐在大理石宝座上。宫廷内罗马柱林立,马赛克地板,墙上挂着罗马鹰旗。温暖的地中海阳光从高窗射入,形成戏剧性光影。
电影质感,16:9横屏,庄严肃穆。

阶段5:一致性处理规则

参考:core/continuity-rules.md

人物一致性

  1. 为同一人物分配相同的 character_id
  2. 后续镜头使用 reference_image 指向前一个镜头
  3. 使用 seed 参数确保人物外观可复现

场景一致性

  1. 同一地点保持相似的视觉描述
  2. 使用 reference_image 传递场景特征
  3. 保持光线、色调、氛围的一致性

引用链建立

shot_001: character_id = "person_a", reference_image = null
shot_002: character_id = "person_a", reference_image = "shot_001.png"
shot_003: character_id = "person_a", reference_image = "shot_002.png"

阶段6:参数生成规则

图像参数

  • tool: "seedream"
  • model: "doubao-seedream-4.5"
  • prompt: [阶段4生成的prompt]
  • size: "1920x1080"
  • n: 1
  • seed: [人物ID的哈希值,确保可复现]
  • reference_image: [前置镜头的图像路径]

视频参数

  • tool: "seedance" 或 "ffmpeg"
    • 核心场景使用 "seedance"
    • 标题卡和转场使用 "ffmpeg"
  • effect: "zoom_in", "pan_left", "dissolve" 等
  • depends_on: ["tasks.image"]
  • parameters:
    • Seedance: resolution: "1080p", motion_prompt
    • FFmpeg: input_image, duration, zoom_start, zoom_end, fps

音频参数

  • tool: "azure_tts"
  • voice: "zh-CN-XiaoxiaoNeural" 或 "zh-CN-YunxiNeural"
  • ssml: [SSML格式的旁白文本]
  • text: [原始旁白文本]

转场参数

  • type: "dissolve", "fade", "wipe" 等
  • duration: 0.5-1.5 秒

成本优化策略

采用 Seedance + FFmpeg 混合方案降低成本:

镜头类型 视频工具 成本 适用场景
title_card ffmpeg 免费 标题卡、章节标题
transition ffmpeg 免费 转场、抽象概念
content_scene seedance ~1元/5秒 核心历史场景

成本估算

  • 假设 10 分钟口播稿
  • 标题卡:约 5 个(免费)
  • 转场镜头:约 10 个(免费)
  • 内容场景:约 15-20 个(15-25元)
  • 总成本:约 15-25 元

API 规范

详细的 API 参数规范请参考 api-spec.md


模板参考

shot-list.json 的模板请参考 templates/shot-list-template.md


常见问题

Q1:如何处理口播稿中没有明确描述的场景?

A:使用通用的视觉描述,例如"历史场景"、"抽象概念"等,结合口播稿中的时间信息构建合理的画面。

Q2:如何确保历史准确性?

A:从口播稿中提取准确的时间、人物、地点信息,在 prompt 中直接使用这些信息,不添加未经证实的细节。

Q3:如何处理非常长的口播稿?

A:自动拆分为多个镜头,每个镜头时长控制在 15 秒以内,确保流畅观看体验。

Q4:如何处理不同类型的口播稿?

A:本技能采用通用化设计,适用于历史、科普、故事、新闻等各类口播稿,不依赖特定模板。


更新日志

v3.0 (2026-02-27) - 全面重构

  • 移除 Beat Board/Sequence Board 分层流程
  • 建立通用化脚本解析和镜头生成规则
  • 移除静态历史特征库,改为动态提取
  • 简化工作流程,提升通用性

v2.1 - 添加历史特征库和智能Prompt生成 v2.0 - 分层渐进式分镜系统(Beat Board + Sequence Board) v1.0 - 初始版本

Install via CLI
npx skills add https://github.com/Ddhjx-code/historyAgent --skill shot-list-skill
Repository Details
star Stars 2
call_split Forks 0
navigation Branch main
article Path SKILL.md
More from Creator