02-pipeline
调度流程
article-slide-video 的流水线从输入文章、讲稿或脚本开始,到带字幕视频、横竖封面和 QA 报告结束。每一步都产出可落盘检查的中间文件。
1. 创建输出目录
默认输出根目录来自 article-slide-video/env.json:
{
"ARTICLE_SLIDE_VIDEO_OUTPUT_ROOT": "~/ai-artifacts/article-slide-video"
}
如果用户没有指定输出目录,调度器按输入文件名或安全主题名创建子目录。所有中间产物和最终交付物都写入这个目录,禁止写到输入文件旁边。
2. 生成冻结口播稿
调度器加载 voiceover-editor,把输入文本整理为 voiceover.md。
这个阶段的原则是编辑而不是创作:
- 成熟口播稿只修复明显错字、断句和朗读问题。
- 普通文章或笔记改成自然口语和适合换气的句长。
- 转写文本删除口头禅、口吃重复和重新起头残句。
- 不添加原文没有的事实、数据、案例或结论。
voiceover.md 的第一行是 H1 标题,正文是自然段。写入后它被视为后续流程唯一文本来源。
3. 生成讲述规划
调度器加载 slide-narration-planner,从冻结的 voiceover.md 生成 narration-plan.json。
默认规则是:
- 空行分隔视为页面边界。
- 页面 ID 使用稳定格式:
slide-01、slide-02。 - 每页尽量一个口播片段。
- 页面停顿通常为
0.35s到0.4s,最长不超过0.5s。 - 只允许重新分页,不允许改写口播稿措辞。
从这一阶段开始,slide_id 成为全流程主键。
4. 生成视频可渲染的 HTML deck
调度器选择 HTML 幻灯片生成器。默认是 frontend-slides;用户指定其他工具时,可以替换为 Hyperframes 或其他生成器。
生成器必须输出:
deck.htmldeck-manifest.json- HTML 内部的
window.__SLIDE_VIDEO__浏览器桥接
生成器必须使用 narration-plan.json 中的原始 slide_id,不得重新编号,也不得按数量推断。
5. 生成分段 TTS
调度器加载 bytedance-tts,读取 narration-plan.json,生成:
voiceover.wavtts-manifest.json
TTS 按片段请求语音,只把正文发送给接口。页面停顿不依赖 SSML,而是在本地插入真实静音,确保最终时间线可控。
6. 校验 ID 集合一致
进入视频交付前,调度器校验三处 slide_id 集合完全一致:
narration-plan.jsondeck-manifest.jsontts-manifest.json
这是防错页、防音画错位的关键闸门。校验失败时不能继续合成视频,必须回到出错阶段修复。
7. 最终视频交付
调度器加载 slide-video-delivery,一次性完成:
- 按 manifest 逐页渲染 PNG 帧。
- 按 TTS 实际时长合成
final.mp4。 - 生成
subtitles.ass。 - 烧录字幕生成
final-subtitled.mp4。 - 生成横屏
cover.png和竖屏cover-portrait.png。 - 抽取逐片段 QA 帧。
- 写入
delivery-report.json。
8. 检查交付报告
交付完成不只看文件是否存在,还要检查 delivery-report.json 中的视觉状态:
- 每个片段的
visual_status必须更新为passed。 subtitle_status必须为passed。cover_landscape_status必须为passed。cover_portrait_status必须为passed。
失败时只重跑受影响阶段。例如封面失败只重做封面和报告,不重跑口播稿、TTS 和整段视频。
Comments
Post a Comment