Skip to content

Motion 模式(信息动画)

Motion 把一集已经合成音频的播客变成一套 16:9 可录屏信息动画:系统根据口播稿的实际长度和自然段动态规划章节与动画数量,音频合成阶段同步产出真实 SRT;AI 为每个动画区间编排独立 HTML 构图和入场节奏,SRT / script-timing 负责推进真实口播时钟。

页面会直接嵌入播放器预览,也可以在新的单页打开后加载当前任务音频并全屏录制;动画画面与音频共用 SRT 主时钟。下载单文件 HTML 仍保留为离线分发视觉稿的出口。

设计参考 jacky-motion(MIT),保留「SRT 主时钟 + 确认门」核心思想,并按 BokeBox 的产品形态重构。

页面生成保留 Jacky-motion 的 SRT 主时钟思想,但不再把全片锁在一张固定模板上:整集只锁定色彩基底,每个 beat 另选构图与动效。当前支持 Hook 撞入、斜切揭示、信号柱状图、前后对照、阶梯级联、引语切片、Ticker 推进和收束锁帧八种构图;每页只保留一个第一眼主视觉,不做“标题 + 多张等宽卡片”的 Dashboard。

在播放器中生成

  1. 生成或重新生成一集节目;系统会同时得到章节化口播稿、合成音频和 podcast.srt
  2. 切换到 Motion(动效) 面板。
  3. 先检查已经准备好的章节卡片;章节边界来自口播稿,数量会随口播长度增加,不再由每条字幕临时猜测。
  4. 在视觉要求输入框里写方向,例如“像 Apple 发布会一样克制,突出三个结论”。
  5. 点击 生成页面。AI 会为口播稿切出的全部动画区间生成视觉内容;短稿少一些,长稿会生成更多画面。
  6. 页面生成后,直接播放下方音频;章节切换和章节内步骤会跟随 SRT 实时推进。点击 新页录屏预览 可打开独立 HTML 页面,再全屏录制;需要离线分发时再下载 HTML。

没有配置 LLM Key 时,Motion 也会生成确定性的多构图页面,保证仍可预览和录屏;配置 LLM 后才会使用 AI 提炼的页面内容。

结构化风格控制

生成前可以在视觉要求输入框下方直接选择五个结构化选项。它们不是仅供参考的标签:选项会随请求传给服务端,并写入页面 spec;播放器预览和独立 motion.html 会共同使用这些值。

  • 视觉基底:自动匹配、产品发布会、编辑杂志、手绘线稿、财经演播室、证据报纸或纸张拼贴。
  • 配色方向:自动匹配、暖橙金、冷蓝青、霓虹撞色、黑白灰或纸张墨色;固定配色时会覆盖场景强调色。
  • 标题字形:自动匹配、现代大标题、杂志衬线、数据等宽或手写注释。
  • 信息密度:留白呼吸、平衡默认或高信息量;控制页面安全区、标题尺度与步骤间距。
  • 动效强度:克制平滑、动态默认或爆点冲击;控制入场动画的节奏与标题冲击感。

推荐先用“自动匹配 + 平衡默认 + 动态默认”生成一版,再只改一个选项重新生成,方便比较风格差异。无论怎么选择,SRT 主时钟、beat 顺序和时间范围都不会被改写。

工作流

阶段说明
S1 章节化口播稿AI 在生成 script 的同时返回 motionChapters;以约 220 个口播字作为一章的参考,短稿至少 2 章,长稿按实际内容增加。每章包含标题、摘要和可直接送入 TTS 的口播片段;完整 script 按章节顺序拼接
S2 音频与 SRTTTS 按句合成音频,使用实测语音区间与句间停顿生成 script-timing.jsonpodcast.srt;这一步完成后 Motion 已具备稳定时钟与章节计划
S3 章节时间轴将章节首句映射到真实 SRT cue,再按章节口播长度细分动画区间;自然停顿留在相邻区间边界,不生成无内容空页
S3.5 P3.5 确认门检查首章从 0ms 开始、章节不重叠、收束章贴合总时长、step 毫秒点合法,最后一个 beat 必须是 closing
S4 AI 页面AI 为每个脚本驱动的动画区间选择独立 composition + motion;结构化风格选项约束基底、配色、字形、密度和动效强度,生成可截图的主视觉页
S5 在线预览 / 导出React 播放器跟随音频实时切换全部页面;新页入口打开独立 motion.html 并同步任务音频,复用播放页的主视觉、构图和入场动效,适合全屏录制;下载 HTML 作为离线视觉稿

在播放器中生成

时间轴一经确认即锁定(motion-timeline.json),AI 页面可以反复生成,不会改动原始口播稿、音频或 SRT。

章节与镜头

  • chapter beat:来自口播稿的语义章节,并按实际口播长度细分为多个动画区间;标题和摘要由上游脚本阶段确定,步骤毫秒点来自区间内部的 SRT cue
  • 自然停顿:章节窗口会吸收正常句间停顿;超过门限的静音仍会生成 B-roll 过渡,画面不会空等
  • closing beat:最后一个口播章节自动标记为收束页,endMs 贴合主时钟总时长(±300ms),SRT 播完定格终帧

页面与镜头规则

  • 信息原语分为 Claim、Contrast、Path、System、Evidence;每个 beat 只选择一种主原语。
  • 每个章节只生成一张主视觉页;章节内部最多做少量步骤揭示,动画完成后停在可截图的最终帧。
  • 色彩基底由整集统一锁定,但构图和入场节奏按 beat 独立选择;相邻页面不会重复同一 composition。
  • 标题、正文和关键图形保留录屏安全区,避免内容挤在边缘或堆成卡片墙。

HTML 播放器

  • 主时钟performance.now() + requestAnimationFrame,无 setTimeout 链;切后台回来按绝对时间追帧
  • 门 overlay:准备播放 → 3-2-1 倒计时(录屏前预留)
  • 音频:新页先尝试自动播放当前任务音频;浏览器拦截时画面仍自动预览,底部按钮可在用户点击后启用声音,暂停、跳转、重播都会校准音频位置。旧任务首次打开时会自动补装最新播放页视觉层,不需要重新生成口播稿
  • HUD:分镜圆点 + 当前毫秒时钟
  • 键盘空格 暂停 / 继续 · 跳 5 秒 · R 重播 · F 全屏
  • 样式:色彩基底支持产品发布会黑场、编辑杂志、手绘线稿、财经演播室、证据报纸和纸张拼贴六种方向;生成前还可结构化控制配色、字形、信息密度和动效强度;播放页与独立 motion.html 使用同一套 Motion 视觉结构,每个 beat 再组合独立构图和入场动效,纯 CSS 动画 + class 切换,零外部依赖

API

方法路径说明
GET/api/jobs/:id/motion/timeline已确认时间轴与覆盖表(无则空)
POST/api/jobs/:id/motion/generate根据口播稿和可选 styleOptions 调用 AI 生成页面并保存
POST/api/jobs/:id/motion/draftS1→S3.5 预检,返回覆盖表与违规(不落盘)
POST/api/jobs/:id/motion/confirm确认时间轴(门禁不通过返回 422)并装配 HTML
POST/api/jobs/:id/motion/build用已确认时间轴重新装配
GET/api/jobs/:id/motion.html在线打开独立 motion.html;加 ?download=1 下载
GET/api/jobs/:id/motion.srt下载优化后的 SRT

写操作需要登录;已确认产物支持公开站点访客下载(与音频一致)。

styleOptions 请求体示例:

json
{
  "prompt": "前 1 秒先打爆点,适合 B 站录屏",
  "styleOptions": {
    "preset": "editorial-magazine",
    "palette": "neon",
    "typography": "editorial",
    "density": "airy",
    "intensity": "explosive"
  }
}

失败响应draft / confirm / build 门禁未通过时返回 422 统一信封 { code, message, data, errorCode: 'GATE_FAILED' },其中 data 携带 gate(含 violations 违规明细)、rows(覆盖表)、notes(分镜说明), 前端直接渲染违规列表,不会只给一句误导性文案。

产物文件

任务目录下新增:

  • motion-timeline.json:时间轴和 AI 页面 spec(门禁通过才写入)
  • motion.html:单文件信息动画

与 jacky-motion 的关系

BokeBox 的 Motion 模式改编自 jacky-motion(MIT License),生成文件的文件头保留原作者署名。改编点:

  • 保留 SRT 主时钟和确认门,将页面内容生成改成口播稿驱动的 AI 页面
  • 在线预览成为主路径,HTML 下载作为次要出口
  • 没有 LLM 配置时使用确定性 fallback 页面,不阻断预览
  • 覆盖表 / 门禁规则与 BokeBox 的 TTS 时间轴(毫秒)直接对齐
  • 纯逻辑(解析 / 优化 / 门禁)放 @bokebox/shared,服务端与前端共用,避免规则漂移
  • 章节由口播稿上游一次确定,避免音频完成后再从字幕反推页面结构
  • 音频阶段直接产出真实 podcast.srt;Motion 不再依赖公开下载接口临时恢复时间轴
  • 页面数量由口播稿字数、自然段和可对齐的 SRT cue 共同决定;约每 220 个口播字形成一个视觉区间,并受可用 cue 数和系统安全上限约束,不再固定为 2–3 张字幕卡