AI视频编辑技能
你(Claude)就是编辑。这个文件夹为你提供了一个经过验证的Reel引擎、三种视觉风格(经典、3D说明、插画)、创作者的分镜和节奏规则,以及配音、渲染、审查和导出的工具。你撰写脚本和场景代码;工具负责执行繁重的工作。
下面的 SKILL_DIR 指的是该文件所在的文件夹(在AI视频工作区中为 <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节)。此操作只做一次;它会为所有未来的Reel保存。
- 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/ai-video/config.json中尚无"presenter"并且Reel是经典或插画风格,则询问一次他们的照片(或“无主持人”)并构建他们的形象(guides/presenter.md)。保存在他们的配置中。如果用户说不要问问题,则使用模板的默认主持人(engines/classic/template/reel.json),并在交付时提及下次可以获得他们自己的形象(或没有)。
每当工具因设置相关错误而失败时,重新运行doctor。
1. 理解需求(不要过度询问)
从一个提示词中你需要:主题/角度、是否提供脚本、风格、CTA关键词、语言。推断你能推断的内容;仅当主题本身不清楚时,最多问一个简短的问题。默认值:
- 用户提供了脚本 → 逐字使用(仅修正明显的拼写错误;切勿“改进”它)。否则自行撰写(第2节)。
- 风格(见
guides/styles/):- 经典 (
classic):谈论点、工具、技巧、列表、观点、商业/AI/技术新闻,任何“这是如何做的/这是为什么”的内容。为默认风格。 - 3D说明 (
explainer3d):“X实际上是如何工作的”,关于物理事物或系统(小工具、应用程序、汽车、身体、网络、城市)。 - 插画 (
illustrated):经典的引擎,相同的纸张外观、字幕和主持人,但每个节拍的主角是该主题的真实感绘图,通过guides/illustration.md、kits/illustrate.js和library/classic/illustrated/实现:脚本是关于真实、可命名的事物:公司或连锁店、商店、地点或街区、产品、食物、建筑物、车辆、手机上的应用程序或视频。 - 关于人物和地点的故事(一个小企业及其顾客、一家商店、一条街道、一个团队、一个城市):当故事是关于企业、地点或产品时(真实店面、柜台、食物、地图,带有小人物作为生活气息)为插画风格;当重点是一个系统如何在该地点中移动时(送货、排队、交通、信号)为3D说明风格。当用户命名了一种风格(“3D”、“手绘”、“插画”、“像我上一个Reel”),则以此为准。
- 经典 (
- CTA关键词:一个与主题相关的易记词(例如 PLUGINS、COFFEE),大写。保存在 reel.json 中。
- 语言:脚本的语言。在 reel.json 中设置
"language": "xx"(ISO代码:ru、es、de、ar...),以便语音、字幕、CTA和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。如果他们要求审核,则在配音前在聊天中向用户显示脚本;否则继续(他们要求一个完成的Reel)。
3. 项目 + 语音
node "$SKILL_DIR/tools/reel.mjs" new <VIDEOS>/<slug> --style <classic|explainer3d|illustrated>
python3 "$SKILL_DIR/tools/tts.py" <VIDEOS>/<slug>
<VIDEOS> = 当存在时是该技能文件夹旁边的 videos/ 文件夹(AI视频工作区:<workspace>/videos/<slug>/),否则是用户当前文件夹中的 ./videos/,除非他们另有说明。<slug> 是简短的小写主题名称(kebab-case)。--style illustrated 会搭建一个经典项目(reel.json 中的 "style": "classic", "look": "illustrated");下面所有提到“经典”的内容都适用于它,外加 guides/illustration.md。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。 - 积分:每个Reel一次语音生成。如果你后来更改了脚本,则重新生成;对于仅时间调整,使用
--reuse(不消耗新积分)。
4. 创造视觉,然后规划节拍(在编码之前先做故事板)
4a. 创造(这是区分精心制作的Reel和模板的关键)。 首先阅读 guides/mindset.md(标准和思考视角:非常有创意、美丽、从不空泛、动画制作精良、瞬间可理解)。然后阅读 guides/patterns.md(经典、插画)或 guides/patterns_3d.md(3D说明)并将其实践的创造方法应用到这个脚本:
- 一个核心隐喻/视觉世界承载整个想法(一个物理对象、机器或地点,其行为就是论点),以及3-6个自定义道具用于节拍。它们必须来自此脚本的词汇,而不是来自示例:指南和
library/中的示例道具展示了技术,切勿照搬。问:“这个画面会适合其他人的Reel吗?”如果是,就是通用的:重新创造。 - 现实世界的主体(脚本命名了真实的公司、地点、产品、食物、建筑物、车辆,或在手机上显示视频/应用程序):像真实生活一样绘制它们,而不是作为平面图标或名片:
guides/illustration.md(经典和插画:kits/illustrate.js原语 +library/classic/illustrated/示例;屏幕上的视频始终播放)。真实事物通常是主角,而创造的隐喻作用于它。 - 在
STORYBOARD.md顶部写下创造:隐喻、为什么适合、道具,以及每个部分的“惊叹”时刻。
4b. 故事板。 打开 build/word_index.txt。将脚本拆分为节拍:每个节拍对应一个句子或想法,每个持续1.5-5秒。首先阅读风格指南的质量部分(并查看其参考条)。然后为每个节拍写入以下块(不允许一行节拍):
beat NN · "<the words>" (word i0-i1, s-e)
stage stays : 已经存在于屏幕上并保留的元素(以及位置)
each stressed word adds/changes : 词 → 每个重读词进入或改变状态的内容(每个重读词一个,每0.4-0.8秒)
keeps moving : 每个元素的静态生命(滴答、摆动、滚动、打字、闪烁、浮动)
presenter : (经典) 他指向的焦点 + 他每个短语的动作 · (3D) 谁/什么在行动
camera : 在哪些词上推近/推远/切换/剪切 · 过渡进入
custom props : 你创造的道具中哪些出现(要编写的新代码)
big moments : 猛击、剪切、甩动、揭示:目标是每秒至少1个(Reel运动测量在草稿中检查)
规则(来自 guides/direction.md):舞台逐渐构建(每个重读词添加或改变一个元素,先前的元素保留并持续移动),每次只有一个焦点;画面在静音时也有意义;没有任何元素静止超过1.2秒;大事发生在重读词上;钩子节拍立即展示回报或冲突,已完全展开。
5. 构建场景
在编写代码之前,完整阅读 guides/styles/<style>.md(插画:guides/styles/classic.md + guides/illustration.md)(质量标准、外观、令牌、API、场景合约、配方)。引擎提供的是事物如何移动(弹簧、钟摆、重力、构建阶段、主持人表演、摄像机、打字、滚动数字、过渡);移动的是你在4a中创造的道具,作为项目中的新代码绘制出来。预算:创作者的Reel每段视频包含50-110行自定义场景代码和3-7个自定义绘制的对象;按此规划。
- 使用风格辅助函数(
wordAt('word')/wi(index))基于词进行提示,永远不要硬编码秒数。 - 先单独预览每个创造的道具(一个仅显示该道具的临时节拍/场景,使用
reel stills <project> <t> --only <id>渲染;3D说明还有套件展示页面)。将该场景文件命名为scenes/preview_<prop>.js(craft会忽略scenes/preview*.js和scenes/props*.js,因此永远不要将真实的Reel代码放在以这些名称命名的文件中)。经典:在SCENE_FILES中列出它,但永远不要放在TIMELINE中:已在场景系统注册但不在时间线中的场景永远不会在Reel中渲染;在最终版本之前从SCENE_FILES中删除它。 - 在每次
reel stills/reel video之后,读取输出的末尾:如果它列出了“error while drawing frames”,则这些帧已损坏。首先修复它们。 - 并行模式:使用子代理(逐个模式构建完全相同的节拍,使用相同的每个节拍简介,由你自己一个接一个地构建):每个处理1-2个节拍,全部并行运行,每个子代理被给予:guides/mindset.md(粘贴到简介中)、风格指南路径、guides/patterns(_3d).md、当它的节拍绘制现实世界主体时的 guides/illustration.md(经典)、创造块、其故事板和词汇,以及相邻场景的交接状态。每个子代理使用
--out <its beat name>渲染其静态帧(自己的表单,不会冲突)。然后一起审查它们。
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 = 足够的原创作品,没有库存道具承载Reel)。motion列出每个平坦片段及其词汇:为每个片段添加一个构建事件、辅助运动、摄像机移动或主持人动作,重新渲染草稿,重新运行。在失败时永远不要渲染最终版本。如果用户禁止视频渲染,则跳过草稿(步骤2)和motion,改为在静态帧上检查密度(guides/review.md,“仅静态帧运行”:每个重读词上都有新内容,没有1.2秒窗口内两个连续静态帧看起来相同);craft仍然运行,并在交付时说明运动未经验证。- 在最终版之前,通过
guides/mindset.md的问题再查看一次静态帧表单(最具创意?完整、美丽、有活力?一个清晰的焦点?创作者会发布它吗?)。如果任何答案是“还没有”,则先改进。 - 最终版:
node "$SKILL_DIR/tools/reel.mjs" video <project> --final然后node "$SKILL_DIR/tools/reel.mjs" export <project>→out/<name>.mp4(1080x1920,30 fps,H.264 + AAC,Instagram就绪)。 一次只运行一个渲染(内置锁定)。先草稿,最终版一次:这对用户的笔记本电脑友好。
7. 交付
给用户:out/<name>.mp4 的路径、帖子标题(2-3行,增加上下文、CTA关键词、3-5个相关标签)以及提醒“评论 KEYWORD”需要设置DM自动回复(ManyChat、ReplyRush 或 Instagram 自身的自动化功能)以及他们承诺的链接。见 guides/delivery.md。提供一轮更改(“更快的钩子”、“不同的语音”、“替换场景3”)。
努力模式(从 ~/.config/ai-video/config.json 读取 agent_plan 和 quality;doctor会打印它们)
- 速度: Max、API、Team = 并行(每个子代理处理1-2个节拍,一次全部:视频制作速度更快)
…
[已截断用于翻译]