# KB-02 모션 그래픽을 예쁘게 만드는 법 (MASSW 톤 · Pillow + FFmpeg)

## 0. 목표
FFmpeg 신(1·3·5)을 **글자만 있는 화면이 아니라, 움직이는 그래픽**으로 만든다. 화려하되 깔끔하게 — 색은 적게, 움직임은 풍부하게.

## 1. MASSW 색
| 이름 | 색 | 쓰임 |
|---|---|---|
| 틸 | #2C5F6F | 주 색, 테두리, 짝수 요소 |
| 딥틸 | #255866 | 어두운 배경 |
| 코랄 | #E8946B | 강조, 숫자, 화살표, 홀수 요소 |
| 피치 | #F4A88E | 형광펜, 은은한 강조 |
| 페이퍼 | #FFF8F0 | 밝은 배경 |
| 민트 | #E3EEEC | 빈 칸·트랙 |
| 잉크 | #1F2933 | 본문 글자 |
- **틸과 코랄만 번갈아** 쓴다(1번 코랄, 2번 틸…). 그 외 원색 금지. 배경은 순백이 아닌 페이퍼.
- 신 하나에 색 3개 이내. 영상 전체에서 신1·3·5 배경을 **밝음→어두움→밝음**처럼 번갈아 리듬을 준다.

## 2. 화면 구성 (1080×1920)
- 위 15%(0~288px) 비움 / 아래 14%(1650px~)는 자막·로고 자리.
- 쓸 수 있는 영역: **y 290~1650**. 글자는 가운데 정렬 기본, 좌우 여백 80px 이상.
- 글자 크기: 본문 70px 이상, 제목 100~130px, 핵심 숫자 200~280px. 한 화면 글자 2~3줄.
- 글꼴: 굵은 고딕(Pretendard/나눔스퀘어 Bold/Noto Sans KR Bold). 글자 뒤에 아주 옅은 그림자.
- 요소는 **가운데 축에 정렬**, 간격은 일정하게(예: 300px 간격).

## 3. 화려해 보이는 5층 구조 (신 하나에 전부 쓰기)
1. **배경층**: 아이보리/딥틸 + 천천히 떠다니는 블러 원(코랄·틸) + 흐르는 점 패턴 + 미세 줌인(1.0→1.05)
2. **그래픽층**: 카드·원 배지·차트·픽토그램이 순서대로 등장
3. **글자층**: 타이핑 / 단어 팝업 / 카운트업
4. **강조층**: 형광펜, 테두리 그리기, 체크 그리기, 흔들림
5. **전환층**: 신 끝 0.2초 흰 플래시 또는 쓸기(wipe)

## 4. 타이밍·이징
| 동작 | 시간 | 이징 |
|---|---|---|
| 카드 날아오기 | 0.4~0.5초 | back-out(살짝 튕김) |
| 단어 팝업 | 0.3초, 단어 간격 0.15~0.2초 | 0→110%→100% |
| 숫자 카운트업 | 0.8~1.2초 | ease-out |
| 선·화살표 그리기 | 0.4~0.6초 | ease-out |
| 테두리 그리기 | 0.7~0.9초 | ease-in-out |
| 막대·게이지 자람 | 0.7~1.0초 | ease-out |
- **0.2초 간격으로 계단식 등장**(한꺼번에 X). 신 끝 0.5초는 정지해 읽을 시간을 준다.
- 4.5초 신 기본 타임라인: 0~0.5 배경+제목 / 0.5~2.5 그래픽 순차 등장 / 2.5~4.0 강조 / 4.0~4.5 정지.
- 효과음: 날아오기=휙, 팝업=뽁, 타이핑=틱, 카운트업 끝=띵, 도장=쾅, 전환=휙. 음악보다 살짝 크게.

## 5. 시각화 레시피 (내용 → 그래픽)
| 내용 | 그래픽 | motion_kit 함수 |
|---|---|---|
| 질문 훅 | 타이핑 + 큰 숫자 | `typing`, `counter` |
| 통계 | 카운트업 + 게이지/사람 픽토그램 | `counter`, `gauge`, `people_row` |
| 순서·절차 | 원 배지 + 카드 + 화살표 | `circle_badge`, `card`, `arrow` |
| 비교 | 좌우 카드 날아오기 + 체크/엑스 | `card(fr="left"/"right")`, `check` |
| 수치 변화 | 막대 차트 | `bar_chart` |
| 핵심 문장 | 테두리 그리기 + 단어 팝업 + 형광펜 | `frame_draw`, `word_pop`, `highlighter` |
| 체크리스트 | 항목 순차 + 체크 그리기 | `card`, `check` |

## 6. 캐릭터 없는 영상일 때 (모션 그래픽 모드)
- 플로우 신(2·4)도 사람 대신 **사물·공간·질감 영상**(손, 책상 위 소품, 도시 야경, 추상 입자 등)으로 구성하거나, 신 수를 FFmpeg 중심으로 바꿀지 사용자에게 번호로 묻는다.
- 이 경우 FFmpeg 신에 **둥근 아이콘 배지(Lucide 등) + 카드**를 더 많이 써서 화면을 풍성하게 한다.

## 7. 구현 (motion_kit.py)
- 봇은 제공된 `motion_kit.py`를 작업 공간에 저장해 `from motion_kit import *` 로 쓴다. 함수: `background, dots_grid, typing, word_pop, counter, card, circle_badge, arrow, frame_draw, highlighter, bar_chart, gauge, people_row, check, flash, render, save_frame`.
- 신 하나 = 함수 하나 `def scene(t, dur): img=background(t,dur,"paper"); …; return img` → `render(scene, 4.5, "scene1.mp4")`.
- 렌더 후 `save_frame(scene, 3.8, 4.5)` 로 대표 프레임을 뽑아 직접 확인한다.
- 소리는 마지막에 FFmpeg로 합친다(`-i music.mp3 -i narration.wav`, `amix`/`volume`, 끝 1초 `afade`).
- 1신(4.5초=135프레임) 렌더는 보통 10~25초. 한 번에 신 하나씩 만든다.

## 8. 품질 체크
- [ ] 글자만 있는 순간이 없는가 (항상 그래픽 1개 이상)
- [ ] 위 15%·아래 14%가 비어 있는가
- [ ] 색이 틸·코랄·페이퍼·잉크 안에 있는가
- [ ] 글자가 잘리거나 겹치지 않는가 (대표 프레임 3장 확인)
- [ ] 마지막 0.5초가 정지해 읽을 수 있는가
- [ ] 효과음이 모션 시점과 맞는가
