애니메이션 에피소드 제작은(는) 무엇을 하나요?
개요
수직형, 음성 포함, 자막 포함 애니메이션 에피소드: 캐릭터 아트, 패널, 복제 또는 라이브러리 음성, 음악, 이미지-비디오 클립 및 립싱크. 모든 샷의 타이밍을 실제 대화 오디오로부터 계산하는 엔진에 의해 편집됩니다. 하나의 episode.json 파일이 전체 프로젝트를 담고 있으며, engine/episode.py가 모든 단계를 실행합니다. 관련 스킬들은 공급자 작업을 수행합니다.
엔진을 사용하세요. 직접 편집 스크립트를 작성하지 마세요. 타임라인, 오버레이, 자막, 오른쪽에서 왼쪽(RTL) 텍스트, 믹스, 지속 시간 및 립싱크 연결은 이미 engine/에 포함되어 있습니다. 실제 3.5분짜리 에피소드를 재구축하여 증명되었습니다: 동일한 프레임, 동일한 오디오, 원본이 놓쳤던 정확한 길이. 수동 편집은 references/troubleshooting.md의 모든 버그를 다시 발견하게 됩니다.
오디오가 기준입니다. 샷 길이, 자막 시간 및 립싱크 파트는 완성된 대화 파일에서 비롯됩니다. 텍스트로 타이밍을 추정하지 마세요.
시각 및 청각을 확인할 수 없습니다. 프레임, 지속 시간 및 숫자를 확인합니다. 인간이 유사성, 목소리, 발음, 타이밍 및 농담을 판단합니다. 그들의 관문(gate)을 계획하고 유지하세요.
필수 요구 사항:
- 이 스킬과 함께 사용될 스킬들: image-generation, elevenlabs-tts, generating-video-clips.
- Python 3 및
pip install -r <this-skill-dir>/requirements.txt(Pillow (RAQM 탑재), numpy; OpenCV는 선택 사항). - ffmpeg 7 이상.
- 폰트: 스타일 및 자막이 font 키를 참조합니다 (예제에서는
bold,hblack,black). 이 키들은 설치된.ttf파일로 매핑되어야 합니다. 히브리어 및 라틴어의 경우 Rubik 및 Heebo (무료, Google Fonts)가 잘 작동합니다.check명령어는 누락된 폰트가 있으면 중단됩니다. - 환경 변수에 설정된 API 키. 엔진을 실행하는 모든 셸에서 설정해야 합니다:
OPENAI_IMAGE_API_KEY,ELEVENLABS_API_KEY,GEMINI_API_KEY,FAL_KEY.
전체 파이프라인을 API 호출 없이 테스트하려면 python3 <this-skill-dir>/engine/episode.py /tmp demo를 실행한 후, 생성된 데모 프로젝트에서 check 및 build 명령을 실행하세요.
파이프라인과 관문(Gates)
모든 관문(Gate)은 중단점입니다: 아티팩트를 보내고, 질문하고, 기다리세요. 명령어 형식은 python3 <this-skill-dir>/engine/episode.py PROJECT <command> 입니다. 비용은 2026년 10월 기준입니다.
| # | 단계 | 명령어 | 관문 (인간) | 비용 |
|---|---|---|---|---|
| 1 | 스토리 및 대본 | templates/script.template.md에서 script.md 생성 | 대본, 그리고 모든 민감한 주제 | - |
| 2 | 캐릭터 바이블 | templates/characters.template.md, 그 다음 episode.json에 characters 입력 | - | - |
| 3 | 얼굴, 카드, 승격 | chars face, chars card key=face.png, chars final keys | 모든 카드가 한 장에 모인 시트로 유사성 확인 | 캐릭터당 ~$0.30 |
| 4 | 패널 | panels draft, 그 다음 panels final ids | 시트로 모든 패널 확인 | 패널당 ~$0.30 |
| 5 | 음성 | 목소리당 하나의 샘플 (elevenlabs-tts) | 배치 전에 귀로 모든 목소리 확인 | 센트 단위 |
| 6 | 대사 | lines | 타임스탬프와 함께 귀로 세트 확인; 이름 A/B 비교 | 센트 ~ 수 달러 |
| 7 | 음악 및 효과음 | sound | 음악 확인 | 센트 단위 |
| 8 | 애니매틱 | build (아직 클립 없음: 카메라 움직임이 있는 스틸 이미지) | 비디오 비용 발생 전에 속도와 순서 확인 | 무료 |
| 9 | 애니메이션 | animate, 시트, animate S --takes 2 + animate pick S K로 재촬영 | 시트를 통해 움직임 확인 | 클립 1초당 테이크당 ~$0.10 |
| 10 | 립싱크 | lipsync prep, 설정의 얼굴 포인트, lipsync run | 프레임 스팟 체크 | 초당 ~$0.13 |
| 11 | 편집 및 전달 | build, sheet, deliver | 인간이 mp4 시청 | 무료 |
각 단계의 명령어, 입출력 및 오류 처리: references/pipeline.md.
대본 작성
유효했던 규칙들 (세부 사항 및 작업 예제: references/script-writing.md):
- 처음 3-4초 안에 훅(Hook) (문제에 대한 콜드 오픈), 그 다음 타이틀. 30초 미만 영상의 경우 타이틀과 엔드 카드를 스토리 샷 위에 오버레이로 넣고 몽타주는 생략합니다.
- 모든 주요 캐릭터는 최소 한 번은 말해야 합니다. 인트로 몽타주에서 각 카드당 약 1.2-1.5초 동안 각자의 목소리로 한 단어씩 말하는 것은 저렴하고 좋아합니다.
- 화면상 텍스트는 읽을 수 있어야 합니다: 문자당 약 0.8초 + 0.06초; 짧은 카드는 1.2-1.5초; 최종 캡션은 4-6초. 카드에
mindur를 지정하세요. - 초반에 단서를 심고 후반에 해결하세요. 그룹의 실제 농담을 콜백하는 것이 가장 효과적입니다.
- 민감한 주제는 사용자의 결정에 따릅니다. 사용하고 싶은 모든 개인 정보(건강, 돈, 관계, 가족, 다툼)를 나열하고 각각에 대해 물어본 후, 사용자가 확인한 것만 사용하세요.
- 12단어 이하의 대사, 숫자는 단어로 표기. 화면상 텍스트는 일반 철자를 유지하고 발음 수정은
pronounce에 넣습니다. - 내레이션이 있더라도 음악과 음향 효과를 사용하세요. 최소 하나의 배경 음악과 몇 가지 효과(컷에 따른 휙 소리, 결정적 장면의 타격음); 무음 배경은 미완성처럼 들립니다.
episode.json 한 눈에 보기
templates/episode.example.json은 완전한 작은 예제 에피소드입니다. 모든 키는 references/config-schema.md에 설명되어 있습니다. 가장 많이 편집할 부분:
characters: 표시 이름, 색상, 목소리, 캐릭터 바이블의 프롬프트 필드.speakers: 절대 그려지지 않는 목소리 (예: 내레이터).{"display": null, "voice": "<id>"}는 이름 없는 자막을 제공합니다.lines: id, 화자, 오디오 태그가 포함된 텍스트; 한 단어 대사의 경우trim및level.shots: 이미지, 대사 ("[email protected]"는 이전 대사와 겹침), 패드,mindur, 카메라, fx, sfx, 오버레이, 클립 오프셋 및 속도.music_cues:[큐, 시작 샷, 종료 샷, 볼륨, 오프셋]. 빌드는 큐가 적용 구간보다 짧을 때 경고합니다.lipsync: 적용할 샷, 건너뛸 대사, 부분별 얼굴 포인트 하나.prompts: 다른 스타일(3D 만화, 수채화, 실사)을 위해char_style및panel_style을 재정의합니다.
빌드 및 검토
- 수정 사항을 모아서 처리하세요. 전체 빌드는 몇 분이 걸립니다. 검토 라운드의 모든 노트(대사 테이크, 패드, 클립 오프셋)를 수집하여 모두 적용한 후 한 번에 재빌드하세요.
- 세그먼트는 캐시되고 추적됩니다.
build는 입력이 변경된 샷만 정확히 다시 렌더링합니다: 새 클립 또는 립싱크 버전, 승격된 패널, 편집된 대사, 샷 또는 스타일.build --only S05,S06는 해당 샷을 강제로 렌더링하며,--force는 모든 것을 다시 렌더링합니다. - 립싱크가 적용된 샷은 클립, 오프셋, 속도 또는 대사가 변경되면 다시 처리해야 합니다:
lipsync prep S05 && lipsync run S05. 그렇지 않으면 빌드가 오래된 것임을 경고하고 원시 클립을 사용합니다. - 기존 에셋을 다시 생성하려면
--force가 필요합니다 (sound theme --force,animate S05 --force); 그렇지 않으면 기존 파일이 유지되고 빈 부분만 채워집니다. - 시트로 검토하세요.
sheet는 샷당 3프레임을 한 페이지에 배치합니다. 인간이 특정 시간의 순간을 언급하면, 해당 프레임을 추출하여 읽은 후 답변하세요 (ffmpeg -ss T -i build/<output>.mp4 -frames:v 1 f.jpg). - 모든 빌드 전에
check를 실행하세요: 누락된 에셋, 키, 관련 스킬, 프레임보다 넓은 오버레이 텍스트 확인. - 모든 빌드 종료 시 지속 시간이 확인됩니다. 오디오가 비디오보다 짧으면 빌드가 실패하고 끝이 잘리지 않습니다.
- 전송 전:
references/qa-checklist.md.
인간과 협업하기
- 모든 아티팩트를 파일 전송 도구로 보내고 Finder에서 열 수 있도록 제안하세요. 단순히 경로를 출력하지 마세요. 마지막 단계는
deliver명령을 실행하고 해당 파일을 보내는 것입니다. - 오디오의 경우, 무엇을 들어야 하는지와 위치를 알려주세요 ("0:41 부분에서 다니의 이름 발음이 맞나요?"). 직접 들었다고 말하지 마세요.
- 발음 및 목소리 선택은 사용자의 몫입니다: 타임스탬프와 함께 A/B 파일을 제공하세요 (elevenlabs-tts).
- 유료 단계 전에는 비용 추정치를 제공하고, 단계 후에는 누적 비용을 알려주세요.
문제가 있을 때
| 증상 | 해결 방법 |
|---|---|
| 카드 또는 캡션이 너무 빨라 읽기 어려움 | mindur/post 증가: 짧은 카드는 ~1.2-1.5초, 최종 캡션은 4-6초 |
| 타이틀이 양쪽 가장자리에서 잘림 | check가 경고함; 스타일의 size를 낮추거나 wrap 추가 |
| 구간이 끝나기 전에 음악이 멈춤 | 빌드가 경고함: 큐의 seconds를 늘리거나, sound <cue> --force 실행; 또는 구간을 두 개의 큐로 분할 |
| 영상의 끝이 잘림 | 엔진 사용 시 발생 불가 (정확한 길이 믹스, 지속 시간 확인); 수동 믹스의 경우 deck-to-video 참조 |
| 대사가 음악에 묻힘 | 해당 대사에서 level_clips.py --report 실행 후 더 강한 테이크 사용; 해당 큐의 볼륨 낮춤 |
| 캐릭터가 대사보다 먼저 가리키거나 행동함 | clip_off를 그 지점 이후로 설정하거나, 샷을 분할하고 clip_cam으로 첫 부분을 자름 |
| 입이 단어와 맞게 움직이지 않음 | 립싱크 단계 실행; 잘못된 입이 움직이면 얼굴 포인트 수정 |
| 그룹 샷에서 한 얼굴이 더 크게 보임 | OpenCV 설치 (얼굴 크기가 평준화됨), 또는 이웃을 가리는 소품이 있는 카드에 mirror 사용 |
| 히브리어가 거꾸로 표시되거나 연결되지 않음 | RAQM 없이 Pillow 사용: check가 해결 방법을 알려줌 |
| 이름이나 외래어 발음이 틀림 | pronounce 항목 추가, 귀로 A/B 비교 |
더 많은 문제와 원인: references/troubleshooting.md.
관련 스킬
- image-generation: 캐릭터 카드 및 패널 ("반복 캐릭터 및 스토리 패널").
- elevenlabs-tts: 목소리, 한 단어 대사, 발음, 음악 및 효과음.
- generating-video-clips: 클립, 테이크 시트, 립싱크.
- deck-to-video: 슬라이드 비디오를 위한 동일한 ffmpeg 교훈.