脚本层

script 元素承载旁白与说话人说的每一个字。脚本是「文字优先」的:不含时间码、不含媒体引用、不含样式、不含生成参数。流水线里其他部分都读取脚本,而脚本不读取任何东西。

<import from="@hypit/script@1" />
<script id="story">
  <opening>
    <HOST> 大家好。
  </opening>
</script>

导入 @hypit/script@1 即启用脚本层;id 让其他组件引用这份脚本及其部件。

段落(Segments)

段落是有序的口播内容块,标签名就是它的 id,在同一份脚本里必须唯一。段落可以是自闭合的(如 <pause/>);空段落有结构但没有语音 token,它不隐含静音,也不代表任何默认时长。段落不能嵌套——每个段落都是 script 的顶层子元素。命名遵循 XML 规则:字母、数字、连字符、下划线。

其他组件通过 {story.segment.opening} 引用单个段落,通过 {story.segment.opening.dialogue} 或 {story.segment.opening.speech} 引用它的文本投影。

角色线索(Role Cues)

角色线索标记段落里的话是谁说的。它不是说话人实体,不选择音色,也不创建角色。角色线索没有闭合标签:一轮发言持续到下一个角色线索或段落结束。一个段落要么全部带角色线索,要么全部不带——混用会报错;标签长度为 1–32 个字符。

投影上面的例子输出
dialogueALICE: 几点了? BOB: 八点半。
speech几点了? 八点半。
caption几点了? 八点半。

dialogue 文本带角色前缀,speech 文本与 CaptionDocument 会去掉前缀。脚本把 {story.caption} 输出为一份 CaptionDocument,含显示词、N:M 对齐单元与作者指定的断句点——里面没有秒,也没有帧。

双重文本(Dual Text)

当屏显内容与口播内容不一致时使用,例如口播品牌名的发音、而屏显要写正确拼写:<D | Dee> 表示口播 D、显示 Dee。中文场景常见于英文缩写、人名与产品名的读音提示。

脚本层是整条流水线的唯一事实来源。先把它写对,后面的时间与轨道才有稳定基础;这也是「改一句台词不会让字幕错位」的根本原因。

中文内容导航

继续阅读

常见问题

段落可以嵌套吗?

不可以。每个段落都是 script 的顶层子元素,需要层次就用命名与顺序表达。

角色线索会自动配声音吗?

不会。它只标注归属,音色由媒体与生成组件决定。

要手写时间码吗?

不需要。脚本里没有时间码;时长来自测量与对齐,剪辑锚定在词上。