关于 make-a-video
make-a-video 是面向 HyperFrames 新手的引导式视频制作技能,可从概念、脚本或大纲开始。它通过访谈、简报审批、分镜、构建和视觉检查等环节,逐步产出 MP4。
主要功能
- 01八个依次进行的访谈与制作关卡
- 02收集目标、脚本、配音、风格和素材
- 03生成待审批的简报与分镜
- 04构建并预览 HyperFrames 合成内容
- 05要求逐帧进行视觉验证
适用场景
- 01将视频概念制作成经过检查的 MP4
- 02编码前规划宣传片、教程或解说视频
- 03根据脚本或大纲制定分镜
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ nateherkai/ herk-edit-kit --skill make-a-video安装后在 Claude Code 中输入/make-a-video确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
references/build-checklist.mdcatalog-intent-map.mdcomposition-scaffold.mdinterview-questions.mdstoryboard-template.mdstyle-intake.md详细介绍
制作视频 — 从入门到完成 MP4 的技能
两个阶段,八道连续关卡。每道关卡都会产出下一道关卡所需的具体产物。不要跳过关卡。
何时使用此技能 — 何时移交
适用场景:
- 用户刚开始接触 HyperFrames,正从一个概念、脚本或大纲着手
- 用户想要端到端的操作指引,而不是框架参考资料
- 用户尚未决定视频格式
移交场景:
- 用户粘贴了 URL,并想制作一个关于该网站的视频 → 调用
/website-to-hyperframes - 用户明确想要 9:16 竖屏对话视频,包含人脸摄像画面和场景叠加层 → 在此运行第 1–4 关,然后从第 5 关起调用
/short-form-edit - 用户询问的是框架规则,而不是视频 → 调用
/hyperframes
两个阶段
- 阶段 1 — 访谈(第 1–4 关): 先通过一轮对话收集所有信息,再编写代码。包括意图、格式、脚本、配音、风格、素材和节奏。整理成
BRIEF.md,并等待用户明确批准。 - 阶段 2 — 构建(第 5–8 关): 搭建框架 → 故事板 → 合成 → lint 检查 → Studio 预览 → 草稿渲染 → 视觉核验 → MP4 预览 → 最终渲染。
第 1 关 · 意图与格式
每次通过 AskUserQuestion 只问一个问题,尽可能使用多选题。
- 这个视频用来做什么?(宣传片 · 社交广告 · 发布预告 · 产品演示 · 教程 · 讲解视频 · 片头/片尾卡片 · 其他)
- 受众是谁?(开放式问题)
- 目标时长?(10–20 秒短片 · 20–45 秒宣传片 · 45–90 秒讲解视频 · 1.5–3 分钟课程 · 自定义)
- 画面比例?(16:9 1920×1080 · 9:16 1080×1920 · 1:1 1080×1080)
- 帧率?(默认 30 · 清晰呈现 UI 用 60 · 电影感用 24)
- 平台 / 交付限制?(文件大小 · 截止时间 · 播放位置)
关卡要求: 六项信息均已收集。如果答案是 9:16 + 人脸摄像,计划在第 5 关移交给 /short-form-edit。
完整问题列表:Read: references/interview-questions.md
第 2 关 · 脚本与配音
- 脚本来源?(粘贴 · 提供大纲 → 我来起草 · 我来录制 · 根据文本生成 TTS · 不需要旁白)
- 如果使用 TTS:配音偏好。根据
npx hyperframes tts --help提供选项,同时了解语速偏好。 - 如果使用人脸摄像:录制方式 · 全屏还是放在角落 · 是否需要转录?(
npx hyperframes transcribe <file> --model small.en --json) - 字幕?(关闭 · 炫酷风格 · 企业风格 · 逐词卡拉 OK · 极简)
关卡要求: 已收集脚本(或已起草),并明确音频方案和字幕方案。
第 3 关 · 风格信息
在询问用户之前,先盘点现有素材。 检查 <workspace-root>/assets/ 和任何项目的 assets/ 文件夹。已有的内容就不要再询问。
然后逐步询问——不必要求用户回答所有问题:
- 是否有风格指南或品牌文档?(粘贴/提供路径 · 没有)
- 配色方案?(十六进制代码 · 没有 — 使用 MOTION_PHILOSOPHY 默认值)
- 字体?(Google Fonts 字体名称 · 文件路径 · 没有 — 使用 Inter + JetBrains Mono 默认值)
- Logo 文件?(路径 · 没有 — 改用文字标识)
- 可供参考氛围的视频?(URL/路径 · 没有)
- 其他素材?(截图 · 产品照片 · B-roll · 音乐 — 列出路径)
- 采用 MOTION_PHILOSOPHY 美学(黑色画布 · 镀铬字体 · 透视网格 · 快速甩镜转场),还是其他风格?
- 节奏?(动感,1–2 秒 · 平衡,2–3 秒 · 舒缓,3–5 秒)
- 音乐?(无 · 环境音垫,0.15 · 背景音乐,0.4 · 完整音乐,0.8 — 如果有音乐文件,请提供路径)
- 片尾 / 行动号召文案?
绝不要擅自替用户设定品牌风格。 只有在用户明确拒绝提供风格时,才使用 MOTION_PHILOSOPHY 默认值。
完整风格流程 + MOTION_PHILOSOPHY 默认值:Read: references/style-intake.md
Gate 4 · 简报综合(构建前的硬性关卡)
- 如果工作区根目录中存在
MOTION_PHILOSOPHY.md,请阅读该文件——若文件存在,则必须阅读。如果文件缺失,请采用references/style-intake.md中的默认设置,并在简报中注明文件缺失。 - 如果项目位置不明确,请询问项目存放在哪里:
- 如果存在
video-projects/→ 使用video-projects/<slug>/ - 否则 → 询问用户
- 如果存在
- 编写
<project-folder>/BRIEF.md:- slug · 意图 · 受众 · 尺寸 · fps · 时长
- 脚本(全文或大纲)
- 配音选择 · 字幕方案 · 出镜方案
- 风格档案:调色板(hex)、字体、logo 路径、参考视频
- 节奏
- 资产清单及路径
- 结尾 / CTA 文案
- 展示简报。等待用户明确批准。 用户没有明确回复“是,开始构建”之前,不要进入 Gate 5。
Gate 5 · 搭建框架与故事板
首先检查是否需要移交
如果简报描述的是 9:16 竖屏对话视频,且包含出镜画面 + 场景叠加层,请立即调用 /short-form-edit 并移交简报。其基于转录文本的工作流涵盖钩子、剪辑、字幕、素材和声音。
否则继续:
搭建框架
mkdir <project-folder>- 如果存在格式相似的同级项目,提出复制其
hyperframes.json+meta.json作为模板。否则,在该文件夹内运行:npx hyperframes init - 使用用户提供的 slug、尺寸和 fps 编辑
meta.json。 - 将提供的资产复制到
<project-folder>/assets/。 - 根据 Gate 3 创建
<project-folder>/assets/style-profile.md——作为调色板 / 字体 / logo 的唯一事实来源。
故事板
使用 references/storyboard-template.md 中的模板生成 <project-folder>/STORYBOARD.md。每个节拍都要包含:
Beat N — TITLE (start–end, duration) — Concept in one sentence
Visual elements: [each element, size, animation, timing]
Motion language: [kind of motion]
Eases used: [3–4 distinct GSAP eases]
Exit: [transition into next beat]
Audio: [VO line / SFX / music layer]
文件顶部:包含场景 · 开始时间 · 时长 · 组合文件的时间表。
提出三段式结构:
- 第一幕(钩子)≈ 时长的 20%
- 第二幕(主体)≈ 55%
- 第三幕(回报 + 结尾,停留 4–6 秒)≈ 25%
(MOTION_PHILOSOPHY §0 Law 9、§1。)
将用户意图映射到目录区块: Read: references/catalog-intent-map.md
**关卡:**展示故事板 + 时间表。反复修改,直到用户批准。
Gate 6 · 构建组合
调用 /hyperframes 获取框架规则。这项技能负责搭建框架和执行规范;/hyperframes 负责确保符合规则。
为每个子组合搭建框架
<div data-composition-id="scene-name" data-start="..." data-duration="...">
<style>[data-composition-id="scene-name"] { /* scoped */ }</style>
<script>
(function(){
const SLOT_DURATION = ...;
const tl = gsap.timeline({ paused: true });
// ... tweens ...
tl.to({}, { duration: SLOT_DURATION }, 0); // anchor — MOTION_PHILOSOPHY Law 11
window.__timelines["scene-name"] = tl;
})();
</script>
</div>
完整样板 + 字幕模式 + 环境背景模式:Read: references/composition-scaffold.md
构建规则
- 在完整组合时长内,将环境背景放置在
data-track-index="0"上。 - **动态文字开场:**逐词错开 0.06–0.10s。
- 在
index.html中,将字幕作为根组合的 body 级同级元素,每个字幕都带有data-track-index ≥ 20。绝不要将字幕放在场景时间线上(MOTION_PHILOSOPHY §3.13)。 - 通过
npx hyperframes add <name>安装目录区块。随后立即将该区块的 CSS 限定到[data-composition-id="..."]——目录区块自带的html, body { ... }规则,在作为子组合加载时会污染父文档。 - **竖屏 + 出镜:**为原生 1920×1080 的出镜画面添加变换包装(
translate+scale),以适配下半屏或全屏模式。(如果最后选择此方案而没有使用/short-form-edit,请认真考虑移交。) - **只应用用户提供的内容。**使用用户的调色板、字体和 logo。不要额外添加任何内容。如果用户选择了 MOTION_PHILOSOPHY 默认设置,请从
references/style-intake.md中提取调色板 + 字体组合。
确定性
不要使用 Math.random()、Date.now() 或渲染时的 fetch()。请使用带种子的 PRNG 或谐波正弦哈希(MOTION_PHILOSOPHY §3.10)。
Gate 7 · Lint → Studio 预览(预览关卡 1 — 必须通过)
npx hyperframes lint— 修复所有错误,并对警告进行分类处理。- 在后台运行
npx hyperframes preview。 - 等待
http://localhost:3002上显示 “Studio running”。 - 将该 URL 以及各个合成的 URL(
http://localhost:3002/?comp=<id>)交给用户。如果项目中有 WebGL 着色器区块,优先提供各个合成的 URL — 软件 WebGL 回退可能会导致主合成卡住。 - **等待用户明确表示“看起来不错,渲染一个草稿”**后再继续。用户没有回应不代表同意。
热重载已开启 — 修改会实时显示。
Gate 8 · 草稿渲染 → 视觉验证 → MP4 预览 → 最终成片
草稿渲染
npx hyperframes render --quality draft --output renders/<slug>-draft.mp4
视觉验证(交付前必须完成)
Lint 通过 ≠ 设计效果理想。提取帧并查看它们。
mkdir -p renders/frames- 针对每个节拍的关键画面和每个转场:
ffmpeg -y -ss <t> -i renders/<slug>-draft.mp4 -frames:v 1 -q:v 2 renders/frames/t<t>.png - 对每个 PNG 调用
Read工具。Read工具会将图像加载到上下文中 — 不要只列出文件名。 - 逐帧确认:没有被裁切的面部;每个场景的面部模式正确;文字清晰易读且符合配色;没有溢出;转场落在预期的文字上;没有空白帧。
- 如果有任何问题:修复 → 重新渲染 → 重新验证。绝不要交付有问题的草稿。
MP4 预览(预览关卡 2 — 必须通过)
npx serve renders -p 8080 -n
不要使用 Python 的 http.server — 它不支持 HTTP Range 请求,拖动播放进度会出问题。
将 http://localhost:8080/<slug>-draft.mp4 交给用户。等待用户明确确认播放效果和音画同步。
最终渲染
npx hyperframes render --quality standard --output renders/<slug>-final.mp4
报告输出路径。完成。
完整的预检和交付前检查清单:Read: references/build-checklist.md
不可妥协的要求(关键约束 — 不得弱化)
- 不得跳过预览关卡 1(Studio)或预览关卡 2(已渲染的 MP4)。 每次构建都必须通过这两个关卡。
- 在提取帧并通过
Read工具查看之前,不得声称渲染已完成。 - 不得在专用项目文件夹之外构建。 绝不要将
index.html放在工作区根目录。 - 在检查用户的工作区之前,不得向用户索要素材。
- 不得省略每个子合成时间轴末尾的
tl.to({}, { duration: SLOT_DURATION }, 0)锚点补间。 请遵守 MOTION_PHILOSOPHY 第 11 条定律。 - 不得在渲染逻辑中使用
Math.random()/Date.now()。 只能使用带种子的哈希。 - 不得给
<video>标签添加class="clip"。 这会导致标签无法正常工作。 - 不得擅自为用户设定品牌。 应先询问;仅当用户明确拒绝时,才回退到 MOTION_PHILOSOPHY 默认值。
参考资料
references/interview-questions.md— 按关卡划分的完整问题库references/style-intake.md— 风格访谈 + MOTION_PHILOSOPHY 默认值references/catalog-intent-map.md— “用户说 X → 安装 Y”references/storyboard-template.md— 逐节拍模板 + 完整示例references/composition-scaffold.md— 作用域样式 + IIFE GSAP 样板代码references/build-checklist.md— 预检 + 交付前关卡
外部(工作区级):
MOTION_PHILOSOPHY.md— 此技能假定存在的唯一外部参考文件。审美基准。如果缺少此文件,可使用references/style-intake.md中的回退方案。
相关技能
/hyperframes— 框架规则,在 Gate 6 调用/hyperframes-cli— init · lint · preview · render · transcribe · tts/hyperframes-registry— 安装目录中的区块/gsap— GSAP 动画参考/short-form-edit— 在 Gate 5 移交,用于 9:16 口播格式/website-to-hyperframes— 如果起始输入是 URL,则在 Gate 1 移交