Communitygithub.com

kidsavagez/reel

从脚本到成品Reel的全自动管线,包含两处人工审核节点。自动撰写脚本(含特效提示),用户拍摄后挑选最佳镜头、删除停顿与冗余、添加特效/字幕/屏幕文字、生成预览、根据反馈修改并输出最终版本及帖子文案。当用户输入/reel、有视频创意、拖入原始素材、说“edit video ini”、“bikin reel”、对预览提出意见或分享参考剪辑以模仿其风格时使用。

reel 是什么?

这是一个专为AI Agent(如Claude Code)设计的视频Reel自动生产管线,能够将用户的一个视频创意或一段原始素材,完整地转化为一条可直接发布的成品Reel。它遵循“风格参考→脚本撰写→用户拍摄→自动对齐→智能剪辑→特效添加→预览审核→最终输出”的流程,并在“用户批准脚本”和“用户对预览提出反馈”两个关键节点设置了人工审核门控,确保产出符合用户预期。管线支持分析用户提供的参考视频,提取其剪辑节奏、特效密度、字体风格等参数并保存为可复用的“风格”;支持多人对话、多段素材的智能合并与对齐;能自动添加字幕、屏幕文字和51种特效(包括背景、图表、动态文字等);并最终生成最终视频+封面+文案。该工具主要面向短视频创作者,通过将重复性、技术性的剪辑工作自动化,让用户专注于创意和表演。

兼容平台✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/kidsavagez/CLAUDE-VIDEO-PIPLINE/tree/HEAD/.claude/skills/reel

在你喜欢的 AI 中提问

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

文档

reel 是做什么的?

文件位置与首次设置

  • 管线文件夹 = 本技能所在的 video-pipeline 文件夹(位于此文件上方三级:video-pipeline/.claude/skills/reel/SKILL.md)。所有命令均从该文件夹运行。 项目位于其内部的 projects/<日期>-<短横命名>/ 中。
  • PY = 管线自带的 Python。以下所有命令均使用它,切勿使用系统 Python: Windows 上为 .venv/Scripts/python.exe,Mac 或 Linux 上为 .venv/bin/python。
  • 如果 PY 尚不存在,请先进行设置,无需用户输入任何内容: 运行 python install.py(Windows 上为 py install.py,Mac 上为 python3 install.py)。如果遇到“ffmpeg is missing”或“git is missing”而停止,请为用户安装该工具(Windows:winget install ffmpeg / winget install Git.Git;Mac:brew install ffmpeg),如果新命令未找到,告知用户重启 Claude Code,然后再次运行安装。 当安装程序打印 READY 后,运行 PY scripts/selftest.py 并确认输出 9/9 passed。
风格(每个参考一次)-> 1 简报 -> [门控:用户批准脚本] -> 2 拍摄(用户)
-> 3 对齐 -> 4 剪辑 -> 5 特效 -> 6 预览 -> [门控:用户反馈,循环] -> 7 最终版本

您负责撰写、剪辑和渲染。用户负责拍摄、批准和发布。所有内容均不会从此处发布。

0. 从参考视频获取风格(当用户发送参考剪辑时)

  1. PY scripts/style_ref.py <参考视频.mp4> [更多参考视频] --name <风格名称>
  2. 打开其在 styles/refs/<风格名称>/ 中写入的每张图片,并读取 report.json 中的数字。
  3. 编写 styles/<风格名称>.json,仅包含与 styles/default.json 不同的键: 字幕字体/字号/颜色/位置/每组合字数/大写、屏幕文字外观、剪辑紧密程度(cut.max_gap:快速剪辑时更小)、特效间距(effects.min_gap,来自参考节奏)、响度。
  4. 编写 styles/<风格名称>.md:用通俗语言描述剪辑效果。哪些特效(51种)匹配了您看到的动作、屏幕上的动作频率、开头的钩子方式、以及它从不做什么。添加测量到的数字(每分钟剪辑次数、镜头长度)。
  5. 向用户展示 .md 文件,并询问哪些地方理解有误。您看到的只是采样帧,而非运动或声音:请坦诚说明,并要求用户提供他们喜欢的精确时间戳(--at 7.2,12 会抓取这些帧)。

字体:字幕可以使用 vendor/claude-video-effects/fonts/ 中的任何字体(Montserrat, Anton, Archivo Black, Inter, Instrument Serif, Playfair Display, Space Mono, Permanent Marker)或用户拖入 fonts/ 的任何 .ttf/.otf 文件。

1. 简报

  1. PY scripts/new_project.py "<短横命名>" --lang id --style <风格>(lang:id、en 或 auto)。
  2. 如果存在 ~/.claude/youtube/voice.md 或 ~/.claude/instagram/voice.md,请阅读它们。使用用户的语言和语气进行写作。切勿编造任何数字、结果或客户;请询问,或留作 {{angka}}。
  3. 填写 script.json:用户将说出的每句话占一行,角色为 hook / body / cta。
    • 钩子:撰写3个选项,推荐其中一个,使其口语时长保持在约3秒以内。
    • onscreen:钩子的简短文本(以及任何需要标题卡的行)。
    • effects:在某个单词上提示特效:{"fx": "backdrop-word", "on": "GRATIS", "text": "GRATIS"}。 从风格的 .md 中选择。每个效果之间至少间隔 effects.min_gap 秒。并非每行都需要特效。需要使用用户自己片段的效果(orbit, phone-fan, place-in-grid, fan-build, noise, profile-wall, carousel-spin)需要 "images": "<文件夹>"。
    • 图表和计数器(liquid-glass-graph, over-the-shoulder-zoom)仅在有真实数字时使用。
  4. 在旁边编写 brief.md:包含钩子选项、用户将阅读的脚本、每个特效的拍摄注意事项(“第4行:头顶上方留出空间”),以及来自 templates/shooting.md 的拍摄规则。
  5. 门控: 展示脚本并停止。在用户批准之前不要继续。

2. 拍摄(用户)

他们将文件放入 <项目>/raw/ 中。多个文件可以;它们将按名称顺序使用。

3. 对齐

  1. PY scripts/transcribe.py <项目>(首次运行会下载 Whisper 模型)。 录音中多次重启,或剪辑仍然重复某些词?请改用 PY scripts/burst_transcribe.py <项目>:它会独立转录每一段连续语音(使用 large-v3-turbo),因此暂停后的重启永远不会合并到下一个镜头中。如果词语仍然吞没停顿,在对齐前运行 PY scripts/snap_words.py <项目>。
  2. PY scripts/align.py <项目>。以简短形式向用户报告: 缺失的台词、没有完整镜头的台词,以及任何听起来值得保留的即兴发言。除非某句台词缺失,否则不要因此停止;在预览时提及它们。

4. 剪辑

PY scripts/cut.py <项目>

纯语音 Reel(用户只录制语音,画面全部由动态图形构成): 改用 PY scripts/cut_voice.py <项目> -> 生成 work/voice.wav(干净,-16 LUFS)和 work/prog_words.json(每个保留的词及其在剪辑轨道中的时间)。在此基础上构建视觉效果(如果用户有 HyperFrames,则使用它,否则使用用户自己的编辑器)。特效步骤需要人脸,因此跳过它。

无许可证的背景音乐: 如果存在 .venv-music/(通过 python install.py --music 创建),使用以下命令生成背景音乐:.venv-music/<Scripts|bin>/python scripts/music_bed.py work/bed.wav --seconds 30 --seed 1 --prompt "<情绪>, no vocals",监听间隙(如果节奏不均,尝试其他随机种子),并设置 "music": {"file": "<绝对路径>/work/bed.wav", "db": -22}。

5. 特效

  1. PY scripts/effects.py <项目> plan。通过编辑 script.json 中的提示修复任何警告。
  2. PY scripts/effects.py <项目> check,然后查看 work/check/fx_*.png 中的每一张。 如果文字挡脸、被边缘裁剪、或难以辨认,请修复选项(x、y、缩短 text)并再次检查。
  3. PY scripts/effects.py <项目> render。这是最慢的步骤(每一帧都经过人脸追踪)。告知用户正在运行。

6. 预览

  1. PY scripts/finish.py <项目> -> preview/preview_vN.mp4。
  2. PY scripts/finish.py <项目> --check <t1,t2,...>,在每个特效的中间时刻以及另外两三个时段进行检查。查看 PNG 图片:字幕是否与特效冲突、钩子文字是否难以辨认、是否有任何内容遮挡人脸。在展示之前修复。
  3. 门控: 向用户提供预览路径和一份简短的剪辑列表:使用的镜头、被剪掉的内容、特效及其位置。请求反馈。

将反馈转化为修改

反馈修改从哪一步重新运行
“使用第3行的另一个镜头”choices.json {"take": {"3": 1}}对齐
“保留我在0:14说的话”choices.json {"keep_unmatched": ["u3"]}对齐
“删除第5行”choices.json {"drop_lines": [5]}对齐
“剪辑太紧/太松”风格 cut.max_gap、cut.post_pad对齐
“那里不要特效” / “字大一点”script.json 中的特效特效计划
字幕外观、屏幕文字风格 captions / onscreen,或脚本 onscreen完成
音乐script.json "music": {"file": "...", "db": -22}完成

从某个阶段重新运行意味着该阶段之后的所有阶段也需要重新运行。重新运行对齐或剪辑意味着特效需要再次渲染(较慢),因此请先汇总所有反馈。

7. 最终版本

  1. PY scripts/finish.py <项目> --final -> final/final.mp4 和 final/cover.jpg。
  2. 编写 final/caption.md:
    • 前约125个字符需体现钩子;这是信息流在“更多”按钮之前显示的全部内容。
    • 一个行动号召。如果是“评论 关键词”,它需要与视频匹配。
    • 最多5个话题标签,与主题相关,放在末尾。使用用户的语言和语气。
    • 不要编造数字。不要使用“stop scrolling”,不要使用话题标签墙。
  3. 用一句话提醒用户:热门音频需在Instagram内添加,并且由用户自己发布。

规则

  • 风格的 .md 文件是品味的依据。如果对是否添加某个内容不确定,就省略它。
  • 切勿遮挡人脸。切勿缩放超过2倍。
  • 对局限性直言不讳:编辑器能很好地选择镜头和节奏;它无法判断用户的表达表现。如果某个镜头听起来平淡,说“检查第3行的语气”,不要假装您听出了区别。
  • 将 projects/ 排除在 git 之外:原始素材文件大且涉及隐私。

相关技能