Communitygithub.com

anthonytrance/video-editor-skill

使用 FFmpeg 从原始素材编辑短视频:派对和演出花絮、喊话、与演出片段混合的谈话、旅行或 vlog 故事以及任何混合内容。JSON 编辑计划驱动帧精确剪辑、16:9 到 9:16 重构图、移动、调色、文本、标志、音乐和语音闪避;检查器阻止重复素材、黑边和 UI 区域内的文本;了解每个目的地(Reel、Story、carousel、feed、TikTok、Shorts、YouTube)并设计如 9:16 Reel 内的带框正方形;Gemini 记录素材并批评渲染。适用任何多镜头编辑、重剪或“从这些素材制作一个 Reel/Aftermovie/剪辑”。

video-editor-skill 是什么?

这是一个 AI 代理技能,旨在将原始视频素材文件夹转化为精良的短视频。它赋予代理编辑的角色:代理负责构思故事并撰写编辑计划,而脚本则精确执行机械部分,确保剪辑卡点准确、无重复素材、无黑边。该技能支持处理任何混合类型的视频请求(例如聚会花絮、喊话、旅行 vlog 等),并根据简短描述动态决策:驱动剪辑的节奏(音乐拍子、语音、故事时间线)、目标平台及其设计(Reel、Story、TikTok 等)、必须包含的元素以及声音层次。工作流程包括使用 Gemini 记录素材、生成联系表、编写 JSON 编辑计划、验证、草稿/完整渲染、自动检查以及 AI 批评迭代。它支持多种平台(如 Instagram、TikTok、YouTube),并可与社交发布技能(如 xnp-social)协同工作,用于字幕添加和发布。该技能强调诚实限制:使用图片哈希和平均颜色进行相似镜头检测,无自动节拍检测(需提供 BPM)或无面部跟踪(依赖记录和联系表)。

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

在你喜欢的 AI 中提问

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

文档

视频编辑器

将一文件夹的视频片段转化为精良的短视频。代理担任编辑:它决定故事并编写编辑计划,而脚本则精确执行机械部分,使剪辑卡点准确、无意外重复、无黑边。

如果存在 LOCAL.md 请先阅读:它包含了本机的 Python 路径、品牌文件和媒体文件夹。所有者、品牌字体、标志和默认外观存储在品牌文件(~/.video-editor/brand.json,参见 references/brand.md)中,而非脚本中。

仅需修剪或简单裁切、为单个片段添加字幕以及发布的单一剪辑,属于安装环境下的社交技能(对于 XNP:xnp-social)。本技能负责编辑;社交技能负责审核、添加字幕、规划并发布。

没有视频类型列表

每个请求都是混合内容。不要寻找匹配的模板。相反,根据描述,如果视频中途改变性质则分段落,确定以下四项:

  1. 主轴:驱动节奏的因素。 音乐:根据小节和节拍剪切,镜头选择基于能量,高潮是峰值(len 使用 "2bar"、"1beat" 表示)。 语音:单词决定长度,画面在短语结束时剪切,音乐在语音下方闪避(说话镜头的 audio_db,长度以秒为单位)。 故事或时间线:到达、发展、高潮、余韵;在动作和场景变化时剪切,音乐作为背景。 混合情况则每个段落切换主轴:例如一个 6 秒的喊话采用语音主轴,接着演出素材采用音乐节拍主轴;或者旅行故事采用时间线主轴,在演出部分切换为节拍剪辑的蒙太奇。
  2. 目的地和设计。 视频目标平台(Reel、Story、carousel、feed、TikTok、Shorts、YouTube)以及如何使用该空间:全屏展示、带框的正方形、4:5 画面配设计背景,或每个镜头切换。根据素材和目的选择,而非习惯;如果 9:16 裁切会破坏广角时刻,可能需要带框的 Reel、Carousel 或 16:9 回顾。阅读 references/formats.md 了解各平台如何处理画面以及何种设计合适。时长遵循目的地和素材。
  3. 必须包含项。 必须出现且可识别的指定人物、标志、日期、感谢语、特定时刻、一句话字幕。仅当描述确实留空时才询问。
  4. 声音层次。 仅音乐;音乐加人群或环境声略微出现;语音配背景音乐;仅语音。语音需要添加字幕(参见下方字幕部分)。

然后编写计划,设置 "destination",以便画布、安全区域和时长限制随之确定。references/examples.md 展示了四个已处理的描述(派对花絮、喊话、喊话接演出素材、旅行故事)作为推理过程,而非可复制的类型。references/craft.md 包含适用于所有情况的编辑规则。

工作流程

脚本位于 scripts/ 目录;使用 LOCAL.md 中指定的 Python 运行,设置环境变量 PYTHONUTF8=1 PYTHONIOENCODING=utf-8,并确保 FFmpeg 和 ffprobe 在 PATH 中。在工作文件夹(在技能文件夹之外)内操作,包含以下子文件夹:src/、audio/、log/、proxy/、out/、review/、edit.json。

  1. 描述。 素材中的人物及其识别方式、事件、目的、以上四项决策。将其写入 brief.txt;Gemini 将读取。
  2. 记录素材。 运行 gemini.py log WORKDIR src/*.mp4 --context brief.txt --ratio 9:16,为每个视频片段在 log/ 目录下生成 JSON 文件:包含时刻信息(人物位置以分数表示用于裁切)、动作、情绪、能量、声音、语音、质量、9:16 窗口是否能容纳主体、最佳裁切中心以及用途(开场、高潮、反应等)。每个片段约 1 美分成本。记录是线索:在构建前,确认面部、裁切中心和帧上的“最佳时刻”。
  3. 查看。 sheet.py 通过一次 FFmpeg 运行生成带标签的联系表:--every 2 遍历整个片段、--times、通过 a.mp4@3 [email protected] 进行候选比较、--crop 9:16 --cx 0.4 预览源素材的裁切效果、--grid 10 进行裁切规划。自己查看图像;切勿让所有者查看。
  4. 计划。 编写 edit.json(参见 references/edit-format.md)。每个镜头引用不同的时刻;为每个镜头添加注释说明其存在的原因。
  5. 检查。 运行 validate.py edit.json(render.py 也会自动运行并拒绝错误)。错误包括:同一素材使用两次、源素材太短、未知移动、未经许可使用 fit 导致黑边、文本位于平台 UI 区域内、缺少文件、音乐太短。警告包括:同一片段中两个镜头间隔小于 2 秒、相似镜头、节拍不对齐的剪辑、带框源素材内的黑边、靠近 UI 区域的标志。阅读每一条警告并做决定;不要只是忽略。
  6. 草稿渲染。 运行 render.py edit.json --out out/v1-draft.mp4 --draft(半尺寸、快速)。然后运行 sheet.py out/v1-draft.mp4 --plan edit.json --out review/v1.png 显示每个镜头的开头、中间和结尾:检查构图、人物头部、文本位置以及每个镜头是否与注释一致。
  7. 完整渲染。 运行 render.py edit.json --out out/v1.mp4。使用慢速预设,处理 30 秒 4K 素材大约需要 5 分钟;render.py 随后检查文件大小、时长、声音、每个镜头是否有黑条、黑帧以及计划中的 max_mb 限制。
  8. 批评。 运行 gemini.py review out/v1.mp4 --context brief.txt --plan edit.json --out review/v1.json(成本低于 1 美分)。将每条评论视为一个声明:在更改前对照帧或计划进行验证。它曾将正确的文本误称为“不安全”,将正确的日期误认为“拼写错误”。其实际捕捉到的问题是:重复外观的镜头、手遮挡关键动作、画面中有手机、被误认为故障的闪光。
  9. 迭代 使用新的版本号;绝不覆盖已交付的文件。每个版本保留对应的 edit.json(复制为 edit-v2.json),以便任何版本都可以重新渲染。
  10. 交付 按照 LOCAL.md 所述的方式,用文字描述编辑内容(逐镜头、文本内容、音乐峰值位置),并将文件交给社交技能进行审核、添加字幕和发布。发布始终需要所有者的明确批准。

字幕

语音字幕是社交技能的职责:首先渲染编辑内容,然后在其上运行字幕助手(对于 XNP:xnp-social/scripts/captions.py transcribe 对最终渲染文件进行操作,以便单词时间与编辑匹配),遵循其强制性的批准步骤,然后烧录。如果最终时间线已存在批准的 .srt 或 .ass 文件,则计划中的 captions.file 字段将在渲染期间直接烧录该文件。

诚实限制

相似镜头检查使用图片哈希和平均颜色:它能捕捉同一时刻使用两次的情况,但无法捕捉“不同时刻中同一个人同一角度”的语义重复。这种语义检查依赖于 Gemini 的记录和评论以及联系表的阅读。没有自动节拍检测:需提供 BPM 和落拍起点(music.start),然后网格将精确对齐。没有面部跟踪:镜头平移和裁切中心来自记录和联系表。Gemini 的时间码在长片段上可能漂移;代理文件包含烧录的时间码以保持准确性,而 log 命令会在时刻超出片段长度时发出警告。

文件

  • scripts/common.py:计划加载器、时间计算、探测、品牌、调色。
  • scripts/render.py:单次渲染器。
  • scripts/validate.py:检查器。
  • scripts/sheet.py:联系表生成。
  • scripts/gemini.py:记录和批评。
  • 参考资料:formats.md、edit-format.md、craft.md、examples.md、brand.md。

相关技能