supVD · 口播全自动链路 工具整体结构图

目标:输入原始口播 → 输出 final.mp4 成片(已粗剪 / 已配动效 / 已混音) 当前状态:v1 链路贯通 ✅ · v2 方案已定稿(OCC 剪辑台接入中) 更新:2026-08-31 v3 定稿(评审 9 条吸收 / 任务书 v1.1 / 引擎=Qwen3)
已完成并验收 待用户输入 后议项 P7 作者仓库 · 铁律1 只读 运行时豁免区

图 A · 一期成片生产线 v2 · 八步(0→⑦ 主流程;v1 六步为已验收保底)

人工点收敛为四件:粗剪力度(前期拍板 margin=0.45)· 细剪确认(可选)· 编排确认 · 终审发布
静音剪=auto-editor(物理)· 语义剪=OCC(吃千问转录)· 串联=pipeline/episode 总控。③OCC 细剪 W2 实测后定稿。

0
录制 raw
人工 · 你

相机口播,丢进本期目录(画幅=素材原比例)

raw/原始口播.mp4
每期输入
静音粗剪
auto-editor · 全自动

删静音/气口 margin=0.45 默认(先保呼吸感,听感可调 0.3–0.6);视觉无损级重编码

→ roughcut.mp4
已有·T1 验收
千问字级转录
Qwen3-ASR+对齐器 · 全自动

字级毫秒时间戳(唯一字幕源,OCC 内部转写仅界面用)

→ 字级时间戳 JSON
已有·T0+T5
OCC 细剪剪辑台
MCP 驱动+你微调 · v2 开发中

语义剪切(废口/口误/废话);多轨时间轴+文字稿;产物覆盖 roughcut.mp4;废口三档:全删/删半/适中(config 可切)

→ 覆盖 roughcut.mp4
W2 评估中
字幕落定
平移/重出 · 自动

对最终剪定片出 SRT(铁律2),平移法+重出保底

→ roughcut.srt
W3 集成
AI 编排
ZCode+skill · 全自动

SRT→分段脚本→overlay.json,lint=0;编排时放 caption-track 字幕卡 + ChapterBar 进度条卡(烤入成片)

→ overlay.json
已有·skill
OS 渲染透明层
overlay-studio · 冻结

无头 Chrome 逐帧→ProRes4444 alpha;画幅跟随素材

→ overlay.mov
已有
合成成片
ffmpeg/OCC · 自动

横屏=06 ffmpeg;竖屏/OCC 版=OCC 合成;响度 -14LUFS & ≤-1dBTP;多平台单文件导出

→ final.mp4
横屏已有·竖屏 v2
⌞──────────────────────────────────────────────────────────────────────────⌟
总控 pipeline/bin/episodeT5 已有v2 扩展中
铁律 2:一切剪切 → SRT 不可逆 串 ①→⑦;失败即停三行报错。③OCC 细剪为智能/人工混合步,④字幕落定后 AI 编排才可跑。
保底:OCC 未接入时自动降级为 v1 链路(①→②→⑤→⑥→⑦),照样出片。
v1 阶段(已完成并验收的六步):①粗剪→②SRT→③编排→④Studio→⑤导出→⑥合成。v2 将其中的 "②SRT" 拆为 千问转录→OCC细剪→字幕落定 三步,产物契约不变(roughcut.mp4 / roughcut.srt / overlay.json / final.mp4)。
v2 说明 · 三工具分工OS = 动效引擎(冻结,只消费 overlay.json;含 caption-track 双语字幕卡 + ChapterBar 章节进度条卡——字幕与进度条由动效层直接烤入成片)· OCC = 剪辑台/合成器(零分叉,只用文件+MCP 接口;内置 whisper 转写不启用,仅界面展示)· pipeline = 自动化主控。
人工点收敛:粗剪力度(margin 默认 0.45,首期听感调)· 细剪确认(可选)· 编排确认 · 终审。
首期素材 = 竖屏(A7M4 竖屏拍摄,用户 09-01 定)→ W4 OS 竖屏改造须先于 P1(画幅跟随素材; 多平台单文件导出:抖音/视频号/小红书通用预设)。

图 B · 分层架构(谁在哪一层,哪些是我们的、哪些只读)

自上而下:人 → 自动化层 → AI 智能层 → 剪辑台层(OCC·v2)→ 剪辑工具层(只读)→ 运行时注入区 → 引擎与素材出口。

L0 · 人工层只做三件事,其余全自动

🎙 录制

拍完把 raw 文件丢进 pipeline/episodes/<期号>/raw/

🎛 美学微调(可选)

Studio 里拧旋钮;不喜欢就跳过(--skip 4)

✅ 终审

看 final.mp4 点头;粗剪力度/SRT 质量/动效审美在 P1 基线拍板

▼ raw 落盘
L1 · 自动化层 —— pipeline/自动化剪辑我们的地盘 · 全部新代码只在这里(另一个窗口正在开发的就是这一层)

bin/episode 已有

一期总控:串 ①→⑥、幂等重跑、失败即停、自动更新 STATUS

steps/01_roughcut.sh 已有

粗剪脚本:调 auto-editor,强度参数进 config

steps/02_srt.sh 已有·双引擎

whisper-cpp 转写 SRT(中文参数)

steps/04_lint.sh 已有

编排 JSON 体检把关:lint error=0 才进下一步

steps/05_export.sh 已有·含音效库

导出前自检「JSON 引用清单 ⊆ 注入清单」缺一拒导 → 生成 job.json → 直驱 export-frames → 成片后自动清理 PNG 中间产物

steps/06_composite.sh 已有

ffmpeg overlay + amix 三轨混音 + 时长对齐校验 + ffprobe 终检

bin/start-studio.command 已有

外置启动器:curl 探活 5177 → 起 dev server → 开浏览器(替代作者写死他电脑路径的那个)

bin/ffmpeg + ffprobe 已自带

引擎二进制直接放在 bin/ 下(80MB×2)

config.json 已有

fps 29.97 · 画幅 1920×1080 · 粗剪参数 · whisper 模型/中文 · 混音音量比 · 各路径

episodes/<期号>/ 目录已建

每期素材与全部产物落点(见图 D);ep01/raw 已建,p0test 注入通道已验证

assets/ 已就位

思源黑体 400/700/900 · whisper 模型 large-v3-turbo-q5_0 · P0 导出测试 job

STATUS.md 接力文件

每次收工回写:当前阶段 / 待办 / 关键决定 / 遗留

▼ pipeline 调度 ▲ 产物回写 episodes/
L1.5 · 剪辑台层 —— OpenChatCut剪辑台v2 开发中本地优先对话式 AI 剪辑 · 零分叉(MCP+文件接口) · 副本在 supVD 外

多轨时间轴 UI

粗剪后细剪/精剪/调节奏;支持手动微调 + 撤重做

文字稿级剪辑

按千问转录定剪切点;废口/口误/废话;MCP 驱动 + 界面手动

合成/预览

叠透明层合成(横屏或竖屏画布 set_aspect_ratio);无头/MCP 自动化

与链路接口

产出覆盖 roughcut.mp4(备份 roughcut.silence.mp4);字幕只作为界面参考,不流入链路

L2 · AI 智能层唯一花 token 的步骤AI 只做编排,不写动效代码

overlay-fx-generator skill 已有原件

读 SRT → 语义分段(论点+英文标签+主色)→ 配卡出编排 JSON;卡片清单从 registry 自动生成

skill 本地化副本 已有(待偏好表点头)

整目录复制到 supVD/.claude/skills/(作者目录不动)→ 路径改写为绝对路径 + 补建《经验规则.md》+ 偏好表初稿

契约闭环

开工读每期 STATUS.md → 出 JSON → lint error=0 才交付 → 收工回写 STATUS;偏好 = 我的偏好.default.md + 用户覆盖

▼ overlay.json 交给 Studio / 导出
L3 · 剪辑工具层 —— overlay-studio-pro-main/铁律 1 · 源码只读剪辑作者的 Overlay Studio Pro,一个字节不动

三栏 Studio(5177 端口)

左:动效卡列表 · 中:1920×1080 画布垫真实视频 · 右:参数面板;下方时间轴(App / Canvas / Sidebar / ParamsPanel / TimelineBar / ExportView)

卡片库(资产)

src/effects/ + hud/ 80+ 张动效卡,registry.ts 注册表统一注册;每张卡自带参数 schema;CSS 变量令牌(skin 管配色 / style 管骨架);含 caption-track 双语字幕常驻卡

编排模型

overlay JSON = { theme, skin, style, font, cards[] };overlay/ 下 types / srt / kindSwap / lint

scripts/export-frames.mjs 已有

无头 Chrome 虚拟时间逐帧渲染 → PNG 序列 → ffmpeg 封 ProRes 4444(alpha);job.json 直驱无需开界面;音效已烤入 MOV

scripts/lint-overlay.ts

编排 JSON 体检器(经验规则机器化);配套 privacy-scan / sync-skill-cards / build-logos(均不在作者仓库跑 sync)

.claude/skills/overlay-fx-generator

skill 原件(SKILL.md + STATUS 模板 + 偏好默认表);严禁在作者仓库跑 sync:cards

▼ 符号链接注入(豁免区) ▲ 抽帧读取素材
L3.5 · 运行时注入区(作者仓库内的豁免区)随导出创建 · 导出完即清

public/episodes/<期号>/

符号链接 → pipeline/episodes/<期号>/素材解析唯一出路就是 public/——JSON 引用了 public 外路径的画面直接空窗且不报错

public/_media/ · _fxframes/

Studio 上传媒体 / 导出抽帧缓存,用完即清

exports/(motion-playground 下)

PNG 中间产物(≈43MB/s,1 分钟约 2.6GB),成片后必须清掉;导出前脚本自带磁盘预检

▼ 被各步骤调用
L4 · 外部引擎层v2 新增:OCC 剪辑引擎(版本锁 0.2.13 · 升级走回归清单)

auto-editor 已装 29.3.1

粗剪主力:删静音/气口(①),brew arm64 原生

Qwen3-ASR + ForcedAligner 默认引擎

② 转写+字级时间戳(3.5GB 已入 hf-cache);whisper-cpp 路线已废弃,turbo 模型已按用户决定删除(回滚=重下约 2 分钟)

ffmpeg / ffprobe 已自带

合成、封 MOV、终检——链路的胶水(⑥)

无头 Chrome 系统 Chrome

逐帧渲染导出(⑤),路径写进 config.json

五条铁律(v2 版) ① OS 只读,改动先报备(用户批准才动);② 一切剪切 → SRT 顺序不可逆(SRT 永远对最终剪定片生成);③ 画幅跟随素材比例(竖屏素材全链竖屏,OS 改造为报备件);④ OCC 零分叉(只用文件+MCP 接口,更新=git pull+回归清单);⑤ 链路字幕只出自 Qwen3(OCC 内置 whisper 仅界面内部用,不流入链路)。
v2 修订:铁律 2 由"粗剪→SRT"升级为"一切剪切→SRT";新增铁律 4/5。

图 C · 目录结构(含开发状态标注)

■ 已有 □ 待开发 ■ 只读(铁律1) ■ 运行时豁免区

supVD/
├── overlay-studio-pro-main/          # 作者仓库 · 铁律1 只读
│   ├── motion-playground/           # React+TS+Vite · Studio 本体(dev 端口 5177)
│   │   ├── src/components/          # Canvas / Sidebar / ParamsPanel / TimelineBar / TopBar
│   │   ├── src/effects/registry.ts  # 卡片注册表 —— 卡片清单从这自动生成给 skill
│   │   ├── src/effects/hud/         # 80+ 张动效卡(含 CaptionTrack 双语字幕卡)
│   │   ├── src/overlay/             # types / srt / kindSwap / lint
│   │   ├── scripts/export-frames.mjs# 逐帧导出 → ProRes4444 alpha MOV(job.json 直驱)
│   │   ├── scripts/lint-overlay.ts  # lint error=0 才交付
│   │   ├── public/                   # 素材唯一出口
│   │   │   ├── episodes/          # ★ 符号链接注入区(→ pipeline/episodes)
│   │   │   └── _media/ _fxframes/ sfx/ logos/ demo/
│   │   └── exports/                 # PNG 中间产物(成片后必须清)
│   └── .claude/skills/overlay-fx-generator/  # skill 原件(禁跑 sync:cards)
├── pipeline/                        # ★ 我们的地盘 · 全部新代码只在这里
│   ├── STATUS.md                   # 接力文件(当前:P0 进行中)
│   ├── config.json                 # fps / 画幅 / 粗剪阈值 / whisper / 混音 / 路径
│   ├── bin/
│   │   ├── ffmpeg ffprobe          # 自带引擎二进制
│   │   ├── start-studio.command    # 外置启动器(探活 5177)
│   │   └── episode                 # ■ 已有:episode <期号> [--force] [--from NN]
│   ├── steps/                       # ■ 五个步骤脚本全部交付并验收(08-31)
│   │   ├── 01_roughcut.sh          # ■ 粗剪(auto-editor)
│   │   ├── 02_srt.sh               # ■ SRT(Qwen3-ASR+对齐器 / turbo 备用)
│   │   ├── 04_lint.sh              # ■ lint 把关(error=0 闸门)
│   │   ├── 05_export.sh            # ■ 注入+导出+清理(含 KIND_SFX 音效库15个)
│   │   └── 06_composite.sh         # ■ 合成+混音+终检
│   ├── episodes/<期号>/             # 每期素材与产物(见图 D)
│   │   ├── ep01/raw/                # 已建,等你丢第一期真实口播
│   │   └── p0test/                 # P0 注入通道验证已通过
│   └── assets/
│       ├── fonts/                   # 思源黑体 400/700/900(软链注入 Studio)
│       ├── hf-cache/                 # Qwen3-ASR-0.6B + ForcedAligner-0.6B(3.5G)
│       └── tests/                   # P0 导出测试 job
├── 主路线·口播全自动链路开发计划.md  # 总计划(P0–P7 + 执行协议)
├── Overlay 动效生产线|复刻施工图.md# 方法论文档(三层架构 / 十步路线 / 铁律)
└── 工具整体结构图.html              # 本文件

图 D · 每期数据产物地图(episodes/<期号>/)

一条流水线跑下来,每期目录里依次多出这些文件;任一步可单独重跑(幂等:已有产物跳过或 --force 重做)。

步骤产物文件生产者状态
人工丢入raw/原始口播.mp4每期输入
① 粗剪roughcut.mp4(默认粗剪版,OCC 覆盖后留 roughcut.silence.mp4 备份)+ 时长报告auto-editor已有·T1
② 千问转录字级时间戳 JSON(供剪切决策与字幕落定)Qwen3 系已有·T0
③ OCC 细剪覆盖 roughcut.mp4(backup roughcut.silence.mp4)+ 剪切决策表OCC+AgentW2 评估中
④ 字幕落定roughcut.srt(平移法/重出法)平移/Qwen3W3 集成
③ 编排overlay.json(lint error=0)ZCode + skill已有
④ 微调overlay.json(人工改后覆盖,可跳过)Studio已有
⑤ 导出overlay.mov(ProRes4444 alpha · 音效烤入)export-frames.mjs已有
⑥ 合成final.mp4(ffprobe 终检:时长差<1帧、有音轨)ffmpeg/OCC横屏已有·竖屏 v2
每期状态STATUS.md(skill 契约:开工读 / 收工写)ZCode 会话契约已有

图 E · 开发阶段地图(P0–P7)与「更全面的工具」方向

执行协议:每阶段验收全绿才进下一阶段;任何未来会话读 STATUS.md 接力开工。

阶段内容状态
P0 环境就绪全部验收项跑绿(引擎/依赖/dev server/demo lint/导出 alpha/合成/注入通道/字体)——T0 留证完成
P1 基准一期装音效(Mixkit/CC0 → public/sfx,对齐 KIND_SFX 命名);你提供真实口播,人工顺序走一遍 ①→⑥,锁定「对的标准」;三点头:粗剪力度 / SRT 质量 / 动效审美等你:D1 画幅拍板 + 第一期 raw
P2 SRT 脚本化02_srt.sh 双引擎;Qwen3+对齐器字级时间戳验证通过(0.00 开口/36.72 结尾/单调),正式 ±0.3s 终验留待 P1 真人口播完成
P3 粗剪脚本化01_roughcut.sh;直出编码逐项比对一致,备选方案留有自动降级钩子完成
P4 编排接入skill 副本+三件手术完成,lint 闸门 exit 1 实测有效;偏好表待用户点头完成
P5 导出+合成全自动05/06 交付并验收;E2E 联跑实测 1092 帧导出/0.0 帧差/音效烤入/自动清理完成
P6 一键总控bin/episode 已落地并实测(①→②→③门口提示→④⑤⑥ 全通);bash 3.2 兼容完成
P8 质检门+响度+体验件06 增强:loudnorm 目标 -14LUFS / true peak ≤-1dBTP + 黑帧/冻结帧检测 + 码率窗断言;macOS 完成通知 · 期目录归档 · pipeline 纳入 git(作者仓库与 public/sfx 已排除——Mixkit 授权)W5 可并行
P9 OCC 评估+竖屏W1 装 Node24 跑通 OCC → W2 六项生死题实测(ProRes4444 alpha/合成正确性/中文废口/MCP 闭环/剪切清单回读/edit_captions 注入千问转录,每项带通过判据)→ 竖屏方案文档(OS 画布参数化,报备件,批准前不碰 OS)v2 开发中
v2 目标(开发中)①→⑦ 全链路(OCC 细剪+字幕落定为新增步);P8 质检门/响度(-14LUFS)/体验件;P9 OCC 评估+竖屏报备;用户已确认:竖屏首期/W4 前置红线 · margin=0.45 · 废口三档 · 字幕+进度条烤入 · 多平台单文件本方案落地中
P7 后议项 → 更全面的工具废口清理(已并入 v2 ③OCC 细剪,自研方案搁置)· 扩卡(改 src/effects,逐张报备)· 扩 logo(手工 SVG,不走 build-logos)· 学习闭环(review-logs 回填偏好,越用越懂你)· 竖屏 OS 改造(P9 报备方案先行)· OpenCut(88k★重写中)降为观察位,由 OCC 接替逐次报备

🔗 三个概念的衔接(回应「另一个窗口开发的工具」)

静音剪 auto-editor(①)物理删静音/气口,margin=0.45 保呼吸——产出 roughcut.mp4 是全链时间轴起点;

语义剪 OCC(③)吃千问字级转录做废口/口误细剪(MCP 驱动+人工微调);OS(⑥)只吃 overlay.json 渲染动效层——动效引擎冻结;

串联 pipeline/episode 总控把 ①→⑦ 连成一条命令;字幕只出千问(铁律5),合成横屏走 ffmpeg、竖屏走 OCC。

🧭 做更全面的工具:当前短板 → 未来补齐

· 粗剪只删静音,删不掉「嗯/啊」废口 → P7 词级废口清理
· 画幅锁死 1080p 横屏 → 竖屏方案(改源码,走报备)
· 审美偏好靠人喂 → review-logs 学习闭环自动回填
· 卡片库固定 80+ 张 → 扩卡流程(新卡 + registry + 同步 skill 副本)
· 没有可视化多轨精剪兜底 → OpenCut(带 MCP)按需评估
· 人工点头点仍偏多 → 预约定的人工点可配置化(episode --skip)