Initial commit: YouTube Shorts maker application

Features:
- Video download from TikTok/Douyin using yt-dlp
- Audio transcription with OpenAI Whisper
- GPT-4 translation (direct/summarize/rewrite modes)
- Subtitle generation with ASS format
- Video trimming with frame-accurate preview
- BGM integration with volume control
- Intro text overlay support
- Thumbnail generation with text overlay

Tech stack:
- Backend: FastAPI, Python 3.11+
- Frontend: React, Vite, TailwindCSS
- Video processing: FFmpeg
- AI: OpenAI Whisper, GPT-4

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
kihong.kim
2026-01-03 21:38:34 +09:00
commit c3795138da
64 changed files with 13059 additions and 0 deletions

138
README.md Normal file
View File

@@ -0,0 +1,138 @@
# 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 사용량에 따른 비용이 발생할 수 있습니다