# task: ThreadAuto 숏폼 영상 엔진 — Pillow+FFmpeg+EdgeTTS (Remotion 대체)

## 목표
Remotion 의존 없이, 이미 검증된 Pillow 카드뉴스 렌더러 + FFmpeg + Edge TTS로
숏폼 영상을 생성하는 엔진 구현. 기존 tts_sync.py 파이프라인을 활용.

## 프로젝트 경로
`/home/jay/projects/ThreadAuto/`

## 현재 상태 (활용 가능한 기존 코드)
- `renderer/cardnews_renderer.py` — Pillow 이미지 렌더러 (300+ 실적, 5개 테마)
- `video/tts_sync.py` — Edge TTS 생성 + 음성 길이 측정 + FFmpeg 합성
- `audio/edge_tts_dialogue.py` — Edge TTS 래퍼 (3개 한국어 음성, 속도 조절)
- `video/bgm.py` — BGM 핸들링 (루프, 페이드아웃)
- `pipeline/video_composer.py` — 대화형 영상 컴포저 (MoviePy 기반)

### 기존 TTS 설정
- 음성 3종: ko-KR-InJoonNeural(남), ko-KR-SunHiNeural(여), ko-KR-HyunsuMultilingualNeural
- 속도: +5% ~ +25%
- Sync: TTS 음성 길이 → 장면 듀레이션 자동 맞춤 → FFmpeg mux

## 작업 내용

### 1. 숏폼 영상 렌더러 신규 생성
- 파일: `renderer/shortform_renderer.py`
- 역할: Pillow 슬라이드 이미지 → FFmpeg로 영상 변환
- 입력: 슬라이드 이미지 리스트 + 장면별 텍스트(TTS용)
- 출력: MP4 영상 (9:16 세로, 1080x1920)

### 2. 영상 생성 파이프라인
1. 5단계 파이프라인에서 콘텐츠 생성 (이미 완성)
2. Pillow로 슬라이드 이미지 렌더링 (이미 완성)
3. Edge TTS로 장면별 음성 생성 (기존 tts_sync.py 활용)
4. pydub로 음성 길이 측정
5. **FFmpeg로 이미지 → 영상 변환** (NEW)
   - 장면 듀레이션 = 음성 길이 + 0.4초 gap
   - 전환 효과: `xfade` 필터 (crossfade, 0.5초)
   - zoompan 효과: 미세 줌인/줌아웃으로 정적 느낌 제거
6. FFmpeg로 음성 + 영상 합성 (mux)

### 3. FFmpeg 효과 (에반 6원칙 적용)
- **검정 배경**: 슬라이드 기본 배경 (Pillow 테마에서 이미 적용)
- **테마 색상**: Pillow 테마 활용 (NavyGold, BlackRed 등)
- **레이아웃 변주**: 슬라이드 타입별 다른 레이아웃 (커버/리스트/상세/CTA)
- **시간차 등장**: xfade crossfade 전환으로 자연스러운 등장
- **다이나믹**: zoompan 미세 움직임 (scale 1.0→1.05, 3초 주기)
- ~~타이핑 효과~~: FFmpeg에서 구현 복잡 → Phase 2에서 검토

### 4. CLI 통합
- `cli.py`의 기존 영상 관련 명령어에 연결
- `python3 cli.py render-video` → Pillow+FFmpeg 렌더링
- `python3 cli.py pipeline --format video` → 전체 파이프라인 (생성→렌더→영상)

### 5. Remotion 의존 제거
- remotion/ 디렉토리는 건드리지 않음 (삭제 금지, 히스토리 보존)
- config.py나 기타 설정에서 Remotion 참조를 대체 엔진으로 교체
- renderer/ 에서 remotion_adapter.py, remotion_client.py 참조 없이 독립 동작

## 검증
- 숏폼 영상 1개 생성 (9:16, 1080x1920, 30fps)
- 음성 sync: 장면 전환이 음성과 정확히 맞는지 확인
- 전환 효과: crossfade 자연스러운지 확인
- 총 영상 길이: 30초~60초 범위
- 출력 파일: `/home/jay/projects/ThreadAuto/output/` 폴더

## 주의사항
- Remotion 코드 삭제 금지 (히스토리 보존)
- 기존 tts_sync.py, edge_tts_dialogue.py 로직을 최대한 재사용
- FFmpeg 바이너리 경로: `/home/jay/.local/bin/ffmpeg`
- 테마: 기존 Pillow 5개 테마 그대로 사용
- 세로 영상 (9:16) 필수 — Threads 숏폼 포맷