Communitygithub.com

shaycart/yap-video-skill

원시 토킹헤드/"얍" 영상을 간결한 숏폼 비디오(9:16 Reels/TikTok/Shorts 또는 16:9)로 편집합니다. 대본 기반 점프컷, 군더더기 및 말 더듬기 제거, 얼굴 인식 펀치인 줌, 단어별 애니메이션 캡션, 사운드 디자인, 라우드니스 마스터링, QA 및 게시용 복사본을 제공합니다.

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

이 스킬은 원시 토킹헤드 영상(얍, 불평, 팟캐스트 클립, 긴 잡담)을 전문적으로 편집된 숏폼 비디오로 변환하는 완전한 현지 워크플로우입니다. ffmpeg와 로컬 Whisper를 사용하여 모든 작업이 로컬에서 실행되며 API 키가 필요 없습니다(선택적으로 ElevenLabs Scribe 사용 가능). 핵심 강점은 엄격한 편집 규칙 체계입니다: 계획-승인-렌더링 파이프라인, 단어 내 절단 금지, 절단마다 재인코딩, 그리고 캡션은 줌과 오버레이 이후 마지막에 추가. 영상은 사용자가 승인할 때까지 소스 파일을 절대 덮어쓰지 않으며, 모든 중간 파일을 보존합니다. 스킬은 전체 편집 파이프라인을 다룹니다: 수집 및 브리핑, 단어 수준 전사(필러 단어 보존), 이야기 선택(훅 점수 매기기 및 선택), 정밀한 오디오 엔벨로프 기반 절단, 얼굴 인식 펀치인 줌(OpenCV/MediaPipe), 단어별 애니메이션 캡션(libass .ass), 사운드 디자인(효과음 및 선택적 음악), 색보정, 그리고 엄격한 QA(프레임 검사, 접촉 시트, 라우드니스 측정). 최대 3회 수정 패스를 허용한 후 남은 문제를 보고합니다. 스킬은 여러 기존 비디오 편집 스킬에서 합성되었으며, Claude Code, Cursor 및 기타 AI 에이전트 플랫폼과 호환됩니다. 사용자의 편집 스타일 선택을 지원하는 다양한 '바이브'(크리에이터, 대담, 깔끔)를 제공하며, 세부 설정은 'references/params.md' 파일에 저장되어 있습니다.

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

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

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

문서

Yap 비디오 편집기

원시 토킹헤드 영상을 깔끔하고 디자인된 숏폼으로 변환합니다. 모든 작업이 ffmpeg + 로컬 Whisper로 로컬에서 실행됩니다. API 키가 필요하지 않습니다(ElevenLabs Scribe는 선택적으로 더 나은 전사기입니다).

다음 소스로부터 보안 검토를 통해 합성됨: browser-use/video-use, adukhan98/video-edit, chrislema/videoeditor, zyziyun/video-studio, eyadhussain00-hub/Videoediting (아이디어만), AgriciDaniel/claude-shorts, Barty-Bart/motion-graphics, ZiadAbdelkarim/beat-synced-edit, 6missedcalls/video-editing-skill, haidrrrry/claude-remotion-skill, digitalsamba/claude-code-video-toolkit, blixvip/easyedit (아이디어만).

정확한 숫자는 references/params.md에 있습니다. 필터그래프를 만들기 전에 읽으세요. references/pipeline.md는 실제 편집에서 검증된 구현 패턴입니다(컷 플래너, L-컷 렌더러, Pillow 타입 오버레이, 스티커/소품, 4K 마스터). 이를 따라 새로 만들지 마세요.

엄격한 규칙

  1. 먼저 계획하고, 기다리세요. 전사 후, 일반 언어로 된 계획(훅, 무엇을 자를지, 줌/캡션/SFX 접근 방식, 길이, 포맷)을 보여주고 렌더링 전에 승인을 받으세요. 취향 판단(훅 라인, 어떤 문장을 남길지, 캡션 스타일)은 추천과 함께 짧은 메뉴로 제공되며, 절대 조용히 선택되지 않습니다.
  2. 소스를 절대 덮어쓰지 마세요. <폴더>/edit/에 작성하세요. 사용자가 승인할 때까지 중간 파일을 보관한 후, 정리하겠다고 제안하세요(먼저 파일 목록과 크기를 표시하고, 절대 자동 삭제하지 않음).
  3. 단어 내부를 절대 자르지 마세요. Whisper의 단어 시간이 아닌 오디오 엔벨로프에서 가장자리를 찾으세요(Whisper는 시작을 늦게, 끝을 일찍 표시하여 첫/마지막 음절을 잘라냅니다): 단어 시작에서 최대 0.25초 뒤로, 단어 끝에서 최대 0.20초 앞으로 이동하면서 음성 에너지가 바닥 + 8dB 이상으로 유지되는 지점을 찾은 후, 30ms를 패딩합니다. 모든 접합부에 15-30ms 오디오 페이드를 적용합니다.
  4. 절단 시 항상 재인코딩하고, -c copy를 사용하지 마세요(copy는 키프레임에 맞춰져 글리치가 발생합니다).
  5. 캡션은 마지막에 추가하고, 줌과 오버레이 이후에 추가하여 줌이 캡션을 자르지 않도록 합니다.
  6. 증명하세요. 렌더링한 후 검사하세요: 각 절단 지점 +/-1.5초의 프레임, 접촉 시트, ebur128 라우드니스 판독값. 최대 3회 수정 패스 후 남은 문제를 보고합니다. 숫자로 보고하세요; 당신은 오디오를 들을 수 없습니다.
  7. 타사 미디어: 사용자 소유, CC0/CC-BY, 또는 생성된 것만 사용하세요. YouTube에서 영화/음악을 다운로드하지 마세요. Claude/Anthropic 로그인 토큰이나 기타 자격 증명을 읽거나 보내거나 재사용하지 마세요; 다른 저장소의 .claude/ 훅 구성을 복사하지 마세요.
  8. 모델(whisper ggml-medium은 약 1.5GB)이나 패키지를 다운로드하기 전에 물어보세요. 이름, 소스, 크기를 명시하세요.

파이프라인

0. 수집 및 브리핑

  • ffprobe로 각 클립: 해상도, fps, 길이, 오디오. 방향을 감지합니다.
  • 중요한 것만 물어보세요(짧은 메뉴 사용): 대상 플랫폼/비율, 대상 길이, 바이브(Vibes 참조), 캡션 스타일, 음악 예/아니오, 반드시 유지할 라인. 사용자가 "그냥 해"라고 하면 기본값: 9:16, 30-60초, "크리에이터" 바이브, 볼드 캡션, 가벼운 SFX, 음악 없음.

1. 전사(단어 수준, 그대로)

  • 선호: mlx-whisper(Apple Silicon) 또는 faster-whisper medium.en/distil-large-v3, 단어 타임스탬프 켜짐. small이 아닌 medium을 사용하세요: small은 잘못된 시작을 놓칩니다. 선택 사항: 사용자가 키를 가지고 있는 경우 ElevenLabs Scribe(키를 프로젝트 폴더에 절대 쓰지 마세요).
  • 필러를 전사본에 그대로 유지하여(그래야 잘라낼 수 있음)하세요. 전사본을 캐시하세요.
  • Whisper 특이 사항: 긴 일시 정지를 한 단어로 삼킵니다(몇 초 동안 지속되는 단어는 삼킨 일시 정지입니다; 실제 음성 범위는 RMS 엔벨로프 사용), 일시 정지 후 단어 시작을 0.2-0.4초 늦게 표시하며, 무음 꼬리에서 환각을 냅니다. 실제 콘텐츠 끝에서 자르세요. 캡션 타이밍을 위해 최종 세그먼트별로 다시 전사하세요.
  • 이름/용어를 교정하세요; 수정 목록을 적용하세요(chat gpt -> ChatGPT).

2. 이야기 선택(긴 얍의 경우)

  • 후보 세그먼트를 0-100으로 점수 매기기: 훅*0.30 + 일관성*0.25 + 감정*0.20 + 가치*0.15 + 결말*0.10. 강한 훅: 대담/반박 주장, 호기심 간격, 특정 숫자, 패턴 중단. 약한 훅: "그래서 오늘 나는...에 대해 이야기하고 싶습니다". 독립 테스트: "앞서 말했듯이" 없음, 매달린 대명사 없음.
  • 각각 15-55초(최적 25-40), 점수 >= 60, 시작을 단어/문장 시작(1.5초 창)에 맞추고 끝을 문장 끝(3초 창) + 300ms 패드에 맞춥니다.
  • 훅은 마지막에 작성/선택됩니다: ~5-12개의 번호가 매겨진 후보 오프너를 텍스트, 유형 및 길이와 함께 제공합니다. 결과 우선 또는 대담한 주장 콜드 오픈이 느린 인트로보다 낫습니다. 처음 1-3초가 모든 것을 결정합니다.
  • 원테이크 얍의 경우: 훅을 개선하는 경우에만 재정렬하고, 그렇지 않으면 화자의 순서를 유지합니다.

3. 컷(조이기)

조임 프로필(일시 정지 압축, 일시 정지는 삭제되지 않고 단축됨):

프로필압축할 일시 정지(초과)유지 길이
부드럽게0.80초0.35-0.70초
표준0.45초0.18-0.40초 (문장 끝 후 0.30초)
빡빡하게 (얍 기본값)0.25초0.08-0.20초
  • 감지: 10ms 간격 RMS 엔벨로프, 음성 = 노이즈 바닥 + 8dB. 대체: silencedetect=noise=-30dB:d=0.5.
  • 제거: 음/어, 말 더듬기 및 다시 시작, 반복 단어, 잘못된 시작, 재촬영(이전 테이크 제거), 슬레이트/테일, 목청 가다듬기("그래서,", "기본적으로"). 의미론적 필러("like", "you know")는 오디오가 분리될 때만 제거합니다. 강조를 위한 의도적 반복은 유지합니다.
  • 신뢰도가 낮거나 모호한 컷(재촬영, 병합된 필러, ASR 노이즈)은 자동 적용되지 않고 사용자에게 확인을 받습니다.
  • 모든 접합부를 검증하세요: 각 접합부를 가로질러 창을 다시 전사하세요; 의도된 단어로 읽혀야 합니다. 2-3회 반복을 예상하세요. 전체 컷 후 계획과의 내용 단어 차이를 비교하세요; 손실된 단어가 있으면 실패로 간주합니다.
  • 시각적 확인: 화자가 메모를 내려다보거나 중간 깜박임/머리 움직임이 있는 컷 가장자리를 피하세요; 머리 움직임 가장자리에서 빡빡하게(<=30ms) 끝냅니다.
  • 프레임 정확한 조각: 모든 조각을 전체 프레임으로 양자화합니다(n = round(dur*fps)). 그로부터 출력 타임라인을 계획하지 않으면 캡션이 40컷에서 약 1초 정도 표류합니다.
  • L-컷: 영상과 음성을 별도로 렌더링합니다. 각 새 라인(내부 일시 정지 압축이 아닌)에서 영상 컷이 오디오 컷보다 2프레임 늦게 떨어집니다. 내부 압축은 하드 컷으로 유지됩니다. 립싱크 오류 없이 점프 컷을 부드럽게 만듭니다.
  • 내려다보기 / 메모 보기: 화자가 구절 사이에 내려다보는 구간에서는 더 세게 압축합니다(0.10초 초과 일시 정지, 각 면 0.03초 유지). 말하는 동안의 내려다보기는 자를 수 없습니다. 펀치인이나 스티커/B-롤로 숨깁니다.
  • 사용자가 요청하는 인간적인 순간(웃음, 반응)을 보호된 범위로 유지하세요. 가장자리는 원시 상태로 두고, 요청 시 정확한 초 단위로 자릅니다("0:09-0:11 자르기").
  • 페이싱: 최소 1.5-4초마다 새로운 시각적 이벤트(줌, 캡션 강조, 그래픽, B-롤)가 있어야 합니다. 약 8초 이상 정적 프레임 없음. 본문에 1.1-1.25x 속도 향상 선택 사항(절대 약 1.3x 이상, 가짜처럼 들림. 훅은 최대 1.5x까지 가능).

4. 줌(얼굴 인식)

  • 얼굴 추적: OpenCV Haar(opencv-python-headless<5) 또는 MediaPipe; 섹션당 0.5초마다 샘플링, 중앙값 사용, 중앙값 너비의 0.6x 미만 감지는 거부, 프레임 너비의 2% 사행 구간, 섹션 내에서 절대 패닝하지 않음. 섹션에 2회 미만의 히트가 있으면 이웃을 빌립니다.
  • 섹션당 줌 사다리(각 3-6초): 일반 1.0x, 강조 ~1.15-1.25x, 중요 ~1.3-1.6x (가로). 16:9에서 9:16으로는 고정 높이 분수 1.0 / 0.92 / 0.85 사용(더 조이면 불편해 보임).
  • 기간별 혼합: ~60% 일반 / 30% 강조 / 10% 중요. 첫 번째 섹션은 일반. 동일한 수준의 연속 섹션은 2개 이하. 강조 줌은 문장 4개 중 최대 1개.
  • 스타일 선택(바이브에서 묻거나 추론):
    • 하드 컷 펀치인(점프 컷 얍의 기본값): 점프 컷 세그먼트에서 1.0x와 1.15x를 번갈아 사용하고, 훅에서 확대 시작, 강조 문장은 ~1.3x.
    • 이지드 푸시인 빌드업: scale=w='iw*z(t)':h='ih*z(t)':eval=frame 후 고정 크기 crop, 큐빅 이지 아웃(1-(1-t)^3), 0.4-0.5초 진입. 먼저 2초 클립에서 테스트하세요. zoompan은 떨림이 있습니다.
    • 펀치 앤 스테이(1.16x, 0.5초) 펀치라인에 비디오당 1-2회.
  • 수직 프레이밍: 얼굴이 자르기 위에서 약 30% 위치에 오도록. cy = min(face_cy - 0.3*ch, head_top - 0.03*ch).
  • 선택적으로 피크에만 히트 효과: 흔들림, 2프레임 흰색 플래시, RGB 분할, 속도 램프(파라미터 참조).

5. 캡션(애니메이션, 단어 수준)

  • 단어 타임스탬프에서 libass .ass 생성(정적 글꼴 인스턴스만; 가변 글꼴은 libass를 중단시킴). 세그먼트별 재전사로 정확한 타이밍 확보.
  • 기본값: 큐당 1-3단어(<=18자), 구두점 및 >=0.3초 일시 정지에서 분리, 최소 큐 0.35초(깜빡임보다는 3단어로 늘림), 마지막 단어 후 0.12초 유지. 글꼴 ~1920 캔버스 높이의 4.6%(~88px), ExtraBold, 두꺼운 외곽선 또는 부드러운 그림자.
  • 스타일(실제 프레임에서 3개를 그리드로 렌더링하여 사용자가 선택하도록 함):
    • Bold: Montserrat 800, 대문자, 흰색, 활성 단어 노란색 #FFD700, 3px 검은색 외곽선, 스프링 팝인.
    • Bounce: 디스플레이 글꼴, 1-2단어, 회전하는 강조 색상, 오버슛 0.7 -> 1.2 -> 1.0.
    • Clean: Inter 700, 자연스러운 대소문자, 3-5단어, 부드러운 페이드.
    • Hormozi-lite (대체): 흰색에 검은색 외곽선, 중앙 정렬.
  • 강조: 4단어 중 약 1개의 키워드가 색상/크기 112%를 얻음. 숫자/돈은 자동 색상 지정(예: #3CE07A). 캡션 그룹당 하나의 키워드는 "디자인된" 바이브에서 2-4배 크기 처리를 받음. 말하는 단어에 팝: 108-112% 크기, 약 110ms 동안 이징 백.
  • 배치: 플랫폼 안전 영역 존중(범용 9:16 안전 영역 x60-940, y285-1480). Reels 캡션 y~1360, TikTok ~1400, Shorts ~1440. 입/턱 위에 절대 배치하지 않음. 라인은 4단어를 초과하지 않으며, 균형 잡힌 쌓기.
  • 본문 캡션의 기본값으로 축소된 디스플레이 얼굴을 사용하지 마세요(비좁아 보임).

크리에이터 유형 시스템(실제 편집에서 검증됨, 사용자가 "진짜 콘텐츠 크리에이터 스러운데 깔끔한"이라고 말함):

  • 본문: Gotham Narrow Black(또는 Montserrat 800), 대문자, 흰색, 1080w에서 약 70px, 어두운 스트로크 + 부드러운 흐림 그림자. 단어가 말해질 때 나타남. 가장 최신 단어만 활성화됨(노란색 + 112% 팝, 3프레임에 걸쳐 이징 백). 동시에 두 단어가 강조 표시되지 않음.
  • 캡션에 구두점 없음(아포스트로피와 검열된 욕설인 sh*t, f***ing은 유지).
  • 키워드(제품, 이름, 숫자, 주제): 축소된 Ultra(Gotham XNarrow Ultra), 1.5배, 노란색, 기준선에 인라인.
  • 스크립트 악센트(SignPainter / 브러시 스크립트), 크림색, 약 6도 기울임, 비디오당 최대 4-6개의 감정 단어에 사용.
  • 큰 비트(펀치라인, 주제 문장, 제품 공개): 축소된 Ultra 슬램 1.28 -> 1.0, 4프레임에 걸쳐, 단어별로, 200-250px, 입 아래(펀치인 줌이 얼굴을 아래로 이동시키는지 확인).
  • 순간 카드: 화자가 말하지 않았지만 그 순간이 필요한 텍스트(예: 웃음 위에 스크립트로 "부자처럼 웃음").
  • 시리즈/타이틀 빌드: 각 타이틀 라인이 말해진 단어와 함께 나타남(축소된 디스플레이 라인 / 스크립트 라인 / 브랜드 컬러 라인 / 트래킹된 작은 대문자), 턱 아래에 배치, 입 위에 절대 배치하지 않음.
  • 요청 시에만 캡션에서 욕설을 검열하고, 오디오는 녹음된 대로 유지합니다.
  • 지속적인 레이블(일 카운터, 시리즈 태그)을 추가하기 전에 물어보세요. 크리에이터는 종종 이를 꺼는 것을 선호합니다.

5b. 소품, 스티커 및 컷아웃(선택 사항, 높은 영향력)

  • 실제 인물/브랜드 참조(예: "Bruce Wayne", "Alfred", 자동차): 첫 번째 언급 시 흰색 외곽선 스티커 컷아웃으로 한 번만 표시(컷아웃 아래 알파 MaxFilter ~19px), 오버슛으로 팝인(0 -> 1.12 -> 1.0, 0.22초), 부드러운 흔들림(+/-2.5도), 약 1.9초, 팝아웃. 머리 옆 왼쪽 상단/오른쪽 상단에 배치, 얼굴 위에 절대 배치하지 않음. 하나의 SFX(휘익, 또는 테마 있는 것: 집사에게 서비스 벨 딩)와 쌍으로 사용.
  • 물체는 움직일 수 있음: 예를 들어 자동차 컷아웃이 말해진 단어에 맞춰 바닥을 가로질러 주행(약 2초 동안 smoothstep, 작은 바운스, 18%/32% 알파의 속도 고스트 복사본 2개), 엔진 지나가는 SFX와 함께.
  • 소싱: 먼저 사용자 에셋. 실제 인물의 경우 공개 라이선스 사진(Wikimedia Commons CC BY / CC BY-SA / PD)을 사용하고 사용자에게 크레딧 라인을 알림. 사용 가능한 도구(예: 배경 제거 API 또는 rembg)로 배경을 제거하고 물어본 후 진행. 권한을 확보하지 않는 한 개인/소셜 용도로만 사용.

6. 사운드 디자인

작업 순서: 음악(있는 경우) 먼저, 영상 그 다음, SFX 마지막.

  • 큐: 레이아웃/씬 변경 및 큰 카메라 움직임에서 휘익(2프레임 일찍 시작; 접촉 프레임 전 공격 시간까지 시작); 그래픽/단어 팝 진입 시 팝; 훅 또는 공개 시 한 번 임팩트/서브 드롭; 다음 히트에서 끝나는 라이저; 하이라이트에 드물게 틱/플릭; 타이핑은 키 소리.
  • 절제(가장 중요): SFX는 변경을 표시하고, 모든 단어를 표시하지 않음. 필러에는 아무것도 없음. 18초에 약 8개는 디자인된 느낌, 약 20개는 일반 느낌. 밀도 제한: 토킹헤드의 경우 2초 창당 2개. 1.5초 이내의 동일한 SFX는 변형을 번갈아 사용하고 반복당 1.5dB씩 낮춤. 강도 사다리: 캐주얼 얍 = 드물게; 하이프 릴 = 대부분의 비트에 사운드; 회사용 = 거의 없음.
  • 소스: 사용자 라이브러리, 생성(ElevenLabs 사운드 효과/생성 팩), 또는 합성 키트 접근 방식(numpy/ffmpeg로 휘익/팝/틱/임팩트/라이저 구축, 다운로드 없음). 과도 피크로 배치, +/-1프레임.
  • 음악: 선택 사항. 베드는 음성 아래 10-15dB 덕킹(sidechaincompress=threshold=0.02:ratio=8:attack=20:release=350), 덕킹 시 음악 게인 약 -18dB. 비트 컷 바이브를 위한: 비트 감지(librosa), 모든 비트 / 2비트 / 마디에서 컷, 컷이 3프레임 이내에 떨어지는지 확인.
  • 보이스 체인, 믹스, 리미터 및 라우드니스 목표는 references/params.md에 있습니다.

7. 외관

  • 가벼운 그레이드만: 웜 펀치 프리셋 또는 +/-8%로 제한된 자동 그레이드. 정적 토킹헤드는 블러 처리하지 않음(가짜처럼 보임). "디자인된" 바이브를 위한 선택적 그레인 3-6% 및 미묘한 비네트.
  • 로그 푸티지(DJI Osmo Pocket 3 D-Log M, 10비트 HEVC; 카메라는 bt709로 태그하지만 실제로는 로그): 먼저 DJI D-Log M -> Rec.709 LUT으로 변환한 다음, 그 위에 그레이드. 16비트로 작업: format=rgb48le,lut3d=file='<lut>.cube':interp=tetrahedral. LUT는 중간톤을 어둡게 함. 어두운 피부의 로우키 실내 샷의 경우 중간톤을 짓누르지 말고 들어 올리세요. 테스트된 시작점(외관: 풍부한 검은색, 약간 차가운 방, 자연스러운 피부): curves=master='0/0 0.04/0.025 0.25/0.31 0.6/0.70 0.9/0.92 1/0.98',colorbalance=rs=-0.025:bs=0.04:rm=0.03:bm=-0.015,eq=saturation=1.06,unsharp=5:5:0.3. 항상 배치 렌더링 전에 2프레임에서 raw | LUT | 그레이드를 나란히 렌더링하고 확인하세요. 조명이 변경될 때 샷을 개별적으로 그레이드하세요. 소스 프레임 속도를 유지하세요(24000/1001).
  • Pocket 3 수직 클립은 1728x3072(또는 2160x3840): 1.15-1.3x 펀치인에 충분한 헤드룸.

8. 출력 및 QA (TODO: references/qa.md로 이동)

  • 렌더링 프로파일: references/params.md에서 정확한 프리셋을 읽으세요. h264_nvenc(엔비디아), h264_videotoolbox(애플), libx264(범용 소프트웨어)에 대한 설정이 포함되어 있습니다.
  • 각 변환 후 다음을 검증하세요:
    • 컷 포인트에서 +/-1.5초의 프레임 추출
    • 1초 간격의 접촉 시트(시각적 글리치 확인)
    • ebur128 라우드니스 판독값(목표: -14 LUFS 통합, -1dB 진정한 피크, 최대 3 LU 범위)
    • 크로스 조인 재전사(단어 손실 확인)
  • 수정: 최대 3회 패스. 각 패스 후 해결된 문제와 해결되지 않은 문제를 보고합니다. 숫자로 보고하세요. 당신은 오디오를들을 수 없습니다.
  • 게시 준비(요청 시): 게시 설명, 해시태그, 콜 투 액션. 항상 복사본을 제공하고 파일을 전송하지는 마세요.

기술적 참고 사항

종속성

  • 필수: ffmpeg(오디오 필터 지원 포함: anlmdn, aemphasis, sidechaincompress, loudnorm), Python 3.10+, pip
  • Python 라이브러리: opencv-python-headless<5, numpy, pydub, ass, Pillow, soundfile, scipy, tqdm
  • 전사: faster-whisper(medium.en 또는 distil-large-v3) 또는 mlx-whisper(Apple Silicon)
  • 선택 사항: mediapipe(더 나은 얼굴 추적), librosa(비트 감지), rembg(배경 제거)

성능 참고 사항

  • 5분 분량의 1080p 30fps 푸티지를 예상 편집 시간(MLX Whisper, Apple M1 Max): 전사 ~2분, 절단/줌 ~30초, 캡션 생성 ~10초, 렌더링 ~4분(소프트웨어 인코딩) 또는 ~90초(하드웨어 인코딩).
  • 최신 GPU 또는 Apple Silicon 칩을 권장합니다. Intel Mac 또는 가상 머신은 크게 느려집니다.
  • 더 큰 프로젝트의 경우 배치 스크립트를 생성하고 API를 통해 단일 편집 작업을 실행하는 것을 고려하세요. 편집 세션이 여러 개인 경우 병렬 실행을 위해 임시 디렉토리를 분리하세요.

테스트

  • tests/에서 자동화된 테스트를 실행하세요: 각 모듈에 대한 단위 테스트 및 전체 파이프라인에 대한 통합 테스트. 테스트는 짧은(5-15초) 합성 또는 샘플 푸티지를 사용합니다.
  • 테스트 실행: python -m pytest tests/ -v
  • CI/CD: GitHub Actions가 각 푸시에 대해 테스트를 실행하고 아티팩트를 업로드합니다.

문제 해결

문제해결 방법
Whisper가 빈 전사본을 반환함오디오 스트림 확인: ffprobe로 오디오가 있는지 확인하고, 볼륨을 높이거나, anlmdn으로 노이즈를 줄이세요
libass가 글꼴을 로드하지 못함글꼴이 정적 인스턴스인지 확인하고, 글꼴 경로가 절대 경로인지 확인하세요. 가변 글꼴은 지원되지 않습니다
줌이 떨림leap 초당 샘플 수를 늘리거나, MediaPipe로 전환하세요. 섹션당 최소 3개의 얼굴 감지가 필요합니다
캡션이 표류함모든 조각이 전체 프레임인지 확인하고(n = round(dur*fps)), 최종 세그먼트를 다시 전사하세요
오디오가 깨지거나 클릭음이 있음각 접합부에 15-30ms 크로스페이드를 적용하고, -c copy가 아닌 재인코딩을 사용하세요
느린 렌더링-preset fast 또는 -tune fastdecode를 사용하거나, CUDA/비디오툴박스 하드웨어 인코딩으로 전환하세요

보안 참고 사항

  • API 키를 파일이나 전사본에 절대 저장하지 마세요. 사용자에게 환경 변수에 저장하거나 안전한 자격 증명 저장소를 사용하도록 요청하세요.
  • 다운로드한 모델은 ~/.cache/에 캐시되며, 재사용 시 추가 다운로드가 필요하지 않습니다.
  • 생성된 모든 출력은 사용자가 명시적으로 승인할 때까지 임시 디렉토리에 보관됩니다. 승인 후 소스와 출력을 모두 유지하거나 정리할 것인지 사용자에게 확인을 요청합니다.
  • 타사 미디어(스티커, 배경, 음악)는 명시적인 사용자 허가 또는 공개 라이선스(CC0, CC BY)가 있는 경우에만 사용됩니다.

참여 방법

이 스킬은 오픈 소스이며 기여를 환영합니다! 다음을 환영합니다:

  • 버그 신고 및 기능 요청 - GitHub Issues를 통해
  • 풀 리퀘스트 - 특히 검증된 편집 워크플로우, 새로운 바이브, 캡션 스타일, 사운드 디자인 프리셋
  • 테스트 - 새로운 편집 시나리오에 대한 테스트 추가
  • 문서화 - 새로운 사용 사례 및 모범 사례 문서화

라이선스: MIT

관련 스킬