FilmForge Deliver
영화는 모든 버전이 의도된 곳에서 재생되고, 측정값이 올바르며, 전체 프로덕션이 하나의 폴더에 누락된 항목 없이 존재할 때 완성됩니다. 이 스킬은 딜리버러블 매트릭스에서 결과물을 만들고 각각을 검증한 후 archive.py로 프로덕션을 마무리합니다.
경로: 아래 scripts/, templates/ 및 config/는 이 스킬 내부의 폴더입니다(로드될 때 표시되는 기본 디렉토리). ./install.sh에 의해 배치됩니다. 리포지토리 클론에서 작업하는 경우, 루트에 있는 tools/, templates/ 및 config/입니다.
1단계. 딜리버러블 매트릭스 (templates/delivery-checklist.md)
프로덕션에 복사하고 영화에 없는 항목은 삭제하세요. 모든 영화 딜리버러블은 하나의 마스터에서 비롯되며, 편집기 또는 합성기에서 프리뷰와 동일한 샷 목록, 그림 및 믹스로 3840x2160으로 내보낸 후 ffmpeg로 인코딩합니다:
| 딜리버러블 | 제작 근거 | 설정 |
|---|---|---|
| 4K 마스터 | 편집기의 4K 내보내기 | 3840x2160, 샷 목록의 fps로; VAAPI를 통한 HEVC 메인 (hevc_vaapi) 상수 QP 18, BT.709 태그, 그런 다음 -c copy -tag:v hvc1로 리먹싱하여 Apple 플레이어가 수용하도록 함; VAAPI가 없으면 H.264 (libx264, 프리셋 medium, CRF 18, yuv420p); AAC 320k; +faststart |
| 게시용 1080p | 마스터 | Lanczos로 1920x1080, libx264 프리셋 slow, CRF 16, High 프로파일, yuv420p; 믹스는 2패스 linear loudnorm으로 -14 LUFS 및 -1.5 dBTP로 정규화; AAC 320k; +faststart |
| 폰 사본 | 게시용 사본 | Lanczos로 1280x720, 약간의 노이즈 제거(hqdn3d=1.2:1.2:3:3), libx264 900k (maxrate 1400k, buffer 2800k), AAC 128k; 채팅으로 보내기에 충분히 작게 |
| 커버 | 마스터 | 4K에서 가장 강력한 프레임 3~4장, PNG, 게시용 JPG; 폰 화면에서 읽을 수 있어야 함 |
정확한 ffmpeg 명령어: references/deliverables.md. 하나의 스크립트에 넣어 어떤 변경이든 모든 딜리버러블을 다시 빌드하도록 하세요.
영화에 포함된 북과 엑스트라: 음악과 함께하는 4K 및 1080p 비디오 형태의 그림책, 인쇄용 PDF, 음악과 함께 페이지를 넘기는 인터랙티브 웹 북, 지역화 에디션(각 언어별 자체 4K, 1080p 및 폰 비디오, 모든 대사는 읽을 수 있는 사람이 재설정 및 확인해야 하며, 기계 설정 후 검토되지 않은 상태로 절대 두지 않음), 메이킹 필름(PDF + 폰 PDF). 자세한 내용: references/deliverables.md.
2단계. 모든 딜리버러블 확인
타임라인이 아닌 파일 자체를 측정하세요:
- 스트림: 코덱, 크기, 픽셀 포맷, 프레임 레이트, 코덱 태그(HEVC 마스터의 경우
hvc1), 오디오 레이트 및 채널, 길이, 크기 및 비트레이트 (ffprobe). - 음량: 통합(integrated), 범위(range) 및 트루 피크(true peak) (EBU R128, ffmpeg의
ebur128필터). 마스터는 믹스된 대로 믹스를 전달합니다; 게시용 및 폰 사본은 약 -14 LUFS여야 합니다. - 스토리 히트에서의 동기: 각 히트에 대해 0.5초 이내의 가장 큰 그림 변화와 가장 강한 사운드 온셋, 그리고 이들 사이의 밀리초 간격. 그림 변화는 ffmpeg의 장면 점수(scene score)에서, 온셋은 영화 자체 오디오에서 실행된
beatmap.py에서 비롯됩니다. 목표: 히트에 컷이 있는 경우 한 프레임(24fps에서 42ms) 이하. 컷이 없는 히트는 간격을 보고합니다. 샷 목록과 대조하여 읽으세요. - 끝: 첫 번째 및 마지막 프레임(의도적으로 검은색 또는 타이틀).
- 완성된 영화의 콘택트 시트, 2초마다 한 프레임, 처음부터 끝까지 살펴봄.
- 사인오프 전에 대상 화면에서 소리와 함께 한 번 처음부터 끝까지 시청.
각각의 명령어: references/deliverables.md (Checks).
PDF의 경우: 두 개의 리더에서 열고 모든 스프레드를 확인하고, 글꼴이 포함되었는지, 이미지가 인쇄 해상도인지 확인하세요.
3단계. 아카이브와 증명
영화를 만든 모든 것이 하나의 프로덕션 폴더에 들어갑니다: production.yaml, 스토리 파일, 프롬프트, 모든 그림과 버전, 시트, 악보와 측정값, 코드, 믹스, 딜리버러블, 교훈.
python3 scripts/archive.py build <film> --require deliverables.txt \
--require-shotlist <film>/shotlist.yaml --paintings <film>/art/film \
--exclude "code/.venv/=rebuilt from requirements.txt"
python3 scripts/archive.py verify <film>
build는 모든 파일을 <film>/MANIFEST.sha256으로 해시(일반 sha256sum -c 형식이므로 증명이 도구보다 오래 지속됨)하고 manifest.json을 작성합니다: 파일 수, 바이트, 유형별 파일, 의도적으로 제외된 항목과 그 이유(캐시, 가상 환경, 4k/ 업스케일 폴더 등), 필수 딜리버러블 및 누락된 항목, 그림이 없는 샷, 매니페스트 자체의 다이제스트. 모든 필수 패턴이 일치하고 모든 그림 샷에 그림이 있을 때만 COMPLETE를 보고합니다. verify는 나중에 모든 것을 다시 해시하고 누락되거나 변경된 파일이 있으면 실패합니다(매니페스트가 편집된 경우도 포함).
동일한 도구가 더 작은 패키지도 증명합니다. Lantern Moth의 archive-required.txt는 그림에 크레딧을 사용하기 전에 사전 프로덕션 패키지에 있어야 할 항목을 나열하며, --require archive-required.txt와 함께 예제 폴더에서 archive.py build를 실행하면 10개의 패턴이 모두 존재하고 COMPLETE를 보고합니다.
사본: 백업 또는 이동을 바이트 단위로 증명: python3 scripts/archive.py compare <film> <copy>. 소스와 사본의 모든 파일에 대한 SHA-256 목록과 복사 로그를 수동으로 수행하는 작업을 하나의 명령어로 처리합니다.
아카이브에 간단한 README를 작성하세요: 각 폴더가 무엇을 담고 있는지, 의도적으로 무엇이 제외되었는지, 완성된 작업이 어디에 있는지.
4단계. 마무리
production.py signoff deliver --by <당신> --note "<TV에서 마스터를 시청했습니다; 검사 통과>", 그 다음 advance를 실행하여 회고(forge-director)로 넘어갑니다.
출력
film/모든 딜리버러블 포함, 이름은<Title>_4K.mp4,<Title>_1080p.mp4,<Title>_phone.mp4,covers/- 보고서의 검사 수치(크기, 음량, 각 히트에서의 동기 오프셋)
MANIFEST.sha256,manifest.json, 아카이브 README
게이트 체크리스트
- 매트릭스의 모든 딜리버러블이 존재하고 검사를 통과함
- 모든 스토리 히트에서 동기가 한 프레임 이내임
- 대상 화면에서 소리와 함께 시청 완료
-
archive.py build: COMPLETE;archive.py verify: OK - 모든 사본이
archive.py compare로 증명됨 - 사인오프 완료
수리 표
| 증상 | 해결책 |
|---|---|
| Apple 기기가 HEVC 마스터를 거부함 | hvc1 태그 누락: ffmpeg -i in.mp4 -c copy -tag:v hvc1 out.mp4로 리먹싱 |
| HEVC 마스터가 디코딩되지 않음 | VAAPI 인코딩 중 hvc1이 기록됨: 태그 없이 인코딩한 후 -c copy -tag:v hvc1로 리먹싱 |
| TV가 Wi-Fi에서 끊김 | 비트레이트가 너무 높음(ffprobe로 확인): 더 높은 QP(더 작은 파일)로 마스터를 다시 인코딩 |
| HEVC가 필요했지만 VAAPI 인코더가 없음 | ffmpeg -h encoder=hevc_vaapi 및 ls /dev/dri로 시스템이 가진 것을 확인; 그렇지 않으면 H.264 마스터로 전달 |
| 게시 플랫폼이 거부하거나 클리핑함 | 정규화되지 않음: 마스터가 아닌 2패스 사본(-14 LUFS, -1.5 dBTP, linear)을 게시 |
| 폰 사본이 전송하기에 너무 큼 | 게시용 사본에서 더 낮은 -b:v로 다시 인코딩(references/deliverables.md 참조) 또는 단축; 720p 유지 |
| verify가 CHANGED를 보고함 | 전달된 파일이 편집됨: 증명된 사본에서 복원하거나 다시 빌드하고 재서명 |
| build가 INCOMPLETE를 보고함 | 필수 딜리버러블 또는 그림이 누락됨: 생성하거나 이유와 함께 의도적으로 목록에서 제거 |
참조
references/deliverables.md: 전체 ffmpeg 명령어, 검사, 북, 에디션 및 커버