Communitygithub.com

anthonytrance/video-editor-skill

FFmpeg를 사용하여 원본 영상에서 단편 비디오를 편집합니다: 애프터파티 및 공연 릴, shout-out 클립, 공연 영상과 혼합된 토크 클립, 여행 또는 브이로그 스토리 등 모든 하이브리드 편집을 지원합니다. JSON 편집 계획이 프레임 단위 컷, 16:9에서 9:16 재구성, 이동, 그레이딩, 텍스트, 로고, 음악 및 음성 덕킹을 구동합니다. 검사기는 재사용된 영상, 레터박스 및 앱 UI 아래 텍스트를 차단하며, 각 플랫폼(Reel, Story, carousel, feed, TikTok, Shorts, YouTube)을 이해하고 9:16 Reel 내부에 프레임된 정사각형과 같은 디자인을 제공합니다. Gemini는 영상을 기록하고 렌더링을 평가합니다. 멀티 샷 편집, 재편집 또는 '이 영상으로 릴/애프터무비/클립 만들기'에 사용하세요.

video-editor-skill란 무엇인가요?

이 스킬은 AI 에이전트(Claude Code, Cursor, Codex 등)가 원본 영상 폴더를 가져와 완성된 단편 비디오(릴, 스토리, 쇼츠 등)로 변환하는 편집 도구입니다. 에이전트는 편집자 역할을 하여 스토리를 결정하고 JSON 형식의 편집 계획(edit.json)을 작성하며, 스크립트는 기계적인 작업(프레임 정확 컷, 9:16 재구성, 그레이딩, 텍스트/로고 추가, 음성 덕킹 등)을 정확히 실행합니다. FFmpeg를 기반으로 하며, 각 플랫폼(Reel, Story, carousel, feed, TikTok, Shorts, YouTube)의 요구사항을 이해하고 최적의 디자인(전면, 프레임된 정사각형 등)을 제공합니다. Gemini API를 사용하여 영상을 분석(로그)하고 렌더링 결과를 비평하여 품질을 높입니다. 주요 워크플로우는 브리프 작성, 영상 로깅, 접촉 시트 생성, 편집 계획 수립 및 검증, 드래프트/풀 렌더링, 비평, 반복 개선, 최종 전달로 구성됩니다.

지원 대상~Claude Code~Codex CLI~Cursor✓Gemini CLI
npx skills add https://github.com/anthonytrance/video-editor-skill/tree/HEAD

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

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

문서

비디오 편집기

클립 폴더를 완성된 단편 비디오로 변환합니다. 에이전트가 편집자 역할을 합니다: 스토리를 결정하고 편집 계획을 작성하며, 스크립트는 기계적인 부분을 정확히 수행하므로 컷이 비트에 맞춰 떨어지고, 어떤 것도 실수로 반복되지 않으며, 레터박스가 생기지 않습니다.

먼저 LOCAL.md 파일이 있으면 읽으십시오: 이 파일에는 이 머신의 Python, 브랜드 파일 및 미디어 폴더 경로가 들어 있습니다. 소유자, 브랜드 폰트, 로고 및 기본 스타일은 브랜드 파일(~/.video-editor/brand.json, references/brand.md 참조)에 저장되며, 스크립트에는 절대 저장되지 않습니다.

트리밍이나 간단한 크롭만 필요한 단일 클립, 한 클립에 자막 추가, 그리고 게시는 설치 환경의 소셜 스킬(XNP의 경우 xnp-social)에 속합니다. 이 스킬은 편집을 수행하고, 해당 스킬은 검토, 자막, 계획 및 게시를 담당합니다.

비디오 유형 목록은 없습니다

모든 요청은 혼합형입니다. 일치하는 템플릿을 찾지 마십시오. 대신 요청서(brief)로부터 네 가지를 결정하십시오. 비디오가 중간에 성격이 바뀌면 섹션별로 결정합니다:

  1. 스파인: 타이밍을 결정하는 요소.
    • 음악: 마디와 비트에 컷, 에너지에 따라 샷 선택, 드롭이 클라이맥스(len은 "2bar", "1beat").
    • 음성: 단어가 길이를 결정, 구절 끝에서 그림 컷, 음악은 목소리 아래로 덕킹(audio_db 토킹 샷, 길이는 초 단위).
    • 스토리 또는 연대기: 도착, 전개, 순간, 여운; 액션 및 장소 변화에 컷, 음악은 배경.
    • 하이브리드는 섹션마다 스파인을 전환: 6초 shout-out은 음성, 그 다음 공연 영상은 비트에; 또는 연대기 기반 여행 스토리 중간에 비트 컷 몽타주.
  2. 목적지 및 디자인. 어디로 가는지(Reel, Story, carousel, feed, TikTok, Shorts, YouTube)와 그 공간을 어떻게 사용할지: 전체 화면, 프레임된 정사각형 또는 디자인된 배경 위의 4:5 그림, 또는 샷마다 전환. 습관이 아닌 영상과 목적에 따라 선택하십시오; 9:16 크롭이 망칠 넓은 순간은 프레임된 Reel, carousel 또는 16:9 요약이 적합할 수 있습니다. 각 플랫폼이 그림을 어떻게 처리하고 각 디자인이 언제 적합한지는 references/formats.md를 읽으십시오. 길이는 목적지와 소재를 따릅니다.
  3. 필수 요소. 반드시 등장하고 식별 가능해야 하는 지명된 인물, 로고, 날짜, 감사 인사, 특정 순간, 자막 라인. 요청서가 정말 하나를 열어두는 경우에만 질문하십시오.
  4. 사운드 레이어. 음악만; 음악과 군중 또는 앰비언스가 살짝; 음성과 그 아래 음악; 음성만. 음성에는 자막이 필요합니다(아래 자막 참조).

그런 다음 계획을 작성하고, "destination"을 설정하면 캔버스, 안전 영역 및 길이 제한이 따릅니다. references/examples.md는 네 가지 작업 예시(애프터파티 릴, shout-out, shout-out에서 공연 영상으로 전환, 여행 스토리)를 복사할 유형이 아닌 추론 과정으로 보여줍니다. references/craft.md에는 모든 예시에 적용되는 편집 규칙이 있습니다.

워크플로우

스크립트는 scripts/에 있습니다; LOCAL.md의 Python, PYTHONUTF8=1 PYTHONIOENCODING=utf-8, FFmpeg 및 ffprobe가 PATH에 있어야 실행합니다. 스킬 외부의 프로젝트 폴더에서 작업하십시오(src/, audio/, log/, proxy/, out/, review/, edit.json).

  1. 브리프(Brief). 영상 속 인물과 내용, 각 인물을 인식하는 방법, 이벤트, 목적, 위의 네 가지 결정 사항. brief.txt에 작성하십시오; Gemini가 읽습니다.
  2. 영상 로깅. gemini.py log WORKDIR src/*.mp4 --context brief.txt --ratio 9:16는 클립별로 log/NAME.json에 다음을 기록합니다: 누가 어디에 있는지(크롭을 위한 x 분수), 액션, 감정, 에너지, 사운드, 음성, 품질, 9:16 창이 피사체를 담는지, 최적의 크롭 중심 및 용도(오프너, 피크, 반응...). 클립당 약 1센트입니다. 로그는 단서입니다: 얼굴, 크롭 중심 및 "최고의 순간"을 프레임에서 확인한 후에 구축하십시오.
  3. 확인(시트). sheet.py는 하나의 FFmpeg 실행으로 레이블이 지정된 접촉 시트를 만듭니다: --every 2로 클립 전체, --times, 후보 비교 a.mp4@3 [email protected], --crop 9:16 --cx 0.4로 소스를 프레임된 상태로 미리보기, --grid 10으로 크롭 계획. 이미지는 직접 읽으십시오; 소유자에게 보지 말라고 요청하지 마십시오.
  4. 계획. edit.json을 작성하십시오(references/edit-format.md 참조). 각 샷은 다른 순간을 지명합니다; 각각에 이유를 적으십시오.
  5. 검증. validate.py edit.json (render.py도 실행하며 오류 시 거부). 오류: 동일한 영상이 두 번 사용됨, 소스가 너무 짧음, 알 수 없는 이동, 허가 없는 박스형 fit, 플랫폼 UI 영역의 텍스트, 누락된 파일, 음악이 너무 짧음. 경고: 같은 클립에서 2초 미만 간격의 샷, 유사한 샷, 비트를 벗어난 컷, 프레임된 소스 내 검은 가장자리, UI 영역 근처 로고. 모든 경고를 읽고 결정하십시오; 단순히 무음 처리하지 마십시오.
  6. 드래프트 렌더. render.py edit.json --out out/v1-draft.mp4 --draft (반 크기, 빠름). 그런 다음 sheet.py out/v1-draft.mp4 --plan edit.json --out review/v1.png는 각 샷의 시작, 중간, 끝을 보여줍니다: 프레임, 머리, 텍스트 배치 및 각 샷이 설명과 일치하는지 확인하십시오.
  7. 풀 렌더. render.py edit.json --out out/v1.mp4. 느린 프리셋, 4K 소스 30초에 약 5분; render.py는 크기, 길이, 사운드, 샷별 검은 막대, 검은 프레임 및 계획의 max_mb를 확인합니다.
  8. 비평. gemini.py review out/v1.mp4 --context brief.txt --plan edit.json --out review/v1.json (1센트 미만). 각 노트를 주장으로 처리하십시오: 무언가 변경하기 전에 프레임이나 계획과 대조하십시오. 올바른 텍스트를 "안전하지 않음"으로, 올바른 날짜를 "오타"로 부른 적이 있습니다. 실제 발견 사항은 반복적으로 보이는 샷, 손이 주요 제스처를 가림, 프레임 내 전화기, 결함으로 읽힌 플래시였습니다.
  9. 반복 새 버전 번호로; 전달된 파일을 절대 덮어쓰지 마십시오. 버전별로 edit.json을 보관하십시오(edit-v2.json으로 복사)하여 모든 버전을 다시 렌더링할 수 있도록 하십시오.
  10. 전달 LOCAL.md에 명시된 방식으로, 편집 내용을 단어로 설명(샷별로, 텍스트 내용, 음악이 피크인 지점)하고, 소셜 스킬로 파일을 넘겨 검토, 자막 및 게시를 진행하십시오. 게시는 항상 소유자의 명시적 승인이 필요합니다.

자막

음성 자막은 소셜 스킬의 작업입니다: 먼저 편집을 렌더링한 다음, 자막 도우미(XNP의 경우 xnp-social/scripts/captions.py transcribe)를 완성된 렌더링에 대해 실행하여 단어 시간이 편집과 일치하도록 하고, 필수 승인 단계를 거친 후 버닝합니다. 최종 타임라인에 대해 승인된 .srt 또는 .ass 파일이 이미 존재하면, 계획의 captions.file이 렌더링 중에 이를 버닝합니다.

정직한 한계

유사 샷 검사는 그림 해시와 평균 색상을 사용합니다: 동일한 순간이 두 번 사용되는 것을 잡지만, 다른 순간에서 "같은 각도의 같은 사람"은 잡지 않습니다. 그 의미론적 검사는 Gemini 로그 및 리뷰와 접촉 시트 읽기에서 나옵니다. 자동 비트 감지는 없습니다: BPM과 다운비트 시작점(music.start)을 제공하면 그리드가 정확합니다. 얼굴 추적은 없습니다: 팬 및 크롭 중심은 로그와 시트에서 나옵니다. Gemini의 타임코드는 긴 클립에서 드리프트할 수 있습니다. 프록시는 타임코드를 버닝하여 정확성을 유지하고, log는 순간이 클립을 지나갈 때 경고합니다.

파일

scripts/common.py 계획 로더, 타이밍 계산, 프로브, 브랜드, 그레이드. scripts/render.py 단일 패스 렌더러. scripts/validate.py 검사기. scripts/sheet.py 접촉 시트. scripts/gemini.py 로깅 및 리뷰. 참조: formats.md, edit-format.md, craft.md, examples.md, brand.md.

관련 스킬