# task-364.1: 영상 자동화 Scenario A — Phase 1 (MoviePy/FFmpeg 기반 환경 구축)

## 배경
- 리서치 보고서: `/home/jay/workspace/memory/research/remotion-video-automation.md`
- **결론**: Remotion(React+Node) 대신 MoviePy/FFmpeg(Python) 채택
- 이유: 현 ThreadAuto가 Python 기반, VPS 호환, 3-6일 구현 가능
- 목표: 기존 카드뉴스 이미지를 바탕으로 **Reels/Shorts용 세로 영상** 자동 생성

## Phase 1 목표 (환경 + 기본 파이프라인)
1. MoviePy + FFmpeg 환경 확인 및 기본 영상 생성 테스트
2. 기본 영상 생성 모듈 구조 설계 + 프로토타입 구현
3. 카드뉴스 이미지 5장 → 슬라이드쇼 영상 변환 (가장 단순한 형태)

## 프로젝트 위치
- `/home/jay/projects/ThreadAuto/video/` (새 디렉토리)

## 요구사항

### 1. 환경 확인
- `pip show moviepy` 또는 `pip install moviepy` (버전 2.x 이상)
- `ffmpeg -version` 확인 (없으면 설치 방법 보고)
- Python 3.12 호환 확인

### 2. 모듈 구조 생성
```
/home/jay/projects/ThreadAuto/video/
├── __init__.py
├── video_generator.py    # 핵심: 이미지 → 영상 변환
├── effects.py            # 전환 효과 (fade, slide 등)
└── config.py             # 영상 설정 (해상도, fps, 슬라이드 시간 등)
```

### 3. config.py — 기본 설정
- 해상도: 1080x1920 (세로, Reels/Shorts)
- FPS: 30
- 슬라이드당 시간: 3초 (기본값, 조절 가능)
- 전환 효과 시간: 0.5초
- 출력 형식: MP4 (H.264)
- 출력 디렉토리: `/home/jay/projects/ThreadAuto/output/videos/`

### 4. video_generator.py — 기본 파이프라인
- `generate_slideshow(image_paths: list[str], output_path: str, **kwargs) -> str`
  - 이미지 리스트를 받아 슬라이드쇼 영상 생성
  - 각 이미지를 1080x1920에 맞게 리사이즈/패딩 (비율 유지)
  - 기본 전환: 페이드 인/아웃
  - 반환: 생성된 영상 파일 경로
- 에러 핸들링: 이미지 로드 실패 시 스킵하고 계속

### 5. effects.py — 기본 전환 효과
- `fade_transition(clip1, clip2, duration=0.5)` — 크로스 페이드
- 향후 확장 대비: slide, zoom, ken_burns 등은 Phase 2

### 6. 테스트
- `/home/jay/projects/ThreadAuto/output/cardnews_latest/` 하위의 최신 카드뉴스 이미지로 테스트
- 없으면 임의 테스트 이미지 생성 (Pillow로 단색 이미지 5장)
- 생성된 영상을 `/home/jay/projects/ThreadAuto/output/videos/test_slideshow.mp4`에 저장
- 영상이 정상 재생되는지 ffprobe로 메타데이터 확인 (해상도, 길이, 코덱)

## 제약
- Phase 1은 **가장 단순한 슬라이드쇼**만 구현 (BGM, 자막 등은 Phase 2)
- 기존 ThreadAuto 코드에 의존성 주입하지 않음 (video/ 모듈은 독립)
- MoviePy 2.x API 사용 (1.x와 다름 주의)

## 산출물
- `/home/jay/projects/ThreadAuto/video/` 모듈 4개 파일
- 테스트 영상 1개 (`output/videos/test_slideshow.mp4`)
- ffprobe 결과 보고서에 포함