Communitygithub.com

kaustubhupadhyaya/clip-picker

从冗长、非结构化的视频中提取精彩短片段。用于用户丢弃一个或多个长视频,并希望找到并剪辑出亮点/最佳时刻的场景——例如“找到好片段”、“挑出最精彩的部分”、“获取这段素材的亮点”、“哪些值得保留”、“剪辑这段骑行/博客/游戏视频”。

clip-picker 是什么?

Clip Picker 是一个 AI 代理技能,旨在解决 Claude 无法直接处理视频流的根本限制。它通过将长视频密集采样为带时间戳的缩略图联系表(contact sheets),让 AI 能够“视觉”评估内容,然后基于预定义或自定义的质量门控和“特殊信号”标准(如速度/运动、交互、动作/动态、光环境、新颖性)对候选片段进行评分和排名。该管道(pipeline)包括调查(survey)、评分(score)和展示板(board)三个阶段:先使用 `survey.py` 采样帧以生成可读的联系表,然后由 AI 编写 `candidates.json` 文件,接着使用 `score.py` 以全分辨率确认清晰度,最后通过 `board.py` 以缩略图或可播放网页形式呈现精选片段列表,并可实际裁剪出片段。该技能内置了一个默认的“POV 摩托车/骑行”评估准则,但通过让 AI 向用户询问 1-2 个关于什么才是“好片段”的问题,它可以泛化到任何类型的视频素材。它主要用于支持 Claude Code、Cursor、Codex 等开发工具,依靠 ffmpeg/ffprobe、numpy 和 pillow 等依赖项,并能自动处理 HDR(HLG/PQ)源文件的色调映射,确保输出兼容浏览器观看的 SDR 视频。

兼容平台✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/kaustubhupadhyaya/editor-pack/tree/HEAD/skills/clip-picker

在你喜欢的 AI 中提问

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

文档

Clip Picker(片段选择器)

从长视频中找出值得保留的片段。整个方法的存在是为了解决一个硬性限制:

Claude 无法观看视频。 它只能读取静态图像。因此,“挑选好片段”实际上就是:将视频足够密集地采样成图像,以便看清发生了什么,根据准则对这些图像进行评判,以全分辨率确认,然后裁剪。修剪操作微不足道且近乎即时;真正观察 30 分钟以上的视频 才是真正的成本——请为此做好预算,无需对此感到抱歉。

脚本位于 scripts/ 目录(survey.py、score.py、board.py)。它们负责处理机械部分;Claude 则在其间进行视觉判断。依赖项:系统 PATH 中的 ffmpeg/ffprobe,numpy,pillow(这些都已在此机器上安装——请参见 [[editor-pack-video-editing-stack]])。

管道(Pipeline)

在暂存区(scratchpad)中选择一个工作目录(WORKDIR,例如 .../scratchpad/clippick)。然后:

1. 确认准则。 如果素材不是 POV 摩托车/骑行(下面的内置默认规则),请向用户提出 1-2 个问题:对他们来说,什么使得一个片段好,所需的片段长度,输出形状(16:9 还是 9:16),以及选择度如何(几个精华片段还是全部都要)。一句好的评判标准就能改变每一个选择——在开始调查之前就要拿到它。

2. 调查——将视频转为可读的联系表。

python scripts/survey.py "C:\path\to\videos_or_dir" --out WORKDIR --interval 4

每 4 秒生成一张缩略图,以 6x6 网格拼接,并印上源时间码。对于快速/事件密集的素材,请使用 --interval 2-3;对于缓慢的素材,请使用 --interval 6-8。它会打印每个片段的规格,并标记 HDR(HLG/PQ)源。对于多个/长 HEVC 片段,此过程会很慢(软件解码是瓶颈)——请后台运行它,并在联系表生成后查看它们。

3. 视觉检查每张联系表。 使用 Read 阅读每个 WORKDIR/montages/*_sheet_*.jpg。根据准则,通过时间码映射候选窗口。采样点之间可能错过的眨眼即逝事件——如果某张联系表暗示了什么(角落的闪光,一个人影),记录下来,并在之后对该区间进行更密集的采样。

4. 生成 WORKDIR/candidates.json ——每个候选窗口对应一个对象(架构如下)。保持每个窗口时长为 15-30 秒(或用户指定的长度)。为每个窗口分配一个 pick 代码(按您的排名顺序为 P01、P02...),一个一行文字的 title(说明其入选理由),以及 tags。

5. 以全分辨率 + 清晰度确认。

python scripts/score.py --work WORKDIR

为每个候选片段拉取一帧全分辨率关键帧,根据拉普拉斯方差(一种对焦度量)评分,并将它们拼接成 review.jpg。使用 Read 查看它。丢弃那些真正模糊/无趣的;调整 start/end 以捕捉最佳节拍。低清晰度 = 整个画面运动拖影——对于流动镜头来说是理想的,而不是拒绝的理由。 编辑后重新运行。

6. 呈现一份排名后的精选片段列表(由用户选择)。

python scripts/board.py --work WORKDIR --mode thumbs     # -> WORKDIR/pickboard.html(可作为 Artifact 发布)

或者,当他们想观看后再选择时,使用一个可播放的展示板,同时也能裁剪片段:

python scripts/board.py --work WORKDIR --mode play --out "%USERPROFILE%\Downloads\clips"

play 模式将每个候选片段裁剪为浏览器友好的 H.264 格式(自动对 HLG/PQ 源进行 HDR->SDR 色调映射),写入 review_player.html 文件,其中包含与 mp4 文件相邻的原生 <video> 播放器(在 Chrome/Edge 中打开以进行本地播放)。默认输出为 16:9,仅修剪,不裁剪。

7. 裁剪/完成用户选择的优胜片段。 对于像素级精确或格式选择,请通过 [[editor-pack-video-editing-stack]] 的 video-tool-router 技能进行路由(流复制与重新编码,HLG 保护,Resolve 用于调色/稳定/放大)。提供后续选项:在流动片段上应用运动模糊增强,9:16 竖版,调色,字幕,蒙太奇。

选择准则(这实际就是“如何挑选”的原理)

当一个片段通过了质量门控并且携带至少一个“特殊”信号时,它就值得保留。

质量门控(必须全部满足)

  • 子集,15-30 秒 的源素材(默认值;尊重用户的时长)。
  • 主体清晰且稳定 ——主要主体(摩托车/把手、面部、玩家)应清晰且在画面中稳定。拒绝因颠簸/抖动导致的全局模糊、失焦、过曝或过暗、镜头遮挡。
  • 有事情发生 ——有运动或变化。拒绝空转/停车/等待以及单调的静止画面。

“特殊”信号(需要 >=1 个;越多且越强的信号 = 排名越高)

  • 速度/运动 ——周围环境因运动模糊而拖影,同时主体保持清晰。这是一个积极信号,也是进行运动模糊增强编辑的主要原始素材。
  • 互动 ——出现其他人/骑手/车辆/动物;超车、团体骑行、某人做出反应。
  • 动作/动态 ——过弯与倾斜、转向、海拔变化、特技、险些发生的情况(near-moment)。
  • 光线与环境 ——日出/日落、黄金时刻、戏剧性的云朵、雾/霾、隧道、远景或豁然开朗的景象、水面。一天中的光线变化是最大的“电影感”杠杆——始终标记它。
  • 新颖性 ——场景/地形的变化、入口/出口、任何在视觉上与周围几分钟不同的东西。

协调“清晰、不模糊”与“运动模糊是好的”

保持主体清晰且瞬间有意;将外围的速度模糊视为一种特性。只拒绝全局模糊(因颠簸而导致整个画面模糊)。胸前或车把安装的相机可以让摩托车主体保持清晰,同时让世界拖影——这正是所追求的效果,而不是缺陷。

排名

排序依据:特殊信号的强度与稀有性,然后是清晰度,最后是多样性(不要将五个几乎相同的窗口排在最前面的位置——要分散不同的风格:一个远景、一段模糊流动、一次超车、一个有氛围的镜头)。当一个标准确实缺失时(例如,整个素材中都没有日出/日落),请诚实地说出来,而不是强行选择弱相关的窗口。

POV 骑行配置文件(此用户素材的内置默认值)

摩托车/自行车头盔或车把摄像头。具体来说:保留高速模糊扫掠、过弯/倾斜、超车与团体骑行、路边生活、雾/霾与山隘远景、隧道/林荫大道。跳过:停车、信号灯、停车、摆弄手机、长时间直线行驶的单调画面。(这正好是用户喜欢的那个剪辑集所依据的准则。)

candidates.json 架构

[
  {"pick":"P01","clip":"clip_6318","file":"%USERPROFILE%/Downloads/clip_6318.mov",
   "start":96,"end":120,"hero":104,"title":"高大树木隧道,前方骑手,强烈速度模糊",
   "tags":["速度模糊","风景"]}
]
  • start/end/hero 的单位是秒。hero 是窗口内一个代表性瞬间(用于缩略图和清晰度评分)——选择最具特征的节拍,不一定是中点。
  • pick 代码同时充当用户选择的句柄(例如“裁剪 P01、P03、P10”)。
  • tags(自由形式,但以下标签会被漂亮地标记):速度模糊(speed-blur)、弯道(corner)、远景(vista)、互动(interaction)、超车(overtake)、氛围(atmosphere)、风景(scenery)、动作(action)、光线(light)、野生动物(wildlife)。

效率与注意事项

  • HEVC/HDR 解码是瓶颈,而不是编辑。对约 30 分钟的 HEVC 视频进行调查需要几分钟的解码时间。只根据素材的密集程度进行采样;后台运行调查和播放模式的编码。
  • HLG/HDR 素材在原始的 SDR H.264 导出中会变灰——board.py play 会自动检测并进行色调映射,但对此类素材的任何手动裁剪也必须这样做。请参阅 video-tool-router 中的 HLG 保护。
  • 按需加速: 如果用户预先明确了风格(“只要山路弯道和隧道模糊”),则以更粗糙的间隔进行调查,仅筛选这些片段,并只编码他们想要的少数几个——这将 20 分钟的流程压缩到几分钟。
  • 不要捏造。 只声称一个采样的帧实际显示的内容。如果不确定是否存在一个 1-2 秒的事件,请在声称之前对该区间进行更密集的采样。
  • Windows 字体路径 在脚本中硬编码(C:/Windows/Fonts/...);在其他操作系统上进行调整。

Individual skills in this repo

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

相关技能