⚙ 영상 생성 파이프라인

입력된 주제가 완성 영상(final.mp4)이 되기까지의 전체 과정을 설명합니다.

처리 방식: 요청은 즉시 큐에 등록되고, PHP CLI 워커 프로세스([워커스크립트])가 백그라운드에서 순차적으로 처리합니다. 브라우저를 닫아도 영상 생성은 계속 진행됩니다.

전체 흐름도

입력 STEP 1
스크립트
STEP 2
이미지
STEP 3
TTS
STEP 3.5
환경음
STEP 4
클립
STEP 5
합성
🎉 완성

STEP 1 — AI 스크립트 생성 (5% → 15%)

DeepSeek AI에게 주제 · 추가 설명 · 방향 · 영상 길이를 전달하면 아래 구조의 JSON 스크립트가 생성됩니다.

한글 입력 시 자동으로 영문 번역 후 프롬프트에 적용됩니다.

{
  "title": "봄철 건강 관리 5가지 방법",
  "description": "영상 설명 (100자, 배포용)",
  "hashtags": ["#건강관리", "#봄건강", "#헬스팁"],
  "scenes": [
    {
      "no": 1,
      "description": "Bright spring morning, person stretching outdoors",
      "narration": "따뜻한 봄이 찾아왔습니다. 이 계절에 건강을 챙기는 방법을 알아볼까요?",
      "subtitle": "봄 건강 관리의 시작",
      "ambient_sound": "nature",
      "image_keyword": "spring morning exercise outdoor",
      "duration_sec": 10
    }
  ]
}

STEP 2 — 이미지 준비 (18% → 28%)

🌐 Pexels API 자동 다운로드
  • 각 장면의 image_keyword로 Pexels 검색
  • 가로/세로 비율에 맞는 이미지 자동 선택
  • jobs/{jobId}/images/scene_N.jpg에 저장
📤 사용자 업로드 이미지
  • 업로드된 이미지를 장면 수만큼 순환 배분
  • JPG · PNG 지원
  • Pexels 검색 없이 바로 사용

STEP 3 — TTS 나레이션 생성 (30% → 38%)

OpenAI TTS API를 사용해 각 장면의 narration 텍스트를 음성으로 변환합니다.

자세한 내용은 음성 · 자막 · 환경음 페이지를 참고하세요.

STEP 3.5 — 환경음 트랙 생성 (40% → 45%)

각 장면의 ambient_sound 필드 값에 해당하는 SFX 파일을 장면 길이만큼 loop+trim한 뒤, 전체 영상 길이의 단일 ambient_track.mp3로 concat합니다.

타입설명주요 사용 장면
nature자연 (새소리, 바람)야외, 공원, 숲
ocean바다 파도해변, 수중, 여행
rain빗소리감성적, 실내, 우울
wind바람소리고원, 산, 개방 공간
city도시 소음카페, 거리, 도심
indoor실내 공기음강의, 회의, 인터뷰
dramatic저음 드라마틱오프닝, 클라이맥스
default기본 배경음범용
SFX 파일 위치: [내부경로]/[SFX폴더]/
SFX 파일이 하나도 없으면 환경음 단계를 건너뛰고 무음으로 진행합니다.

STEP 4 — AI 클립 생성 (45% → 80%)

선택된 엔진으로 이미지 → 동영상 클립을 생성합니다.

AI 엔진 (Kling / fal.ai)

이미지와 장면 설명(description)을 전달하여 AI 동영상 클립 생성.
API 키가 있고 엔진을 선택한 경우만 시도합니다.

자막 소각 (burn-in)

AI 클립 생성 성공 시, subtitle 텍스트를 FFmpeg drawtext 필터로 영상에 직접 소각합니다.
한글 폰트 지원, 하단 중앙 반투명 배경 표시.

FFmpeg 폴백

AI 엔진 실패(API 오류, 타임아웃) 또는 FFmpeg 엔진 선택 시 Ken Burns 효과(줌+패닝) 클립 생성.
이미지 → 10초 MP4 변환, 자막 동시 소각.

STEP 5 — 최종 합성 (83% → 97%)

모든 클립을 concat하고 3트랙 오디오를 믹싱하여 final.mp4를 생성합니다.

트랙소스볼륨처리
나레이션OpenAI TTS MP3100%장면별 타이밍 오프셋 적용
환경음SFX concat MP335%영상과 동일 길이, 장면별 타입
배경음악ambient_default.mp310%aloop으로 전체 반복

최종 합성 후 ffmpeg -ss 0.5 -vframes 1로 썸네일(thumb.jpg)을 자동 추출합니다.

완료 상태 파일: jobs/{jobId}/status.json
final.mp4, thumb.jpg, script.json 모두 같은 jobDir에 저장됩니다.
🤖 AI 엔진 비교 → 🎵 음성 · 자막 · 환경음