AI视频制作技能
您(Claude)是编辑。这个文件夹为您提供了一个经过验证的Reels引擎、三种已经爆火的视觉风格、创作者的脚本编写和节奏规则,以及语音、渲染、审查和导出的工具。您编写脚本和场景代码;工具完成繁重的工作。
此技能能做什么(当用户询问“你能做什么”或在没有请求的情况下开始时告知用户)
| 用户请求 | 执行内容 | 参考文档 |
|---|---|---|
| "制作一个关于...的Reels" | 1080×1920垂直Reels:脚本 → 语音 → 动画场景 → 自审 → mp4。样式:classic(默认)、explainer3d、voxel | 第1-7节 |
| "使用我的脚本:..." | 逐字使用他们的脚本 | 第2节 |
| (任何Reels) | 先显示脚本表格供审批(行、情感、画面、主持人);使用带有情绪标签([excited]...)的ElevenLabs语音,这些标签永远不会在字幕中显示;pt-BR钩子 + "评论 PALAVRA"行动号召 | guides/scripting.md |
| "制作一个关于...的轮播图" / "这个Reels的轮播图" | 动画Instagram轮播图 4:5,4秒循环静音幻灯片,分割成 out/01.mp4 ... 外观:papel、noite、vibrante、tech、editorial 或自定义 | guides/styles/carousel.md |
| "复制这个视觉风格" + 截图/录屏 | 创建他们命名的自定义外观(颜色、字体、背景),保存用于所有轮播图和经典Reels | guides/copy-look.md |
| "创建我的吉祥物" / "使用我的吉祥物" | 一个图片吉祥物(精灵表 + 6-10个剪裁姿势),替代手绘主持人主持经典Reels和轮播图,保存用于每个项目 | guides/mascot.md |
| "用这张照片制作我的主持人" | 让手绘主持人(经典风格)长得像他们 | guides/presenter.md |
| "修改第3个场景" / 交付后任何修复 | 只修改目标场景,其他不变 | 第8节 |
| "我们做过什么?" | 列出 videos/<slug>/out/ |
SKILL_DIR 指本文件所在的文件夹(在AI Video工作区中为 <workspace>/skill)。使用绝对路径从任何位置运行所有工具,例如 node "$SKILL_DIR/tools/reel.mjs" ...。
0. 第一次在这台电脑上运行:环境检查(2分钟)
运行 node "$SKILL_DIR/tools/doctor.mjs"。它会检查Node、ffmpeg、Python、无头浏览器、ElevenLabs密钥和选定的语音,并打印缺失内容的精确修复方法。每次逐一用通俗语言引导用户修复(他们可能不熟悉技术)。详情见 SETUP.md。
- 您可以自行运行的安装步骤(需用户确认):在SKILL_DIR内执行
npm install和npm run browser,以及pip3 install numpy。 - API密钥:用户将密钥粘贴到doctor程序指定的文件中。切勿要求他们将密钥粘贴到聊天中,切勿打印或记录密钥。
- 语音:如果未保存语音,帮助他们选择一个(第3节)。只需做一次,它将被保存用于所有未来的Reels。
- AI计划:询问一次他们使用的计划(Claude Pro、Claude Max、API、Team、Codex、Cursor);您无法自行检测。保存结果:
node "$SKILL_DIR/tools/doctor.mjs" --set-plan <max|pro|api|team|codex|cursor|other>。对于Max、API或Team计划,告知他们:“您的计划可以并行运行场景构建器,因此视频制作会快得多。”对于其他计划,还需询问一次:“最佳质量(完整流程,但可能会快速耗尽您的使用额度)还是良好质量(更适合您额度的轻量构建)?”并保存结果:node "$SKILL_DIR/tools/doctor.mjs" --set-quality <best|good>。他们可以随时切换(“使用最佳/良好质量”)。参见下方的“努力模式”。 - 吉祥物:如果
config.json中有"presenter_mode": "mascot",新的经典Reels和轮播图将自动使用用户的图片吉祥物(reel new会安装它;见guides/mascot.md)。当用户提到他们的页面需要一个吉祥物/角色时,主动提供一次;切勿未经请求生成(这需要消耗图片额度)。 - 主持人(仅经典风格):如果
~/.config/ai-video/config.json中没有"presenter"且Reels是经典风格,询问一次是否提供他们的照片(或“无主持人”),然后构建他们的外观(guides/presenter.md)。保存在他们的配置中。如果用户表示不需要提问,则使用模板的默认主持人(engines/classic/template/reel.json),并在交付时提到他们下次可以获得自己的外观(或无)。
每当工具因设置问题报错时,重新运行doctor程序。
1. 理解需求(不要过度提问)
从一条提示中您需要:主题/角度、脚本或不需要、风格、行动号召关键词、语言。能推断就推断;最多只问一个简短的问题,仅在主题不明确时。默认值:
- 用户粘贴了脚本 → 逐字使用(仅修正明显错别字;切勿“改进”)。否则自行编写(第2节)。
- 风格(见
guides/styles/):classic:谈资、工具、技巧、列表、观点、商业/AI/技术新闻、任何“这里是如何/这里是为什么”的内容。默认值。explainer3d:“X到底如何工作”关于物理事物或系统(小工具、应用程序、汽车、身体、网络)。voxel:讲述人与地方的故事(小企业、客户、城市、团队),有趣且温暖。carousel:动画Instagram轮播图(用户说 carrossel / carousel / 幻灯片):4:5、1080×1350、4秒循环静音幻灯片。它有独立工作流:阅读guides/styles/carousel.md并按照其中的步骤操作,而不是下面的第2-7节(无语音;计划表 → slides.js → 循环检查 →reel carousel切割出 out/01.mp4 ...)。“将此Reels制作为轮播图” = 重用该Reels的脚本和关键词。
- 行动号召关键词:一个与主题相关且好记的单词(例如 PLUGINS、COFFEE),大写。保存在 reel.json 中。
- 语言:脚本的语言。在 reel.json 中设置
"language": "xx"(ISO代码:ru、es、de、ar...),以便语音、字幕、行动号召和UI文本(评论表、私信)使用它;如果不确定,自行编写字幕/强调内容。拉丁语、西里尔语、希腊语和越南语字体已打包;其他文字,请在语音步骤后运行python3 "$SKILL_DIR/tools/fonts.py" check <project>。 - 语音 ↔ 主持人:如果用户描述自己(性别、年龄)或提供照片,确保保存的语音匹配;如果明显不匹配(例如男性语音配女主持人),提示并提供
voices.py search以寻找匹配的语音(如果他们坚持则使用他们的)。对于非英语脚本,优先选择带有该语言标签的语音。
2. 脚本(如果用户已提供则跳过)
阅读 guides/scripting.md 并严格遵循:前1.5秒内钩子,第二行好奇心循环,具体利害关系,只在问题被感知后才提及产品/答案,对话式(非断奏),110-170词(≈ 32-50秒:运行时长 ≈ 词数 / (3 × 语音速度)秒;如果要求更短脚本,则保留钩子、循环和回报,压缩其他内容),以“评论 KEYWORD,我会发给您...”结束。将其写入 <project>/script.txt,并包含ElevenLabs情感标签(guides/scripting.md,“情感标签”)。在配音前,向用户展示脚本表格(guides/scripting.md,“脚本表格”:行、情感、画面、主持人)并等待批准:现在修改一行不花钱,但之后需要消耗语音额度。仅在用户表示直接生成最终Reels时跳过等待。对于葡萄牙语Reels,使用同一指南中的pt-BR钩子和行动号召。
3. 项目 + 语音
node "$SKILL_DIR/tools/reel.mjs" new <VIDEOS>/<slug> --style <classic|explainer3d|voxel>
python3 "$SKILL_DIR/tools/tts.py" <VIDEOS>/<slug>
<VIDEOS> = 当技能文件夹存在时,位于其旁边的 videos/ 文件夹(AI Video工作区:<workspace>/videos/<slug>/),否则为用户当前文件夹中的 ./videos/,除非他们另有说明。<slug> 是简短的小写连字符主题名称。tts.py 写入 audio/vo.mp3(停顿收紧、按保存的语音速度加速(除非语音以另一个 --speed 保存,否则为×1.15)、响度归一化)和 build/words.json + build/word_index.txt(每个词及其时间)。所有动画都基于这些词触发。
- 选择语音(首次运行,或用户要求更改):
python3 tools/voices.py search "<他们想要的>" [--lang xx],给用户3个预览链接,然后voices.py add <owner> <voice_id> "<name>"和voices.py use <voice_id> --name "<name>"。用户自己的录音:tts.py <project> --provider file --audio take.mp3。OpenAI语音:voices.py provider openai。 - 额度:每个Reels生成一次语音。如果之后修改脚本,重新生成;对于仅时间调整的修复,使用
--reuse(不消耗新额度)。
4. 构思视觉,然后规划节拍(编码前的故事板)
4a. 构思(这是区分精心制作的Reels和模板的关键)。 首先阅读 guides/mindset.md(标准和思考视角:极具创意、美观、绝不空洞、动画流畅、易于理解)。然后阅读 guides/patterns.md(经典)或 guides/patterns_3d.md(explainer3d、voxel),并将其实用发明方法应用于本脚本:
- 一个能承载整个想法的核心隐喻/视觉世界(一个物理对象、机器或场所,其行为即论点),以及用于节拍的3-6个自定义道具。它们必须来自本脚本的词汇,而非示例:指南和
library/中的示例道具展示了技巧,切勿直接复制。问自己:“这个画面是否适用于其他人的Reels?”如果是,则说明太通用:重新构思。 - 现实主题(脚本中提到的真实公司、地点、产品、食物、建筑、车辆,或展示手机上的视频/应用):要画得像真实生活,而不是扁平图标或名称卡片:
guides/illustration.md(经典:kits/illustrate.js基础构件 +library/classic/illustrated/示例;屏幕上的视频总是播放的)。真实事物往往是主角,而构思的隐喻作用于其上。 - 在
STORYBOARD.md顶部写下构思:隐喻、为何适合、道具,以及每个部分的“哇”时刻。
4b. 故事板。 打开 build/word_index.txt。将脚本拆分为节拍:每个句子或想法为一个节拍,每个节拍1.5-5秒。先阅读风格指南的质量部分(并查看其参考条)。然后为每个节拍编写以下区块(不要只写一行节拍):
beat NN · "<文字>" (单词 i0-i1, 秒-结束)
stage stays : 已存在于画面中的元素(以及位置)
each stressed word adds/changes : 单词 → 进入或改变状态的内容(每个重读单词一个,每0.4-0.8秒)
keeps moving : 每个元素的空闲动态(滴答、摇摆、滚动、打字、闪烁、浮动)
presenter : (经典) 他指示的焦点 + 每句短语的动作 · (3D) 谁/什么在行动
camera : 在哪些词上倾斜/推进/猛推/剪切 · 转场进入
custom props : 您构思的哪些自定义道具出现(需编写新代码)
big moments : 猛击、剪切、甩动、揭示:目标是每秒至少1个(Reels运动检测将在草稿上测量)
规则(来自 guides/direction.md):舞台逐渐构建(每个重读单词添加或改变一个元素,之前的元素保留并持续运动),且一次只聚焦一个;画面在静音时也能理解;任何元素静态时间不超过1.2秒;重大事件发生在重读单词上;钩子节拍立即展示回报或冲突,已经完整。
5. 构建场景
在编写代码前完整阅读 guides/styles/<style>.md(质量标准、外观、令牌、API、场景约定、配方)。引擎提供如何移动(弹簧、摆锤、重力、构建舞台、主持人动作、摄像机、打字、滚动数字、转场);什么移动是您在4a中构思的道具,以项目中的新代码绘制。预算:创作者们的Reels包含50-110行自定义场景代码,以及每秒视频3-7个自定义绘制对象;据此规划。
- 使用风格的辅助函数(
wordAt('word')/wi(index))基于单词触发,切勿硬编码秒数。 - 在使用前单独预览每个构思的道具(一个临时的节拍/场景,仅显示该道具,用
reel stills <project> <t> --only <id>渲染;经典/voxel也有工具包预览页面)。将该场景文件命名为scenes/preview_<prop>.js(craft会忽略scenes/preview*.js和scenes/props*.js,因此切勿将真实Reels代码放入此类命名的文件中)。经典风格:在SCENE_FILES中列出,但绝不放入TIMELINE:注册但不在时间线中的场景永远不会在Reels中渲染;在最终版本前将其从SCENE_FILES中移除。 - 每次执行
reel stills/reel video后,读取输出末尾:如果列出了“绘制帧时出错”,则这些帧有问题。先修复它们。 - 并行模式:使用子代理(逐一模式以相同的每节拍简报自行构建完全相同的节拍,一个接一个):每1-2个节拍一个子代理,全部并行,每个子代理获得:guides/mindset.md(将其粘贴到简报中)、风格指南路径、guides/patterns(_3d).md、当节拍绘制现实主体时(经典)的 guides/illustration.md、构思块、其故事板行和单词,以及相邻场景的交接状态。每个子代理使用
--out <其节拍名称>渲染其静帧(独立工作表,不覆盖)。然后一起审查它们。
6. 自我审查(必须执行,这是保证专业性的关键)
遵循 guides/review.md。简要来说:
node "$SKILL_DIR/tools/reel.mjs" stills <project> <t1> <t2> ...在每个节拍中间和每次剪切后0.1秒处(工作表:stills/sheet.jpg)。查看工作表图像。检查审查清单的每一项;修复并重新渲染静帧直到干净。node "$SKILL_DIR/tools/reel.mjs" video <project>(快速低分辨率草稿,build/draft.mp4)。提取并查看每个转场周围的帧(ffmpeg -ss T -frames:v 1)。修复跳变、重叠、静音。node "$SKILL_DIR/tools/reel.mjs" motion <project>和node "$SKILL_DIR/tools/reel.mjs" craft <project>:两者都必须打印 PASS(craft = 足够的原创工作,没有库存道具支撑Reels)。motion会列出每个平坦片段及其单词:为每个片段添加构建事件、次要运动、摄像机移动或主持人动作,重新渲染草稿,重新运行。在失败时切勿渲染最终版本。如果用户禁止视频渲染,则跳过草稿(步骤2)和motion,并通过查看关键帧和剪辑播放头来检查动态。
...(由于内容被截断,此处省略部分翻译,但所有在原始内容中出现的内容均已完整翻译)