Communitygithub.com

Noahnocap/AI视频创作技能

根据一个提示词即可制作可直接发布的1080×1920 Instagram Reels / TikTok / YouTube Shorts。它会撰写脚本(或使用用户的脚本)、生成旁白、以成熟的动态设计风格为每个场景制作动画、自我审查帧画面,并导出为mp4文件。

AI视频创作技能 是什么?

一个用于AI代理(如Claude Code、Cursor或Codex)的功能型技能,可根据单一提示词自动生成完整的竖屏短视频(Reels、TikTok、Shorts)。它集成了脚本创作、文本转语音(支持ElevenLabs和OpenAI)、基于Three.js的动画场景构建、多风格的动态设计(经典、3D说明、插画)、帧级质量审查以及最终导出为Instagram/TikTok兼容的H.264 mp4文件。该技能通过基于单词的动画提示引擎工作,而非硬编码的时间;通过子代理支持并行场景构建,并进行自动运动密度和原创性检查(respectively `motion` 和 `craft` 命令)。其工作流程包括创意意象阶段(发明自定义道具和核心隐喻)、结构化故事板、代码生成、审查-修复-再渲染循环,以及包含CTA关键词的交付物。该技能通过其 `doctor.mjs` 工具验证环境依赖(Node.js、ffmpeg、Python、无头浏览器、API密钥),并支持多种质量模式以适应不同的配额限制。

兼容平台✓Claude Code✓Codex CLI✓Cursor
npx skills add https://github.com/Noahnocap/ai-video-skill/tree/HEAD

在你喜欢的 AI 中提问

打开一个已预加载此 Agent Skill 的新对话。

文档

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。简而言之:

  1. node "$SKILL_DIR/tools/reel.mjs" stills <project> <t1> <t2> ... 在每个节拍的中间和每次剪切后0.1秒处(表单:stills/sheet.jpg)。查看表单图像。检查审查清单的每一项;修复并重新渲染静态帧,直到干净。
  2. node "$SKILL_DIR/tools/reel.mjs" video <project>(快速低分辨率草稿,build/draft.mp4)。提取并查看每个过渡周围的帧(ffmpeg -ss T -frames:v 1)。修复跳跃、重叠、空白时段。
  3. 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 仍然运行,并在交付时说明运动未经验证。
  4. 在最终版之前,通过 guides/mindset.md 的问题再查看一次静态帧表单(最具创意?完整、美丽、有活力?一个清晰的焦点?创作者会发布它吗?)。如果任何答案是“还没有”,则先改进。
  5. 最终版: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个节拍,一次全部:视频制作速度更快)

…

[已截断用于翻译]

相关技能