Kreativvideos AgroPerforma · Fábrica Blindada
Pipeline zur Bearbeitung vertikaler Kreativvideos (Reels/Ads), aufgebaut auf HyperFrames
(npx hyperframes …). Jedes Kreativvideo wird zu einem Projekt mit einem JSON-Rezept
(creative.base.json), das template.html in die Komposition umsetzt.
Detaillierte Kundenregeln, Entscheidungen und Feedback-Historie:
references/regras-do-cliente.md. Vor der Bearbeitung lesen – sie haben Vorrang vor allen hier beschriebenen Standards.
Verbindlicher Ablauf (3 Genehmigungen)
- Schnitt → leichte 1080p-Vorschau (
cut.py --preview) + vorgeschlagener Name (Code + Spitzname, z.B.AP-08 · Tudo Depende de Você). Benutzer genehmigt. - Entwurf → Schlüsselbilder der Motion-Grafiken/Untertitel (
hyperframes snapshot), nicht das gesamte Video. Bei Dynamikänderung (Zoom) Vorschaurender -q draftsenden. - Ausführung → 4K-Schnitt (
cut.pyohne--preview) +render4k.sh(4K 24 fps) +barscan.sh(schwarzer Rand).
Ein Video nach dem anderen, von Anfang bis Ende. Whisper large‑v3 + ffmpeg 4K + paralleles Rendern überhitzen und starten das MacBook neu.
Umgebung
- Die SSD des Kunden ist exFAT (keine Links →
hyperframes initschlägt fehl). Arbeiten Sie auf einem APFS-Volume, das als Image in/Volumes/AGROPERFORMA-HFeingehängt ist (scripts/montar.sh). Die Skripte gehen von diesem Pfad aus:projetos/<code>/,projetos/_kit/(= dieser Ordnerscripts/+assets/),_scratch/(temporäre Dateien,faces.swift,shift.swift). source scripts/env.shbei jedem Befehl: TMPDIR, Historie und Caches von HyperFrames bleiben auf dem Volume, nie auf der Mac-Festplatte.- Das Volume wird nach einem App-Neustart ausgehängt – vor jedem Schritt neu einhängen; lange Jobs mit
nohup caffeinate -i. - Schriftart: Helvetica Now Display Bold (lizenziert – nicht im Repository; in
projetos/_kit/fonts/kopieren).
Schritt 1 – Schnitt
| Schritt | Werkzeug |
|---|---|
| Sprachkanal (verschiedene Mikrofone auf L und R; den stärkeren wählen, prüfen wer spricht, wenn die Richtung erscheint) | prep_lote.sh (Pegel + Transkription) |
| Sätze des Rohmaterials, einzeln transkribiert (lange Pausen von Whisper sind ungenau) | phrasemap.py <wav> |
| Pausen > 0,2 s entfernen, 0,07 s Atem | plan.py <wav> a:b … --gap 0.2 --pad 0.07 |
| Versprecher („da, do”, „tem em, um, uma”, „cli… clica”): RMS 20 ms + Kandidaten zusammenführen und die Zusammenführung transkribieren; die Silbe isolieren bestätigt | fine.sh, chunk.sh |
Durchgehender, am Bild ausgerichteter Schnitt (ein einzelnes <video> → der LUT „hackt” nie), gewählter Kanal auf beiden Seiten, Fade 0,5 s + 0,7 s auf Schwarz | cut.py [--preview] [--no-fade] [--multi] |
Beginnt mit dem tatsächlichen Start der Sprache; endet ~0,5 s nach dem letzten Wort mit Fade (Ausnahme: wenn die Person am Ende wegschaut → --no-fade).
Schritt 2 – Rezept (creative.base.json)
{
"theme": "green", // green = AgroPerforma (#62AE46) · blue = Fábrica Blindada (#1f4cd7/#0c1f51)
"adjust": {"highlights": -0.25, "shadows": -0.15}, // oder "exposure": 0.15
"trackMode": "shot", // zentriert das Gesicht 1× pro Zoomabschnitt
"cam": [{"start": 0, "end": 6.78, "s": 1.12, "to": 1.04, "cx": 0.5}],
"captions": [["statischer Text", 1.12, 2.48]],
"motions": [{"start": 5.45, "end": 6.78, "top": 900,
"items": [{"text": "Tudo depende de você?", "at": 5.45, "kind": "secondary", "check": true, "ring": 5.8}],
"arrow": 6.2}]
}
analyze.sh <projekt>→ Gesicht pro Bild (Apple Vision) + Transkription des Schnitts;caps.pygeneriert automatische Untertitel (gruppiert 2–4 Wörter, korrigiert „Eo/Ea/Eaí”, vereint Einzelgänger).mkcfg.py <projekt>→ vervollständigt Zoom/Tracking und erzeugtindex.htmlüberbuild.py.- Untertitel statisch in der Bildmitte, verschwinden während einer Motion-Animation auf dem Bildschirm.
- Typen: kurz (CTA ~10–15 s) nur Motions · mittel Untertitel + Motions bei Schlüsselwörtern ·
-GRANDEnur Untertitel + abschließende CTA-Motion. - Sanftes Zoom: ~5 Abschnitte in 40 s, ≥ 6 s zwischen Wechseln, nur bei Argumentwechsel; abwechselnd heran-/herauszoomen. Gesicht pro Abschnitt zentriert, Bildausschnitt Bild für Bild auf den Zoomrand begrenzt (zeigt niemals den Rand).
Schritt 3 – Ausführung
python3 scripts/cut.py "<roh>.MP4" media/cut.mp4 L <a:b> … # 4K
python3 scripts/mkcfg.py projetos/<code>
HF_DEST="<ORDNER EDICAO>" scripts/render4k.sh <code> <Name>_v1_4K
scripts/barscan.sh "<ORDNER EDICAO>/<Name>_v1_4K.mp4" # 0 Bilder mit schwarzem Rand
Alles im PROJETO.md des Projekts protokollieren (Rohmaterial, Kanal, Text, was entfernt wurde, Versionen) und in projetos/CATALOGO.md. Versionen nummerieren, niemals überschreiben.
Beispiele
examples/ enthält echte Rezepte (creative.*.json), PROJETO.*.md, den Generator für Hook-Varianten (ap08_variants.py – gleicher Körper, drei Eröffnungssätze) und Render-Warteschlangen (fila_*.sh).