embedded-captions 是一个 HyperFrames 技能,用于在已有的单人出镜口播视频上添加字幕,且不编辑原始画面素材。字幕是唯一新增的内容;抠像只是让主体能够遮挡合成到其背后的字幕层。
用途 该技能面向 talking-head(口播/讲解/访谈)类型的视频,为画面添加逐字字幕或字幕特效。官方明确要求:不得对素材进行调色、重新上色或添加扫描线等处理。
主要能力
- 字幕模型:每个口语句子分为三类处理。drop 表示填充词(um/uh、结巴、自我更正)不显示;rail 为默认形式,普通口播内容以干净的下三分之一字幕条呈现在前景;embed 为被提升的高光词,即标题性的一拍,以大字合成到人物背后(借助抠像遮挡),并有设计的入场与退场。
- 身份目录:提供 CATALOG.md,共 35 个身份(10 个经典 + 25 个主题化)。用户从中选择一个身份,引擎、编译器与授权文件由目录行查找得出。不应向用户暴露 Standard/Cinematic/Theme 这类后端名称。
- 引擎/模式:Standard(默认)构建逐字字幕条加一个合成到场景中的 embed 高潮;Cinematic 为纯 embed,无字幕条,每个字幕都合成到人物背后;Theme 是一套完整主题构成,由注册表(body 范式 × hero 主装置 × 前景特效 × 底板反应)组合而成,面向 VFX 级别需求(如“炸”“特效”“像 AE 做的”)。
- 高光稀缺性:每个节拍/块最多 1 个 hero,不可同时可见两个,hero 窗口之间至少间隔一个节拍(编译器在低于 0.6s 时警告)。多个 hero 中最大作者的一个为 APEX,独享完整 lockup embed;较小的为 MINOR peaks。
- 影像探针与决策门:先用 ffprobe 获取规格,并在 20%/50%/80% 处采样帧进行判断。出现多个说话人/硬切、无人物主体、时长不足 3 秒、无语音或面部始终不可见、已带烧录字幕/大量文字图形、转录结果乱码、手持快速运动导致抠像闪烁等情况时应拒绝处理。
- 预检探针:镜头切换探针(在 20%、50%、80% 采样,若出现不同主体/场景则先裁切);黑边探针(计算安全内容矩形以约束字幕位置);亮度探针(字幕区域平均亮度低于 60 用浅色文字,60–180 加字形衬底,180+ 用不透明文字加衬底)。
- 运行时依赖:插件安装使用清单固定的 CLI 进行抠像、转录与渲染。本地预览与字幕测量辅助工具需要 Sharp、Puppeteer(含 Chromium 浏览器)、GSAP,安装命令为 npm install --prefix <project> --save-dev --save-exact sharp@0.35.3 puppeteer@25.8.0 gsap@3.15.0。需保留项目锁文件;Bash 与 FFmpeg/ffprobe 必须在 PATH 中;抠像与转录首次使用可能下载自己的模型。
使用方式 安装与保持更新:在运行设置或新鲜度命令前,若技能位于 HyperFrames 插件内,须遵循插件执行规则;独立安装保留更新说明。保持技能最新可运行:npx hyperframes skills update embedded-captions(在运行前须与用户确认)。
操作流程(简版):
- 决策门(拒绝不合格素材)→ 从 CATALOG.md 选一个身份(引擎/编译器由查找推导,绝不暴露模式/类别问题)。
- hyperframes init(若项目目录已存在且含视频则跳过)→ bash scripts/prepare.sh <project>(抠像 ∥ 转录 ∥ 音频包络并行,然后 safe-zones v2)。
- 编写一个小型创意选择 JSON(先读 safe-zones.json):Cinematic → cinematic.json → make-cinematic.cjs;Theme → theme.json → make-theme.cjs。
- 视觉 QA:node scripts/preview-frames.cjs <project>,约 2 秒/帧的忠实合成预览(不渲染),在付费渲染前检查。
- render-and-composite.sh → 各门控(时序 / 遮挡+hero / 溢出 / 交接)→ final.mp4。
管道共 5 步:
- hyperframes init <project> --non-interactive --video <video.mp4> --skill=embedded-captions
- bash scripts/prepare.sh <project>(并行抠像与转录 → safe-zones,输出 frames_fg/、transcript.json、safe-zones.json)
- 代理步骤(唯一的创意步骤)编写小型 JSON:Cinematic 模式编写 cinematic.json 后运行 node scripts/make-cinematic.cjs <project>;Theme 模式编写 theme.json 后运行 bash scripts/render-theme.sh <project>。
- node scripts/preview-frames.cjs <project>(约 2 秒/帧的合成预览,渲染前检查)
- bash scripts/render-and-composite.sh <project>(门控 → final.mp4 + history/ 快照;Theme 模式跳过 3b/5,因为 render-theme.sh 已运行编译 + render-and-composite + _postfx.sh,交付物为 final_fx.mp4,final.mp4 为底板反应前版本)。
身份选择流程:探测片段 → 从目录中列出 2–3 个身份候选 → 推荐一个并给出一句理由 → 用户选择(自主模式则由你选择并说明理由)→ 编写该身份的文件。始终应先给出推荐并让用户选择,不要静默使用默认值。身份与引擎锁定,不支持跨组合。
Cinematic 模式要点:先读 safe-zones.json,旁白平面放在 zones.hugLeft/hugRight(紧贴轮廓的干净条带);hero 默认为 heroAnchor/heroBands.best(居中于主体,约 30–55% 被遮挡);recommendation:"fg" 将旁白移到前景以提升可读性,hero 在 heroBands.feasible 时保持嵌入。编写 <project>/cinematic.json,包含 "dna" 与 thought-BLOCKS(不是原始分组):每块为若干行词(按从句边界 2–5 个一组)+ 所在平面 + 每行 css(仅尺寸/字重/样式,不含位置)+ 最多一行标记 "hero": true。
Theme 模式要点:先读 themes/README.md(范式/主装置注册表、链接、硬规则、theme.json 精确模式)。按内容语域选择主题 DNA(每个 themes/<name>.json 有 voice 与 when),说明选择与理由,由用户决定。编写 <project>/theme.json:dna、lines(逐字,转录顺序,每行 1–5 个词;takeover 时每行是一张 CARD)、minors(强调词)、hero:{match}(高潮词/短语)。渲染:bash scripts/render-theme.sh <project>。
视觉 QA 检查项(几何门控无法捕捉的失败):冲淡(浅色文字落在明亮区域上不可读);文字叠文字(字幕压到画面自带文字/图形,或两组字幕碰撞);阅读顺序(屏幕纵向顺序须与口语顺序一致,hero 不得位于后出现词之下);hero 存在感(高潮词应大且明显位于主体背后,约 30–55% 被遮挡,而非边距中的浮动标签);平衡(一个连贯的列/带,而非零散碎片)。
适用场景 讲解 / 旁白多用 Standard;embed 是稀缺且应得的高潮峰值;Theme 适用于 VFX 级需求。用户口播、访谈、必须看清文字的场合建议选 rail/panel 表面的身份;诗意 / 社交 / “电影感” 按语域选列流身份;“炸 / 特效 / VFX”或命名世界选主题化身份。不确定时选 anchor(文字可读、场景安全)。
限制
- 仅适用于单人出镜口播视频;多说话人、硬切、无人物、时长不足 3 秒、无语音、面部不可见、已带烧录字幕、转录乱码(非母语/重口音可能转成自信的胡言乱语;可尝试 WHISPER_MODEL=medium 一次,否则拒绝)、手持快速运动等情形应拒绝。
- 视频交付时保持原样,不覆盖/修复原有文字;Theme 模式的 PLATE 预算是唯一被许可的例外(按主题 DNA 定义的、在抠像合成之后应用的反应节拍)。
- 不得对素材调色/重新上色/添加扫描线。
- 本工作流不搜索 HyperFrames 组件注册表;其引擎是锁定编译器,消费 cinematic.json / theme.json 并自行生成合成。若无身份匹配需求,应说明并选择最接近的,而不是超出目录范围。
- 渲染需等待 CLI 成功退出后才进行合成;旧版 HF_TIMEOUT_S 看门狗不再使用,大体积部分文件不代表渲染完成;渲染卡住应通过 CLI/终端正常取消,字幕辅助工具不会强制终止或从进程快照恢复渲染。
- 收费、价格、平台与效果等资料暂未提供。