복스 스타일 설명 영상 파이프라인
하나의 주제로 완전한 내레이션, 자막, 배경음악이 포함된 설명 영상을 제작합니다. 파이프라인은 6단계로 진행되며, 각 단계는 다음 단계에서 사용할 아티팩트를 생성합니다. 내레이션이 애니메이션보다 먼저 생성되는 이유는 내레이션 길이가 모든 타이밍 결정의 기준이 되기 때문입니다.
주제 → 1.대본 → 2.음성 → 3.키프레임 → 4.애니메이션 → 5.음악 → 6.조립
(Claude) (xAI TTS) (Seedream) (Omni Flash) (MiniMax) (ffmpeg)
사전 준비사항
ATLASCLOUD_API_KEY환경 변수 설정 (atlascloud.ai에서 무료 크레딧 제공 — 가입 시)ffmpeg및ffprobe설치 (자막 합성을 위해 libass 필요)- Python 3.10+ 및
requests라이브러리 - 60초 분량 영상 기준 약 $3–8의 API 크레딧 (비용표는
references/atlas-cloud-api.md참조)
API 호출 전, 항상 https://www.atlascloud.ai/docs 에서 최신 엔드포인트 경로와 모델 ID를 확인하세요. 미디어 모델 API는 빠르게 진화합니다. references/atlas-cloud-api.md의 패턴은 2026년 7월에 검증되었습니다.
프로젝트 구조
모든 영화에 대해 이 구조를 생성하고 유지하세요. 각 단계는 이 구조에서 읽고 쓰기 작업을 수행합니다:
project/
├── brief.md # 주제, 관점, 목표 길이, 대상 청중
├── script.json # 내레이션, 장면 설명, 캡션이 포함된 비트 목록
├── audio/
│ ├── vo/ # beat_01.mp3 ... beat_NN.mp3
│ ├── vo_durations.json
│ └── music.mp3
├── frames/ # keyframe_01.png ... style_anchor.png
├── clips/ # clip_01.mp4 ... (무음 애니메이션 클립)
├── subs/ # captions.ass
└── final/ # film.mp4
1단계 — 대본
이 단계는 직접 작성합니다. API 호출이 필요 없습니다. 품질을 결정짓는 가장 중요한 단계입니다. 훌륭한 대본과 평범한 비주얼이 그 반대보다 낫습니다.
작성 전 references/vox-style-guide.md (Writing 섹션)를 읽으세요. 핵심 규칙:
- 비트(Beat) 단위 구조화. 비트 = 하나의 내레이션 단락(1–3문장, 8–14초 분량) + 하나의 비주얼. 60초 영상은 6–8비트, 3분은 16–22비트.
- 복스(Vox) 내러티브 구조: 흥미로운 후크(놀라운 구체적 사실 또는 질문)로 시작 → 맥락 설명("X를 이해하려면...으로 돌아가야 합니다") → 하나의 명확한 흐름을 가진 점진적 설명 → 반전이나 복잡성 → 후크를 재구성하는 결론.
- 화자: 2인칭 환영("아마 보셨을 겁니다..."), 역사적 서술에는 현재 시제 사용, 추상적 개념보다 구체적 수치, 짧고 단정적인 문장. 불필요한 서두 없음, "이번 영상에서는" 같은 표현 금지.
- 비트당 하나의 아이디어. 한 문장에 두 가지 개념이 들어가면 비트를 분할하세요.
script.json 작성:
{
"title": "당나라 황금기",
"topic": "당나라가 어떻게 세계 최대 도시를 건설했는가",
"style_seed": "혼합 미디어 종이 콜라주, 수묵 중국 산, 버밀리온 레드와 에이지드 크림 팔레트",
"accent_color": "#C0392B",
"beats": [
{
"id": 1,
"narration": "7세기, 당나라는 세계에서 가장 크고 부유한 도시인 장안을 건설했습니다. 전 세계가 그 문 앞에 모여들었죠.",
"visual": "종이 오려내기 기법으로 표현된 태종 황제가 중앙에 즉위한 모습, 측면에 신하들, 배경에 탑과 수묵 산, 오른쪽 상단에 盛唐이라고 적힌 붉은 도장",
"caption_text": null,
"motion": "황제 쪽으로 천천히 확대, 구름이 왼쪽으로 흐르고, 종이 오려내기 레이어 사이에 미묘한 시차 효과"
}
]
}
caption_text는 화면상의 키네틱 타이포그래피 순간(주요 통계 또는 용어)을 위해 사용되며, 대부분의 비트는 null로 남깁니다. 내레이션 자막은 조립 단계에서 처리됩니다. motion은 4단계에서 애니메이션 프롬프트가 됩니다.
2단계 — 음성 (xAI TTS v1)
비트당 하나의 오디오 파일을 생성한 후 길이를 측정합니다. 이 길이가 전체 영화의 마스터 클록이 됩니다.
비트별로 Atlas Cloud 오디오 엔드포인트를 호출합니다(xAI TTS v1 모델 — 정확한 요청 형식과 음성 선택 가이드는 references/atlas-cloud-api.md 참조). 영화 전체에 하나의 음성을 선택하세요. 복스 스타일: 차분하고 따뜻하며 약간 빈정대는 듯한 — "영화 예고편" 스타일의 목소리는 피하세요.
생성 후 모든 파일을 프로브하고 audio/vo_durations.json을 작성합니다:
ffprobe -v error -show_entries format=duration -of csv=p=0 audio/vo/beat_01.mp3
{"beats": [{"id": 1, "file": "audio/vo/beat_01.mp3", "duration": 9.83}], "total": 61.2}
전체 길이가 브리프의 목표와 일치하는지 확인합니다. 비트가 너무 길면 내레이션을 다듬고 해당 비트만 다시 생성하세요.
3단계 — 키프레임 (Seedream 5.0 Pro)
비트당 하나의 키프레임을 일관된 시각적 스타일로 생성합니다. 일관성 유지가 가장 어려운 문제이며, 스타일 앵커 패턴으로 해결합니다:
- 앵커 생성. 비트 1(일반적으로 제목/후크 프레임)에
bytedance/seedream-v5.0-pro/text-to-image사용.references/vox-style-guide.md(Visual Grammar 섹션)의 스타일 블록 + 비트의visual+ 영화의style_seed및accent_color로 프롬프트를 작성합니다. 16:9, 2K 해상도 요청. - 계속 진행하기 전에 앵커를 검토합니다. 스타일이 적절할 때까지 재생성 — 다른 모든 프레임이 이를 상속받습니다.
- 편집 모델로 나머지 프레임을 생성합니다.
bytedance/seedream-v5.0-pro/edit을 앵커를 참조 이미지로 사용(최대 10개 참조 지원, 앵커 + 선택적으로 이전 프레임). 프롬프트: "참조 이미지의 정확한 예술 스타일, 팔레트, 종이 콜라주 처리 및 테두리 프레이밍을 유지하십시오. 새 장면: {beat.visual}"
이렇게 하면 인간 아트 디렉터가 하는 것처럼 영화 전체에 걸쳐 팔레트, 텍스처 및 프레이밍이 고정됩니다.
모든 프롬프트는 스타일 접미사(스타일 가이드 참조)로 끝나야 합니다. 이 접미사는 복스 스타일(흰색 테두리가 있는 종이 오려내기, 하프톤 도트, 테이프 조각, 대담하고 평평한 기하학적 악센트, 넉넉한 여백, 단일 악센트 색상)을 인코딩합니다.
caption_text가 설정된 프레임: Seedream에 굵고 좁은 산세리프체로 텍스트를 렌더링하도록 지시합니다. Seedream 5.0 Pro의 타이포그래피 렌더링이 강력하기 때문입니다. 프레임당 5단어 미만으로 유지하세요.
4단계 — 애니메이션 (Gemini Omni Flash)
이미지-투-비디오를 통해 각 키프레임을 클립으로 애니메이션합니다. 대상 클립 길이 = 해당 비트의 음성 길이 + 0.5초의 여유 시간(모델이 지원하는 증분에 맞춰 올림).
콜라주 미학을 위한 모션 프롬프트는 미묘해야 합니다. 이것이 가장 흔한 실패 지점입니다. 복스 스타일은 "모션 그래픽"이지 "푸티지"가 아닙니다. 좋은 모션 어휘:
- 느린 확대 / 축소(2D 카메라, 3D 돌리 아님)
- 오려내기 레이어 사이의 시차 드리프트
- 구름/연기가 수평으로 떠다니는 효과
- 종이 요소가 프레임 가장자리에서 슬라이드 인하여 안착하는 효과
- 하프톤 도트 또는 텍스처가 은은하게 반짝이는 효과
- 다른 모든 요소는 정지해 있는 동안 단일 요소만 애니메이션(깃발 흔들림, 물결 효과)
모든 프롬프트에서 명시적으로 금지해야 할 사항: "카메라 흔들림 금지, 3D 회전 금지, 얼굴이나 텍스트의 모핑 금지, 스타일 변화 금지, 요소는 평평한 종이 오려내기 상태 유지"
각 생성 작업을 완료될 때까지 폴링하고 clips/clip_NN.mp4로 다운로드합니다. 생성이 실패하거나 스타일이 변하는 경우가 있으므로 각 클립을 검토하고 텍스트가 왜곡되거나 스타일이 깨진 경우 재생성합니다. 약 15%의 재생성 비용을 예산에 포함하세요.
5단계 — 음악 (MiniMax Music 2.6)
전체 영화를 위한 하나의 기악 반주. is_instrumental: true 요청 — 보컬이 내레이션을 방해합니다.
프롬프트 공식: {분위기} {장르 인접 텍스처}, {템포}, {악기 구성}, {아크}. 역사 자료 예시: "사색적 영화 배경음, 펠트 피아노와 부드러운 현악기, 가벼운 타악기 펄스, 90bpm, 성기게 시작하여 점차 풍성해지는 다큐멘터리 스타일". 주제에 맞게 악기를 선택하세요(당나라 자료에는 거쟁/디지 텍스처, 기술 주제에는 아날로그 신디사이저 펄스).
Music 2.6은 고정 길이 노래를 생성합니다. 트랙이 영화보다 짧으면 조립 시 크로스페이드로 반복하고, 길면 페이드 아웃으로 자릅니다. 음악 아크가 영화 아크와 충돌하지 않도록 하세요. 트랙 중간의 드롭이 조용한 비트에 떨어지면 어색하므로 결과를 영화의 흐름과 비교하여 평가해야 합니다.
6단계 — 조립 (ffmpeg, 로컬)
전체 레시피는 references/ffmpeg-assembly.md를 참조하세요. 순서는 다음과 같습니다:
- 각 클립을 비트의 음성 길이에 맞게 조정 (자르기 또는 마지막 프레임 유지), 1920x1080 30fps로 정규화.
- 클립을 순서대로 연결.
- 음성 트랙 구축: 비트 오디오를 0.5초 간격으로 연결하여 비디오 타이밍과 일치시킴.
subs/captions.ass생성: 대본 기반 — 복스 스타일의 고정 자막: 굵은 산세리프체, 흰색에 두꺼운 검은색 윤곽선, 하단 중앙 정렬, 최대 2줄, 절(clause) 경계에서 내레이션을 분할하고 각 청크를 해당 비트의 시간 창 내에 시간 배치.- 오디오 믹싱: 음성은 전체 볼륨, 음악은 내레이션 아래 -12~-15dB로 덕킹(사이드체인 압축 또는 간단한 볼륨 자동화 — 레시피는 참조 문서 참조).
- 자막 + 크레딧 합성 ("Made with ..." 작은 글씨로 오른쪽 하단에 원하는 경우) 및 인코딩: H.264, CRF 18, AAC 192k,
-movflags +faststart.
최종 QC 패스 후 전달: (a) 자막/음성 싱크 어긋남, (b) 음악이 내레이션을 압도, (c) 클립 모션이 눈에 띄게 반복됨, (d) 프레임 간 스타일 변화 확인. 문제는 조립 해킹이 아닌 해당 단계에서 수정하세요.
오케스트레이션 참고 사항
- 처음에는 단계를 엄격히 순서대로 실행하고, 이후에는 모든 상태가 프로젝트 파일에 저장되므로 모든 단계를 개별적으로 다시 실행할 수 있습니다.
- API 생성은 느립니다(비디오 클립: 각 1~4분). 모든 애니메이션 작업을 동시에 제출한 다음 폴링하세요. 직렬화하지 마세요.
- 보낸 모든 프롬프트를
prompts.log파일에 저장하세요. 재현 가능성이 중요하며 사용자가 개별 비트를 조정하고 재생성하려 할 수 있습니다. - 비용은 비트 수에 비례합니다. 3단계(첫 번째 유료 단계) 이전에 사용자에게 대략적인 비용을 알려주세요:
비트 수 × ($0.10 이미지 + ~$1.20 / 10초 클립) + ~$0.50 오디오.
참조 자료
references/vox-style-guide.md— 1단계와 3단계 전에 읽습니다. 시각적 문법, 글쓰기 스타일 및 프롬프트 템플릿.references/atlas-cloud-api.md— 2단계 전에 읽습니다. 엔드포인트, 모델 ID, 비동기 작업 패턴, 폴링 코드, 비용.references/ffmpeg-assembly.md— 6단계 전에 읽습니다. 클립 조정, 연결, 자막, 덕킹 및 인코딩 레시피.