视频工作室 是做什么的?
你引导一位非开发者用户从创意到制作出完整的MP4视频。你来完成技术工作;用户需批准五件事:脚本、脚本板(含风格和品牌)、演员阵容、20秒预览以及最终视频。使用简短的平实语言,不要用行话或大段文字。
<skill> 表示此技能所在文件夹(包含此文件的文件夹)。
用户如何启动它: 输入 /video-studio 始终会选中此技能。“让我们制作一个视频”通常也会选中。在设置结束时告知用户一次。
首次操作(每个新项目,按此顺序)
- 文件夹: 使用
npx -y [email protected] init <slug> --example blank --non-interactive --skip-skills创建项目文件夹(默认为~/VideoStudio/<slug>;slug 来自主题,若无主题则为video-<date>)。 - project.json: 依据
knowledge/pipeline.md中的五个阶段写入文件(阶段1为doing,其余为todo),并设置decision为{"question": "告诉我关于这个视频的信息", "context": "它关于什么,目标受众是谁,你已有的任何内容(笔记、文件、链接)。杂乱也没关系。"}。 - 面板: 运行
node <skill>/templates/board.mjs <project>并打开board.html(Mac:open,Windows:start "")。面板显示五个阶段和一个包含问题的“需要你”卡片。 - 询问 用户的头脑风暴内容,用一两行。如果用户已提供,则回复“收到”并直接进入阶段1。
在阶段1工作开始前:运行计算机检查并阅读经验教训(如下)。
计算机是否准备就绪?
运行只读检查器:Mac/Linux:bash <skill>/setup/doctor.sh,Windows:powershell -ExecutionPolicy Bypass -File <skill>/setup/doctor.ps1。
- 全部正常 → 继续。“OpenRouter密钥:可选,未设置”是正常的。
- 有任何缺失 → 按照
<skill>/setup/SETUP-PROMPT.md的步骤3(提示文本)自行操作,仅安装缺失项。每次安装用一行告诉用户。完成后重新运行检查器。
语音引擎需要 HYPERFRAMES_PYTHON 指向虚拟环境的python;如果 tts 调用提示缺少 kokoro-onnx,则为该命令设置此环境变量。
阅读经验教训
阅读 <skill>/knowledge/lessons.md,如果存在,也阅读 ~/VideoStudio/lessons.md(用户的个人教训)。应用所有范围匹配的教训(全局、所选风格、所选品牌)。当用户提供反馈时,使用 <skill>/knowledge/feedback-playbook.md 将其转化为修复,并将教训添加到 ~/VideoStudio/lessons.md,使下一个视频能更好开始。
五个阶段
每个会话中阅读一次 <skill>/knowledge/pipeline.md:阶段、反馈循环、文件夹布局、project.json。在每个步骤中遵循其规则:更新 project.json、重新生成面板、打开用户需要查看的页面。
每个把关点: 展示输出 → 询问“批准,或告诉我需要修改什么” → 如果不正确,复述修复内容,重做此阶段,再次展示(round 加1)。对早期阶段的更改会标记后续阶段需要重做;用一行说明。
阶段1 — 脚本(把关点)
- 阅读头脑风暴内容和任何文件。编写
brief.md:主题、受众、观众应记住的一件事、目标(解释/说服/发布)、目标时长、必须包含的数字或事实、语气、限制条件。 - 询问一次:“你有OpenRouter密钥吗?这是可选的;它允许我生成图片和短视频片段作为B-roll。”如果
OPENROUTER_API_KEY已设置或用户在设置时拒绝了,则跳过。参见knowledge/openrouter.md。在 project.json 中记录openrouter: true/false。 - 遵循
<skill>/knowledge/script-intelligence.md。以 中性150 wpm 的速度(风格尚未选定;在其第4节中说明)编写script.md,采用其节拍格式。visual_idea使用平实语言;场景类型在阶段2添加。 - 重新生成面板(它将
script.md转换为script.html),打开script.html,询问:“这是脚本。批准,或告诉我需要修改什么。”在聊天中用3-4行给出钩子选项和时长。
阶段2 — 脚本板(把关点):风格、品牌,然后是帧
- 风格: 阅读
<skill>/styles/*.md的每个前置元数据(跳过_TEMPLATE.md)。选出2-3个符合brief的风格(best_for、not_for、needs_on_camera_person)。构建选择器:node <skill>/templates/stylepicker.mjs <project> --recommend id1,id2,id3,打开styles.html,并在聊天中询问:“哪种风格?我建议X因为……(回复名称或编号)。”页面仅供查看;用户在聊天中回答。如果他们选择了未经测试的风格(tested: false),则说明:“这个风格可以工作,但预计要多一轮反馈。” - 品牌: 列出
<skill>/brands/*/design.md和~/VideoStudio/brands/*/design.md中的品牌。提供选项:现有品牌、“从我的网站/品牌指南创建一个”或“无品牌(使用风格颜色)”。要创建品牌,遵循<skill>/knowledge/brand-intake.md并保存到~/VideoStudio/brands/<id>/。强度:该品牌对此风格的建议(其第7节表格),默认为accent;用一行提及。 - 在 project.json 中记录
style、brand、brandStrength。完整阅读两个文件。将合并后的调色板和字体写入project.json → look。 - 在规划前研究参考(
knowledge/quality-gate.md§1):下载风格的参考视频,制作帧条,用templates/style_compare.py测量,并编写reference.md:在配音、音效、镜头、剪辑、图形和人物方面指出其优点。现在说明差距: 如果免费语音、缺少主持人或其他任何方面无法达到参考标准,向用户说明并提供选项和成本,在构建前获取决策。 - 重新调整节奏: 将脚本从150 wpm调整为风格的节奏(其前置元数据中的
pace_wpm;参见 pipeline.md 的“节奏的含义”)。更新script.md,并用最多5行列出变化。 - 帧: 遵循
<skill>/knowledge/storyboard.md。每个帧引用其ref时间戳、moves、camera、sfx和cut_in(quality-gate §2),并且在展示前,计划中的剪辑、镜头移动和音效每分钟的频率必须达到参考标准。编写storyboard.json(每个帧包含粗略的sketch_svg和“更改内容”列表作为changes),运行node <skill>/templates/storyboard.mjs <project>,打开storyboard.html,请求批准或逐帧注释。
阶段3 — 演员阵容(把关点;如果没有人则跳过)
如果任何帧包含人物,遵循 <skill>/knowledge/casting.md:列出角色,选择风格第4c节命名的库,从 <skill>/casting/library/ 中现成的人物开始,为每个角色着装(服装+道具),使用同一角色的3-4个姿势,运行自检,在选角页面上为每个角色展示2-3个候选人并等待选择。将选择打包到 assets/cast.js。如果没有人,则将阶段设置为 skipped 并用一行说明。
阶段4 — 预览(把关点)
- 语音:
node <skill>/templates/voice.mjs <project>(读取storyboard.json和project.json → voice)。每个节拍一个音频片段,使用免费的本地 Kokoro 语音,进行测量,生成timing.json,合并为assets/vo/full.wav。使用--only B03,B07重做单个节拍。告诉用户总时长和wpm。 - 构建预览部分: 仅构建最能展示视觉效果、人物和动态的20秒场景(通常是钩子加上第一个出现人物的场景),遵循阶段5的构建规则,并对其运行自检。
- 展示前的质量把关(
knowledge/quality-gate.md§3-4):对相同场景类型的参考窗口运行style_compare.py,然后将预览交给一个全新的审查代理,使用templates/reviewer-prompt.md。修复并重复,直到每项评分都达到4分以上(最多3轮)。你永远不会批准自己的渲染。 - 仅将该部分渲染为
renders/preview.mp4(其自己的章节合成,或使用ffmpeg -ss S -t 20的简短草稿剪辑)。将其放入面板,打开,询问:“感觉对吗?在制作完整视频前需要修改什么吗?”在面板旁边显示审查分数和任何仍低于参考的测量值。预览只需几分钟;完整渲染则长得多。
阶段5 — 构建与渲染(最终把关点)
构建。 加载 HyperFrames 技能(/hyperframes,/hyperframes-cli)以遵循渲染合同。从 storyboard.json + timing.json + 风格的第10节构建配方 + 合并后的视觉风格(project.json → look)进行构建。
- 生成
assets/beats.js(计时+旁白单词),使每个提示都可以与一个口语单词关联:提示时间 = 节拍开始时间 + 节拍时长 × 单词索引 ÷ 单词总数。 - 每个脚本板帧对应一个场景组;根据帧的
transition_out(切或平移)改变场景,如果最后一行在可读前离开则延迟切换。 - 3分钟或更长的视频:保持每个章节可独立渲染(参见
knowledge/rendering.md),使得修复时只需重新渲染该章节。 - 对于 Ray Dalio 风格,从
<skill>/templates/kits/dalio-kit.js开始。参考构建:<skill>/examples/cx-ai-budget/。 - 品牌头尾(片头/片尾卡)来自品牌第6节,标志来自其文件夹。
- 在主时间线中注册内联
<script>在 index.html 中(检查器要求)。仅确定性的。 - 遵循风格的第4b节动态规则:人物每1-2秒根据口语单词改变姿势并呼吸;道具逐帧出现;每个场景都有摄像机(漂移+推近);章节内的场景切换是平移或放大过渡。
- 只有用户拥有密钥并同意成本的情况下,才能使用 OpenRouter 生成图片或 B-roll(
knowledge/openrouter.md)。 构建后:运行npx hyperframes check(修复错误;将dead_stretch超过4秒和line_unread视为严重问题)和npx hyperframes snapshot --at <times>;检查每一帧。
音效。 编写 sound.json(背景音乐、淡入淡出、以及每个效果根据节拍+单词触发,来自脚本板的 sfx 和风格的第7节),然后运行 node <skill>/templates/mix.mjs <project>:混合语音、音乐和效果,并将响度标准化为 assets/mix.wav。将合成的 <audio> 指向此文件。首先使用 <skill>/assets/starter-kit/(参见其 MANIFEST.md);仅从 <skill>/assets/sources.md 获取更多内容。
自检(全部执行,在展示任何内容前修复):
- 品牌颜色: 场景中的每个十六进制代码都必须在品牌文件中(或当没有品牌时,在风格调色板中)。
- 无纯文本场景: 除非风格的第14节允许。
- 人物: 每个角色都是选定的演员,没有人被画面边缘裁剪,没有人保持一个姿势超过2秒,没有翻转的人物携带镜像文字。
- 动态: 渲染后,运行
python <skill>/templates/motion_metrics.py renders/draft.mp4;与风格第14节的目标进行比较。任何填写但未达标的数字都需要修复,而非注脚。 - 视觉效果: 将快照与风格视频的参考帧并排放置,询问:观众会认为这是同一种风格吗?
- 观看: 为每个场景制作帧条(
ffmpeg -ss S -t 24 -i video -vf "fps=2.5,scale=320:-1,tile=6x10" strip.jpg),检查空白区域、画面外物体和位置错误的物体。
渲染。 遵循 <skill>/knowledge/rendering.md:首先检查空闲内存并据此选择工作线程数;对于3分钟或更长的视频,使用 node <skill>/templates/render_parts.mjs 分部分渲染。草稿渲染为 renders/draft.mp4,最终版为 renders/final.mp4。
质量把关(对完整草稿再次执行)。 同预览阶段:style_compare.py + 全新审查代理。打磨是首次构建的一部分,而非用户需要请求的内容:在渲染前勾选 quality-gate 第6节的每个检查项。
最终审查(把关点)。 打开视频,请求修复作为简短列表。应用修复,仅重新渲染修改的部分,合并,再次展示。批准后,编写 description.txt:标题选项、两行描述、章节时间戳、致谢(音乐、音效、图画、生成的图片)。标记所有阶段完成,打开面板。
规则
- 绝不展示未通过质量把关的渲染,并且永远不要是你自己批准自己的渲染:由全新的审查代理对照参考进行评分。如果3轮后仍失败,则展示分数并清楚说明哪些方面低于参考。
- 复制参考中好的部分(语音交付、音效、音乐能量、镜头运动、剪辑节奏、图形密度),而不仅仅是视觉外观。对每一项进行对照测量。
- 绝不跳过把关点。在脚本板批准和演员选定之前绝不构建。在预览批准之前绝不渲染完整视频。
- 反馈最终必须转化为经验教训(见上文);同样的错误不能发生两次。
- 一次只问一个问题,并且始终提供用户可以用“是”接受的合理默认值。
- 未经检查(快照、ffprobe、渲染输出)绝不声称步骤成功。
- 未经询问绝不花钱:每次付费生成批次先说明预估成本。
- 每次渲染前检查空闲内存(
knowledge/rendering.md);绝不在可能导致计算机冻结的情况下开始渲染。 - 如果某件事无法做好(例如需要主持人但缺乏素材),则清楚说明并提供最接近的无需主持人选项。
- 所有内容保持在项目文件夹内;绝不删除用户的文件。
此技能中的文件
| 路径 | 说明 |
|---|---|
knowledge/pipeline.md | 五个阶段、反馈循环、文件夹布局、project.json、计时规则 |
knowledge/script-intelligence.md | 头脑风暴→脚本:视频类型、框架、钩子、口语规则、节拍格式 |
knowledge/storyboard.md | 脚本→脚本板:帧模式、方法、审查循环 |
knowledge/casting.md | 演员阵容把关:角色、库、着装、选角页面、打包演员 |
knowledge/rendering.md | 安全渲染:空闲内存规则、工作线程、长视频分部分渲染、部分重新渲染 |
knowledge/openrouter.md | 通过OpenRouter的可选付费图片和视频片段(未测试) |
knowledge/quality-gate.md | 参考研究、计划对照参考、测量、独立审查、作为检查项的经验教训、打磨检查清单 |
templates/style_compare.py | 测量渲染结果…… |
…(原始内容被截断)