Was macht FilmForge Auslieferung?
Ein Film ist fertig, wenn jede Version dort abspielt, wo sie hingehört, korrekt misst und die gesamte Produktion in einem Ordner mit einem Nachweis liegt, dass nichts fehlt. Dieses Skill erstellt die Auslieferungsformate aus der Auslieferungsmatrix, prüft jedes einzelne und schließt die Produktion mit archive.py ab.
Pfade: scripts/, templates/ und config/ befinden sich in diesem Skill (das Basisverzeichnis, das beim Laden angezeigt wird), bereitgestellt durch ./install.sh. Bei einem Klon des Repositories sind sie tools/, templates/ und config/ im Stammverzeichnis.
Schritt 1. Die Auslieferungsmatrix (templates/delivery-checklist.md)
Kopiere sie in die Produktion und streiche, was der Film nicht hat. Jedes Film-Auslieferungsformat stammt von einem Master, exportiert aus deinem Editor oder Composer mit 3840x2160 aus derselben Einstellungsliste, denselben Gemälden und demselben Mix wie die Vorschau, dann codiert mit ffmpeg:
| Auslieferungsformat | Hergestellt aus | Einstellungen |
|---|---|---|
| 4K-Master | dem 4K-Export des Editors | 3840x2160 mit der fps der Einstellungsliste; HEVC Main durch VAAPI (hevc_vaapi) mit konstantem QP 18, getaggt BT.709, dann neu gemuxt mit -c copy -tag:v hvc1, damit Apple-Player es akzeptieren; ohne VAAPI: H.264 (libx264, preset medium, CRF 18, yuv420p); AAC 320k; +faststart |
| 1080p für Posting | dem Master | Lanczos auf 1920x1080, libx264 preset slow, CRF 16, High profile, yuv420p; der Mix normalisiert auf -14 LUFS und -1,5 dBTP durch eine zweidurchgängige lineare Loudnorm; AAC 320k; +faststart |
| Handy-Kopie | der Posting-Kopie | Lanczos auf 1280x720 mit leichtem Denoise (hqdn3d=1.2:1.2:3:3), libx264 mit 900k (maxrate 1400k, buffer 2800k), AAC 128k; klein genug für eine Chat-Nachricht |
| Cover | dem Master | 3 oder 4 der stärksten Frames in 4K, PNG, plus JPG für Posting; lesbar in Handygröße |
Die genauen ffmpeg-Befehle: references/deliverables.md. Fasse sie in einem Skript zusammen, sodass jede Änderung alle Auslieferungsformate neu erstellt.
Bücher und Extras, falls der Film welche hat: ein Bildband als 4K- und 1080p-Videos mit Musik, ein Print-PDF, ein interaktives Web-Buch, das mit der Musik umblättert, lokalisierte Editionen (jede Sprache eigene 4K-, 1080p- und Handy-Videos, jede Zeile neu gesetzt und von einer Person geprüft, die sie liest, nie maschinell und ungeprüft gesetzt) und das Making-of als PDF plus ein Handy-PDF. Details: references/deliverables.md.
Schritt 2. Jedes Auslieferungsformat prüfen
Messe die Dateien selbst, niemals die Timeline:
- Streams: Codec, Größe, Pixelformat, Bildrate, Codec-Tag (
hvc1für das HEVC-Master), Audio-Rate und -Kanäle, Länge, Größe und Bitrate (ffprobe). - Lautstärke: Integrierte Lautstärke, Dynamikumfang und True Peak (EBU R128, ffmpegs
ebur128-Filter). Das Master trägt den Mix wie gemischt; die Posting- und Handy-Kopien sollten etwa -14 LUFS lesen. - Synchronisation an den Story-Hits: für jeden Hit die größte Bildänderung und den stärksten Toneinsatz innerhalb einer halben Sekunde, und wie weit sie in ms auseinanderliegen. Bildänderungen stammen vom ffmpeg-Scene-Score, Einsätze von
beatmap.py, ausgeführt auf der eigenen Audio des Films. Ziel: ein Frame (42 ms bei 24 fps) oder weniger, wo immer ein Schnitt auf dem Hit sitzt. Ein Hit ohne Schnitt daran meldet eine Lücke; lies sie gegen die Einstellungsliste. - Enden: die ersten und letzten Frames (schwarz oder der Titel, absichtlich).
- Kontaktbogen des fertigen Films, ein Frame alle 2 s, von Anfang bis Ende betrachtet.
- Einmal durchgesehen von Anfang bis Ende auf dem Zielbildschirm mit Ton, vor der Freigabe.
Die Befehle für jede Prüfung: references/deliverables.md (Checks).
Für PDFs: in zwei Readern öffnen, jede Doppelseite prüfen, Schriftarten eingebettet, Bilder in Druckauflösung.
Schritt 3. Das Archiv und sein Nachweis
Alles, was den Film ausmacht, kommt in einen Produktionsordner: production.yaml, die Story-Dateien, Prompts, jedes Gemälde und jede Version, die Blätter, die Partitur und ihre Messung, der Code, die Mixe, die Auslieferungsformate, die Lehren.
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 hasht jede Datei in <film>/MANIFEST.sha256 (im einfachen sha256sum -c-Format, damit der Nachweis das Tool überlebt) und schreibt manifest.json: Dateianzahl, Bytes, Dateien nach Typ, was absichtlich weggelassen wurde und warum (Caches, virtuelle Umgebungen, jeder 4k/-Upscale-Ordner), die erforderlichen Auslieferungsformate und fehlende, die Einstellungen ohne Gemälde und den Digest des Manifests selbst. Es meldet KOMPLETT nur, wenn jedes erforderliche Muster zutrifft und jede bemalte Einstellung ihr Gemälde hat. verify hasht alles später erneut und schlägt fehl, wenn Dateien fehlen oder geändert wurden (und bei einem bearbeiteten Manifest).
Dasselbe Tool beweist auch ein kleineres Paket. Die Lantern Moth's archive-required.txt listet, was ihr Pre-Production-Paket enthalten muss, bevor ein Guthaben für Gemälde ausgegeben wird, und archive.py build auf dem Beispielordner mit --require archive-required.txt findet alle zehn Muster und meldet KOMPLETT.
Kopien: Beweise eine Sicherung oder Verschiebung Byte für Byte: python3 scripts/archive.py compare <film> <copy>. Es erledigt in einem Befehl, was SHA-256-Listen jeder Datei in der Quelle und in der Kopie sowie ein Kopierprotokoll von Hand tun.
Schreibe eine kurze README in das Archiv: was jeder Ordner enthält, was absichtlich weggelassen wurde, wo die fertige Arbeit ist.
Schritt 4. Abschluss
production.py signoff deliver --by <du> --note "<Master auf dem Fernseher angesehen; Prüfungen bestanden>", dann advance zur Retrospektive (forge-director).
Ausgabe
film/mit jedem Auslieferungsformat, benannt<Titel>_4K.mp4,<Titel>_1080p.mp4,<Titel>_phone.mp4,covers/- die Zahlen der Prüfungen im Bericht (Größen, Lautstärke, Synchronisationsabweichungen bei jedem Hit)
MANIFEST.sha256,manifest.json, die Archiv-README
Gate-Checkliste
- Jedes Auslieferungsformat in der Matrix existiert und hat seine Prüfungen bestanden
- Synchronisation an jedem Story-Hit innerhalb eines Frames
- Auf dem Zielbildschirm mit Ton angesehen
-
archive.py build: KOMPLETT;archive.py verify: OK - Jede Kopie mit
archive.py comparenachgewiesen - Freigegeben
Reparaturtabelle
| Symptom | Behebung |
|---|---|
| Apple-Geräte lehnen das HEVC-Master ab | Fehlender hvc1-Tag: neu muxen mit ffmpeg -i in.mp4 -c copy -tag:v hvc1 out.mp4 |
| Das HEVC-Master dekodiert nicht | hvc1 wurde während des VAAPI-Encodes geschrieben: ohne Tag codieren, dann mit -c copy -tag:v hvc1 neu muxen |
| Der Fernseher ruckelt über WLAN | Bitrate zu hoch (ffprobe gibt sie aus): Master erneut mit höherem QP codieren (kleinere Datei) |
| HEVC gewünscht, aber kein VAAPI-Encoder vorhanden | ffmpeg -h encoder=hevc_vaapi und ls /dev/dri zeigen, was die Maschine hat; andernfalls das H.264-Master ausliefern |
| Posting-Plattform lehnt es ab oder schneidet es an | Nicht normalisiert: die zweidurchgängige Kopie posten (-14 LUFS, -1,5 dBTP, linear), nicht das Master |
| Handy-Kopie zu groß zum Senden | Erneut codieren von der Posting-Kopie mit niedrigerem -b:v (references/deliverables.md), oder kürzen; 720p beibehalten |
| verify meldet GEÄNDERT | Jemand hat eine ausgelieferte Datei bearbeitet: aus einer nachgewiesenen Kopie wiederherstellen oder neu bauen und freigeben |
| build meldet UNVOLLSTÄNDIG | Ein erforderliches Auslieferungsformat oder Gemälde fehlt: erstellen oder absichtlich mit Grund aus der Liste entfernen |
Referenzen
references/deliverables.md: die vollständigen ffmpeg-Befehle, die Prüfungen, Bücher, Editionen und Cover