Video Shotcraft(项目版)
完整的上游技能位于 skills/video-shotcraft/(git 提交 e1d15d9,完整克隆;请勿编辑)。
本文件为路由器,而非替代品。 构建前,请完整阅读 skills/video-shotcraft/SKILL.md,然后使用下面的地图访问所有能力。除非另有说明,路径均相对于 skills/video-shotcraft/。
项目默认值(覆盖上游的“询问模式”规则)
- 模式:自主自由创作(
references/pipeline.md,阶段 0-7,无需分阶段确认)。仅在用户明确要求时切换模式:“dùng template” →template/TEMPLATE.md;“cùng làm / duyệt từng bước” →references/guided-free-creation.md;单镜头 → 从references/shots/中选择一张卡片。 - 阶段 0-3(产品 brief、视觉方向、镜头映射、分镜)已由本项目的
docs/<video>/brief.md+script.md满足;请将它们带入设计规格书中,并附上镜头表格| # | time | shot | key motion |。 - 风格来自 brief,绝不能来自其他视频或 Ink Press 模板。可以借用运动语法和调优参数;但必须重新设计颜色/字体。目标是 9:16 1080×1920,因此 16:9 的配方必须重新布局,不能逐像素复制。
- 每个视频仅渲染一个文件:
out/<video_id>-<voice-slug>-reel.mp4(含 BGM),通过scripts/pipeline.py render完成。不要渲染无 BGM 的版本(这是用户决定,覆盖了上游的两版本规则和最终审查项 A8)。
能力地图
| 需求 | 用法 |
|---|---|
| 浏览/挑选镜头(可视化) | 图库:cd gallery && python3 -m http.server 4178 → http://localhost:4178/library.html(`gallery/media/` 中已有 150 个片段;索引在 gallery/api/library.json) |
| 镜头配方(约 124 张卡片) | references/shots/<category>/(camera、data、effects、interaction、opening、outro、rhythm、transition、typography、ui-entrance);扫描 frontmatter,完整阅读所选卡片 |
| 调优的参考代码 | demos/<category>/;为每个选中的卡片阅读对应的演示 TSX(卡片中的“参考实现”)。绝不要仅凭卡片名称重写;“已知陷阱/命门”参数不得弱化 |
| 整片弧线 | references/sequences/promo-energy-arc.md |
| 可复用组件 | assets/lib/(PageCam、ClipCard、DigitRoll、FlashCut、Caption、FlatPanel、VerticalTicker、辅助工具)。复制到 src/ 中,不要跨目录导入 |
| 真实页面截图(如果主题有网站/应用) | assets/scripts/capture-template.mjs(2 倍全页纹理 + 元素裁剪 + layout.json) |
| 美学自查 | references/aesthetic-rules.md(在构建过程中检查,不仅限于最后) |
| 音效 | references/sound-design.md;音频文件在 assets/audio/ 中(bgm/ 5 首曲目,sfx/<category>/ 149 个文件;许可说明在 assets/audio/ATTRIBUTION.md) |
| 强节拍 BGM | references/music-beat-sync.md(先分析 BPM,然后按节拍进行故事板编排) |
| 独立最终审查 | references/final-review.md(使用干净上下文的子代理) |
| 工作台(对完成视频进行视觉调优/导出) | references/workbench.md,node workbench/scripts/open.mjs <project> → http://localhost:5198(需要 src/workbench.ts 清单;交付后提供) |
| 剪映草稿导出 | references/jianying-export.md(仅在请求时) |
| 社交发布 | references/publish-upload-post.md(仅在请求时;先试运行,切勿对 unknown 重新运行) |
| 现成的完整视频 + 主题 | template/(Ink Press,9 种调色板,template/THEMES.md);仅在请求时提供 |
| 不用于生产 | shot-polish/(上游内部重设计笔记),agents/openai.yaml(Codex UI 元数据),demos/_legacy |
构建循环(项目)
- 先制作时间线(
src/<name>Timeline.ts):镜头时长 = 测量后的语音时长 + ~0.5 秒(结尾 +1.4 秒);SFX 偏移量相对于镜头起始位置。 - 每个场景:从图库/库中选择卡片,阅读卡片 + 演示 TSX + 所需的
assets/lib组件,并根据 brief 风格进行调整。将选中的卡片记录在docs/<video>/design-spec.md中。 - 每个场景之后:执行
npx tsc --noEmit,然后执行npx remotion still src/index.ts <CompId> out/qa/<id>-<frame>.png --frame=N(每个镜头至少 2 帧)并查看 PNG 文件。如果样式发生任何更改,请重新渲染静态帧。 - 音频:将所选文件从
skills/video-shotcraft/assets/audio复制到public/audio/<video_id>/,并在docs/<video>/assets-manifest.md中记录来源/许可信息。混音时遵循生产工作流程阶段 7 的目标(BGM 背景音比语音低 12–18 dB,语音播放时额外闪避 4–6 dB),而不是固定的百分比。 - 通过
python3 -I scripts/pipeline.py render <video_id>渲染,使用ebur128/volumedetect验证响度,并生成联系表。 - 由使用干净上下文的子代理按照
references/final-review.md+skills/viral-tech-video-creator/references/qa-checklist.md进行独立审查;修复发现问题后重新渲染。 - 交付后:提供工作台,以及(仅在询问时)剪映导出/发布功能。
确定性:禁止 Date.now()/Math.random()。安全区域:底部 210px 内无文本。上游作者署名和展示邀请为可选项:仅在交付时最多提及一次,且仅当用户表现出兴趣时。