프레젠테이션 PDF의 각 페이지에 발표 스크립트를 입력하면
Google TTS 음성과 슬라이드를 합쳐 1920×1080 MP4를 자동 생성합니다.
드래그 앤 드롭 업로드부터 실시간 진행률까지, 발표 영상 제작에 필요한 모든 것을 제공합니다.
드래그 앤 드롭 또는 파일 선택으로 간편하게 업로드. PDF 각 페이지를 고해상도(2배 확대) 이미지로 자동 추출합니다.
페이지 목록을 클릭해 발표 내용을 개별 입력하거나, JSON 형식으로 전체 스크립트를 한 번에 일괄 등록할 수 있습니다.
한국어 텍스트를 Google Text-to-Speech로 자연스러운 음성 파일로 변환합니다. 빈 스크립트는 자동으로 무음 처리됩니다.
0.5x / 1.0x / 1.5x / 2.0x 속도를 선택해 발표 템포를 조절합니다. FFmpeg atempo 필터로 음질을 유지합니다.
H.264 + AAC 코덱으로 Full HD 발표 영상을 생성합니다. 슬라이드 비율을 유지하며 여백은 검정으로 채웁니다.
TTS 생성 → 클립 합성 → 최종 병합 단계별 진행 상황을 실시간 폴링으로 확인할 수 있습니다.
docker compose up --build -d 한 줄로 서버를 실행합니다. 데이터는 ./data/에 영속적으로 보관됩니다.
{"1": "스크립트", "2": "스크립트"} 형식의 JSON 파일을 업로드해 모든 페이지 스크립트를 한 번에 등록합니다.
FastAPI 기반의 REST API로 외부 시스템과 연동하거나 자동화 파이프라인에 통합할 수 있습니다.
복잡한 설정 없이 간단한 4단계만으로 발표 영상을 만들어 보세요.
발표 슬라이드 PDF를 드래그 앤 드롭하거나 파일 선택 버튼으로 업로드합니다. 페이지별 고해상도 이미지가 자동 추출됩니다.
드래그 앤 드롭 지원좌측 페이지 목록에서 슬라이드를 클릭해 발표 내용을 입력합니다. JSON 파일로 전체 스크립트를 한 번에 등록할 수도 있습니다.
JSON 일괄 등록 지원원하는 재생 속도(0.5x~2.0x)를 선택하고 동영상 생성 버튼을 클릭합니다. 실시간 진행률이 표시됩니다.
실시간 진행률 표시생성이 완료되면 MP4 파일을 바로 다운로드합니다. 새 프로젝트 버튼으로 다시 처음부터 시작할 수 있습니다.
MP4 즉시 다운로드검증된 오픈소스 라이브러리로 구성된 가벼운 스택입니다.
Python 3.11 기반 고성능 REST API 서버. 비동기 처리로 동영상 생성 중에도 다른 요청을 처리합니다.
PDF 파싱 및 페이지 이미지 추출. 2배 확대 매트릭스를 사용해 고해상도 PNG를 생성합니다.
Google Text-to-Speech API로 한국어 텍스트를 자연스러운 MP3 음성으로 변환합니다.
이미지 클립과 오디오 클립을 합성해 페이지별 영상을 생성하고 최종 MP4로 병합합니다.
오디오 속도 조절(atempo), 무음 생성, 오디오 재샘플링 등 미디어 처리를 담당합니다.
Drag & Drop API, File API 등 최신 HTML5 기능을 활용한 단일 페이지 애플리케이션입니다.
프레임워크 없는 순수 CSS로 반응형 레이아웃과 부드러운 UI 인터랙션을 구현합니다.
외부 라이브러리 없이 상태 관리, API 통신, 실시간 폴링을 구현한 경량 클라이언트입니다.
DM Sans + Fraunces 서체를 비동기 로드해 깔끔하고 전문적인 UI를 제공합니다.
Dockerfile + docker-compose.yml로 환경 독립적인 배포를 지원. 볼륨 마운트로 데이터를 영속합니다.
FastAPI로 제공되는 7개의 엔드포인트로 전체 워크플로를 자동화할 수 있습니다.
| Method | Path | 설명 |
|---|---|---|
| GET | / | 메인 페이지 (index.html) 반환 |
| POST | /api/upload | PDF 업로드 및 페이지 이미지 추출. project_id와 페이지 목록을 반환합니다. |
| GET | /api/pages/{project_id}/{filename} | 추출된 페이지 PNG 이미지 반환 |
| POST | /api/generate/{project_id} | 스크립트와 속도를 받아 TTS + 동영상 생성을 비동기로 시작합니다. |
| GET | /api/status/{project_id} | 진행 상태(status, progress, message) 폴링용 엔드포인트 |
| GET | /api/download/{project_id} | 완성된 MP4 파일 다운로드 |
| DELETE | /api/cleanup/{project_id} | 업로드 PDF, 페이지 이미지, 오디오 임시 파일 삭제 (완성 MP4는 유지) |
발표용 Full HD 품질로 생성됩니다.
Docker를 사용하는 방법을 권장합니다. 로컬 환경에서도 conda 또는 venv로 쉽게 실행할 수 있습니다.
# Docker Desktop이 실행 중인지 확인하세요 # 빌드 및 실행 (최초 1회) docker compose up --build -d # 브라우저에서 접속 # → http://localhost:8000 # 컨테이너 관리 docker compose stop # 중지 (컨테이너 보존) docker compose start # 재시작 docker compose down # 중지 + 컨테이너 삭제 docker compose logs -f # 실시간 로그 확인
# FFmpeg 설치 (macOS) brew install ffmpeg # conda 환경 생성 및 패키지 설치 conda create -n pdfmov python=3.11 -y conda activate pdfmov pip install -r requirements.txt # 서버 시작 (백그라운드) ./start_uvicorn.sh # 또는 포그라운드 (개발용) uvicorn app:app --host 127.0.0.1 --port 8000 --reload # 서버 종료 ./stop_uvicorn.sh
# 가상환경 생성 및 활성화 python -m venv venv source venv/bin/activate # Windows: venv\Scripts\activate # 패키지 설치 pip install -r requirements.txt # 서버 시작 uvicorn app:app --host 127.0.0.1 --port 8000 # 브라우저에서 접속 # → http://127.0.0.1:8000
프로덕션 환경에서 사용 시 아래 사항을 참고하세요.
TTS 생성 시 Google TTS API를 호출하므로 인터넷 연결이 필요합니다. Docker 환경에서는 컨테이너 외부 네트워크 접근이 허용되어야 합니다.
현재 gTTS 언어 설정이 한국어(ko)로 고정되어 있습니다. 다른 언어를 사용하려면 코드 수정이 필요합니다.
단일 프로세스 구조로 동시에 여러 프로젝트를 처리할 수 없습니다. 다중 사용자 환경에서는 작업 큐(Celery 등) 도입이 권장됩니다.
진행 중인 프로젝트 상태는 메모리에 저장되므로 서버 재시작 시 초기화됩니다. 완료된 동영상 파일은 디스크에 유지됩니다.
개발시 사용된 AI Tools 정보를 참고하세요.