Communitygithub.com

Clipper

将长视频转换为带逐字字幕的竖屏短视频,可直接发布。适用于用户拖入视频(如播客、YouTube视频、演讲录制、直播等)并说“剪辑这个”、“找出最佳片段”、“制作Shorts/Reels/TikTok”或要求生成带字幕的剪辑片段。

Clipper 是什么?

Clipper 是一个本地运行的 AI 技能,专为 Claude Code 等 AI 代理设计,用于自动从长视频中提取精彩片段并生成带字幕的竖屏短视频。它无需任何 API 密钥,所有计算均在用户本地电脑完成,不上传任何数据。技能利用本地 Python 环境中的转写脚本(基于 `faster-whisper`)和剪辑脚本(使用 `ffmpeg`)完成工作:先完整转写视频,然后由 AI 代理智能分析转写文本,挑选出 3 到 5 个最精彩、独立且完整的时刻,最后将这些片段裁剪为 9:16 格式,以说话者面部为中心,并嵌入逐词高亮字幕。该技能支持多种视频格式,能自动检测说话者面部并进行构图,对于无面部画面的片段则使用模糊填充背景。用户可通过简单参数自定义字幕颜色、剪辑数量、长度等设置,最终输出可直接用于社交媒体的短视频文件、封面缩略图和一份包含所有剪辑信息的 Markdown 报告。

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

在你喜欢的 AI 中提问

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

文档

Clipper 是做什么的?

拖入一个视频,Claude 会找到最精彩的时刻,然后将它们转换为带字幕的短视频,可直接发布。

所有操作都在本机运行。不会上传任何内容。技能文件位于 ~/.claude/skills/clipper/ 目录下;其工具是 scripts/transcribe.py 和 scripts/make_clips.py,使用技能自带的 Python 环境执行:~/.claude/skills/clipper/.venv/bin/python。

0. 检查安装(每次运行)

test -x ~/.claude/skills/clipper/.venv/bin/python && command -v ffmpeg

如果任一命令失败,用一句话告知用户,然后运行用户所克隆仓库中的安装脚本(在 clipper-skill 目录下执行 bash install.sh)。如果找不到该目录,则重新克隆: git clone https://github.com/corbinsylk/clipper-skill && cd clipper-skill && bash install.sh。

1. 获取视频

用户拖入文件或提供路径。如果两者都没有提供,则用一句话向用户询问。除非另外指定,否则两个脚本都会在视频文件同目录下使用工作文件夹 <视频名称>-clips/。用户可以提供的设置(否则使用默认值,无需询问):

设置默认值
剪辑数量3 到 5 个,仅限真正精彩的片段
剪辑时长20 到 60 秒(目标是 30 到 45 秒)
字幕颜色米白色 #F5F1EA,当前正在朗读的单词为粘土色 #B03926
字幕开启

2. 转写

~/.claude/skills/clipper/.venv/bin/python ~/.claude/skills/clipper/scripts/transcribe.py "<视频>"

它会首先打印工作文件夹路径。首次运行时会下载一次语音模型(small 模型约 500 MB);一个 2 分钟的视频大约需要 1 分钟,一个 1 小时的视频则需要几分钟。对于超过 10 分钟的视频,以后台命令运行此命令(在 Claude Code 中:使用 Bash 工具的 run_in_background),并告知用户正在处理。如果口音较重或音频质量较差,添加 --model medium 参数。首次运行时的 HF token 警告或速度提示无关紧要。

3. 挑选精彩时刻(这是你的工作,不是脚本的)

完整读取 <工作文件夹>/transcript.md 文件。选出 3 到 5 个最精彩的时刻。一个精彩时刻:

  • 以吸引人的开头句开启。 大胆的主张、令人惊讶的数字、一个问题、一个错误、一个故事的开始。 绝不要以“所以”、“并且”、“嗯”、“正如我所说”或需要依赖前文才能理解的句子开头。
  • 独立成章。 从未看过完整视频的人也能理解。没有指向剪辑外部的“这个”、“那个东西”或“正如我提到的”。
  • 有收尾。 它以答案、笑点、结论或教训结束:一个完整的思想,绝不停在句子中间。
  • 有能量。 观点、细节、数字、情感、转折。跳过问候、赞助广告、活动通知和缓慢的铺垫。
  • 不与其他选择重复。 每个剪辑表达不同的观点,且时间上绝不重叠。较短的视频给出更少的剪辑:时长在 5 分钟以下的视频,通常 1 到 3 个剪辑是正常的;不要为了凑数而拉长或重叠剪 辑。

为每个片段评分 1 到 10 分(综合评估开场、独立性、收尾和能量)。只保留得分 7 分及以上的片段;如果少于 3 个片段达到 7 分,则保留最好的 3 个,并说明这些片段质量较弱。然后写入 <工作文件夹>/moments.json 文件:

[
  {"title": "文件的简短标题", "start": 63.2, "end": 101.8, "score": 9,
   "hook": "剪辑的第一句原文",
   "why": "一行:为什么这个片段有效",
   "caption": "准备发布的帖子文案:一行钩子,然后 2-3 行简短描述,最后是一个问题或行动号召"}
]

start 和 end 是从视频开始处以秒为单位的时间点(转写时间格式为 分钟:秒,所以 01:03.2 = 63.2)。 <工作文件夹>/words.json 包含每个单词及其精确的开始 (s) 和结束 (e) 时间:通过读取它来设定剪辑边界。将 start 设置为钩子句第一个单词的 s 时间,将 end 设置为收尾句最后一个单词的 e 时间。脚本会保留从 start 到 end 之间的单词(有 0.05 秒的容差),并且绝不会截取到前一个或后一个单词,因此要删掉“So”之类的单词,就将 start 设置为下一个单词的 s 时间。

4. 制作剪辑

~/.claude/skills/clipper/.venv/bin/python ~/.claude/skills/clipper/scripts/make_clips.py "<视频>"

可以添加 --text-color "#FFFFFF" --active-color "#FFD400" 来使用其他字幕颜色,或者添加 --no-captions 来去掉字幕。每个剪辑大约需要处理一分钟。 每个剪辑:在单词边界处剪切,重新构图到 1080x1920 分辨率(宽屏视频会围绕说话者面部进行裁剪;如果出现一秒钟或更长时间的没有面部的画面,如图形、屏幕录制或 B-roll,则将其完整显示在模糊填充背景上,而不是被切掉;竖屏视频则保持完整),字幕每次显示三个单词,当前正在说的单词高亮显示,音量标准化到 -14 LUFS 响度标准。

5. 交付前检查

打开每个 clips/NN-*.jpg 文件:每个文件是一张包含整个剪辑中 8 个关键帧的缩略图条。检查所有这些缩略图:

  • 在所有说话的画面中,面部都在画面内,并且字幕在下巴下方正常显示。
  • 如果视频本身已嵌入了字幕(你会看到两套文字),则需要添加 --no-captions 参数重新制作所有剪辑。
  • 每个剪辑,脚本会打印“face in X/Y checks”。如果 X 为 0,表示没有面部可供构图(例如屏幕录制、幻灯片):该剪辑将居中显示,请在报告中说明。在编辑过的视频中,部分画面没有面部是正常的;这些画面会被完整显示。
  • 如果某个剪辑的开头或结尾在单词或思想的中间被打断,请修正 moments.json 中的 start/end 时间,并添加 --only N 参数只重新制作该剪辑。

6. 报告

提供一个简短的列表:每个剪辑的文件名、长度、评分及其入选理由,以及它的发布帖子文案。引导用户查看 clips/scores.md 文件(所有内容都在一个文件中)和 clips/ 文件夹。提供一个下一步操作建议:挑选不同的精彩时刻、更改字幕颜色,或生成更长/更短的剪辑。

相关技能