YouTube Clipper KO
한국어 YouTube 영상 → 바이럴 숏폼 클립 자동 분할기.
개요
- 1. YouTube URL 또는 로컬 영상 파일 입력
- yt-dlp로 영상 다운로드
- Whisper API로 전체 자막 + word-level 타임스탬프 추출
- Claude Haiku로 바이럴 구간 8~12개 선정 + 점수 + 한국어 리즌
- ffmpeg으로 각 구간 9:16 클립 추출
- 무음/숨소리 압축 (maxgapsec=0.06)
- 3색 한국어 자막 burn-in (SUIT ExtraBold)
- 결과 폴더에 클립 + 메타데이터 JSON 저장
필수 도구 확인
에이전트는 작업 시작 전 반드시 환경을 확인해야 한다:
CODEBLOCK0
없으면:
- - yt-dlp: INLINECODE0
- ffmpeg:
apt install ffmpeg 또는 INLINECODE2 - 의존성: INLINECODE3
- SUIT 폰트 없으면 NotoSansCJK-Bold.ttc fallback 자동 적용
사용법
에이전트는 사용자에게 다음을 물어야 한다:
- 1. YouTube URL 또는 로컬 영상 경로
- 구간 설정 (선택, 기본: 전체)
- 클립 길이 (선택: 15~30초 / 30~60초 / 60~90초 / 90~120초, 기본: 30~60초)
- 자막 언어 (선택: 한국어 / 영어, 기본: 한국어)
받은 후 scripts/clip.py 실행:
CODEBLOCK1
또는 로컬 파일:
CODEBLOCK2
출력 구조
CODEBLOCK3
viral_segments.json 구조
CODEBLOCK4
Clawitzer 연결
클립 추출 후 Clawitzer 파이프라인으로 넘기려면:
CODEBLOCK5
단, Clawitzer의 TTS는 사용하지 않음 (원본 음성 유지).
editor.py의 자막/편집 로직만 활용 가능.
API 키
- - OpenAI Whisper: TOOLS.md의 Gemini 키 대신 OpenAI API 필요 (없으면 달비님께 요청)
- Anthropic Claude: 기존 설정 사용 (환경변수 ANTHROPICAPIKEY)
바이럴 구간 선정 기준 (Claude 프롬프트 기반)
- 1. 감정 강도: 놀람, 공감, 궁금증, 웃음 유발 구간
- 정보 밀도: 구체적 숫자/금액/방법이 나오는 구간
- 완결성: 클립 단독으로 이해 가능한 구간
- 훅 가능성: 첫 3초 안에 시청자를 잡을 수 있는 문장 포함 여부
- 한국어 최적화: 한국 시청자 반응 패턴 반영
무음/숨소리 처리
Clawitzer editor.py 로직 차용:
- - silenceremove 필터 (maxgapsec=0.06)
- 완전 제거가 아닌 압축 (자연스러운 흐름 유지)
- 숨소리 구간: 50ms로 압축
자막 스타일 (Clawitzer 3색 룰)
- - 기본: 흰색(#FFFFFF), 52px
- 빨강 앞뒤: 노란색(#FFFF00), 52px
- 강조 키워드: 빨강(#FF0000), 62px (연속 불가)
- 폰트: SUIT ExtraBold (없으면 NotoSansCJK fallback)
- 자간: -1 (좁힘)
- 위치: 화면 중앙 (an5, Y=900/1920)
YouTube Clipper KO
한국어 YouTube 영상 → 바이럴 숏폼 클립 자동 분할기.
개요
- 1. YouTube URL 또는 로컬 영상 파일 입력
- yt-dlp로 영상 다운로드
- Whisper API로 전체 자막 + word-level 타임스탬프 추출
- Claude Haiku로 바이럴 구간 8~12개 선정 + 점수 + 한국어 리즌
- ffmpeg으로 각 구간 9:16 클립 추출
- 무음/숨소리 압축 (maxgapsec=0.06)
- 3색 한국어 자막 burn-in (SUIT ExtraBold)
- 결과 폴더에 클립 + 메타데이터 JSON 저장
필수 도구 확인
에이전트는 작업 시작 전 반드시 환경을 확인해야 한다:
bash
yt-dlp
yt-dlp --version
ffmpeg (libass 포함 여부 확인)
ffmpeg -filters 2>&1 | grep subtitles
python 의존성
python3 -c import openai, anthropic; print(OK)
SUIT 폰트
ls /usr/share/fonts/truetype/SUIT-ExtraBold.ttf 2>/dev/null || echo MISSING
없으면:
- - yt-dlp: pip install yt-dlp
- ffmpeg: apt install ffmpeg 또는 brew install ffmpeg
- 의존성: pip install openai anthropic
- SUIT 폰트 없으면 NotoSansCJK-Bold.ttc fallback 자동 적용
사용법
에이전트는 사용자에게 다음을 물어야 한다:
- 1. YouTube URL 또는 로컬 영상 경로
- 구간 설정 (선택, 기본: 전체)
- 클립 길이 (선택: 15~30초 / 30~60초 / 60~90초 / 90~120초, 기본: 30~60초)
- 자막 언어 (선택: 한국어 / 영어, 기본: 한국어)
받은 후 scripts/clip.py 실행:
bash
python3 skills/youtube-clipper-ko/scripts/clip.py \
--url https://youtu.be/VIDEO_ID \
--clip-length 60 \
--lang ko
또는 로컬 파일:
bash
python3 skills/youtube-clipper-ko/scripts/clip.py \
--file /path/to/video.mp4 \
--clip-length 60
출력 구조
outputs/YYYYMMDD_HHMMSS/
├── source.mp4 # 원본 (URL 입력 시 다운로드)
├── transcript.json # Whisper 전체 자막 + 타임스탬프
├── viral_segments.json # 바이럴 구간 분석 결과
├── clips/
│ ├── clip01[제목].mp4
│ ├── clip02[제목].mp4
│ └── ...
└── result.json # 전체 메타데이터
viral_segments.json 구조
json
[
{
rank: 1,
score: 87,
start: 03:14,
end: 04:02,
title: 월 200만원 자동화하는 방법,
reason: 구체적인 금액과 방법이 동시에 나옴. 첫 3초 안에 결론 제시.,
hook: 근데 진짜 이게 되거든요,
clipfile: clips/clip01_월200만원자동화.mp4
}
]
Clawitzer 연결
클립 추출 후 Clawitzer 파이프라인으로 넘기려면:
bash
추출된 클립을 Clawitzer 소스로 사용
python3 projects/clawitzer/main.py \
--video skills/youtube-clipper-ko/outputs/TIMESTAMP/clips/clip_01.mp4 \
--script-file skills/youtube-clipper-ko/outputs/TIMESTAMP/clip
01script.json
단, Clawitzer의 TTS는 사용하지 않음 (원본 음성 유지).
editor.py의 자막/편집 로직만 활용 가능.
API 키
- - OpenAI Whisper: TOOLS.md의 Gemini 키 대신 OpenAI API 필요 (없으면 달비님께 요청)
- Anthropic Claude: 기존 설정 사용 (환경변수 ANTHROPICAPIKEY)
바이럴 구간 선정 기준 (Claude 프롬프트 기반)
- 1. 감정 강도: 놀람, 공감, 궁금증, 웃음 유발 구간
- 정보 밀도: 구체적 숫자/금액/방법이 나오는 구간
- 완결성: 클립 단독으로 이해 가능한 구간
- 훅 가능성: 첫 3초 안에 시청자를 잡을 수 있는 문장 포함 여부
- 한국어 최적화: 한국 시청자 반응 패턴 반영
무음/숨소리 처리
Clawitzer editor.py 로직 차용:
- - silenceremove 필터 (maxgapsec=0.06)
- 완전 제거가 아닌 압축 (자연스러운 흐름 유지)
- 숨소리 구간: 50ms로 압축
자막 스타일 (Clawitzer 3색 룰)
- - 기본: 흰색(#FFFFFF), 52px
- 빨강 앞뒤: 노란색(#FFFF00), 52px
- 강조 키워드: 빨강(#FF0000), 62px (연속 불가)
- 폰트: SUIT ExtraBold (없으면 NotoSansCJK fallback)
- 자간: -1 (좁힘)
- 위치: 화면 중앙 (an5, Y=900/1920)