배정 규칙(타임스탐프 우선·중복 제거·Gemini 폴백)을 댓글 수집·HTTP 처리와 분리해 순수 함수로 구현. 기준 카드 길이 3초(CARD_SEC)로 컷별 쿼터 계산. 타임스탠프 매칭은 match_ranges() 이용, Gemini 없이 검증 가능. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> |
||
|---|---|---|
| assets | ||
| capcut_agent | ||
| docs/superpowers | ||
| server | ||
| 참고/ytcut | ||
| 프롬프트 | ||
| .gitignore | ||
| ARCHITECTURE.md | ||
| build_bg_template.py | ||
| build_jumpcut.py | ||
| build_letterbox.py | ||
| build_shortform.py | ||
| build_template.py | ||
| CLAUDE.md | ||
| README.md | ||
| requirements.txt | ||
| SETUP.md | ||
| 레이어_삐짐_수리.md | ||
| 배경.png | ||
| 숏폼_편집_지침서_v13.7_capcut2연동판.md | ||
| 작업기록_2026-07-27~31.md | ||
| 캡컷_에이전트_구간합치기.bat | ||
캡컷 에이전트 · 구간합치기 (v2)
유튜브 영상 → 무음컷 · 자막 · 배경 템플릿이 박힌 편집 가능한 CapCut 드래프트를 자동 생성하는 로컬 웹앱. 특히 한 URL의 여러 구간을 이어붙이고, LLM이 만든 편집안(컷+자막)을 JSON 붙여넣기로 한 번에 처리합니다.
1. 처음 실행 (이 PC)
캡컷_에이전트_구간합치기.bat더블클릭- 잠시 후 브라우저가 http://127.0.0.1:8001 로 자동으로 열림
- 이 검은 창은 켜두세요 (닫으면 서버가 꺼짐)
코드를 수정했으면 반드시 창을 닫고 .bat 을 다시 실행해야 반영됩니다.
2. 세 가지 입력 방법 (탭)
📋 붙여넣기 (기본 탭) — 추천
LLM이 만든 편집안 JSON을 붙여넣으면 컷·자막을 그대로 사용합니다. (무음컷·받아쓰기 없음)
▶ 유튜브 구간
한 URL + 여러 구간(+ 구간 추가) → 이어붙여 무음컷 + 자동 자막(Whisper).
📁 파일
로컬 영상 파일 → 무음컷 + 자동 자막.
세 방법 모두 아래 영상 옵션을 함께 적용합니다.
3. 붙여넣기 JSON 형식 (핵심)
아래 JSON 하나만 붙여넣으면 됩니다. 배치 시간·SRT 타임코드는 넣지 마세요 — 앱이 컷을 순서대로 이어붙이며 자동 계산합니다.
{
"url": "https://www.youtube.com/watch?v=영상ID",
"title_top": "서브제목",
"title_main": "메인제목",
"channel": "@채널명",
"cuts": [
{"start":"0:01.0","end":"0:03.5","bottom":"하단 자막 윗줄\n하단 자막 아랫줄","effect":"효과자막"},
{"start":"2:33.5","end":"2:36.5","bottom":"다음 컷 자막","effect":"공포의통계"}
]
}
| 필드 | 설명 |
|---|---|
url |
실제 영상 주소 (브라우저에서 열리는 것). LLM이 지어낸 가짜 ID 금지 |
cuts[].start / end |
원본 영상 타임스탬프. 분:초.밀리 또는 시:분:초.밀리 (밀리초 생략 가능) |
cuts[].bottom |
하단 자막. \n 이 있으면 같은 자리에서 시간을 반씩 나눠 윗줄→아랫줄 순서로 표시 |
cuts[].effect |
중앙 효과 자막(녹색). 짧게 |
title_top / title_main / channel |
선택. 비우면 안 들어감(채널은 유튜브에서 자동) |
LLM 에게 요청할 때 (이대로 복사)
아래 스키마의 JSON 하나로만 출력해. 설명·마크다운 금지.
url은 내가 준 이 주소를 그대로 써라(임의 생성 금지):여기에_실제_URLstart/end는 원본 영상 타임스탬프(분:초.밀리).- 배치 시간은 계산하지 마라. 앱이 순서대로 이어붙인다.
bottom은 2줄(\n),effect는 짧은 한 마디.- 모든 컷은
start < end.
💡 자막이 안 쪼개지고
\n글자가 그대로 보여도 앱이 알아서 처리합니다(\n·\\n모두 인식).
4. 영상 옵션 (공통)
- 영상 확대 — 기본 144%. 슬라이더로 조절(캡컷에서 다시 조정 가능)
- 좌우반전(미러) — 영상만 좌우 뒤집기
- 장면분할 — 화면이 확 바뀌는 지점마다 컷 자동 분할(캡컷에서 개별 편집 가능). 시간이 더 걸림
- 완료되면 CapCut 자동 실행 — 체크 시 결과 후 캡컷 자동 오픈
자막 위치·색은 코드 기본값(하단자막 CapCut Y=-559, 효과자막 Y=866·녹색 #0dff63).
5. 다른 PC 에서 실행
이 capcut2 폴더를 통째로 복사한 뒤(.downloads·.cache·.uploads 캐시는 빼도 됨 — 자동 생성):
- Python 3.10+ 설치 — https://python.org (설치 시 Add to PATH 체크)
- 이 폴더에서 패키지 설치:
python -m pip install -r requirements.txt - ffmpeg / ffprobe 설치(PATH 필요) —
winget install Gyan.FFmpeg - Node.js 설치 — https://nodejs.org (yt-dlp 유튜브 추출용 JS 런타임)
- CapCut 설치
캡컷_에이전트_구간합치기.bat실행
코트라 볼드체: 새 PC의 CapCut 에서 그 폰트를 한 번 사용하면 캐시가 생겨 자동 적용됩니다. 없으면 기본 폰트로 나옵니다(에러 아님). 드래프트 저장 위치: 그 PC의 CapCut 프로젝트 폴더를 자동 인식합니다. .gemini_key: '파일'·'유튜브 구간' 탭 자막 교정용. 붙여넣기 탭만 쓰면 없어도 됩니다.
6. 문제 해결
| 증상 | 해결 |
|---|---|
| 수정한 게 반영 안 됨 | 검은 창 닫고 .bat 재시작 |
python not found |
Python 재설치 시 PATH 체크 후 재부팅 |
유튜브 Video unavailable |
영상이 실제 공개인지 확인 → python -m pip install -U yt-dlp |
| 다운로드가 자꾸 깨짐 | python -m pip install -U yt-dlp (유튜브가 가끔 바뀜) |
| 자막이 밀림 | 붙여넣기 탭은 컷·자막을 그대로 쓰므로 안 밀림. 파일/유튜브 탭은 Whisper 타이밍 사용 |
자막 \n 이 글자로 박힘 |
.bat 재시작하면 해결(앱이 \n·\\n 자동 분할) |
| 폰트가 다르게 나옴 | CapCut 에서 코트라 볼드체 한 번 사용해 캐시 생성 |
7. 폴더 구조 (참고)
capcut2/
├─ 캡컷_에이전트_구간합치기.bat 실행 파일(포트 8001)
├─ 배경.png 배경 템플릿(검정-흰-검정)
├─ requirements.txt 파이썬 패키지 목록
├─ .gemini_key (선택) Gemini 키
├─ server/
│ ├─ app.py FastAPI 서버 (/upload /youtube /paste /stream)
│ └─ static/index.html 웹 UI
└─ capcut_agent/
├─ pipeline.py 처리 파이프라인(다운로드→컷→자막→드래프트)
├─ youtube.py 유튜브 구간/다중/정밀 다운로드·병합
├─ paste.py 붙여넣기 JSON 파서
├─ draft.py CapCut 드래프트 생성(pycapcut)
├─ scene.py 장면전환 감지·분할
├─ silence.py 무음 감지
├─ transcribe.py Whisper 받아쓰기(파일/유튜브 탭)
├─ correct.py Gemini 자막 교정(선택)
├─ highlight.py 자막 청킹
├─ media.py 프레임/오디오 처리
└─ probe.py 영상 메타 조회