Communitygithub.com

browser-use/video-use

대화를 통해 모든 비디오를 편집하세요. 자막 생성, 컷 편집, 컬러 그레이딩, 오버레이 애니메이션 생성, 자막 굽기까지 — 토킹 헤드, 몽타주, 튜토리얼, 여행, 인터뷰 등 모든 영상에 사용 가능합니다. 프리셋도 메뉴도 없습니다. 질문하고, 계획을 확인하고, 실행하고, 반복하고, 결과를 저장하세요. 제작 정확성 규칙은 엄격히 지키며, 그 외 모든 것은 예술적 자유입니다.

video-use란 무엇인가요?

이 스킬은 AI 에이전트(예: Claude Code, Cursor, Codex)가 사용자와의 자연어 대화를 통해 전문적인 비디오 편집을 수행할 수 있도록 설계되었습니다. 사용자는 복잡한 편집 도구나 프리셋 없이도 단순한 대화만으로 자막 생성, 컷 편집, 컬러 그레이딩, 애니메이션 오버레이, 자막 굽기 등 모든 편집 과정을 지시할 수 있습니다. 이 스킬은 음성(오디오)을 우선으로 처리하며, 화면(비주얼)은 결정 시점에만 분석하는 원칙을 따릅니다. 핵심 워크플로우는 '질문 → 확인 → 실행 → 반복 → 저장'이며, 사용자가 편집 전략을 승인하기 전까지는 절대 컷을 건드리지 않습니다. 특히, '질문-답변' 형태로 진행되며, 모든 편집 결정은 사용자의 명시적인 확인을 거쳐 실행됩니다. 이 스킬은 ffmpeg, PIL(Python Imaging Library), HyperFrames, Remotion, Manim 등 다양한 도구를 활용하여 거의 모든 형식의 비디오 편집을 지원합니다. 제작 정확성을 위한 12가지 엄격한 규칙(Hard Rules)이 존재하며, 이는 비디오 출력의 품질과 일관성을 보장합니다. 사용자는 편집 과정 전반에 걸쳐 예술적 자유를 누리며, 스킬은 사용자의 취향과 영상 특성에 맞춰 유연하게 대응합니다.

지원 대상✓Claude Code✓Codex CLI~Cursor
npx skills add browser-use/video-use

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

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

문서

Video Use (비디오 사용)

원칙

  1. LLM은 원시 트랜스크립트와 요청 시 제공되는 비주얼을 기반으로 추론합니다. 유일하게 가치 있는 파생 아티팩트는 구(phrase) 수준의 압축된 트랜스크립트(takes_packed.md)입니다. 그 외 모든 것(필러 태깅, 재테이크 감지, 샷 분류, 강조 점수)은 결정 시점에 직접 도출합니다.
  2. 오디오가 우선이며, 비주얼은 그 뒤를 따릅니다. 컷 후보는 음성 경계와 무음 간격에서 나옵니다. 비주얼은 결정 시점에만 집중적으로 분석합니다.
  3. 질문 → 확인 → 실행 → 반복 → 저장. 사용자가 평이한 영어로 전략을 확인하기 전까지는 절대 컷을 건드리지 마십시오.
  4. 일반화하세요. 이 비디오가 어떤 종류인지 가정하지 마십시오. 자료를 살펴보고, 사용자에게 질문한 후 편집하세요.
  5. 예술적 자유가 기본값입니다. 이 문서에 있는 모든 특정 값, 프리셋, 글꼴, 색상, 지속 시간, 피치 구조, 기법은 하나의 검증된 비디오에서 가져온 실제 작업 예시입니다. 이는 명령이 아닙니다. 무엇이 가능하고 왜 각각이 효과적이었는지 이해하기 위해 읽어보십시오. 그런 다음 실제 자료가 무엇이고 사용자가 실제로 원하는 것이 무엇인지에 따라 자신의 취향을 반영하여 결정을 내리십시오. 반드시 해야 하는 일은 아래 '엄격한 규칙' 섹션에만 있습니다. 그 외 모든 것은 여러분의 자유입니다.
  6. 자유롭게 창안하십시오. 여기에 설명되지 않은 기법(분할 화면, PIP(Picture-in-Picture), 하단 서드 아이덴티티 카드, 리액션 컷, 스피드 램프, 프리즈 프레임, 크로스페이드, 매치 컷, L-컷, J-컷, 호흡에 맞춘 스피드 램프 등)이 자료에 필요하다면 이를 구축하십시오. 도우미는 ffmpeg와 PIL입니다. 이들은 포맷이 지원하는 모든 것을 할 수 있습니다. 허락을 기다리지 마십시오.
  7. 사용자에게 보여주기 전에 자신의 출력물을 직접 검증하십시오. 당신이 출시할 생각이 없는 출력물이라면, 제시하지 마십시오.

엄격한 규칙 (제작 정확성 — 타협 불가)

이것들은 위반 시 자동으로 실패하거나 깨진 출력물을 생성하는 항목들입니다. 취향의 문제가 아니라 정확성의 문제입니다. 반드시 숙지하십시오.

  1. 자막은 필터 체인에서 오버레이 다음, 즉 마지막에 적용됩니다. 그렇지 않으면 오버레이가 자막을 가립니다. 자동 실패.
  2. 세그먼트별 추출 후 무손실 -c copy 연쇄(concat) 방식 사용. 단일 패스 필터그래프를 사용하지 마십시오. 그렇지 않으면 오버레이가 추가될 때 모든 세그먼트가 두 번 인코딩됩니다.
  3. 모든 세그먼트 경계에 30ms 오디오 페이드 적용 (afade=t=in:st=0:d=0.03,afade=t=out:st={dur-0.03}:d=0.03). 그렇지 않으면 모든 컷에서 들을 수 있는 '팝' 노이즈가 발생합니다.
  4. 오버레이는 setpts=PTS-STARTPTS+T/TB를 사용하여 오버레이의 프레임 0을 해당 윈도우의 시작점으로 이동합니다. 그렇지 않으면 오버레이 윈도우 동안 애니메이션의 중간 부분이 보입니다.
  5. 마스터 SRT는 출력 타임라인 오프셋을 사용합니다: output_time = word.start - segment_start + segment_offset. 그렇지 않으면 세그먼트 연결 후 자막이 정렬되지 않습니다.
  6. 단어 중간에서 절대 컷하지 마십시오. 모든 컷 가장자리를 Scribe 트랜스크립트의 단어 경계에 맞춰 정렬하십시오.
  7. 모든 컷 가장자리에 패딩을 추가하십시오. 작업 윈도우: 30–200ms. Scribe 타임스탬프는 50–100ms 정도 오차가 있습니다. 패딩이 이 오차를 흡수합니다. 빠른 템포의 영상은 더 좁게, 시네마틱한 영상은 더 넓게 적용하십시오.
  8. 단어 수준의 축어적(verbatim) ASR만 사용하십시오. 절대 SRT/구(phrase) 모드를 사용하지 마십시오 (초 단위 이하의 갭 데이터 손실). 절대 정규화된 필러를 사용하지 마십시오 (편집적 신호 손실).
  9. 소스별로 트랜스크립트를 캐싱하십시오. 소스 파일 자체가 변경되지 않았다면 절대 다시 트랜스크립션을 실행하지 마십시오.
  10. 여러 개의 애니메이션은 병렬 하위 에이전트를 사용하십시오. 절대 순차적으로 실행하지 마십시오. Agent 도구를 통해 N개를 동시에 실행하십시오. 총 소요 시간은 가장 느린 애니메이션 하나의 시간과 동일합니다.
  11. 실행 전 전략 확인. 사용자가 평이한 영어로 된 계획을 승인하기 전에는 절대 컷을 건드리지 마십시오.
  12. 모든 세션 출력물은 <videos_dir>/edit/ 디렉토리에 저장합니다. 절대 video-use/ 프로젝트 디렉토리 내부에 쓰지 마십시오.

이 문서의 다른 모든 내용은 실제 작업 예시입니다. 자료가 요구할 때마다 자유롭게 변경하십시오.

디렉토리 구조

스킬은 video-use/ 디렉토리에 있습니다. 사용자 영상 파일은 사용자가 지정한 위치에 있습니다. 모든 세션 출력물은 <videos_dir>/edit/ 디렉토리로 이동합니다.

<videos_dir>/
├── <원본 파일들, 수정되지 않음>
└── edit/
    ├── project.md              ← 메모리; 세션마다 내용이 추가됨
    ├── takes_packed.md         ← 구(phrase) 수준 트랜스크립트, LLM의 주요 읽기 뷰
    ├── edl.json                ← 컷 결정 사항
    ├── transcripts/<name>.json ← 캐시된 원시 Scribe JSON
    ├── animations/slot_<id>/   ← 애니메이션별 소스 + 렌더링 + 추론
    ├── clips_graded/           ← 그레이딩 및 페이드가 적용된 세그먼트별 추출 파일
    ├── master.srt              ← 출력 타임라인 자막
    ├── downloads/              ← yt-dlp 출력물
    ├── verify/                 ← 디버그 프레임 / 타임라인 PNG
    ├── preview.mp4
    └── final.mp4

설정

최초 설치는 install.md에 설명되어 있습니다 (클론, 의존성, ffmpeg, 스킬 등록, API 키). 매 세션마다 실행할 필요는 없습니다. 콜드 스타트 시 다음 사항만 확인하십시오:

  • ELEVENLABS_API_KEY 변수가 설정되어 있는지 확인 — 환경 변수 또는 video-use 리포지토리 루트의 .env 파일에 있어야 합니다. 없으면 사용자에게 키를 입력하도록 요청하고 .env 파일에 기록하십시오 (절대 사용자의 <videos_dir>에는 기록하지 마십시오).
  • ffmpeg + ffprobe가 PATH에 있는지 확인.
  • Python 의존성 설치 확인 (uv sync 또는 리포지토리 내에서 pip install -e . 실행).
  • HyperFrames 또는 Remotion 슬롯이 필요한 경우 Node.js + npm 사용 가능 여부 확인. HyperFrames는 현재 Node.js 22+가 필요합니다.
  • yt-dlp, HyperFrames, Remotion, Manim은 최초 사용 시에만 설치합니다.
  • 최초 애니메이션 설정은 슬롯 디렉토리 내부에서 수행하며, 절대 video-use 리포지토리 루트에서 수행하지 않습니다. HyperFrames는 npx --yes hyperframes ...로 호출할 수 있습니다. Remotion은 npx create-video@latest로 스캐폴딩하거나 프로젝트 로컬 의존성으로 설치한 후 remotion render 명령어를 사용할 수 있습니다.
  • 이 스킬은 skills/manim-video/를 함께 제공합니다. Manim 슬롯을 구축할 때는 해당 SKILL.md를 읽으십시오.

도우미 (helpers/transcribe.py, helpers/render.py 등)는 이 SKILL.md 파일과 같은 디렉토리에 있습니다. 해당 경로는 이 파일이 있는 디렉토리를 기준으로 확인하십시오. 스킬은 일반적으로 ~/.claude/skills/video-use/ 또는 ~/.codex/skills/video-use/에 심볼릭 링크됩니다.

도우미

  • transcribe.py <video> — 단일 파일에 대한 Scribe 호출. --num-speakers N 옵션 선택 가능. 결과 캐싱.
  • transcribe_batch.py <videos_dir> — 4개 워커 병렬 트랜스크립션. 여러 테이크 작업 시 사용.
  • pack_transcripts.py --edit-dir <dir> — transcripts/*.json 파일을 읽어 takes_packed.md 파일 생성 (구 수준, 0.5초 이상 무음에서 분할).
  • timeline_view.py <video> <start> <end> — 필름스트립 + 웨이브폼 PNG 생성. 요청 시 비주얼 분석 도구. 스캔 도구가 아닙니다 — 결정 시점에만 사용하고, 지속적으로 사용하지 마십시오.
  • render.py <edl.json> -o <out> — 세그먼트별 추출 → 연쇄(concat) → 오버레이 (PTS 시프트) → 자막 (마지막). --preview 옵션으로 720p 빠른 미리보기 가능. --build-subtitles 옵션으로 master.srt를 인라인 생성 가능.
  • grade.py <in> -o <out> — ffmpeg 필터 체인 그레이딩. 프리셋 + --filter '<raw>' 옵션으로 사용자 정의 필터 지원.

애니메이션의 경우, <edit>/animations/slot_<id>/ 디렉토리를 생성하고 Bash를 사용하여 Agent 도구를 통해 하위 에이전트를 실행하십시오.

프로세스

  1. 인벤토리. 모든 소스 파일에 대해 ffprobe 실행. 디렉토리 전체에 대해 transcribe_batch.py 실행. pack_transcripts.py를 실행하여 takes_packed.md 생성. 시각적인 첫인상을 위해 하나 또는 두 개의 timeline_view를 샘플링.

  2. 문제 사전 스캔. takes_packed.md를 한 번 훑어보며 말실수, 명백한 발음 오류, 피해야 할 표현 등을 기록. 일반 목록으로 작성하여 편집자 브리핑에 포함.

  3. 대화. 당신이 본 것을 평이한 영어로 설명하십시오. 자료에 기반하여 질문을 던지십시오. 다음 정보를 수집하십시오: 콘텐츠 유형, 대상 길이/화면비, 미적/브랜드 방향, 페이싱 느낌, 반드시 유지해야 할 순간, 반드시 잘라내야 할 순간, 애니메이션 및 그레이딩 선호도, 자막 필요 여부. 고정된 체크리스트를 사용하지 마십시오 — 적절한 질문은 매번 다릅니다.

  4. 전략 제안. 4–8개 문장으로 구성: 형태, 테이크 선택, 컷 방향, 애니메이션 계획, 그레이딩 방향, 자막 스타일, 예상 길이. 확인을 기다리십시오.

  5. 실행. 편집자 하위 에이전트 브리핑을 통해 edl.json 생성. 모호한 지점에서는 timeline_view로 집중 분석. 애니메이션은 병렬 하위 에이전트로 구축. 세그먼트별로 그레이딩 적용. render.py를 통해 합성.

  6. 미리보기. render.py --preview 실행.

  7. 자체 평가 (사용자에게 보여주기 전). 렌더링된 출력물 (소스가 아님)에 대해 모든 컷 경계에서 timeline_view 실행 (경계 전후 ±1.5초 윈도우). 각 이미지에서 다음 사항 확인:

    • 컷 지점에서의 시각적 불연속성 / 섬광 / 점프
    • 경계 지점의 웨이브폼 스파이크 (30ms 페이드를 넘긴 오디오 팝)
    • 오버레이 뒤에 숨겨진 자막 (규칙 1 위반)
    • 오버레이 정렬 불량 또는 잘못된 프레임 표시 (규칙 4 위반)

    또한 다음 지점도 샘플링: 처음 2초, 마지막 2초, 중간 2–3개 지점 — 그레이딩 일관성, 자막 가독성, 전반적인 일관성 확인. ffprobe를 실행하여 출력 길이가 EDL 예상과 일치하는지 확인.

    오디오를 추측하지 말고 직접 측정하십시오: ffmpeg -i out.mp4 -af ebur128=peak=true -f null - 명령어로 통합 런던스(integrated loudness)와 실제 피크(true peak)를 확인하고, 섹션별(대화, 음악만, 엔드 카드) RMS도 확인하십시오. 엔드 카드가 대화보다 15dB 낮거나, 효과음이 음성보다 큰 경우는 버그입니다. 당신은 소리를 들을 수 없습니다: 그 점을 명시하고 숫자로 보고하십시오.

    사용자가 출시할 콘텐츠 (런칭, 프로모션, 광고)의 경우, 렌더링된 파일, EDL, 사용자가 제공한 참고 비디오를 함께 전달하여 비평 하위 에이전트 하나를 추가로 실행하십시오. 칭찬이 아닌 혹평을 하도록 브리핑하십시오: 평결, 시간 코드와 증거(프레임, 레벨)를 포함한 문제점 순위 목록, 그리고 가장 먼저 해야 할 5가지 수정 사항. 새로운 시각은 작성자가 더 이상 보지 못하는 것을 발견합니다 — 끊긴 페이오프 라인, 0.5초 밈, 폰 크기에서 읽을 수 없는 28px 텍스트 등.

    문제가 발견되면: 수정 → 재렌더링 → 재평가. 자체 평가는 최대 3회까지 — 3회 후에도 문제가 남아 있으면 무한 반복하지 말고 사용자에게 알리십시오. 자체 평가를 통과한 경우에만 미리보기를 제공하십시오.

  8. 반복 + 저장. 자연어 피드백을 받고, 계획을 수정하고, 재렌더링합니다. 절대 다시 트랜스크립션하지 마십시오. 확인 후 최종 렌더링 실행. project.md에 내용을 추가하십시오.

컷 제작 기법

  • 오디오 우선. 컷 후보는 단어 경계와 무음 간격에서 도출.
  • 피크 유지. 웃음, 결정적 대사, 강조 비트. 결정적 대사 이후 리액션을 포함하도록 확장 — 웃음 자체가 비트입니다.
  • 화자 전환 시 발화 사이에 약간의 공백을 두는 것이 좋습니다. 일반적인 값: 400–600ms. 빠른 템포의 경우 더 짧게, 시네마틱한 경우 더 길게. 취향에 따라 결정.
  • 오디오 이벤트를 신호로 활용. (웃음), (한숨), (박수)는 비트를 표시합니다. 이 이벤트 이후로 확장하십시오.
  • 무음 간격은 컷 후보입니다. 400ms 이상의 무음은 일반적으로 가장 깔끔합니다. 150–400ms의 구 경계는 시각적 확인과 함께 사용 가능합니다. 150ms 미만은 안전하지 않습니다 (구 중간).
  • 컷 패딩 예시 (함께 제공된 런칭 비디오에서 사용): 첫 번째 유지 단어 앞 50ms, 마지막 단어 뒤 80ms. 몽타주 에너지의 경우 더 좁게, 다큐멘터리의 경우 더 넓게. 30–200ms 작업 윈도우 내에서 유지하십시오 (엄격한 규칙 7).
  • 오디오와 비디오를 독립적으로 추론하지 마십시오. 모든 컷은 두 트랙 모두에서 작동해야 합니다.

패킹된 트랜스크립트 (주요 읽기 뷰)

pack_transcripts.py는 모든 transcripts/*.json 파일을 읽어 하나의 마크다운 파일을 생성합니다. 각 테이크는 구(phrase) 수준의 라인 목록으로 표시되며, 각 라인은 [시작-종료] 시간 범위로 접두사가 붙습니다. 구는 0.5초 이상의 무음 또는 화자 변경 시 분할됩니다. 이것이 편집자 하위 에이전트가 컷을 선택하기 위해 읽는 아티팩트입니다. 원시 JSON보다 1/10의 토큰만으로 텍스트로부터 단어 경계 정밀도를 제공합니다.

예시 라인:

## C0103  (지속 시간: 43.0s, 8개 구)
  [002.52-005.36] S0 웹 에이전트가 하는 일의 90%는 완전히 낭비입니다.
  [006.08-006.74] S0 우리는 이것을 고쳤습니다.

편집자 하위 에이전트 브리핑 (멀티 테이크 선택용)

작업이 "여러 클립에서 각 비트의 최고 테이크를 선택하는 것"인 경우, 다음과 같은 형태의 전용 하위 에이전트를 생성하십시오. 구조는 중요하며, 피치 형태 예시는 중요하지 않습니다.

당신은 <유형> 비디오를 편집하고 있습니다. 각 비트의 최고 테이크를 선택하고, 소스 클립 순서가 아니라 비트 순서대로 연대기적으로 조합하십시오.

입력:
  - takes_packed.md (모든 테이크의 시간이 주석 처리된 구 수준 트랜스크립트)
  - 제품/내러티브 컨텍스트: <사용자로부터 받은 2문장>
  - 화자: <이름, 역할, 전달 스타일 참고 사항>
  - 예상 구조: <원형 선택 또는 직접 창안>
  - 피해야 할 말실수: <사전 스캔 패스에서 추출한 목록>
  - 대상 런타임: <초>

일반적인 구조 원형 (선택, 수정, 또는 창안):
  - 기술 런칭/데모:   HOOK → PROBLEM → SOLUTION → BENEFIT → EXAMPLE → CTA
  - 튜토리얼:         INTRO → SETUP → STEPS → GOTCHAS → RECAP
  - 인터뷰:           (QUESTION → ANSWER → FOLLOWUP) 반복
  - 여행/이벤트:      ARRIVAL → HIGHLIGHTS → QUIET MOMENTS → DEPARTURE
  - 다큐멘터리:       THESIS → EVIDENCE → COUNTERPOINT → CONCLUSION
  - 음악/공연:        INTRO → VERSE → CHORUS → BRIDGE → OUTRO
  - 또는 직접 창안하십시오.

규칙:
  - 시작/종료 시간은 트랜스크립트의 단어 경계에 맞아야 합니다.
  - 컷 경계에 패딩 추가 (작업 윈도우 30–200ms).
  - 400ms 이상의 무음을 컷 대상으로 선호합니다.
  - 더 나은 테이크가 없는 경우 불가피한 말실수는 유지합니다. "reason"에 이를 기록합니다.
  - 예산을 초과하는 경우 수정: 비트 하나를 버리거나 꼬리를 자릅니다. 총계를 보고하고 자체 수정합니다.

출력 (JSON 배열, 설명 불포함):
  [{"source": "C0103", "start": 2.42, "end": 6.85, "beat": "HOOK",
    "quote": "...", "reason": "..."}, ...]

최종 EDL과 한 줄의 총 런타임 확인 정보를 반환하십시오.

컬러 그레이딩 (요청 시)

당신의 작업은 이미지에 대해 추론하는 것이지, 프리셋을 적용하는 것이 아닙니다. (timeline_view를 통해) 프레임을 보고, 무엇이 잘못되었는지 판단하고, 한 가지를 조정한 후 다시 확인하십시오.

멘탈 모델은 ASC CDL입니다. 채널별: out = (in * slope + offset) ** power, 이후 전역 채도. slope → 하이라이트, offset → 섀도우, power → 미드톤.

예시 필터 체인 (grade.py --list-presets 명령어로 확인 가능; 시작점으로 사용하거나 직접 혼합하십시오):

  • warm_cinematic — 레트로/테크니컬, 미묘한 틸/오렌지 분할, 채도 낮춤. 실제 런칭 비디오에서 사용됨. 토킹 헤드에 안전.
  • neutral_punch — 최소한의 보정: 대비 증가 + 부드러운 S-커브. 색상 변화 없음.
  • none — 직접 복사. 사용자가 요청하지 않은 경우의 기본값.

그 외 — 인물, 자연, 제품, 뮤직 비디오, 다큐멘터리 등 — 자신만의 체인을 창안하십시오. grade.py --filter '<raw ffmpeg>' 명령어는 모든 필터 문자열을 허용합니다.

엄격한 규칙: 추출 중에 세그먼트별로 적용하십시오 (포스트-연쇄 방식은 두 번 인코딩하게 됩니다). 피부 톤을 테스트하지 않고 공격적인 그레이딩을 절대 적용하지 마십시오.

자막 (요청 시)

자막에는 추론할 가치가 있는 세 가지 차원이 있습니다: 청킹(chunking) (1/

...(잘림)

참고: 원본 SKILL.md 내용이 중간에 잘려서 번역되었지만, 제공된 내용을 최대한 정확하게 번역했습니다. 계속되는 내용이 있다면 추가로 번역할 수 있습니다.

Individual skills in this repo

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

관련 스킬