Communitygithub.com

josenjc9/short-video-edit

단편 영상, 광고, 해설 영상, 구술 영상, 예고편 혼합 편집, Reels 제작 시 사용합니다. 사용자를 단계별로 안내하며 사실 확인 및 대본, 스타일 설정, 장면표 작성, 제작, 후반 작업, 납품 전 자체 점검, 종료 및 정리까지 모든 핵심 포인트를 사용자와 확인합니다. 실제素材를 기본으로 하며, 애니메이션과 자막 카드를 추가할 수 있습니다. 트리거 단어: 편집, 영상 편집, 완성 영상, 숏폼, Reels, 구술, 자막 카드, 자막, 혼합 편집, 예고편, 초안 편집, 색보정, 오디오 믹싱, 납품.

short-video-edit란 무엇인가요?

이 스킬은 AI 에이전트(Claude Code, Cursor, Codex 등)가 '전문가 수준'의 단편 영상을 제작할 수 있도록 설계된 상세한 워크플로우를 제공합니다. 7단계(목표 확인, 스크립트, 스토리보드 초안, 작업 및 위험 평가, 러프 컷, 제작, 자체 점검, 납품 및 종료)로 구성된 체계적인 프로세스를 따르며, 각 단계에서 사용자의 명시적인 승인을 필수로 합니다. FFmpeg, Python, SceneDetect, Auto-Editor, librosa, GSAP(HyperFrames) 등 다양한 오픈 소스 도구를 실제 작업에 활용하며, 특히 '미리 테스트하지 않은 기술은 보장하지 않는다'는 원칙 아래 5초 테스트를 강조합니다. 또한 사실 검증, 저작권 확인, 사용자 자산 보호 등 윤리적 가이드라인을 포함하여 실제 프로젝트에서 바로 적용 가능한 실용적인 스킬입니다.

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

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

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

문서

숏폼 영상 편집 스킬

AI 에이전트를 위한 편집 작업 매뉴얼입니다. 목표는 '그냥 볼만한' 수준이 아닌 '전문가급' 완성본을 만드는 것입니다.

핵심 판단: 결과물의 품질은 90%가 작업 시작 전(사실, 스타일, 장면 구성이 결정되었는지)에 결정되고, 10%는 렌더링에 달려 있습니다. 따라서 사전 작업이 통과되지 않으면 전체를 렌더링하지 않습니다.

이 스킬에 포함된 도구는 tools/ 폴더에 있습니다(경로는 <skill>/tools/로, 이 폴더를 가리킵니다). 필요한 소프트웨어: ffmpeg, python3; ocr_check.py는 macOS와 swiftc가 필요합니다; hf_lint.py는 HyperFrames로 자막 카드를 만들 때만 필요합니다. 도구 사용법은 tools/README.md를 참조하세요.

역할과 규칙

  • **'사용자'**가 결정권자입니다. 각 단계마다 사용자가 명시적으로 승인해야 넘어갑니다(사용자의 원문을 인용하고, 추측하지 마세요).
  • 사실과 대본은 사용자가 제공한 것만 사용합니다. 수정하거나 추가하려면 A/B/C 옵션을 제시하고 사용자가 선택하게 하며, 자체적으로 작은 글씨, 슬로건, 줄거리를 추가하지 마세요.
  • 확실하지 않으면 묻고, 추측하지 마세요. 검증되지 않은 내용을 사실처럼 말하지 마세요.
  • 요구 사항이 중간에 변경되면 = 해당 단계로 돌아가 다시 작업하고, 작업 중에 몰래 수정하지 마세요.
  • 사용자가 짧은 메시지를 여러 개 연속으로 보내면, 먼저 '알겠습니다. 다 말씀하실 때까지 기다리겠습니다.'라고 답하고, 다 말한 후에 작업을 시작하세요.

작업 시작 라우팅(먼저 유형을 판단하고 해당 섹션을 읽으세요)

하나의 영상은 동시에 여러 유형에 속할 수 있으며, 각 유형을 모두 읽습니다.

작업이 이런 경우읽을 곳
'영화 같은', '예고편', '혼합 편집', 여러 소스를 하나의 감정적인 영상으로 편집references/상황_예고편혼합편집.md + references/편집문법과서사.md, 크로스컷연속성.md, 화면리듬과색보정.md, 반송과납품형식.md
실제 사람이 말하는 것이 주, 내용 편집 및 자막 필요references/상황_구술강연영상.md
주인공이 그려진 캐릭터, 상호작용 필요references/상황_캐릭터애니메이션영상.md
정적 이미지 카드/정보 그래픽을 영상으로 만들어야 함references/상황_이미지카드에서동적영상으로.md
화면 속 화면, 분할 화면, 몽타주, 스틸 프레임, 변속, 역재생, Ken Burns 등의 편집 기법references/기법라이브러리.md(테스트 완료된 ffmpeg 명령어 포함, 실제 테스트 또는 일반적인 방법 표시)
전환: 사용 여부, 유형 선택, ffmpeg xfade 사용법references/전환가이드.md
자막 카드 애니메이션, 숫자 차트, 전환 효과, 효과 레이어, 3D/Three.jsreferences/동적그래픽과3D.md(동적 그래픽 감각과 숫자, 전환 레시피, 애니메이션 엔진 선택, 3D 사용 시기)
'N년차' 연도별 롤링, 시간 흐름 몽타주references/상황_시간흐름몽타주.md
어떻게 해야 할지 모르겠다: 편집 기법, 애니메이션, 도구 선택references/기법과도구목록.md(각 항목에 실제 테스트 또는 일반적인 방법 표시)
제작 과정(요리, 조립, 시공 등 단계별 완료)사전 단계 1의 '제작 과정 유형은 먼저 세 가지 질문'
반려동물, 가족, 실제 경험 포함'도구와 금기': 실제 경험에는 생성된 화면을 사용하지 않음

프로세스 개요

  1. 목표 확인: 한 문장 목표, 대상 및 용도, 플랫폼 및 사양(비율, 초, 해상도), 소재 목록, 검증 가능한 성공 기준, 하지 않을 것.
  2. 스크립트: 창작 유형의 경우 먼저 세 가지 다른 스토리라인의 텍스트 개요를 제시하여 사용자가 선택하도록 합니다. 최종 확정 = 구간, 초, 자막, 사운드 방향.
  3. 스토리보드 초안: 샷 목록 + 스토리보드, 기법 필드는 비워둡니다. 형용사를 숫자로 바꿉니다('즐거움' → 바운스 폭, 동작 박자).
  4. 작업 및 위험 평가: 소재 목록(접촉 시트); 각 샷에 사용할 기법을 '검증된 능력'과 대조; 해본 적 없는 것은 먼저 5초 테스트, 안 되면 간소화된 대안으로 교체; 스타일 팩(단계 2)은 이 단계에서 잠급니다. 통과 = 사용자가 스토리보드 확정.
  5. 러프 컷: 스토리보드를 시간과 사운드 효과에 따라 대략적인 버전으로 배열, 먼저 리듬과 길이를 확인한 후 작업에 들어갑니다.
  6. 작업: 제작, 후반 작업.
  7. 자체 점검: 렌더링 전 지뢰 찾기 → 렌더링 → 기계 검사 → 대규모 검사 목록, 이미지를 하나씩 확인.
  8. 납품 및 종료.

1단계: 사전 작업(세 단계 모두 사용자 승인 필요)

단계 1 | 사실과 대본(한 번 묻고, 답변은 샷 목록 메타에 저장)

  • 호칭, 음성 규칙(기본: 배경 음악 없음, 사운드 효과만; 원음 유지할 부분), 비율, 초, 해상도, 영상 제목.
  • 소재는 먼저 접촉 시트(tools/storyboard.py)를 만들어 내용 확인, 파일 이름만으로 판단하지 마세요; 소리는 먼저 스펙트럼을 확인하거나 직접 들어보세요.
  • 지식/교육 유형 내용은 먼저 검증하고 작업하세요: 각 정의를 공식 출처(공식 문서 우선, 타사 정리는 보조 증거로만)에서 확인하고, 샷 목록 옆에 '이 문장이 어느 출처와 일치하는지' 기록하고, 찾을 수 없으면 '미검증'이라고 표시하세요. 원고의 어떤 부분을 제거하기 전에, 그 부분이 오해를 방지하는 역할을 하는지 먼저 판단하세요; 직접 만든 간소화는 '이것은 제가 간소화한 것이지 원고의 표현이 아닙니다'라고 명확히 말하세요. 검색 요약만 읽고 전문을 읽지 않은 경우, 그 사실을 솔직히 말하세요.
  • 제작 과정 유형은 먼저 세 가지 질문: ① 제작 순서; ② 각 소재가 어떤 완성품, 어떤 단계에 속하는지(촬영 순서로 추측하지 마세요); ③ 반드시 나타나야 하는 핵심 순간.
  • '소재에 없습니다/촬영할 수 없습니다'라고 말하기 전에, 전체를 프레임별로 끝까지 보세요. 동작 몇 프레임만 보지 마세요. 사용자가 스크린샷을 보내면 tools/find_frame.py를 사용하여 어떤 소재의 몇 초인지 찾으세요.
  • 클립 선택 기준: 소재에 촬영자의 구두 평가가 있는 경우, 텍스트로 변환하여 가점 기준으로 사용하세요; 없으면 명확한 반송 조건(흐림, 흔들림, 너무 어두움)을 사용하고, 반송 시에는 어떤 클립인지, 해당 샷이 무엇인지 기록하세요. 이 두 가지 방법은 보조 수단일 뿐이며 효과가 보장되지는 않습니다.

단계 2 | 스타일 팩(한 페이지, 먼저 사용자에게 보여줌)

  • 1~2개의 참고 영상 또는 참고 화면, 그리고 '어떤 점이 비슷해야 하는지'에 대한 한 문장. 참고 영상 분석 시에는 차원을 명확히 말하세요. 말하지 않으면 AI가 색상만 볼 수 있습니다. 선택 가능: 영상 유형, 글꼴, 색상, 자막 카드, 요소, 모듈(자막 카드 진입/퇴장 방식, 카드 겹치기, 플로팅 마커 등 재사용 가능한 구성 요소), 무료 소재(사용된 무료 소재와 라이선스 확인), 동작, 리듬, 전환.
  • 색상: 배경/텍스트/강조 색상 하나(강조 색상은 화면의 ≤15%, 텍스트 대비 ≥4.5:1); 스토리가 있는 영상은 색상 곡선을 별도로 작성(각 구간의 목표 밝기).
  • 글꼴 및 자막 카드 언어: 최대 두 세트.
  • 전환 언어: 전체 영상 ≤3종; 효과는 각 샷에 하나의 주요 효과.
  • 스타일 참조 이미지 한 장 제출(핵심 프레임 하나), 텍스트만 제출하지 마세요.
  • 기법 선정: 작업 시작 시 영상을 더 아름답게 만들 수 있는 기법이 무엇인지 조사하고, 수량 제한은 없지만 각각 '어느 샷에 사용되고, 왜 적합한지' 설명할 수 있어야 합니다. 사용자에게 제공하는 목록은 항상 쉬운 이름과 효과 설명(예: '밀어넣기 샷: 천천히 주인공에게 접근')을 사용하고, 영어 코드명을 쓰지 마세요. 납품 시 한 번 대조: 사용된 기법이 이 목록에 있는지 확인.
  • 구술/소셜 해설 영상의 일반적인 패키징 기법: 마스크 색보정(배경만 조정), 배경을 비디오 월로 교체, 인물 뒤에 큰 글자 배치, 전후 비교 슬라이더, 진행 표시줄이 있는 타이핑 입력 상자, 스틸 프레임 + 변속, 키워드 플로팅 태그, 화면 속 화면, 숫자 깜빡임, 숨소리 편집. 실제로 테스트하지 않은 것은 사용자에게 보장하지 말고, 먼저 5초 테스트를 하세요.

단계 3 | 샷 목록 + 스토리보드

  • 각 샷 작성: action(화면에서 실제로 발생하는 일), shot_size(원/중/근/특), 자막, 자막 카드, 사운드 효과(상대적 초만 저장). 자막 카드는 evidence(화면에서 이를 뒷받침하는 부분)를 작성해야 합니다.
  • 각 컷 포인트에 cut_reason 작성(왜 여기서 자르고, 왜 이 샷을 연결하는지); 매치 컷 또는 컷 온 액션을 사용하는 경우 anchor(이전 샷 끝에서 무엇을 잡고, 다음 샷 시작에서 무엇을 연결하는지)를 별도로 작성. 이유를 쓸 수 없는 컷 포인트는 먼저 삭제.
  • 자막: 초당 4~5자, 상한 6; 해당 샷이 시작된 후에 나타나야 함(이전 샷보다 먼저 나타나지 않음); 자막 길이가 샷 길이를 결정; 각 자막 문장은 화면에서 뒷받침되어야 하며, 없으면 사용자에게 소재를 요청.
  • 샷 배열에는 스토리라인 + 샷 크기 전환 필요: 먼저 주인공과 기승전결을 정하고(같은 종류의 동작만 나열하는 것은 서사가 아님); 각 구간은 의도적으로 샷 크기를 전환하고, 일반적으로 '중→근→원' 또는 '원→중→특'을 사용.
  • 제작 과정 영상의 진행 일관성: 큰 단락은 실제 제작 순서를 따름; 같은 단락 내에서 여러 완성품은 동시에 진행되어야 함; 이미 완료된 완성품은 아직 작업 중인 단락 중간에 삽입될 수 없음; 완성품은 마지막 피팅 단계에만 나타남(오프닝 프리뷰 예외). '손 보이지 않게' 하려면 crop으로 클로즈업을 자르고, 사용자가 지정한 샷에만 적용.
  • 사용자가 '영혼/분위기가 필요하다'고 말함 = 색보정 필요: 전체 영상에 하나의 통일된 시스템 사용.
  • 스토리보드는 tools/storyboard.py를 사용하여 소스 또는 완성 영상에서 프레임을 추출하여 퍼즐을 만듭니다. 기계 검사는 글자만 확인하고, 자막 카드와 화면이 동일한 내용인지는 사람이 이미지를 봐야 합니다.

사용자에게 샷 목록을 제출하기 전에, 스스로 하나씩 체크하고, 하나라도 빠지면 제출하지 마세요:

  1. 감정에 대해 물었는가(격려/온정/서스펜스); 배경 음악이 필요한지 물었는가.
  2. 자막 카드: 먼저 3가지 5초 비교 영상을 제시(세 가지는 '다른 방식'이어야 하며, 같은 방식에 글꼴만 바꾼 것이 아님). 먼저 각 자막 카드의 기능을 쓰고, references/편집문법과서사.md의 '자막 카드 방식 메뉴'에서 선택; 사용자가 하나를 주요 방식으로 선택하면, 전체 영상을 구간별로 혼합하여 사용하고, 글꼴은 전체 영상에서 한 세트만 사용.
  3. 기법: 실제로 조사했고, 목록은 쉬운 이름을 사용하며, 각각 어느 샷에 사용되는지 설명할 수 있음.
  4. 소리: 실제 녹음된 사운드 효과를 사용하고, 프로그램 합성은 사용하지 않음; 각 사운드 효과는 화면의 동작과 일치해야 함. 라이브러리에 없으면 무료 사운드 효과 사이트에서 찾고, 라이선스를 직접 확인하고, 파일 이름에 출처를 명확히 기록하고 사운드 효과 폴더의 README에 기록. 완전히 일치하는 것을 찾을 수 없으면 가장 가까운 것을 찾아 설명.
  5. 소재 시청 완료(사진 포함), 클립 선택 제외 조건 명확히 작성; 날짜는 촬영 시간 기준으로 확인하고, 파일 이름으로 판단하지 마세요.
  6. 사실과 대본은 사용자가 제공한 것만 사용; 당신이 생각한 자막 카드는 옵션으로만 제시하고, 직접 넣지 마세요.
  7. 스타일 참조 이미지(핵심 세 프레임) 함께 제출; 커버 프레임은 별도 저장, 총 길이를 추가하지 마세요.
  8. 사용자의 짧은 답변('A', '가능', '다 좋아')에 두 가지 해석이 가능하면 먼저 확인.
  9. 각 컷 포인트에 cut_reason이 있음.
  10. 배경 음악이 있는 영상: 믹싱 전에 사운드 맵(레이어, 시작/끝, 우선순위, 출처) 작성.
  11. 감정 유형 자막 카드는 먼저 '이것을 샷으로 대체할 수 있는지' 질문: '시청자에게 감정 결론을 내리는' 각 자막 카드(재미있음, 감동, 어색함, 충격) 옆에 '인물이 보는 것 → 반응' 또는 'A샷 → B샷' 연결로 대체할 수 있는지 표시; 가능하면 대체 샷을 쓰고, 소재 부족 또는 급한 경우에만 자막 카드를 유지. 정보 유형 자막 카드(숫자, 연도, 이름, 장소)는 영향을 받지 않음. 이 기법의 효과는 학계에서 여전히 논란이 있으므로, A/B 옵션으로만 제시하고 확실한 공식으로 간주하지 마세요. 실제 기록 소재는 다른 시간의 반응을 '현재 반응'으로 편집하여 발생하지 않은 감정을 만들어내지 마세요.

2단계: 제작

  • 화면: 먼저 저화질 초안을 만들고, 확정된 후에 실제 화질로 제작; 하나의 샷을 수정하면 해당 샷만 다시 작업. ffmpeg으로 HLG/HDR 소재를 처리할 때는 먼저 SDR로 변환; 각 샷의 밝기 측정(signalstats), 색상 곡선 목표와 일치시킴.
  • 실제 화면 고화질: 웹사이트/앱 화면은 브라우저 자동화로 3배 해상도로 녹화; 4K 출력은 devicePixelRatio 설정 필요. 소재 자체의 해상도가 부족하면 작업 시작 시 사용자에게 상한을 알림. 자신의 데모 사이트를 연속으로 빠르게 열지 마세요. 자체 제한 규칙에 의해 차단되어 오류 페이지가 녹화될 수 있음.
  • 효과는 먼저 소재 라이브러리 확인 후 직접 제작: 확인 후 없으면 직접 제작하고, 부족한 점을 기록. 영화 같은 느낌에 자주 사용: 푸시 인/리빌/포커스 전환, 휩 팬 전환, 라이트 렉, 필름 그레인, 비네트, 소프트 포커스 인트로 자막 카드. 의료 또는 온정 장면에서는 흔들림, 휩 팬, 대각선 돌진, 포커스 임팩트를 사용하지 마세요.
  • 자막 카드(HyperFrames 또는 유사 HTML 애니메이션): 타임라인을 window.__timelines에 작성; fromTo와 이후 from에는 immediateRender:false 추가; 프레임별로 채워지는 요소는 먼저 set opacity 0; 자막은 전체 영상에서 동일한 높이; 주체를 가리지 않음; 샷 전환 시 이전 샷의 모든 요소를 완전히 제거. 렌더링 전에 tools/hf_lint.py로 지뢰 찾기.
  • 중국어 자막 카드 레이아웃(1920 너비 기준): 메인 제목 900 폰트 두께, ≥120px, 자간 0.010.03em, 한 줄 ≤14자, 단어 사이에서 수동 줄 바꿈, 줄 시작 부분에 단일 문자나 구두점 배치 금지; 본문 500700 폰트 두께, ≥32px; 중국어/영어/숫자 사이에 반각 공백; 마스크 내 텍스트 줄 높이 ≥1.18. 자막 카드 최소 체류 시간 = 글자 수 × 0.18초 + 0.6초. 화면에 겹치는 레이블은 단색 배경에 진한 굵은 글자를 사용하고, 빈 공간에 배치.
  • 리듬: 시작 0.3초 내에 움직이는 것이 있어야 하고, 첫 번째 글자는 1.5초 내에 나타나야 함; 다음 동작은 이전 동작이 끝나기 0.1~0.3초 전에 시작; 한 번에 하나의 주체만 움직임; 퇴장은 입장 시간의 약 절반.
  • 스스로 생성 스크립트를 수정한 후, 파일 끝이 잘리지 않았는지 확인한 후 실행.

인물 배경 제거 및 마스크

  • 가장자리 검수 = 확대하여 손가락, 머리카락, 어깨 세 곳을 확인하고, 축소판만 보지 마세요. 마스크 처리: 먼저 약 1.6 블러, 그런 다음 대비 조정, 2px 축소하면 가장자리가 매끄럽고 흰 테두리가 없음.
  • 배경 제거된 단락 옆에는 사람 옆에 겹쳐진 카드나 '타 죽은' 자막(원본 자막이 사람 위에 있으면 '사람이 아닌 것'으로 인식되어 투명해짐)이 있으면 안 됨.
  • 테스트하지 않은 것은 보장하지 마세요: 손가락 끝에 여전히 몇 픽셀의 색상 테두리가 있을 수 있으므로 솔직히 말하세요.

구현 시 함정 (GSAP 및 ffmpeg)

  • 전체 길이는 정수 프레임이어야 함(초 × fps가 정수). 그렇지 않으면 자체 점검 시 프레임 수가 1 차이 날 수 있음.
  • 원음 위치는 타이밍 파일에서 계산하고, 초를 하드코딩하지 마세요(샷 길이를 변경하면 입에 맞지 않게 됨).
  • 주체가 검은색일 때 zoomin 전환을 사용하지 마세요(검은색 화면으로 확대됨). smoothleft 또는 fade로 대체. 가로 사진을 세로 영상에 넣을 때는 먼저 세로로 잘라 얼굴을 보호하고, 블러로 배경을 채우지 마세요.
  • GSAP가 화면을 '나타남→사라짐→다시 나타남' 또는 전체가 멈추게 하는 세 가지 함정: ①tl.set(그룹자식요소,{opacity:1},0)를 나중에 tl.from(...) 앞에 두면 from의 숨겨진 시작점을 덮어씁니다. 숨기려면 tl.set(전체,{opacity:0},0)을 사용하고, to/from으로 표시합니다. ②선택기가 한 번에 두 요소를 선택하여 조기에 애니메이션됩니다. 움직여야 할 요소만 움직이거나 id를 사용합니다. ③새 장면의 변수 이름이 다른 장면과 충돌하여 onUpdate 오류가 발생하고, 해당 샷부터 영상이 얼어붙습니다. 새 변수를 추가하기 전에 grep으로 전체 파일에서 동일한 이름을 확인합니다. 수정 후 실제 렌더링 프레임으로 샷별로 추출하여 검사하고, 각 샷 전후로 한 프레임씩 추출합니다.
  • 후반 작업 색보정에 colorbalance의 밝은 부분을 사용하지 마세요(흰 배경 화면이 전체적으로 노랗게 변할 수 있음); 비네트는 vignette=angle=PI/8을 사용. 순백색 웹 페이지를 조정한 후에는 흰 점을 한 번 측정하세요.
  • 음성: 사용자가 명시적으로 요청할 때만 수행(기본적으로 사운드 효과만). 각 문장에 silenceremove 적용, 필요한 경우 atempo(≤1.2) 적용 후, Python 배열을 사용하여 타임코드에 따라 동일한 길이의 wav로 오버레이; ffmpeg으로 많은 adelay를 한 번에 amix하면 출력이 잘릴 수 있습니다. 믹싱 전에 사운드 효과 파일 길이가 완성 영상 길이와 같은지 확인. 자막이 변경되면 음성도 동기화하여 다시 생성.
  • 사용자가 '너무 시끄럽다'고 불평하면 그가 지목한 소리만 제거; 제거하기 전에 '무엇을 제거할 것인지' 목록을 작성하여 알려주고, 원음과 같은 감정 포인트는 차라리 하나를 남겨두는 것이 좋습니다.
  • 영상 완성 후 사용자가 중간에 샷을 삽입할 수 있음: 샷 목록만 수정(샷 추가, 자막 연장, 사운드 효과 위치 이동), 검사, 샷 조합, 렌더링, 믹싱을 다시 실행하고, 이후의 시작점과 끝점은 자동으로 이동. 사진 샷을 삽입할 때는 먼저 구도를 확인하고, 자막이 채도가 높은 주체 위에 오지 않도록 합니다.

3단계: 후반 작업

  • 색보정은 색상 곡선에 따라 수행하고, 전체 영상에 동일한 룩 시스템을 사용하며, 샷마다 다른 필터를 적용하지 않습니다.
  • 영화 같은 색보정은 기본적으로 수행: S자 곡선, 검은 부분 미세 상승(안개 효과), 비네트, 필름 그레인을 전체 영상의 마지막 레이어에 배치. 어두운 부분은 푸르스름하게, 밝은 부분은 따뜻하게 하는 분할 색조는 컬러 룩에만 적용하고, 흑백 구간은 약간 차갑게 별도 적용합니다. 그렇지 않으면 흑백이 누렇게 변한 오래된 사진 색상이 됩니다.
  • 사운드 효과는 기본적으로 적게 시작하고, 각 소리는 화면의 동작과 일치해야 하며, 납품 전에 '이 소리를 제거하면 무엇이 부족해질까' 자문. 상황에 맞지 않으면 제거; loudnorm에 alimiter를 추가하여 음량 폭주 방지.
  • alimiter에 반드시 level=disabled 추가(기본 자동 게인은 피크를 0dB에 가깝게 밀어 올림); 같은 단계에서 atrim을 영상 길이에 추가하고, 출력에 -shortest를 추가하지 않으면 오디오 트랙이 비디오보다 길어져 프레임 수 검사가 실패함. 마무리 loudnorm=I=-16:TP=-1.5.
  • 변속 샷의 사운드는 atempo로 늘이거나 줄이면 안 됨(이상한 변조음 발생): 슬로우 모션/빨리 감기 샷은 원래 속도의 사운드를 사용하고, 비디오와 오디오를 두 개의 별도 입력으로 가져옴.
  • 사운드는 항상 마지막에 사용자에게 헤드폰으로 듣도록 요청; 측정 및 음성 인식은 보조 도구로만 사용. 저주파수(150Hz 이하)는 노트북/휴대폰에서 재생되지 않으므로 사운드 효과에 300Hz 이상의 에너지가 있어야 함.
  • 경량 버전 ≤9MB: -maxrate로 압축이 안 되면 x264 2패스 인코딩으로 변경.

음성 제거/환경음 유지

  • 음성 인식으로 시간대를 찾아 음소거하지 마세요(음성이 종종 비음성으로 잘못 표시되어 누락되고, 시간도 초 단위로만 제공됨); 대신 소스 분리 도구(예: demucs)를 사용하여 음성이 없는 오디오 트랙을 한 번에 추출. 분리 후 음성 인식으로 한 번 더 스캔하여 재확인: 괄호 안 내용은 비음성이므로 잔류로 간주하지 않음; 동일한 문장을 반복하거나 '구독 잊지 마세요'와 같은 것은 인식 환각임.
  • 분리 도구는 에어건 폭음, 칼 소리 일부를 음성으로 제거할 수 있음: 중요한 사운드 효과가 있는 몇 초 동안 음성 트랙을 다시 추가하되 250–3800Hz 음성 대역은 제거.

보조 도구: 컷 포인트 찾기, 숨소리 편집, 비트 포인트 캡처

세 가지 모두 합성 소재로 기능 검증 완료(결과는 뒤에 첨부); 실제 소재를 사용할 때는 임계값과 효과를 소재에 따라 조정해야 함.

  • PySceneDetect: scenedetect -i 비디오.mp4 detect-adaptive list-scenes, 샷 시간표 출력. 검증: 세 가지 다른 내용을 하드 컷으로 연결한 6초 비디오에서 3개의 샷 감지, 컷 포인트 2.0초와 4.0초로 실제와 일치. 애니메이션 소재에서 감지된 '샷'이 반드시 원하는 샷은 아닙니다.
  • Auto-Editor: auto-editor 비디오.mp4 --edit audio:threshold=5% --margin 0.15sec -o 출력.mp4, 구술 영상의 빈 숨소리 편집. 검증: 1초 사운드 3개와 1초 무음이 번갈아 나오는 6초 비디오를 약 3.85초로 편집. 임계값은 소재에 따라 테스트 필요: 동일한 합성 소재에 15%를 사용하면 전체가 무음으로 판단되어 빈 화면으로 편집될 수 있음; 편집 후 자막, 입 모양, 오디오-비디오 동기화를 재확인하고, 자막 시간은 편집 후 버전에서 다시 생성. 숨소리를 잘라낸다고 해서 군더더기 단어까지 함께 잘라낼 수 있는 것은 아니며, 자막은 말한 글자보다 적어서는 안 됨. 공식 배포판(예: Homebrew)을 사용하고, 이름이 비슷한 유령 패키지를 사용하지 마세요.
  • librosa: librosa.beat.beat_track으로 비트 포인트와 BPM 획득. 검증: 120BPM 합성 드럼 비트에서 약 117.5BPM, 23개의 비트 포인트 측정, 오차 2% 이내; 비트 포인트는 납품 전에 여전히 사용자에게 듣도록 요청. 사용자가 비트에 맞춘 영상에서만 사용하고, 여유로운 영상에서는 사용하지 마세요.

4단계: 납품 전 자체 점검(각 항목에 증거가 있어야 통과)

먼저 기계 검사 실행: tools/qa_video.py 완성영상.mp4 출력폴더 --size WxH --fps N --share 공유버전.mp4(해상도, fps, 정수 프레임, 오디오 트랙 길이, 음량 폭주, 음량, 블랙 프레임, 프리즈, 컷 전후 프레임, 공유 버전 크기 확인). 숫자는 도구가 확인하는 것이지만, 이미지는 직접 하나씩 확인. 항목별 체크:

  1. 청결도(매번 납품 시 수행): 각 샷의 첫 프레임, 중간 프레임, 마지막 프레임을 추출하여 하나의 이미지로 만들고 하나씩 확인. 손이나 그림자가 들어오는 것, 설명되지 않은 동작, 전체 샷에서 아무 일도 일어나지 않는 것, 빨리 감기 후 그림자 깜빡임 등은 모두 줄이거나 다른 구간으로 교체.
  2. 컷 포인트 연속성(여러 샷에 감정이 있는 영상은 필수): tools/cuts_sheet.py로 각 컷 포인트 전후 2프레임씩 추출하여 방향, 시선, 동작 위상, 샷 크기, 조명을 하나씩 확인. 문제가 있으면 references/반송과납품형식.md에 이미지 경로를 포함하여 이슈로 작성. 스스로 최대 2회 수정, 그래도 안 되면 사용자에게 판단을 요청.
  3. 사양: 해상도, 프레임 수, 비율이 사용자의 요구와 일치해야 함; 완성 영상은 4K 또는 그 이상에서 다운스케일링되어야 함.
  4. 대본: 화면의 모든 글자는 사용자가 제공한 것이어야 함. 원고를 비교할 수 있는 경우 tools/ocr_check.py를 사용하여 완성 영상의 주요 프레임과 원고를 텍스트로 변환하여 문장 단위로 비교하고, 일치하지 않는 것이 있으면 원본 텍스트를 다시 확인(인식 오류가 화면 오류를 의미하지는 않음). 글자가 일치한다고 해서 내용이 올바른 것은 아니므로, 내용은 별도로 출처를 확인.
  5. 자막 카드 = 화면: 각 자막 카드의 내용이 해당 샷에서 실제로 발생한 일과 일치해야 함. 구간을 선택하고 자를 때는 해당 구간의 실제 프레임을 보고, 자신이 작성한 설명을 보지 마세요.
  6. 자막: 초당 글자 수가 적합하고, 이전 샷보다 먼저 나타나지 않으며, 전체 영상에서 동일한 높이여야 하고, 자동 줄 바꿈되지 않아야 함.
  7. 가독성: 모든 글자가 공유 버전(압축 후)에서도 명확하게 보여야 함.
  8. 청결: 샷 전환 시 잔여 요소 없음, 이미지 중첩 없음, 오류 페이지 또는 테스트 데이터가 녹화되지 않음.
  9. 일관성: 전환 ≤3종, 색상은 곡선을 따르고, 자막 카드 언어 ≤2세트.
  10. 리듬: 시작 0.3초 내에 움직임이 있고, 두 주체가 동시에 움직이지 않으며, 자막 카드 체류 시간이 충분함.
  11. 사운드: 음량 폭주 없음, 각 사운드 효과에 해당 동작이 있음, 상황에 맞지 않는 사운드 효과 없음.
  12. 재현 가능성: 동일한 시점에 두 번 렌더링하고, 스크린샷의 해시가 동일해야 함(프로그램 애니메이션은 시간의 순수 함수로 작성되어야 함).
  13. 정직: 화질을 복구할 수 없는 샷, 검증되지 않은 항목은 납품 시 솔직히 말하기.

5단계: 납품 및 종료

납품 폴더(위치는 직접 정하되, 다음은 권장 구조), 하나의 영상당 하나의 폴더, 날짜 다음에 이름(YYYYMMDD_영상제목):

  • 완성품/: 고화질 버전, 경량 버전(채팅 앱 전송용, ≤9MB), 커버, 자막 파일.
  • 초안편집/: 과정 버전과 입력 소재.
  • 최종차트/: 스타일 팩, 스토리보드, 샷 목록(기계가 읽을 수 있는 파일 + 사람이 읽을 수 있는 .md), 소스코드/(재작업용 스크립트 + README).
  • 테스트 관련 항목(새 도구, 5초 샘플)은 다른 테스트/날짜_이름/ 폴더에 넣고, 공식 출시용만 프로젝트 폴더에 넣습니다.
  • tools/deliver.sh를 사용하여 사운드 효과 합치기, 경량 버전 압축, 복사, md5 확인; 동일한 이름의 파일은 덮어쓰지 않음.
  • 완성품이 개정된 후, 최종 차트도 함께 업데이트: 스토리보드와 샷 목록의 초와 시작점이 완성품과 일치해야 하며, 그렇지 않으면 이전 버전에 대한 문서가 남게 됨.

최종본만 보관: 중간 산출물은 프로젝트 .work/ 폴더에 보관. 정리 시 tools/safe_trash.sh를 사용하여 휴지통으로 이동하고, 직접 삭제하지 않고, 먼저 목록을 작성하여 사용자 확인을 받습니다. 다른 사람의 작업 영역은 건드리지 마세요.

종료 시 필수 작업 5가지(모든 영상에 대해 수행)

  1. 최종본: 먼저 커버 확인. 영상 시작 부분에는 커버 프레임(제목 + 주인공)이 있어야 하고, 커버 이미지는 별도로 저장; 커버에 총 길이를 추가하지 말고, 시작 소재에서 차감. 커버 문구는 영상 내 결론 자막 카드에서 유추하고, 파일 이름이나 과정 단락에서 유추하지 마세요. 완성품의 공식 파일 이름을 <영상제목>_<초>.mp4로 변경하고, 경량 버전은 ≤9MB. 최종차트/의 스토리보드와 샷 목록은 완성품에 맞춰 다시 제작. md5 확인.
  2. 정리: 대체된 이전 스토리보드, 이전 스크립트, 각 버전의 초안 편집, 작업 디렉토리를 모두 safe_trash.sh로 휴지통으로 이동; README에 휴지통 안의 이름을 명시하고, 재작업 시 가져갈 수 있도록 함.
  3. 작업 종료: 이 영상을 위해 개설된 할 일 또는 작업을 모두 종료 표시.
  4. 회고: 각 버전에서 사용자가 변경한 사항(원문 인용), 근본 원인, 다음에 어떻게 방지할지; 자신의 실수는 별도로 나열; 재사용 가능한 방법; 검증되지 않은 추론은 '미검증' 표시.
  5. 이 스킬 최적화: 회고에서 '다음에 어떻게 방지할지'가 규칙이 될 수 있는 것은 이 SKILL.md의 해당 섹션에 다시 작성하고, 파일 끝에만 쌓아두지 마세요.

도구와 금기

  • 실제 소재 우선(ffmpeg + HTML 애니메이션). 촬영되지 않은 화면: 정적 이미지 생성(중국어는 생성하지 말고, 중국어는 HTML로 오버레이) → 기타 외부 소재. 실제 경험(반려동물, 가족, 고객 사례)에는 생성된 화면을 사용하지 마세요.
  • 새로운 도구, 패키지, 모델을 설치하기 전에 먼저 출처와 라이선스를 확인하고, 사용자에게 물어본 후 설치하고, 작업 중에 설치하지 마세요.
  • 자유 텍스트를 외부로 전송하는 명령어(예: 도구의 feedback 명령어)를 실행하지 마세요; 도구의 통계 보고는 기본적으로 꺼져 있습니다.
  • 확인되지 않은 내용, 사용자의 개인 소재 및 개인 정보를 공개 샘플이나 예제에 작성하지 마세요.

관련 스킬