# Shorts Maker

중국 쇼츠 영상(Douyin, Kuaishou 등)을 다운로드하고 한글 자막을 자동으로 생성하는 웹 애플리케이션입니다.

## 주요 기능

- **영상 다운로드**: Douyin, Kuaishou, TikTok, YouTube, Bilibili 지원
- **음성 인식**: OpenAI Whisper로 자동 음성 인식
- **번역**: GPT-4로 자연스러운 한글 번역
- **자막 합성**: FFmpeg로 자막을 영상에 burn-in
- **BGM 추가**: 원본 음성 제거 후 BGM 삽입

## 시스템 요구사항

- Docker & Docker Compose
- 최소 8GB RAM (Whisper medium 모델)
- OpenAI API 키

## 빠른 시작

### 1. 환경 설정

```bash
cp .env.example .env
```

`.env` 파일을 열고 OpenAI API 키를 입력합니다:

```
OPENAI_API_KEY=sk-your-api-key-here
```

### 2. Docker 실행

```bash
docker-compose up -d --build
```

### 3. 접속

브라우저에서 `http://localhost:3000` 접속

## 사용 방법

1. **영상 URL 입력**: Douyin, Kuaishou 등의 영상 URL을 입력
2. **다운로드**: 자동으로 영상 다운로드
3. **BGM 선택**: (선택사항) 배경 음악 선택
4. **처리 시작**: 자막 생성 및 영상 처리
5. **다운로드**: 완성된 영상 다운로드

## 기술 스택

### Backend
- Python 3.11 + FastAPI
- yt-dlp (영상 다운로드)
- OpenAI Whisper (음성 인식)
- OpenAI GPT-4 (번역)
- FFmpeg (영상 처리)

### Frontend
- React 18 + Vite
- Tailwind CSS
- Axios

### Infrastructure
- Docker & Docker Compose
- Redis (작업 큐)
- Nginx (리버스 프록시)

## 디렉토리 구조

```
shorts-maker/
├── backend/
│   ├── app/
│   │   ├── main.py          # FastAPI 앱
│   │   ├── config.py        # 설정
│   │   ├── routers/         # API 라우터
│   │   ├── services/        # 비즈니스 로직
│   │   └── models/          # 데이터 모델
│   ├── Dockerfile
│   └── requirements.txt
├── frontend/
│   ├── src/
│   │   ├── pages/           # 페이지 컴포넌트
│   │   ├── components/      # UI 컴포넌트
│   │   └── api/             # API 클라이언트
│   ├── Dockerfile
│   └── package.json
├── data/
│   ├── downloads/           # 다운로드된 영상
│   ├── processed/           # 처리된 영상
│   └── bgm/                 # BGM 파일
├── docker-compose.yml
└── .env
```

## API 엔드포인트

| Method | Endpoint | 설명 |
|--------|----------|------|
| POST | /api/download/ | 영상 다운로드 시작 |
| POST | /api/process/ | 영상 처리 시작 |
| GET | /api/jobs/ | 작업 목록 조회 |
| GET | /api/jobs/{id} | 작업 상세 조회 |
| GET | /api/jobs/{id}/download | 처리된 영상 다운로드 |
| GET | /api/bgm/ | BGM 목록 조회 |
| POST | /api/bgm/upload | BGM 업로드 |

## 설정 옵션

| 환경변수 | 기본값 | 설명 |
|----------|--------|------|
| OPENAI_API_KEY | - | OpenAI API 키 (필수) |
| WHISPER_MODEL | medium | Whisper 모델 (small/medium/large) |
| PORT | 3000 | 웹 서버 포트 |

## 문제 해결

### 다운로드 실패
- 일부 영상은 지역 제한이 있을 수 있습니다
- VPN 또는 프록시 설정이 필요할 수 있습니다

### 음성 인식 품질
- `WHISPER_MODEL=large`로 변경하면 정확도가 올라갑니다 (더 많은 메모리 필요)

### 메모리 부족
- `WHISPER_MODEL=small`로 변경하세요

## 라이선스

MIT License

## 주의사항

- 저작권이 있는 영상을 무단으로 재배포하지 마세요
- BGM은 저작권에 유의하여 사용하세요
- API 사용량에 따른 비용이 발생할 수 있습니다
