Communitygithub.com

editor-video

클라이언트별 전문 비디오 편집기(릴스, 토킹헤드, 이벤트 몽타주, 앱 비디오)를 스페인어로 제공합니다. 클라이언트와 프로젝트별로 자료를 정리하고, 참조 영상을 분석하여 각 클라이언트의 스타일 가이드를 작성하며, MFA 정렬을 통해 최적의 테이크를 선택하고, HyperFrames에서 자체 엔진(단어별 자막, 줌, B-roll, 카드, 사운드)으로 비디오를 조립합니다. 각 클라이언트의 룩이 엔진 스타일을 정의합니다. 사용자가 클라이언트 비디오 편집, '새 클라이언트', '새 프로젝트', '이 참조 분석', 원본 또는 스크립트 전달, 릴스/쇼츠/리캡 요청 시 사용하세요.

editor-video란 무엇인가요?

이 스킬은 AI 비서(Claude Code, Cursor, Codex 등)가 클라이언트별로 전문 비디오를 인간 편집자처럼 편집할 수 있도록 설계된 종합 워크플로우입니다. 주요 기능으로는 클라이언트 참조 영상을 분석하여 일관된 스타일 가이드(estilo.md)와 시각적 룩(look.py)을 생성하고, Montreal Forced Aligner(MFA)를 사용하여 단어 수준의 정밀한 오디오 정렬을 수행하며, HyperFrames 엔진을 통해 자동 자막, 확대/축소, B-roll, 카드 및 사운드 효과가 포함된 비디오를 조립합니다. 이 스킬은 macOS 환경의 터미널 기반 도구(ffmpeg, WhisperX, HyperFrames)를 사용하며, 클라이언트별로 완전히 분리된 'clientes/' 디렉토리 구조 아래에서 작동합니다. 워크플로우는 새 클라이언트 온보딩(참조 분석 → 스타일 가이드 작성 → 룩 승인), 원본 자료 이해 및 변환, MFA 기반 단어 정렬, 테이크 선택, HyperFrames를 사용한 비디오 조립 및 렌더링, 최종 검토 및 전달의 7단계로 구성됩니다. 이 스킬은 스페인어 콘텐츠에 특화되어 있으며, 각 클라이언트의 고유한 시각적 정체성을 엔진이 직접 구현하지 않고 정의된 룩을 통해 반영합니다.

지원 대상✓Claude Code✓Codex CLI~Cursor
npx skills add https://github.com/soyabrahamarriaga-lang/editor-video/tree/main

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

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

문서

클라이언트별 비디오 편집기

인간 편집자처럼 편집하기 위한 엔진 및 워크플로우: 자료 이해, 정밀한 컷, 클라이언트 룩 적용, 검증 및 전달. 엔진은 고유 스타일이 없습니다: 모든 시각적 요소는 clientes/<CLIENTE>/look.py에서 비롯됩니다.

SKILL_DIR = 이 스킬의 폴더. 도구: engine/reel.py, tools/{takes.py, words.py, media.sh}, 템플릿 templates/, 시작 룩 looks/.

요구사항 (처음에 확인하고 누락된 것 설치)

  • ffmpeg, python3, node/npx · macOS: HDR→SDR 변환 및 HEIC 사진 처리를 위해 avconvert 및 sips(시스템에 기본 포함).
  • HyperFrames (렌더링 및 SFX 라이브러리): npx hyperframes skills update general-video (media-use도 설치).
  • watch (비디오 시청/전사 및 Instagram/TikTok/YouTube 링크 다운로드(yt-dlp 사용)): github.com/bradautomates/claude-video 의 watch 스킬, 로컬 WhisperX 엔진(무료): setup.py --engine local 및 --backend whisperx.
  • whisper CLI (검증 창): uv tool install --python 3.12 openai-whisper --with setuptools.
  • MFA (단어 정렬 ±20 ms): brew install --cask miniforge, conda create -n mfa -c conda-forge montreal-forced-aligner -y, conda run -n mfa mfa model download acoustic spanish_mfa 및 … dictionary spanish_mfa (다른 언어: 해당 모델).

폴더 구조 (작업 베이스, 예: ~/Documents/VIDEOS/)

clientes/<CLIENTE>/
├── estilo.md      클라이언트 가이드 (templates/estilo.md) — 편집 전 항상 읽음
├── look.py        엔진 옵션으로 변환된 스타일 (looks/nativo.py 또는 looks/datos.py에서)
├── refs/          참조 비디오 + 프레임 시트 + 분석
├── marca/         로고, 색상, 폰트, 자체 음악
└── proyectos/<AAAA-MM-DD_nombre>/
    ├── crudo/     사용자 원본 자료 — 절대 수정하거나 삭제하지 않음
    ├── broll/     보조 테이크 (선택 사항)
    ├── guion.md   스크립트 또는 노트 (선택 사항; 이 프로젝트에서는 estilo.md보다 우선)
    ├── trabajo/   media/ (변환됨), mfa/, gt/, 각 비디오별 config.py + takes.json 폴더
    └── final/     전달 파일만: <cliente>_<tema>_v1.mp4 · 수정사항 = v2, v3 (이전 버전 삭제 금지)

사용자가 폴더를 만들지 않음: "의 새 프로젝트, 자료는 <경로>에 있음"이라고 말하면 여기에 proyectos/<날짜_이름>/을 생성하고 원본을 이동합니다 (베이스 외부에 있고 사용자가 이동을 원하지 않는지 먼저 확인).

워크플로우

0 · 새 클라이언트 → 참조 분석 및 estilo.md 작성

  1. 참조 영상을 refs/에 다운로드/읽기 (watch로 링크 처리, yt-dlp 사용). 이상적으로 ~5개.
  2. 각 참조에 대해 측정: 후크(처음 3초), 컷/분 (ffmpeg -vf "select='gt(scene,0.3)',showinfo" → 카운트), 자막(글꼴 또는 가장 유사한 무료 글꼴, 크기, 위치, 색상, 강조, 애니메이션), 색상/룩, 카드 및 애니메이션, 사운드(음악, SFX, 음성), 프레임, 구조, CTA. 프레임 시트: fps=16/dur,scale=270:480,tile=8x2.
  3. ≥ 2개 참조에서 본 패턴만으로 estilo.md (템플릿) 작성; 측정된 것과 추론된 것 분리; 타사 문구나 브랜드 복사 금지. 참조가 모순되면 우선순위 질문.
  4. 가장 가까운 시작 룩에서 look.py를 생성하고 가이드에 맞게 조정. 가이드 + 테스트 스틸을 보여주고 편집 전 승인 대기.

1 · 원본 자료 이해

  • estilo.md 및 guion.md 읽기. 각 파일 테스트 (ffprobe: 길이, 회전, color_transfer).
  • 각 원본에 대해 WATCH_WHISPERX_LANGUAGE=es 및 --out-dir trabajo/watch 옵션으로 watch 실행: 말한 내용, 유용한 테이크, 재테이크, 자르면 안 되는 부분. 이 전사본이 유일한 완전한 전사본: MFA에 재사용.
  • 스크립트와 교차 확인: 녹음되지 않았거나 즉흥적으로 변경된 스크립트 부분 → 사용자에게 알림.
  • 음성 없는 여러 짧은 클립(이벤트): 클립별 프레임 시트, 주제별 분류 및 그룹화 제안 (주제별 비디오 + 낱개 + 일반 리캡) 후 편집.

2 · 미디어 준비

  • media.sh video <crudo> trabajo/media/<이름>.mp4 [vertical|horizontal] — HDR(iPhone/DJI)을 SDR로 단일 패스 변환, 키프레임 1초 간격, 30fps. 재압축 금지: 패스마다 디테일 손실.
  • 사진: media.sh foto <foto> trabajo/media/<이름>.mp4 2.5. 정렬용 오디오: media.sh audio.

3 · 단어 정렬 (음성 비디오)

  • corpus/a.wav + corpus/a.txt (watch의 평문) → conda run -n mfa mfa align --clean <corpus 절대경로> spanish_mfa spanish_mfa <출력 절대경로> (절대 경로 필수; 실패 시; --beam 없음). words.py textgrid … words.json 및 words.py show words.json.
  • ~가 있는 단어(> 1초)는 일시 중지 또는 재테이크를 숨김; 긴 텍스트 없는 간격은 watch가 전사하지 못한 재테이크일 수 있음. 격리 창으로 확인: 오디오 3~15초 자르기, whisper --model small --language es --word_timestamps True, words.py whisper … <오프셋>. MFA는 노이즈나 재테이크가 있는 곳에서 몇 초씩 벗어날 수 있음.

4 · 테이크 선택 → takes.json → takes.py

  • 각 문장에 대해 최상의 테이크 (일반적으로 마지막 것) 선택; 재테이크, 잘못된 시작, 군더더기, 편집자 지시사항("이건 다른 비디오로 하고 싶어") 및 목표에 도움이 되지 않는 것 제거. 최대 길이 준수.
  • 단어 시작 기준 스팬: (첫 번째 시작, 마지막 시작 + 0.2). 끝이 마지막 단어 시작보다 앞서면 잘림. word_fix는 MFA가 잘못 배치한 단어 수정 (격리 창 시간 사용).
  • 텍스트: phrases / words는 ASR이 잘못 들은 내용 수정 (이름, 브랜드: "Claude"는 "Klaus" 아님, "IA"는 "ella" 아님).
  • python3 $SKILL_DIR/tools/takes.py trabajo/<video>/takes.json trabajo/<video> → 길이 및 최종 텍스트 출력. 전체 텍스트 읽기: 마지막 단어 누락 또는 잘린 단어 없는지 확인.

5 · 비디오 조립

  • trabajo/<video>/: config.py (templates/config.py에서), media → ../media (심볼릭 링크), media.sh sfx trabajo/<video>, 최소 hyperframes.json ({"paths": {"assets": "assets"}}).
  • edit(e)에서: 카드/POV/CTA, B-roll 및 사운드는 단어에 고정 (e.word_t(None, "palabra")). 가장자리 카드: 확대 시 얼굴 넓어짐. 3초마다 최소 하나의 가시 이벤트 (엔진이 부족 시 자동 펀치 추가).
  • python3 $SKILL_DIR/engine/reel.py trabajo/<video> → npx hyperframes check trabajo/<video> (0 오류; "큰 파일 / 밀집 트랙 / 중첩" 경고는 이 엔진에서 정상).

6 · 렌더링 전 검토

  • npx hyperframes snapshot trabajo/<video> --at <t1,t2,…> --no-end -o <절대 경로>를 각 카드, 후크 및 CTA에서 실행. 확인: 얼굴 가리는 요소 없음, 텍스트 끊김 없음, 색상 정확, 자막 읽기 쉬움.
  • 사용자에게 스틸 보여주고 승인 대기 (스타일이 이미 승인되고 "렌더링"이라고 말한 경우 제외).

7 · 렌더링 및 전달

  • trabajo/<video> 내에서 npx hyperframes render --quality delivery -o …/raw.mp4 실행 → media.sh final raw.mp4 final/<cliente>_<tema>_v1.mp4 (−14 LUFS). 방금 생성된 중간 raw.mp4만 삭제.
  • watch --detail transcript로 확인: 전체 텍스트, 반복 없음. 시작 부분이 "누락"된 것 같으면 결론 내리기 전에 처음 3초를 whisper로 다시 확인 (전체 전사가 시작 부분을 생략하는 경우 있음).

교훈 (반복 금지)

  • 변환되지 않은 HDR은 탁해 보임; avconvert로 한 번만 변환.
  • 확대/축소가 있을 경우 4K로 녹화: 1080p를 13–22% 확대하면 부드럽게 보임. 클라이언트에게 알림.
  • 더 많은 단어로 수정된 문장은 동일한 시간을 배분할 수 없음: 길이 0 자막이 붙어버림.
  • 화면 텍스트의 이모지는 항상 렌더링되지 않음: 사용 자제.
  • snapshot -o 상대 경로는 프로젝트 옆에 기록: 절대 경로 사용.
  • 비디오의 두 부분에서 동일한 파일 사용 → takes.json에서 다른 키 사용 (고유 ID).
  • SFX 라이브러리를 저장소에 업로드하지 않음 (Pixabay의 media-use 라이선스): media.sh sfx로 프로젝트별 복사.
  • 단일 비디오에 대한 클라이언트 수정 사항(예: "07번에서 사운드 없음")은 config.py에 작성 (SFX = {"card": null, "broll": null, "cut": null} 및 카드의 sfx: null), index.html 편집 금지 (재구축 시 손실).

관련 스킬