跳到正文

AI 短剧分集剧本

围绕单集目标与因果节奏编写可供后续分镜使用的短剧剧本。

开源精选视频内容23 个文件2,909 Stars浏览次数 0zenstory-ai/drama-skills MIT版本 f53fb20
开始使用

下载前阅读 SKILL.md 中的使用条件,并确认所用工具支持对应能力。

输入资料
故事设定与分集目标 角色和当前剧情 阅读本节完整说明
交付内容
分集剧本 后续制作所需的剧情事实 阅读本节完整说明
环境与依赖
只有安装、升级或排障时运行 python3 scripts/selftest.py。 阅读本节完整说明
  1. 获取完整包,保留配套文件的目录结构。
  2. 按照原文准备所需工具、依赖与输入资料。
  3. 阅读对应使用步骤与输入输出说明,在自己的环境中验证结果。

使用提示摘自原文,配套文件保留来源版本;实际运行条件以各包说明为准。

正文

获取原文件

assets/voice-record-sheet.jsonl.md

每行一条待录台词。这份表是剧本的投影,不是第二份台词权威:line_text 必须逐字 等于 source_ref 指向的剧本块,需要改词就改剧本再重新投影,不在这里改。示例值不是 默认答案;不适用的字段删掉,不要添加媒体任务、供应商或接口。

录音的顺序几乎从不是剧情顺序——通常按人物集中录,所以配音者失去的正是上下文。 本表存在的理由就是把上下文补回去:他此刻知道什么、对谁说、上一句是谁说的、这一句要 达成什么。缺了这些,剩下的只是一串没有处境的句子。

第一行声明本表引用的上游快照,一个快照只写一次:

{"record_type": "sources", "schema_version": "1.0.0", "sources": {"screenplay-index": {"owner": "short-drama-write", "artifact": "剧集/EP001/screenplay-index.jsonl"}}}

其后每行一条待录台词,source_ref 用 src 指向上面声明的快照,加 record_id 指向其中的剧本块:

{
  "line_id": "VLINE-EP001-SC001-003",
  "episode_id": "EP001",
  "scene_id": "EP001-SC001",
  "speaker": "CHAR-<id>",
  "speaker_display": "<剧本里逐字写的那个名字>",
  "line_text": "<逐字等于剧本块原文的冒号之后部分>",
  "source_ref": {
    "src": "screenplay-index",
    "record_id": "BLK-EP001-SC001-D03"
  },
  "channel": "sync | dubbed | VO | OS",
  "lip_sync_constrained": true,
  "addressed_to": ["CHAR-<id>"],
  "preceding_line_id": "VLINE-EP001-SC001-002",
  "speaker_knows_now": "<此刻他知道什么、还不知道什么>",
  "tactic": "<质问 | 试探 | 收回 | 交换 | 拖延……:这一句要达成什么>",
  "pronunciation_notes": [
    {
      "surface": "<多音字、生僻字、专名或数字>",
      "reading": "<确定读法>",
      "decided_by": "creator | <role>:<stable-id>"
    }
  ],
  "target_seconds": null,
  "unresolved": []
}

字段为什么是这些

字段 不写会怎样
source_ref 剧本改一句而表没跟上,录出来的是旧词;绑定了块 ID 才能切出剧本原字节逐字比对
speaker 与 speaker_display 前者是资产身份用于绑定,后者是剧本里逐字写的名字;只留一个就必然有一处对不上
channel 与 lip_sync_constrained 同期与配音、画内与 VO 的可改余地完全不同,混在一起就只能按最严的来。channel 必须与它投影的块一致:[VO] / [OS] 块只能记为同名声道或 dubbed,画内对白块不能记成 VO/OS——校验器判定,诊断码 VOICE_CHANNEL_DISAGREES_WITH_BLOCK
addressed_to / preceding_line_id 集中录制时配音者不知道在对谁说、接谁的话,语气只能靠猜
speaker_knows_now 同一句话在"已经知道"和"还不知道"下是两种读法,这是最常见的重录原因
tactic 情绪词("愤怒")不可执行;策略可执行。见对白工艺的策略库
pronunciation_notes 专名与多音字在录音棚里是最贵的中断;决定要在进棚前做完并留痕
target_seconds 有画面时长约束的行要提前知道,不要在混录时才发现塞不下

诊断码

voice_sheet_check.py 报出的全部代码。它只判逐字投影与结构,不判配音表演。

代码 分级 判定者 含义
VOICE_LINE_HAS_NO_ID structural_invariant validator 配音行没有 line_id
VOICE_LINE_ID_REPEATS structural_invariant validator line_id 重复
VOICE_CHANNEL_INVALID structural_invariant validator channel 不是 sync / dubbed / VO / OS
VOICE_CHANNEL_DISAGREES_WITH_BLOCK structural_invariant validator channel 与它投影的块不符:画外音块记成画内,或画内对白记成 VO/OS
VOICE_SOURCE_REF_MISSING structural_invariant validator source_ref 没有指向任何上游快照
VOICE_SOURCE_REF_UNDECLARED structural_invariant validator src 在本文件 sources 里没有对应条目
VOICE_SOURCE_REF_UNRESOLVABLE structural_invariant validator record_id 在剧本索引里找不到
VOICE_SOURCE_IS_NOT_DIALOGUE structural_invariant validator 配音行投影的块不是台词,也不是 [VO]/[OS]
VOICE_BLOCK_SPAN_INVALID structural_invariant validator 索引记的块跨度装不进这份剧本,或落在半个字符上(索引已过期)
VOICE_BLOCK_IS_UNPARSEABLE structural_invariant validator 台词块不符合文档写明的行语法
VOICE_LINE_TEXT_DIVERGED structural_invariant validator line_text 与剧本原字节不一致——以剧本为准
VOICE_SPEAKER_DIVERGED structural_invariant validator speaker_display 与剧本里写的名字不一致
SOURCE_ENTRY_IS_INCOMPLETE structural_invariant validator sources 里的条目缺 owner 或 artifact

边界

  • 本表不拥有台词文字、说话人和信息权限,它们属于剧本;本表也不拥有逐镜的音频实现 (空间化、层级、与画面的对位),那属于视频提示词环节,本表只引用不复制。
  • 表里出现与剧本不一致的文字时,剧本为准,把差异作为 unresolved 记下来交给 负责人,不要就地"顺一下"。
  • 本表不生成音频、不调用任何语音服务,也不从文字判断成品音质;实际 TTS 交给 $short-drama-produce,并须在看到本次任务预览后明确确认。

CONTACT HAONAN

联系haonan

医疗 AI · 产品与独立开发

刘浩南

关注医疗 AI 从 demo 到真实落地,聚焦产品化、商业化与院内工作流效率提升。

12年医疗产研经验,大湾区头部医疗AI公司前产品总监,独立开发者

医疗 AI 产品化医疗 AI 商业化院内工作流效率
刘浩南的微信联系二维码
微信扫一扫,联系 haonan