자막 스타일 제안 / 정적 프레임 / 비교 샘플
0. 먼저 조사한 후 제안
걸그룹 PV 자막 공개 자료 정리 (2024 KCI 논문 + K-pop Y2K Seoul 스타일 가이드):
- Graphic 그래픽 강조: 굵기 대비 불규칙, 장식적 획이 강한 큰 글자 (Blackpink / XG 포스터 계열);
- Mix & Match 혼합: 세리프 + 산세리프 + 압축체 + 기울임 혼용, 잡지 편집감;
- Minimalism 미니멀: 깔끔한 산세리프, 장식 제거, 여백 활용, 비트에 맞춰 등장 (NewJeans/aespa kinetic typography);
- Futurism 미래감: 디지털 산세리프 + 글리치 / RGB 어긋남 / 스캔 라인;
- Y2K 크롬 + 스티커: 크롬 버블 레터링, 사탕색 (핫핑크 + 아쿠아), 스티커 콜라주, 별빛 반짝임;
- 핸드라이팅 다이어리 감: 마커/형광펜 + 포스트잇 + 낙서 (NewJeans 청춘감).
1. 여섯 가지 본편 적용 스타일 (S1–S6)
| 코드 | 스타일 | 주요 요소 | 적합 상황 |
|---|---|---|---|
| S1 | Y2K 크롬 + 스티커 | Bungee 크롬 그라데이션 + 핑크 배지 + 별빛 | 가장 "걸그룹", 핑크/아쿠아를 보라/핑크로 변경 가능 |
| S2 | 미니멀 키네틱 | Anton 흰색 큰 글자, 어긋남, 가는 선, Silkscreen 작은 글자 | 정식 가사 버전, 가장 안정적, 배경 압도하지 않음 |
| S3 | 글리치 미래감 | RubikGlitch + Anton, RGB 어긋남, 스캔 라인, HUD 코너 | 브레이크/전환 |
| S4 | 혼합 잡지감 | Georgia Italic × Bebas Neue × Archivo Black, 테이프, GO! 색상 블록, 포스트잇 | 청춘/잡지감, 단락 전환 |
| S5 | 그래픽 강조 | Anton 큰 글자 + 흰색 스티커 아웃라인 + 핑크 어긋남 + 줄무늬 | 후렴 폭발 짧은 단어 |
| S6 | 핸드라이팅/형광펜 | Permanent Marker + 핑크 형광 블록 + 포스트잇 + ♥★ 화살표 | 간주/클로즈업 장식 |
2. 정적 프레임 제작 (PIL + numpy, AI 라이브러리 없음)
스크립트:
자막\build\kpop_styles.py— S1–S6 여섯 장 2560×1080 정적 초안 (2025 조사 버전)자막\build\art_frames.py— 초기 6개 아트 글자 제안 (글리치 슬라이스/네온 붕괴/입체 큰 글자/콜라주/윤곽 에코/세로쓰기)자막\build\gothic_art.py— 고딕 전체화면 (사용자 거절, 기록 보관) 폰트 디렉터리:자막\build\fonts\(Anton, ArchivoBlack, BebasNeue, Bungee, Monoton, PermanentMarker, RubikGlitch, Silkscreen, PirataOne, UnifrakturCook) +C:\Windows\Fonts(Georgia / Georgia Italic / Microsoft YaHei / Impact / Arial Black). 폰트 다운로드 (Google Fonts GitHub raw 사용 가능):
https://raw.githubusercontent.com/google/fonts/main/ofl/<family>/<File>.ttf
자주 사용하는 효과 함수 (PIL/numpy)
- 텍스트 레이어: 글자별 그리기 + tracking (
text_img),stroke_width/stroke_fill으로 아웃라인; - 크롬 글자: alpha mask 위에 세로 방향 다단 그라데이션 (
gradient_fill) + 사선 하이라이트; - 스티커 아웃라인: alpha에
MaxFilter(3)로 N회 팽창 후 채색; - 어긋남/글리치: RGB 채널 각각 이동 (
chroma), 가로 띠 무작위 이동 (glitch_slices), 스캔 라인; - 입체 글자: 같은 글자를 여러 번 오프셋 겹쳐 그리고 먼 쪽에서 가까운 쪽으로 진한 보라→라벤더 그라데이션;
- 반톤: 격자 원점 중첩 (
halftone); - 핸드라이팅 형광펜: 글자 뒤에 반투명 둥근 모서리 사각형 +
GaussianBlur; - 포스트잇/테이프: 반투명 사각형 + 가는 선 질감 + 회전;
- 별빛/하트: 4각 별 다각형, 이중 원 + 삼각 하트;
- 입자:
np.random.normal로 1–3단계 색띠 방지.
3. 애니메이션 샘플 (ASS 애니메이션)
- 5초 세 가지 스타일:
자막\build\styles_anim.py→공개채널\출력\자막스타일참조\샘플_S2_5s.mp4등; - S4/S6 30초:
자막\출력\S4S6_30s\(각각 서브 에이전트가 한 버전 제작, 아래 참조); - 폭발 FLARE:
flare.py+flare_video.py; 네온:neon_wide.py; - 완전 네온 회피:
avoid_side2.py. - 애니메이션 패턴: 박치기 (
\fscx118→100+\t+\blur), 회전 낙하 (\frz+\t), 슬라이드 인 (\move), 페이드 인, 색상 블록 확대/밀어내기 (\p1+\fscx), 포스트잇 위로 이동, 박자 펄스 (0.447초마다 134BPM 비트).
4. 비교 전달 규칙
- 단일 샘플: 2560×1080 / 30fps / H.264 crf16 / faststart; 30초=900프레임, 5초=150프레임.
- 비교 영상: 상하
vstack, 각 줄을 1280×540으로 축소, 출력 1280×1080 (또는 3줄 → 1280×1620), ASS로 라벨 겹침. - 키프레임 표: 2×2 / 2×3 / 3×3 퍼즐, 각 셀 853×360 또는 1280×540, 스타일명과 시간 라벨 포함.
- 설명 md: 스타일 설명 + 파일 표 + 타임라인 + 알려진 제한사항.
- 예시:
자막\출력\자막스타일참조\(6스타일 정적 + S2/S4/S6 5초 비교),자막\출력\S4S6_30s\(두 버전 30초 + 비교).
5. 병렬 서브 에이전트 워크플로우 ("서브 에이전트가 각자 제작")
- 메인 에이전트가 공통 베이스 영상 준비 (자르기 + 약간 어둡게) →
_base_30s.mp4;fonts/를 출력 디렉터리에 복사; cue sheet 작성 (상대 시간). - 각 스타일당 하나의 서브 에이전트, 프롬프트에 반드시 포함:
- 베이스 영상 절대 경로, 출력 디렉터리, 출력 파일명 (
S4_30s.mp4/S6_30s.mp4); - 폰트 디렉터리, ffmpeg 경로, ASS 하드 규칙 (시간 형식, Style 색상값 뒤에 & 없음, fontsdir 상대 경로, ASCII 파일명);
- 문장별 타임라인 (8문장) + 스타일 설명 + "한글 사용 금지 / 얼굴 가리지 않음" 제약;
- 자체 점검 요구사항 (ffprobe 30초, 프레임 추출로 글자 확인, 한글 없음, 얼굴 깨끗).
- 베이스 영상 절대 경로, 출력 디렉터리, 출력 파일명 (
- 서브 에이전트는 자신의 접두사 파일만 작성, 서로 덮어쓰지 않음; 완료 후 배치/모션/문제점 보고.
- 메인 에이전트가 모두 수집 후:
s4s6_compare.py로 비교 영상 합성 + 키프레임 표 + 통합 설명 md; 자체 프레임 추출로 재검수.
6. 선택 제안 (보라/핑크 네온 무대 + 날개 인물)
- 가장 안정적: S2 미니멀 키네틱;
- 가장 걸그룹: S1 Y2K 크롬 (색상을 보라/핑크 테마로 변경);
- 단락 전환: S4 혼합; 폭발: S5; 간주/클로즈업: S6; 브레이크: S3.
- 사용자가 명확히 거절함: 고딕 전체화면, 피 색상 조합. 고딕 방향은 다시 제안하지 말 것.
7. 검수 체크리스트
- 정적 초안 2560×1080, 한글 오타 없음
- 애니메이션 샘플 ffprobe 재생 시간 정확 (5.000/30.000)
- 프레임 추출로 자막 등장 확인, 얼굴 가리지 않음, 한글 없음
- 비교 영상 + 키프레임 표 + 설명 md 모두 있음
- 스타일명/파일명 통일 (
S4_30s.mp4,비교_S4S6_30s.mp4)