Communitygithub.com

Jenesyx/reel-split

当用户运行 /reel-split 或请求分屏讲解视频时使用——顶部约 45% 帧区域为动画小工具面板,下方全程显示讲解者,无字幕无音效,典型于“我发现这个工具/这里有 5 个技巧”类视频,基于原始/素材片段。

reel-split 是什么?

该技能用于生成一种特定风格的分屏讲解视频(Reel),顶部约 45% 的帧区域(默认 864 像素高)填充奶油色动画小工具面板(如卡片、仪表、开关、终端、标签),实时可视化讲解者所说的内容;下方以原始比例 1 显示讲解者,始终保持固定位置,无缩放或移动。视频结尾显示评论关键词的大号文字卡片,随后是关注卡片。适用于 Claude Code、Cursor 等平台的 AI agent,支持 macOS/Linux/Windows,基于 FFmpeg、Python 工具链(transcribe、face_track、showcase_build、finish)和 Hyperframes 构建。技能通过解析参数获取片段名称和主题,自动检测是否需要转录、人脸追踪、场景规划,并依据预定义规则(如小工具必须实时对应当前语句、避免属性重叠动画、支持波斯/阿拉伯语 RTL 文本)生成最终视频,最后提供报告供用户验证。

兼容平台✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/Jenesyx/arta-edit-studio/tree/main/.claude/skills/reel-split

在你喜欢的 AI 中提问

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

文档

Reel — 分屏剪辑(45 % 面板覆盖讲解者)

一个固定的奶油色面板占据帧的顶部(1080 × split.panel_height,默认 864 = 45%),显示 UI 风格的小工具——卡片、仪表、开关、终端、标签——精确可视化当前所说的内容。讲解者位于下方,比例为 1,从不移动。结尾:评论关键词以大号字体显示在屏幕上,然后是关注卡片。工作示例:examples/split/(一份真实的 100 秒关于五种 Claude 技能的视频的计划 + 场景模块)。

参数:$ARGUMENTS

默认值(仅当用户明确要求时才更改)

首先读取 reel.config.json(回退到 reel.config.example.json)。

项目默认值
分屏"split": split.panel_height(864 → 面板 45%,讲解者 55%;960 = 50/50)
讲解者比例 1,无缩放,无移动;脸部居中于讲解者区域(speaker_y)
安全框"safe": split.safe = [64, 160, 64, 32] → 场景内容位于 952 × 672 区域内,从顶部向下 160 像素开始(Instagram 头部 / 手机状态栏隐藏顶部)
字幕 / 音效 / 音乐不添加。音频 = 片段本身的混音,由 finish.py 重新封装
片段假设已剪辑、调色、添加音乐 → 直接使用。原始/未剪辑 → 先询问
行动号召(CTA)评论关键词(单词或数字)大号显示在气泡卡片中;关注卡片 "handle": creator.handle,仅文字,绝不使用脸部裁切
调色板split_palette:奶油色面板,墨色文字,强调填充;奶油色背景上的文字使用 accent_deep(对比度)

输入

片段名称和主题来自参数。仅在一个消息中一次性询问缺失的信息:片段是否已剪辑/调色/添加音乐;评论关键词;Whisper 可能听错的人名或术语(工具和产品名称)。

工作流程

PY = .venv/Scripts/python.exe -X utf8(Windows)或 .venv/bin/python -X utf8(macOS/Linux)。耗时步骤在后台运行。

#步骤命令 / 操作检查
1查看ffprobe;联系图 ffmpeg -i raw/<take> -vf fps=1/5,scale=216:384,tile=9x2 -frames:v 1 work/<take>/sheet.jpg 并查看头部上方空墙?已编辑?
2转录$PY tools/transcribe.py <take> --prompt "<names, jargon>"校对工具名称;间隔 > 3 秒 → 重新转录窗口
3人脸$PY tools/face_track.py <take> --split <panel_height>输出 speaker_y
4节拍规划每个想法一个场景,通常 3–7 秒,每个小工具固定在一个口语单词上(提示 = 单词开始)。场景改变内容,从不改变布局
5计划文件work/<take>/showcase.json 基于 examples/split/showcase.json:video("../../raw/<file>"),split,speaker_y,safe,scenes_module,scenes[] {kind, start, end, cue{...}},关注场景的 handle;_note 记录人脸编号
6场景tools/scenes_<slug>.py 基于 examples/split/scenes_5skills.py:每种 kind 有一个 sc_<kind>(i, s) -> (html, js),RENDER 字典,可选的 CSS/JS。坐标在安全框内(宽 952);id 为 s{i}-*;提示时间绝对。sc_comment,sc_follow 为行动号召(CTA)
7构建$PY tools/showcase_build.py <take>;在 work/<take>/sc 中:npx hyperframes lint public → 0 错误;npx hyperframes snapshot public -o ../snaps --no-end --describe false --at <每个场景的中间>;读取图片,修复文本在面板内,不在头部下方
8快速渲染$PY tools/finish.py <take> --seconds 12;读取 work/<take>/sc/quick_sheet.jpg
9完整渲染$PY tools/finish.py <take>(后台)→ final/<take>/,验证,qa/sheet.jpg读取图片
10报告路径、时长、场景、验证结果。如果学到新东西,则添加到此技能中

面板规则

  • 小工具可视化当前正在说的句子:提到仓库时显示仓库卡片,比较时显示仪表,说“不是这个”时显示删除线。
  • 每个场景在下一个场景之前 0.25 秒淡出(构建器自动完成);在场景内部,元素在其提示词上到达。
  • 屏幕上的数字必须是片段中实际计数。
  • 内置于 showcase_build.py 的场景种类(hook,repo,cta,……)早于 45% 安全框,可能溢出;请在 tools/scenes_<slug>.py 中基于 examples/split/scenes_5skills.py 编写种类。
  • 波斯语 / 阿拉伯语文本:.fa 类(元素上 RTL,绝不使用 <html> 上的 dir="rtl"),letter-spacing: 0,通过 fa() 输出数字,大零为拉丁字母 0。
  • 同一属性上无重叠动画补间,无 Math.random / from:"random",滑入动画在 from 状态中携带 autoAlpha:0。
  • 如果任何源片段为 HDR(HLG),首先进行色调映射(tools/story_assets.py 中的 TONEMAP)—— finish.py 会在遇到“HDR 自动提升”时停止。
  • hyperframes snapshot 不是渲染的证明——步骤 8 才是。

Individual skills in this repo

This repo contains 2 individual skills — each has its own dedicated page.

相关技能