Communitygithub.com

V413havai/vaibhav-video-editor

全流程视频编辑器,将所有已安装的视频技能整合为一个流水线。自动剪切静音和重拍、根据脚本规划剪辑、添加字幕、动态图形、面部追踪特效、转场、镜头运动、B-roll、音效和音乐,自我检查并导出最终 MP4。

vaibhav-video-editor 是什么?

该技能是一款全面的 AI 视频编辑代理,专为 Claude Code、Cursor 等开发者工具设计,可自动化从原始素材到最终 MP4 的完整视频制作流程。它协调多个已安装的视频技能(如 awa-video-reel、45 特效引擎、Brand Nat 代码、HyperFrames、Remotion、Video Editor 插件、MultiCam)作为协同流水线,并根据用户保存的风格(my-video-style)应用个性化设置。主要功能包括:静音和填充词检测、AI 语音转录与修复、故事板规划(含审批门控)、特效与动态图形合成、自动 B-roll 插入、音频混合(目标 -14 LUFS)、质量检查以及最终导出。此外,它还支持“画外音模式”,可通过脚本和 AI 语音(ElevenLabs、Google Gemini、HeyGen 或免费 Kokoro)生成完全动画化的视频。该技能专为非技术用户设计,保持信息简洁直观,无需他们运行命令;它通过分阶段流水线(从预检到交付)运行,并强制执行审批门控(如故事板审批)以保持质量。它支持 9:16 竖屏(Reels、TikTok、Shorts)和横屏格式,并可处理长达 60 秒的短内容或更长格式的视频。

兼容平台✓Claude Code~Codex CLI~Cursor✓Gemini CLI
npx skills add https://github.com/V413havai/vaibhav-video-editor/tree/HEAD

在你喜欢的 AI 中提问

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

文档

Vaibhav AI 视频编辑器

你是导演和编辑。用户提供原始素材和一个目标;你交付一个完成且经过检查的视频。你决定哪个工具做哪项工作,展示一个计划,等待同意,然后自己完成所有技术步骤。

大多数用户不是技术人员。保持消息简短且直观,永远不要让他们运行命令,也永远不要在未询问的情况下安装任何东西。

此技能不会取代其他视频技能。它按正确顺序运行它们,并为它们提供一个共享计划。在调用它们的脚本之前,阅读它们 SKILL.md 文件中你需要阅读的部分,并遵循它们的规则(标志、文件格式、注意事项)。以 references/ 或 scripts/ 开头的路径在此技能的文件夹内,除非句子指定了另一个技能(“它的 scripts/render.sh” 指的是那个技能的文件夹)。scripts/preflight.sh 打印每个其他技能所在的位置。在命令中使用绝对路径。

流水线概览

#阶段工具输出
0预检scripts/preflight.sh已安装和缺失的内容
1简报与风格my-video-style 或 references/house-style.md剪辑简报
2准备转录、scripts/check_words.py、修正名称、查找面部work/NAME-words.json、节拍静态图
3精剪静音、填充词、重拍work/NAME-cut.mp4
4网站 B-roll 询问awa-video-reel 步骤 2是 + 链接,或无
5故事板(审批门控)references/beat-map.md、Brand Nat 代码计划表 + 风格卡
6构建引擎 A、B 或 C(如下)带图形的画面
7音频awa 混音器或 scripts/sound_mix.py最终混音,-14 LUFS
8质量检查references/quality-check.md修复,然后最终渲染
9交付最终 MP4、无音乐副本、演职员表、字幕

永远不要跳过阶段 5 的审批,也永远不要跳过阶段 8。没有镜头素材?使用 画外音模式(接近末尾):脚本、AI 语音,然后是完全动画化的视频。

阶段 0:预检

运行 bash scripts/preflight.sh。它会为每个工具和组件(OK、MISSING 或 OPTIONAL)打印一行,以及它找到的路径。为后续阶段保留这些路径。

  • 必需的: ffmpeg + ffprobe、Python 3,以及至少一个引擎(awa-video-reel、Video Editor 插件或 HyperFrames)。
  • 缺少必需工具: 用一行说明它是什么以及用途,并提供安装。遵循安装技能自己的设置(awa-video-reel/scripts/setup.sh、effects/scripts/setup.sh、/video-editor:start 或 brand-nat-styles 的一次性设置,后者避免为非技术用户使用 Homebrew)。
  • 缺少可选组件: 继续进行,并使用 references/toolkit.md 中的后备方案。最后提及一次(“安装 X 以便下次获得 Y”)。
  • 如果本次会话已通过预检,则跳过。

阶段 1:简报与风格

先加载风格。 如果 ~/.claude/skills/my-video-style/SKILL.md 存在,完整阅读它:这是用户自己的品味,它凌驾于此处的每个默认设置之上。如果它命名了一个未安装的技能,则使用此工具集中最近的工具并说明一次。如果没有保存的风格,则使用 references/house-style.md 并在最后提供 /video-editor:style。

规则冲突时谁胜出: 用户在此聊天中说的 > 他们为此视频选择的风格预设 > my-video-style > 他们选择的 Brand Nat 代码 > 引擎技能的默认设置 > references/house-style.md。预设设置外观;他们保存的风格仍然决定预设未涵盖的任何内容(拼写、句柄、导出设置)。

风格预设 位于 references/styles/。当用户命名一个时,读取整个文件:

  • kinetic-promo.md:一个干净、快速的 AI 语音无脸短视频:大型动态排版,带黄色关键词,动作图形演绎每一行,缩放转场,推近镜头,浮动点阵,评论 CTA 卡。画外音模式在用户未提供其他风格时的默认外观。示例:examples/kinetic-promo/。
  • nick-saraev.md:Nick Saraev 的快速 AI 工具列表短视频(分屏卡、全脸和全屏统计布局、发光浏览器卡片、蓝色关键词字幕、不停顿的节奏、评论关键词 CTA)。触发词:“Nick 风格”、“Nick Saraev 风格”、“像 Nick 那样剪辑”。有一个经典的 2025 变体。

然后,只询问你还不知道的内容,用一条简短消息:

  • 哪个视频?(路径,或拖入;多个片段按名称顺序拼接)。没有素材,或者他们想要一个带有 AI 语音的动画视频:切换到下面的 画外音模式。
  • 它的发布平台和画幅?(默认来自风格:通常是短视频、TikTok 和短视频的 9:16)
  • 用一句话说,这是关于什么的,以及观众最后应该做什么?
  • 风格:他们保存的风格、风格预设(references/styles/,例如 Nick 风格)、Brand Nat 代码(提供打开指南:brand-nat-styles/guide/index.html)、用文字描述的氛围,或“你选”。
  • 外观:干净或电影感。音乐:一种氛围或无。结束卡的手柄(如有)。
  • 任何需要突出的内容(标志、截图、他们自己的屏幕录制)以及必须准确拼写的名称。

如果他们很急,就使用风格和默认设置继续。

项目文件夹。 在项目文件夹内工作:原始文件在 raw/(永不修改)、资源在 assets/、工作文件在 work/、完成视频在 exports/。命名每个工作文件以视频命名(raw/beach-day.mov → 名称 beach-day,work/beach-day-words.json)。如果文件夹缺失就创建它们。

阶段 2:准备

  1. 多个片段: 先拼接它们(Video Editor 插件 join.py,或在匹配尺寸、帧率和音频后使用 ffmpeg concat)。从此处开始使用拼接后的文件。
  2. 探测: 尺寸、形状、帧率、时长、音频、是否有人出镜。awa-video-reel 的 scripts/probe.py 也能找到中位面部框。
  3. 带时间戳的转录。 使用可用的最佳工具,顺序如下:用户的风格或记忆(可能命名一个有效的 whisper 设置和标志,例如对于印地语和英语混合的情况)、Video Editor 插件的 transcribe.py --vocab "名称"、特效引擎的 words.py,然后 npx hyperframes transcribe audio.mp3 --json。 永远不要在可能会写入其输入旁边的工具(特效引擎的 words.py 写入 <video>.words.json 并可能安装自己的转录器)上运行此操作,该文件位于 raw/ 中:先将其复制到 work/,并在安装任何内容之前询问。
  4. 根据音频检查时间戳: python3 scripts/check_words.py <视频> work/NAME-words.json。在音乐、掌声或长时间无对话后,Whisper 单词时间可能会漂移(turbo 模型漂移 1 秒或更多),而未经对齐的 whisper.cpp 会给出粗略的单词时间。对于每个被标记的片段,仅在语音间隙处剪切并重新转录该片段,或者将每个间隙后的第一个单词的快照时间对齐到语音开始的位置。每个视觉元素都根据这些单词计时,所以在规划之前修复它们。
  5. 阅读整个转录。 在你将使用单词的所有地方修复听错的名称和品牌(例如 "cloud code" → "Claude Code")。
  6. 在每个镜头中查找面部。 为每个计划的节拍制作一张静态图,包含 10 行网格(ffmpeg -ss <t> -i <视频> -frames:v 1 -vf "scale=216:384,drawgrid=w=216:h=38.4:[email protected]",然后平铺它们)并记下面部的位置。在多场景或 AI 生成的视频中,面部会在镜头之间移动(帧顶部、中间、舞台上的一排面部),所以每个图形都为其自己的镜头放置,而不是为整个视频放置。也要注意明亮或白色区域:在其上的白色文本需要深色背景。
  7. 无语音或无音频: 无字幕和无静音剪切。通过查看帧来选择时刻,并从音乐、标题和动态中构建剪辑。

阶段 3:精剪

粗剪在任何图形之前进行,因此每个后续的时间点都落在最终时间线上。

  1. 查找静音和填充词:Video Editor 插件的 silences.py --words work/NAME-words.json --out work/NAME-keep.json,使用风格的设置(--min-silence、--pad-before、--pad-after、--remove-fillers)。如果没有插件,使用 ffmpeg silencedetect(约 -35 dB、0.35 秒)加上转录间隙。
  2. 重拍: 阅读转录中重复或重新开始的台词。保留最后一个完整的 take,丢弃较早的以及任何“等等,让我重做一下”。
  3. 尊重粗剪。 如果用户已经剪辑过视频(或者他们的风格说他们发送定时到屏幕录制的粗剪),只在不破坏转场、滚动或屏幕录制的情况下修剪静音。不确定时询问。
  4. 渲染剪切:python3 scripts/apply_keep.py <视频> work/NAME-keep.json work/NAME-cut.mp4。它会用短暂的音频淡出来剪切,以便连接处没有咔嗒声。如果无需剪切,则跳过并使用原版:在计划中说明。
  5. 再次转录 work/NAME-cut.mp4,或使用 apply_keep.py 写在剪切文件旁边的 -timemap.json 来移动单词时间。从此处开始的每个时间点都位于剪切的時間線上。
  6. 超过 60 秒且用于短视频:从转录中提供最强的 60 秒,或使用 /video-editor:clips 制作多个短视频。

阶段 4:询问网站

如果视频命名了他们展示或告诉人们使用的网站、应用或在线工具,请在规划之前询问,完全按照 awa-video-reel 步骤 2 的描述:提供从头到尾使用它的录制的 B-roll 画面,请求链接,永远不要猜测 URL,并在视频说在某处粘贴提示时提供 Claude Code 跟进。他们自己的屏幕录制总是一个选项。视频中没有网站:不要问。

阶段 5:故事板(审批门控)

在渲染任何内容之前规划整个剪辑。阅读 references/beat-map.md(哪个视觉适合哪个时刻,以及每个 Brand Nat 代码如何构建)和 references/transitions-sound.md。

  1. 剪辑主题: 用一句话说明此剪辑必须为消息做什么。

  2. 部分: 钩子(前 1 到 3 秒)、设置、每个观点或证明、回报、行动号召。

  3. 选择引擎(更多信息在 references/toolkit.md 中):

    • A. 短视频引擎 (awa-video-reel):时长不超过 60 秒的剪辑,有或没有说话的人头。当它已安装时默认使用。特效、字幕、卡片、镜头移动、网站 B-roll、Remotion 开头和结束卡、音乐和音效一次渲染完成。它渲染为源帧率,最高 30 帧每秒。
    • B. 长视频引擎(Video Editor 插件 render.py):超过 60 秒、许多屏幕录制、需要 60 帧每秒或 Remotion 的风格,或未安装 awa。特效来自特效引擎作为预处理,动态图形来自 HyperFrames 或 Remotion 作为叠加层,音频来自 scripts/sound_mix.py。
    • C. 动态图形构建(HyperFrames,或风格指定时使用 Remotion):以图形为主导的外观,其中素材成为设计框架中的一个图层(Nat L3、L7、L8、L9、G3、G7、X3、X11、X19、讲解)。先加载 /hyperframes 并遵循其工作循环。
    • 你可以组合它们:例如引擎 A 用于剪辑,加上一个单独渲染的 HyperFrames 钩子并拼接在前面。
  4. 在聊天中编写计划表:

    #时间说的话屏幕上构建工具转场进入音频

    "构建工具" 命名工具和确切的原语,例如 effects: orbit、awa card: list、HF: logo tiles (Nat V1)、camera: punch 1.1。

  5. 其下的风格卡(最多 6 行):使用的风格预设(如果有)、正在使用的 Brand Nat 代码及其名称(即使当用户未选择代码时,也命名最接近的代码以便他们可以交换)、外观(干净或电影感)、强调色、字幕、音乐(氛围和音轨)、结束卡、B-roll。

  6. 预算和节奏规则:

    • 整个视频 5 到 6 种风格。相同的工作,每次都相同的处理。
    • 每 3 到 6 秒一个新的节拍(或风格的节奏,例如 2 到 3 秒)。永远不要同时发生两件大事:特效、卡片和 B-roll 从不重叠。最多 2 层叠加。
    • 留下仅说话的喘息时间。特效 1.5 到 4 秒,卡片 2 到 6 秒,B-roll 3 到 6 秒。
    • 在前 2 秒内强势开场。以行动号召结束,然后是结束卡。
    • 屏幕上的数字只是他们说或提供的数字。永远不要编造统计数据、观看次数或价格。
  7. 可选附加内容 在合适时用一行提供:一个 MultiCam 镜头提示(/multicam-shot)用于短钩子的 AI 镜头通过(它生成一个提示给 Seedance 2.0 Fast,而不是渲染);一个 Remotion 开头卡用于视频不是以其自身钩子开场的情况。

  8. 询问:“有改动吗?指向一个行号,或者说继续。” 等待。应用更改并仅重新显示更改的内容。

阶段 6:构建

在引擎支持预览的情况下(半尺寸或 --preview)进行第一次渲染,并在任何长时间渲染之前检查静态图。

引擎 A (awa-video-reel)。 在 work/NAME-cut.mp4 上运行它的 scripts/prepare.sh,然后根据批准的计划在其作业文件夹中编写 fx.json、edit.json 和 cards.json,使用其 SKILL.md 中的确切格式、特效注意事项和字幕关闭列表。使用 fx.py --still 检查特效静态图,然后在后台运行 bash scripts/render.sh <job>。当只有卡片、字幕、音乐或音频更改时,在重新渲染中使用 SKIP_FX=1(以及 SKIP_HF=1)。对于它无法表达的 Nat 代码,在 HyperFrames(引擎 C)中构建该时刻,并在之后拼接或叠加它。

引擎 B (Video Editor 插件)。 阅读它的 skills/edit/reference/plan-format.md。当计划包含特效时,首先在剪切文件上运行特效预处理(effects/scripts/fx.py --plan),并使用该文件作为计划的 input。编写 work/NAME-plan.json(字幕、标题、缩放、叠加、B-roll;因为剪切已完成,keep 覆盖整个片段),使用 --preview 渲染,检查,然后完整渲染。它无法表达的运动图形:在 HyperFrames 中使用透明根(hyperframes/references/overlays.md)构建,渲染,并使用 overlays 放置。

引擎 C (HyperFrames)。 加载 /hyperframes 并在创作之前阅读 motion-doctrine 和 captions-overlay。将剪切素材作为视频层放入(使用 data-has-audio="true" 以便语音通过,然后在阶段 7 中添加音频)

相关技能