Communitygithub.com

kaustubhupadhyaya/clip-picker

긴 비디오에서 하이라이트와 좋은 클립을 자동으로 찾아주는 스킬입니다. "좋은 클립 찾아줘", "베스트 장면 뽑아줘", "이 라이딩 영상에서 명장면만 뽑아줘" 같은 요청을 처리합니다.

clip-picker란 무엇인가요?

Clip Picker는 Claude가 비디오를 직접 스트리밍할 수 없는 한계를 극복하기 위해 설계된 AI 에이전트 스킬입니다. 긴 비디오 파일에서 하이라이트를 추출하기 위해, ffmpeg를 사용해 프레임을 타임스탬프가 포함된 접촉 이미지 시트(survey)로 샘플링하고, Claude가 시각적으로 평가하여 선명도와 특정 기준(예: 속도감, 상호작용, 액션, 조명, 참신성)에 따라 후보 클립을 선별합니다. 이후 full-res 프레임을 기반으로 선명도(Laplacian 분산)를 재확인하고, 최종적으로 사용자가 선택할 수 있는 순위가 매겨진 픽 시트(pickboard.html)와 컷 클립(MP4)을 생성합니다. 기본적으로 POV 모터사이클/자전거 라이딩 영상을 위한 평가 기준을 제공하지만, 사용자의 피드백을 받아 어떤 종류의 영상에도 유연하게 대처할 수 있습니다. 지원 플랫폼은 Claude Code, Cursor 등 터미널 기반 AI 코딩 도구이며, 의존성은 ffmpeg/ffprobe, numpy, pillow입니다. 주요 워크플로는 확인(rubric 설정) -> 조사(survey) -> 시각 검토 -> 후보 작성(JSON) -> 선명도 확인(score) -> 픽 시트 제시(board) -> 자르기/마무리의 7단계로 구성됩니다.

지원 대상✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/kaustubhupadhyaya/editor-pack/tree/HEAD/skills/clip-picker

즐겨 사용하는 AI에게 물어보기

이 에이전트 스킬이 미리 로드된 새 채팅을 엽니다.

문서

Clip Picker

긴 영상에서 가치 있는 장면을 찾으세요. 이 모든 방법은 하나의 엄격한 한계를 우회하기 위해 존재합니다:

Claude는 비디오를 볼 수 없습니다. 정지 이미지만 읽을 수 있습니다. 따라서 "좋은 클립 뽑기"는 실제로 다음과 같습니다: 무슨 일이 일어나는지 볼 수 있을 만큼 촘촘하게 영상을 이미지로 샘플링하고, 평가 기준에 따라 판단한 후, 전체 해상도에서 확인한 다음 자릅니다. 트리밍은 간단하고 거의 즉각적이지만; 30분 이상의 영상을 보는 것이 실제 비용입니다 — 이를 예산에 포함시키고 사과하지 마십시오.

스크립트는 scripts/ 디렉토리에 있습니다 (survey.py, score.py, board.py). 이들은 기계적인 부분을 처리합니다; Claude는 그 사이에 시각적 판단을 수행합니다. 의존성: PATH에 ffmpeg/ffprobe, numpy, pillow (이 머신에 모두 설치됨 — [[editor-pack-video-editing-stack]] 참조).

파이프라인

스크래치패드에서 WORKDIR을 선택하십시오 (예: .../scratchpad/clippick). 그런 다음:

1. 평가 기준을 확인합니다. 영상이 POV 모터사이클/사이클링(아래 내장 기본값)이 아니라면, 사용자에게 1-2가지 질문을 합니다: 무엇이 그들에게 좋은 클립인지, 원하는 클립 길이, 출력 비율(16:9 vs 9:16), 그리고 선별 수준(몇 개의 보석 vs 모든 것). 기준에 대한 한 문장의 좋은 설명이 모든 선택을 바꿉니다 — 조사 전에 이를 얻으십시오.

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. 모든 시트를 시각적으로 조사합니다. 각 WORKDIR/montages/*_sheet_*.jpg를 읽습니다. 타임코드에 따라 후보 윈도우를 평가 기준에 매핑합니다. 샘플 사이의 눈 깜짝할 사이에 발생하는 이벤트는 놓칠 수 있습니다 — 시트가 무언가를 암시한다면(모서리의 섬광, 인물), 기록하고 해당 구간을 나중에 더 촘촘히 샘플링합니다.

4. WORKDIR/candidates.json을 작성합니다 — 각 후보 윈도우당 하나의 객체(아래 스키마). 각 윈도우를 15-30초(또는 사용자의 길이)로 유지합니다. 각각에 pick 코드(P01, P02, ... 순위 순서), 한 줄 title(자격이 되는 이유), 그리고 tags를 부여합니다.

5. 전체 해상도 + 선명도에서 확인합니다.

python scripts/score.py --work WORKDIR

각 후보의 전체 해상도 대표 프레임을 가져와, Laplacian 분산(초점 측정)을 점수화하고, review.jpg로 타일링합니다. 읽습니다. 진정으로 흐릿하거나 지루한 것은 제거합니다; 최고의 장면을 포착하기 위해 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 톤 매핑), mp4 옆에 네이티브 <video> 플레이어가 있는 review_player.html을 작성합니다(로컬 재생을 위해 Chrome/Edge에서 열기). 기본 출력은 16:9, 트림 전용, 자르기 없음입니다.

7. 사용자가 선택한 우승자를 자르기/마무리합니다. 픽셀 단위 또는 포맷 선택을 위해 [[editor-pack-video-editing-stack]]의 video-tool-router 스킬을 통해 라우팅합니다(스트림 복사 vs 재인코딩, HLG 가드, Resolve로 그레이딩/안정화/업스케일). 후속 작업을 제안합니다: 플로우 클립의 모션 블러 부스트, 9:16 세로 영상, 컬러, 자막, 몽타주.

선택 기준 (이것이 실제 "선택 방법"입니다)

클립이 보존할 가치가 있으려면 품질 게이트를 통과하고 최소 하나의 "특별" 신호를 가지고 있어야 합니다.

품질 게이트 (모두 충족해야 함)

  • 소스의 일부, 15-30초(기본값, 사용자의 길이를 존중).
  • 주제가 명확하고 안정적 — 주요 피사체(자전거/핸들바, 얼굴, 플레이어)가 선명하고 꾸준히 프레임 안에 있음. 충격/흔들림으로 인한 전체적인 흐림, 초점 불량, 과도하게 밝거나 너무 어두움, 렌즈 가림은 거부.
  • 무언가 일어나고 있음 — 움직임 또는 변화. 유휴/주차/대기 및 단조로운 무언가는 거부.

"특별" 신호 (>=1 필요; 더 많고 강할수록 순위 높음)

  • 속도 / 움직임 — 배경이 모션 블러로 흐려지는 동안 피사체는 선명하게 유지. 이는 긍정적이며, 모션 블러 부스트 편집을 위한 최고의 원재료.
  • 상호작용 — 다른 사람/라이더/차량/동물; 추월, 그룹 라이딩, 누군가 반응하는 장면.
  • 액션 / 다이내믹 — 코너링 & 기울임, 회전, 고도 변화, 트릭, 아슬아슬한 순간.
  • 빛과 환경 — 일출/일몰, 골든 아워, 극적인 구름, 안개/박무, 터널, 전망대 또는 드러나는 장면, 물. 시간에 따른 빛은 가장 큰 "영화적" 요소 중 하나 — 항상 플래그를 지정하십시오.
  • 참신함 — 장면/지형 변화, 입장/퇴장, 주변 몇 분과 시각적으로 다른 모든 것.

"선명하고 흐리지 않음"과 "모션 블러는 좋음"의 조화

주제를 선명하게 유지하고 순간을 의도적으로 만드십시오; 주변 속도 블러는 특징으로 취급하십시오. 전체적인 흐림(충격으로 인한 전체 프레임 번짐)만 거부하십시오. 가슴/바 장착 카메라는 핸들바를 선명하게 유지하면서 배경을 흐릿하게 만듭니다 — 이는 결함이 아니라 원하는 모습입니다.

순위 매기기

순서: 특별 신호의 강도와 희귀성, 그 다음 선명도, 그 다음 다양성(거의 동일한 윈도우 5개를 상위 슬롯에 순위를 매기지 마십시오 — 분위기를 분산시키십시오: 전망대, 블러 플로우, 추월, 분위기 있는 장면). 특정 기준이 단순히 없을 때는 솔직하게 말하십시오(예: 어디에도 일출/일몰이 없음) — 약한 선택을 강요하지 마십시오.

POV 라이딩 프로필 (이 사용자의 영상을 위한 내장 기본값)

모터사이클/사이클링 헬멧 또는 핸들바 캠. 구체적으로: 속도 블러 스윕, 코너링/기울임, 추월 및 그룹 라이딩, 길가의 삶, 안개/박무 및 고갯길 전망, 터널/나무 길을 유지. 건너뛰기: 정지, 신호, 주차, 휴대폰 만지작거리기, 긴 직선 무언가. (이것은 사용자가 마음에 들어했던 클립 세트를 생성한 바로 그 평가 기준입니다.)

candidates.json 스키마

[
  {"pick":"P01","clip":"clip_6318","file":"%USERPROFILE%/Downloads/clip_6318.mov",
   "start":96,"end":120,"hero":104,"title":"높은 나무 터널, 앞에 라이더들, 강한 속도 블러",
   "tags":["speed-blur","scenery"]}
]
  • 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/...); 다른 OS에서는 조정하십시오.

Individual skills in this repo

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

관련 스킬