Video Editing Skill (영상 편집 스킬)
날것의 토킹헤드 녹화는 보통 20~40%가 데드 에어(침묵, "음", 말을 잘못 시작함, 같은 문장을 두 번 말함)입니다. 이를 수동으로 자르는 것은 녹화보다 시간이 더 걸립니다. 이 스킬이 첫 편집을 수행합니다: 대본을 읽고, 각 컷에 이유를 붙여 계획을 세우고, 계획을 보여주며, 점프컷에 펀치인을 적용하고 깨끗한 오디오로 편집을 렌더링하고, 자막과 챕터를 작성한 후, 승인 후에 게시합니다. 필요한 모든 것은 이 폴더 안에 있습니다.
네 가지 약속:
- 사용자의 말은 그대로 남습니다. 사용자가 승인한 침묵, 필러, 더듬음, 재촬영 및 구간만 제거됩니다. 의미는 절대 편집되지 않습니다.
- 렌더링 전에 계획을 세웁니다. 컷 목록이 먼저 표시되고 승인되어야 합니다.
- 승인 없이는 아무것도 게시되지 않습니다.
- 사용자가 사용할 수 있는 푸티지만 사용합니다. 자신의 녹화물이거나 허가를 받은 경우에만 가능합니다.
Windows에서는 모든 명령어에서 python3 대신 py를 사용하세요.
0단계: 설정 및 소스
python3 scripts/check_setup.py를 실행하세요: ffmpeg, Pillow, 전사 경로 및 OpenCV를 확인하고 사용자 시스템에 맞는 설치 명령어를 알려줍니다. 필수: ffmpeg 및 Pillow.
한 번에, 당신이 볼 수 없는 것만 물어보세요:
- 어떤 파일이며, 사용자의 것인가요?
- 어디에 사용될 예정인가요: YouTube (16:9), 소셜 (세로), 또는 둘 다.
- 얼마나 빡빡하게: youtube (기본값: 0.5초 이상 침묵 제거, 자연스러운 비트 유지), tight (0.3초, 빠른 YouTube 및 소셜) 또는 podcast (부드럽게, 펀치인 없음).
- 습관적으로 사용하는 말 중 잘라도 안전한 단어 ("like", "so", "you know", "basically"). 이 단어들은 다른 문장에서는 의미를 가지므로, 옵트인 방식입니다.
- 반드시 그대로 두어야 할 부분 (데모, 침묵이 있는 농담, 스폰서 리드).
1단계: 전사하기
python3 scripts/transcribe.py VIDEO --out work/ --terms "제품명, 전문 용어, 게스트 이름"
--terms는 이름과 전문 용어가 올바르게 표기되도록 나열합니다; 렌더링 전에 edit.json에서 "replace"로 여전히 잘못 들린 부분을 수정하세요. 왜냐하면 영상에 굽힌 자막은 게시 후 수정할 수 없기 때문입니다.
항상 동일한 세 가지 경로이며, 장단점은 한 번 설명됩니다:
| 경로 | 방법 | 비용 및 속도 |
|---|---|---|
| 기존 대본 | --from captions.srt | 무료, 즉시; 단어 타임스탬프는 추정되고 대부분의 "음"이 누락되어 필러 제거가 약함 |
| Groq 또는 OpenAI | GROQ_API_KEY 또는 OPENAI_API_KEY | Groq는 오디오 1시간당 약 $0.04, 1-2분 소요 |
| 로컬 | pip install faster-whisper | 무료 및 비공개; --model small 사용 시 대략 동영상 길이의 0.5배에서 1배 시간 소요 |
전사기는 필러를 기록하도록 프롬프트됩니다; 그렇지 않으면 Whisper가 이를 생략합니다. 그래도 놓친 소리(기록되지 않은 "음", 숨소리)는 편집기가 오디오 자체에서 찾아냅니다.
2단계: 편집 계획 세우기
work/transcript.txt를 한 번에 모두 읽으세요. 그런 다음 edit.json을 작성하세요 (형식은 scripts/edit_video.py 상단에 있음):
- 스타일:
"style": "youtube","tight"또는"podcast"(임계값은references/editing-rules.md에 있음). 제한 시간을 초과하는 침묵은 자연스러운 비트로 줄어듭니다: 문장 중간에서는 더 짧게, 문장 후에는 더 길게, 주제 변경 시에는 가장 길게. - 필러: 기본 목록 ("um", "uh", "er", "hmm", "mm")은 안전합니다. 사용자가 요청한 경우에만 습관어를
extra_fillers에 추가하세요. - 여담 및 죽은 구간: 여담, "들리시나요?", 본론 전의 긴 설정. 이유와 함께
cut에 추가하고 사용자에게 알리세요. - 보호: 반드시 유지해야 할 것은
keep으로 보호하세요. 침묵 구간도 포함됩니다. - 질문 카드 또는 보이는 인터뷰어와의 인터뷰: 사용자가 달리 말하지 않는 한 질문 유지 (각 카드의 약 3초를
keep에 추가); 그렇지 않으면 모든 답변이 "그래서..."로 시작하고 맥락이 없습니다. - 잘못 들린 이름:
"replace": {"Cyrus Rex": "OSIRIS-REx"}. - 챕터 (YouTube용): 주제 변경에서 3~10개 챕터, 첫 번째는 0:00, 각각 최소 10초, 시청자가 얻을 수 있는 것으로 명명 ("2부"가 아닌 "카메라가 실패한 이유"). 시간은 원본 비디오 기준; 스크립트가 이를 이동시킵니다.
그런 다음 계획을 수립하세요:
python3 scripts/edit_video.py edit.json --transcript work/transcript.json --out edited/ --plan
edited/edit-plan.md는 새 길이, 말하기 중에서 제거된 양 대 긴 공백 및 카드, 분당 단어 속도, 그리고 1초 이상의 모든 제거 항목을 이유와 단어와 함께 제공합니다. 모든 재촬영 및 더듬음 라인을 읽고, "가능한 재촬영" 목록도 확인하세요: 같은 방식으로 시작하는 두 개의 완성된 문장은 절대 자동으로 잘리지 않습니다; 각각을 결정하고 실제 재촬영이면 cut에 추가하세요. 사용자에게 요약, 재촬영, 선택한 여담 및 챕터를 보여주고 승인을 받으세요.
3단계: 렌더링
python3 scripts/edit_video.py edit.json --transcript work/transcript.json --out edited/
수행하는 작업:
- 제한 시간을 초과하는 침묵을 자연스러운 비트로 줄이고, 필러, 더듬음, 재촬영 및 모든
cut범위를 제거합니다. 스타일의 최소값(youtube에서 0.4초)보다 짧은 제거는 그대로 둡니다: 점프컷이 절약하는 것보다 더 많은 비용이 듭니다. - 청취를 통해 각 컷을 배치합니다: 단어 경계가 소리가 실제로 멈추고 시작하는 지점으로 이동하여 단어 끝이 잘리지 않고, 대본이 놓친 소리(기록되지 않은 "음")가 발견됩니다.
- 그림도 확인합니다: 타이틀 카드와 장면 전환은 깔끔하게 잘리며, 카드의 몇 프레임이 남지 않습니다.
- 조각 그룹을 한 번에 하나씩 렌더링하여 컷 수에 관계없이 사운드와 그림이 동기화되도록 합니다.
- 펀치인: 점프컷을 숨겨야 하는 곳에서 전체 프레임과 1.1배 펀치인 사이를 전환합니다: 항상 1초 이상을 제거한 컷에서, 그렇지 않으면 동일한 프레이밍에 4초 이상 후에만, 새 카메라 샷으로의 컷에서는 절대 사용하지 않습니다.
"punch_in": 0으로 끌 수 있습니다. - 오디오: 작업 수준으로 게인 조정, 럼블 필터, 측정된 실내 소음에서 설정된 노이즈 감소(방이 이미 조용한 경우 건너뜀), 부드러운 압축, 피크 리미터, -14 LUFS로의 2패스 음량 패스.
- 자막: 항상
captions.srt를 작성합니다 (최대 42자의 2줄, 각각 1~7초, 작은 단어나 이름 내에서는 줄 바꿈 없음) YouTube에 업로드용."captions": {"burn": true}를 설정하면 소셜 미디어용으로 영상에 자막을 그립니다(많은 사람이 음소거 상태로 시청); 세로 버전은 기본적으로 자막을 굽습니다. SRT도 함께 제공되는 YouTube 동영상에는 자막을 굽지 마세요: 자막을 켠 시청자는 둘 다 보게 됩니다. - 세로:
"format": "vertical"은focus_x를 기준으로 잘라낸 1080x1920 버전을 만듭니다.
edited/edited.mp4, captions.srt, chapters.txt, edit-report.md 및 manifest.json을 작성합니다.
사용자에게 보여주기 전에 확인하세요: cuts.jpg를 엽니다 (가장 큰 컷 직전과 직후의 프레임: 카드의 번쩍임, 다른 샷으로의 점프, 멈춘 표정 확인) 및 manifest.json의 경고(동기화, 분당 190단어 초과 속도, 음량)를 읽으세요. 재촬영이 잘못된 테이크를 유지한 경우, 속도가 숨가쁜 경우(더 부드러운 스타일), 또는 컷이 잘못 배치된 경우(keep으로 해당 지점 처리) 수정하고 다시 렌더링하세요.
4단계: WoopSocial로 게시하기
연결, 업로드 및 게시 방법: references/woopsocial.md. 짧은 버전:
social_accounts_list; 연결되지 않음: 이 에이전트의 단일 연결 경로(무료 요금제: 2개 소셜 계정), 그런 다음 플랫폼별oauth_create_authorization.- 업로드 세션으로
edited.mp4업로드 (media_uploads_create_sessionwithmanifest.json의 바이트 크기,python3 scripts/upload_parts.py session.json edited/edited.mp4,media_uploads_complete_session). - YouTube:
title(주요 검색어를 먼저, 70자 미만),privacy, 그리고 시청자가 얻을 수 있는 내용에 대한 한 줄로 시작하는 설명, 그 다음chapters.txt의 챕터. YouTube Studio에서 이후에captions.srt업로드 (WoopSocial은 자막 파일을 보내지 않습니다). - 게시물 (파일, 제목, 설명, 계정, 시간대 포함 시간)을 보여주고 명확한 승인을 받으세요. 그런 다음
posts_create및posts_get.
5단계: 결과 확인하기
일주일 후, social_account_posts_list: 조회수, 좋아요, 댓글 (보고된 경우), 수집 날짜 포함; 누락된 경우 "보고되지 않음"을 의미합니다. 시청 유지율과 평균 시청 시간은 YouTube Studio에 있습니다; 사용자에게 물어보세요. 시청자가 초반에 이탈하면 다음 편집에서 더 빡빡한 오프닝을 적용합니다; 챕터에서 이탈하면 해당 섹션이 너무 길었던 것입니다.
품질 기준
전문 편집자가 이 결과물을 넘길까요? 단어가 잘렸거나, 컷이 호흡 중간에 튀는 소리와 함께 떨어지거나, 펀치인이 몇 초마다 바뀌거나, 속도가 생각할 틈을 주지 않거나, 의미가 변경된 경우 거부하세요.
엣지 케이스
- 카메라에 두 사람:
format을 소스에 유지; 펀치인은 와이드 샷에서도 작동합니다. - 음성이 포함된 화면 녹화:
"punch_in": 0으로 설정. - 음성 아래 음악: 무음 감지는 음악을 소리로 인식합니다;
"voiced_gaps": false로 설정. - 매우 긴 녹화 (1시간 이상): 작동하지만, 렌더링 시간은 대략 동영상 길이와 같습니다; 먼저 계획을 세우고 한 번 렌더링하세요.
- 의도적으로 음성이 없는 구간 (데모):
keep으로 설정.
참고 자료
references/editing-rules.md: 임계값, 필러, 재촬영 패턴, 펀치인, 오디오 체인, 자막 및 챕터 (출처 포함).references/woopsocial.md: 연결, 업로드, 게시 및 결과 읽기.