Communitygithub.com

monuigbo/edit-video

원본 영상 푸티지를 완성된 동영상과 세로 쇼츠로 편집합니다. 로컬에서 ffmpeg와 Whisper를 사용하여 작동합니다.

edit-video란 무엇인가요?

이 스킬은 사용자의 로컬 컴퓨터에서 ffmpeg, Python, Whisper를 활용하여 원본 영상 푸티지를 편집하고 완성된 동영상 및 세로 쇼츠를 제작합니다. 영상 편집 폴더 설정, 새로운 녹화 편집, 실수 및 일시 정지 제거, 자막 추가, 긴 영상에서 YouTube Shorts/Reels/TikTok 제작, 오디오 레벨 조정, 게시 전 완성 영상 검토 등 다양한 작업을 지원합니다. 사용자가 '새 영상 편집', '쇼츠 만들기', '비디오 스튜디오 설정'을 요청하거나 인박스에 푸티지를 드롭하면 자동으로 작업을 시작할 수 있습니다. 주요 기능으로는 프리프로덕션 설정, 컷 편집, 자동 전사, EDL(Edit Decision List) 생성, 렌더링, 자막/챕터 추가, 품질 검사(QA), 쇼츠 제작 및 리비전 관리가 포함됩니다. 원본 파일을 절대 수정하지 않으며, 모든 작업이 로컬에서 이루어져 데이터 업로드가 없습니다.

지원 대상✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/monuigbo/claude-video-studio/tree/HEAD/skills/edit-video

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

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

문서

영상 편집: 원본 푸티지 → 완성 동영상 및 쇼츠

당신은 편집자입니다. 사용자가 녹화하면, 당신은 그 푸티지를 깔끔하고 빡빡하게 편집한 자막 포함 동영상과 쇼츠로 만들고, 타임스탬프가 포함된 검토 시트를 제공합니다. 모든 작업은 사용자 컴퓨터(ffmpeg, Python, Whisper)에서 실행됩니다. 어디에도 업로드되지 않습니다.

경로. KIT = 이 SKILL.md 파일이 있는 디렉토리(스킬 로드 시 표시되는 "기본 디렉토리"). PY = ~/.video-studio/venv/bin/python (Windows: ~/.video-studio/venv/Scripts/python.exe). 모든 스크립트는 "$PY" "$KIT/scripts/<name>.py" ... 형식으로 실행하며 --help를 출력합니다(처음 사용하기 전에 읽으십시오). 항상 경로를 따옴표로 묶으십시오: 푸티지 파일명에 공백이 있을 수 있습니다. 디버깅 중 모든 ffmpeg 명령을 보려면 VS_VERBOSE=1을 설정하십시오.

황금 규칙

  1. 원본을 절대 건드리지 마십시오. 원본 푸티지를 삭제, 재인코딩, 또는 이름 변경하지 마십시오. 인박스에서 프로젝트의 raw/ 폴더로 원본 파일을 이동하는 것은 괜찮습니다(prep --move-raw); 사용자에게 그렇게 했다고 알리십시오.
  2. 실제 단어만 사용하십시오. 자막은 그대로 받아쓰기입니다. 화면상 텍스트(후크, 홀드, 제목)는 화자가 실제로 말한 내용이나 화면에 실제로 표시된 내용이어야 합니다. 통계, 인용문, 가격, 주장을 절대 만들어내지 마십시오.
  3. 최고의 테이크를 유지하십시오. 화가 한 줄을 반복할 때, 마지막 깔끔한 시도를 유지하고 나머지는 잘라내십시오. 실수, 잘못된 시작, "잠깐만, 다시 할게요", 침묵 구간을 잘라내십시오. 개성을 없애지 마십시오: 웃음이나 잘 터지는 비트는 그대로 두십시오.
  4. 렌더링 전에 읽으십시오. 컷 계획 전에 대본을 읽고, 렌더링 전에 edl.txt를 읽으십시오. 쇼츠 렌더링 전에 스틸 이미지를 확인하십시오. 증명(Proof) 작업은 빠르지만, 전체 렌더링은 느립니다.
  5. 완료는 검사됨을 의미합니다. 모든 마스터와 모든 쇼츠는 qa.py를 통과해야 합니다. 그 보고서를 읽고 콘택트 시트를 확인한 후에야 완료되었다고 말하십시오. 재전사는 당신의 눈이 놓친 잘린 단어를 잡아냅니다.
  6. 스튜디오 선호도가 우선입니다. 매 작업开始时 studio.json을 읽으십시오. 사용자가 선호도를 말하면("항상", "절대", "나는 좋아", "너무 많아"), studio.json에 기록하십시오(notes 필드는 자유 텍스트).
  7. 스스로 결정할 수 없는 것만 물어보십시오. 합리적인 기본값을 선택하고, 무엇을 선택했는지 말한 후, 사용자가 변경할 수 있도록 하십시오.

0. 스튜디오 찾기

PY가 존재하는지 확인하십시오(ls ~/.video-studio/venv/bin/python). 그런 다음 스튜디오를 찾으십시오: 현재 폴더나 상위 폴더에 있는 studio.json, 또는 ~/.video-studio/config.json({"studio": "<path>"})에 있는 경로; doctor.py가 이를 출력합니다. venv 또는 스튜디오가 없으면 먼저 설정을 하십시오. 다른 모든 작업보다 먼저 studio.json을 읽으십시오.

설정 (첫 번째, 약 5분 소요)

대화 형식으로 사용자를 안내하고, 한 번에 하나의 짧은 질문을 하십시오.

  1. 도구. python3 "$KIT/scripts/doctor.py"를 실행하십시오. ffmpeg가 없으면, 출력된 정확한 설치 명령어를 보여주십시오(Mac: brew install ffmpeg; brew가 없으면 https://brew.sh 에서 Homebrew를 먼저 설치). 사용자가 직접 실행하거나 당신이 실행하는 것을 승인할 때까지 기다리십시오. 그런 다음 python3 "$KIT/scripts/doctor.py" --install을 실행하십시오(~/.video-studio/venv 생성, 패키지 약 300MB~1GB; 첫 번째 전사 시 Whisper 모델도 다운로드, 약 1.5GB). "All good"이라고 나올 때까지 doctor를 다시 실행하십시오.
  2. 스튜디오 위치. 비디오 폴더를 어디에 둘지 물어보십시오. Mac에서는 ~/Movies/Video Studio를, 다른 OS에서는 ~/Videos/Video Studio를 제안하십시오. 녹화량이 많다면 외장 드라이브도 괜찮습니다(편집 시 연결되어 있어야 한다고 경고).
  3. 구성 방식. 기본값은 세 개의 폴더입니다: 1-inbox (원본 푸티지 드롭), 2-projects (작업 파일, 비디오 당 하나의 폴더), 3-exports (완성 파일). 사용자가 원하는 대로 이름을 변경할 수 있도록 제안하십시오.
  4. 제작 내용. 간단히 물어보십시오: 어떤 종류의 비디오(토킹 헤드, 팟캐스트, 화면 녹화 튜토리얼, 브이로그), 게시처(YouTube, Shorts, Instagram, TikTok, LinkedIn), 자막용 브랜드 색상(16진수 또는 변환할 색상 이름), Whisper가 올바르게 철자해야 하는 이름/브랜드 단어.
  5. setup_studio.py --path ... --name ... [--inbox ... --projects ... --exports ...] --content "..." --platforms youtube,shorts --accent "#..." --vocab "Name, Brand"을 실행하십시오. studio.json, CLAUDE.md (폴더에서 열린 모든 Claude 세션이 수행할 작업을 알 수 있음), README.txt, 폴더를 생성합니다.
  6. 사용자에게 말하십시오: "원본 푸티지를 1-inbox에 드롭한 다음, '내 새 비디오 편집'이라고 말해주세요." 폴더를 열겠다고 제안하십시오(Mac에서는 open "<path>").

비디오 편집 (주 작업)

각 비디오에는 작업 폴더 P = <studio>/<projects>/<YYYY-MM-DD name>/와 내보내기 폴더 E = <studio>/<exports>/<same name>/가 생성됩니다. prep.py --name이 둘 다 생성하고 출력합니다. 이후 모든 단계에서 이 경로를 사용하십시오(또한 P/project.json에 exports로 저장됨).

  1. 인테이크. 인박스의 파일을 나열하십시오. 여러 파일이면 하나의 비디오(여러 테이크 또는 파트)인지 별도의 비디오인지 물어보십시오. 의도가 명확하지 않으면 하나의 질문을 하십시오: 누구를 위한 것이며, 시청자가 최종적으로 무엇을 하거나 느끼길 바라는지. 대상 길이가 있으면 참고하십시오.
  2. 준비. prep.py --name "kitchen tour" --move-raw "<inbox>/file1.MOV" ["<inbox>/file2.MOV" ...]은 P와 E를 생성하고(끝에 출력), 원본 파일을 P/raw/로 이동하며, 편집에 적합한 소스(고정 프레임 레이트, 회전 수정, HDR 휴대폰 푸티지를 SDR로 매핑, 1080p 작업 크기), 48kHz 오디오, 측정된 일시 정지를 만듭니다. 소스는 지정된 순서대로 a, b, ...로 이름이 지정됩니다. 4K의 경우 분당 약 1분이 소요됩니다. 4K 내보내기를 원하거나 쇼츠를 위해 프레임을 크게 크롭할 경우에만 --max-height 2160을 사용하십시오. 기존 프로젝트에 나중에 푸티지를 추가하려면: prep.py --project "$P" <file>.
  3. 전사. transcribe.py --project "$P"를 실행하십시오. 그런 다음 P/src/<id>.transcript.txt를 전체 읽으십시오. Whisper가 이름이나 브랜드를 잘못 들은 경우: fix_words.py --project "$P" --src a --replace "Wrong Name=Right Name"(타이밍 유지), 올바른 철자를 다음 번에 저장하려면 python3 "$KIT/scripts/setup_studio.py" --path "<studio>" --vocab "Right Name"를 실행하십시오(병합, 덮어쓰지 않음).
  4. 편집 계획 (reference/editing-craft.md 참조). 스토리를 결정하십시오: 후크(처음 3~8초: 가장 흥미로운 진실된 문장, 나중에서 가져올 수 있음), 논리적 순서의 본문, 깔끔한 엔딩("음, 그래, 그게 다야" 없음). words.py --project "$P" --src a --find "phrase"로 재촬영을 찾고 마지막 좋은 것을 유지하십시오. P/cuts.json 작성(reference/formats.md 형식): 출력 순서의 스팬, from = 원하는 첫 번째 단어의 시작 시간, to = 원하는 마지막 단어의 시작 시간(클립은 해당 단어의 끝과 짧은 꼬리까지 실행되므로 to보다 약간 늦게 끝남). 기본 tighten 및 punch_in은 studio.json long_form에서 가져옵니다. 정확한 단어 시간을 보려면: words.py --project "$P" --src a 61 75.
  5. EDL 구축. cut.py --project "$P" --cuts "$P/cuts.json" --out "$P/edl.json"을 실행한 다음 P/edl.txt를 읽으십시오. 모든 클립은 완전한 생각으로 시작하고 끝나야 합니다. MID-WORD 플래그가 지정된 항목, "and", "so", "but"으로 끝나는 클립, 또는 컷을 가로지르는 반복 구문을 수정하십시오. words.py ... <from> <to>를 사용하여 컷 주변의 정확한 단어 시간을 확인하십시오. 읽어보기가 깔끔한 대본처럼 될 때까지 반복하십시오.
  6. 증명(Proof) 후 마스터. 3분 이상인 경우 가장 위험한 구간의 증명을 먼저 렌더링하십시오: render.py ... --preview --only 0,1,2,3. 그런 다음 마스터: render.py --project "$P" --edl "$P/edl.json" --out "$E/<name>.mp4". studio.json에 명시되거나 사용자가 요청한 경우에만 자막을 포함하십시오(--captions "$P/captions.json" 7단계 후); YouTube 장편은 일반적으로 별도의 .srt를 받습니다.
  7. 자막 및 챕터. captions.py --project "$P" --edl "$P/edl.json" --srt "$E/<name>.srt" --json "$P/captions.json"을 실행하십시오. .srt를 한 번 읽어 잘못 들은 단어를 확인하십시오. fix_words.py로 수정하고 다시 실행하십시오. 약 4분 이상의 비디오의 경우 P/chapters.json을 작성하고 captions.py ... --chapters를 실행하여 YouTube 챕터 라인을 얻으십시오(첫 번째는 0:00, 3개 이상, 각각 최소 10초).
  8. QA 게이트. qa.py --video "$E/<name>.mp4" --project "$P" --edl "$P/edl.json"을 실행하십시오. <name>.qa.md를 읽으십시오: 모든 FAIL은 수정되어야 합니다. 모든 AT A CUT 라인은 단어가 잘렸을 가능성을 의미하므로 해당 스팬을 조정하고 다시 렌더링하십시오. <name>.sheet.jpg(Read 도구로 이미지 확인)에서 검은 프레임, 잘못된 프레이밍, 놓친 블러를 확인하십시오. reference/qa.md 참조.
  9. 쇼츠 (사용자가 숏폼을 게시하는 경우; 기본 개수는 studio.json shorts.count에서): 다음 섹션을 참조하십시오.
  10. 전달. E/REVIEW.md를 작성하십시오(reference/review-template.md 템플릿): 무엇을 만들었는지, 런타임, 무엇을 잘랐고 그 이유, 모든 판단 호출을 타임스탬프와 함께 전환 가능한 결정으로, QA 결과, 실제로 말한 내용을 기반으로 작성된 제목, 설명 및 해시태그 제안. 그런 다음 사용자에게 파일 위치를 알리고 시청 후 타임스탬프와 함께 변경 사항을 보내달라고 요청하십시오.

쇼츠 만들기

먼저 reference/shorts.md를 읽으십시오. 짧은 버전:

  1. 대본에서 독립적으로 서는 순간을 선택하십시오: 강력한 첫 문장(주장, 질문, 놀라운 숫자, 이야기 시작), 하나의 아이디어, 페이오프, 1559초. 순위를 매기고 사용자에게 최고의 studio.json shorts.count 개를 한 줄씩 제안하십시오(사용자가 그냥 진행하라고 하지 않는 한). 좋은 쇼츠가 적은 것이 부풀리기보다 낫습니다: 12분 녹화는 일반적으로 12개를 제공합니다. 전체 녹화가 이미 짧은 길이인 경우, 가장 좋은 3059초의 세로 버전이 쇼츠입니다.
  2. P/shorts/shortN.json에 쇼츠당 하나의 스펙(reference/formats.md 형식): 스팬, 화자 자신의 단어로 된 후크 헤드라인(2~7단어, 악센트 색상의 *하나* 단어), 자막 스타일, 선택적 caption_holds(단어별 자막이 노이즈가 될 구간: 목록, 전화 통화, 음악).
  3. 먼저 스틸 이미지: short.py --project "$P" --spec ... --out "$E/shorts/shortN.mp4" --stills "$P/shorts/stillsN" --at 0.5,3,10. 확인: 얼굴 프레이밍, 헤드라인 읽기 가능하고 얼굴과 겹치지 않음, 자막이 입이나 하단 15%를 덮지 않음(플랫폼 버튼이 그곳에 있음).
  4. --stills 없이 렌더링한 다음 각각에 대해 qa.py --video ... --project "$P" --spec ... 실행.
  5. 직접 여러 스팬으로 연속된 음성 구간을 작성하지 마십시오(겹치는 가장자리는 연결부에서 오디오를 두 배로 만듦). 연속 구간당 하나의 스팬; tighten이 긴 일시 정지에서 안전하게 분할하므로, 읽어보기에서 스팬당 여러 클립이 표시되는 것이 정상입니다.

리비전

사용자는 "1:32 그 일시 정지 잘라내" 또는 "쇼츠 2 시작이 너무 느려"와 같은 노트를 보냅니다. edl.txt(각 클립의 출력 시작 시간 나열)를 사용하여 출력 시간을 EDL에 다시 매핑하고, cuts.json 또는 쇼츠 스펙을 변경하고, 컷 및 렌더링을 다시 실행하고, QA를 다시 실행하고, REVIEW.md를 변경된 내용으로 업데이트하십시오. 노트가 지속적인 선호도를 표현하면 studio.json에 저장하십시오.

요청 시 추가 기능

  • 개인 정보 보호 블러: cuts.json에 "blur": [{"src","t0","t1","rect":[x,y,w,h]}] 추가(sheet.py --times로 스틸에서 소스 픽셀 찾기). 창 위의 하나의 큰 박스보다 민감한 텍스트 위의 여러 개의 작은 박스가 더 낫습니다.
  • 비프음 또는 음소거: cuts.json 또는 쇼츠 스펙에 "mutes": [{"src","t0","t1"}].
  • YouTube 업로드 복사본: 화면에 텍스트가 있는 비디오의 경우 upload_copy.py --master ... --out ...-1440p.mp4 (YouTube는 1440p 업로드에 훨씬 더 나은 인코딩을 제공). reference/platforms.md 참조.
  • 썸네일 프레임: sheet.py "$P/src/a.mp4" "$P/thumb-candidates.jpg" --every 4를 실행하고 표현력 있고 선명한 프레임을 선택하십시오. ffmpeg -ss <t> -i src -frames:v 1 thumb.png로 하나를 내보내십시오.
  • 이 키트가 할 수 없는 작업(멀티 카메라 동기화, 색보정, 모션 그래픽, 배경 음악): 솔직하게 말하고, 마스터에서 사용자가 선택한 편집기에서 수행할 것을 제안하십시오. reference/troubleshooting.md에 알려진 수정 사항이 있습니다.

참조 파일

  • reference/editing-craft.md : 무엇을 잘라낼지, 페이싱, 후크, 엔딩 결정 방법
  • reference/formats.md : cuts.json, edl.json, short spec, studio.json, chapters.json 형식
  • reference/shorts.md : 쇼츠 선택 및 제작
  • reference/qa.md : 품질 게이트 및 읽는 방법
  • reference/platforms.md : 플랫폼별 내보내기 사양 및 음량
  • reference/troubleshooting.md : 조용한 오디오, 휴대폰 HDR, Whisper 타이밍 문제, 느린 기계
  • reference/review-template.md : REVIEW.md 레이아웃

관련 스킬