Add cutter report and auto-regen on each match
- New CUTTER_REPORT.md: per-beat hand-off table for the video editor doing the manual recut. Per beat: trailer SMPTE in/out, source SMPTE in/out, scene id, score, status (OK / ? / MAN.), and a one-line phase description from the cached vision text. - New scripts/generate_cutter_report.py: pure renderer that reads the current cache (match_results.json + trailer_beats.json + optional vision_descriptions.json) and writes CUTTER_REPORT.md. No side effects on the cache. - cli.py: after every successful match the cutter report is regenerated automatically (best-effort; failures are logged and do not abort). - README.md: new top-section "Fuer den Cutter" describing exactly what the editor needs (which two files to look at, how the status flag works, the recommended NLE workflow). The technical algorithm description follows below. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
@@ -1,27 +1,63 @@
|
||||
# AI Trailer Generator v2
|
||||
|
||||
**Frame-accurate trailer reconstruction via pure Computer Vision**
|
||||
**Frame-genaues Nachbauen eines Trailers aus dem Quellfilm.**
|
||||
|
||||
> Gibt einen Reference Trailer und den dazugehörigen Quellfilm hinein — bekommt eine fertige FCPXML/EDL heraus, die den Trailer Frame-genau aus dem Quellfilm nachbaut.
|
||||
Du gibst zwei Videos rein — einen Referenz-Trailer und den dazugehörigen
|
||||
Spielfilm — und bekommst eine fertige FCPXML/EDL für deinen Schnittplatz, die
|
||||
den Trailer Beat für Beat aus dem Quellfilm nachbaut.
|
||||
|
||||
---
|
||||
|
||||
## Das Kernprinzip
|
||||
## Für den Cutter — was du wirklich brauchst
|
||||
|
||||
Standardmäßig kein LLM für visuelles Matching. Optional kann ein Vision-Layer
|
||||
gecachte 3-Frame-Beschreibungen als zusätzliche Suchanker liefern; der finale
|
||||
Match bleibt aber CV-verifiziert.
|
||||
Du musst dieses Tool **nicht selbst bedienen** und musst **kein Python können**.
|
||||
Was du bekommst sind zwei Dateien, mit denen du arbeitest:
|
||||
|
||||
| Phase | Was passiert | Technologie |
|
||||
|-------|-------------|-------------|
|
||||
| **0 — Prep** | Reference Trailer analysieren & Beats extrahieren | PySceneDetect + OpenCV |
|
||||
| **1 — Global Scan**| Gesamten Quellfilm via FFmpeg-Stream (2 FPS) gegen alle Beats scannen | FFmpeg Pipe + Luma-Histogramm |
|
||||
| **1b — Optional Vision Seeds** | Unsichere Top-K Szenen mit 3-Frame-Beschreibungen cachen | OpenAI-kompatibles Vision-LLM |
|
||||
| **2 — Refine** | Beste Treffer auf Frame-Ebene präzisieren | OpenCV `matchTemplate` |
|
||||
| **3 — Dramaturgie** | Narrative BeatType-Klassifikation aus Dialog-Text | OpenRouter LLM |
|
||||
| **4 — Export** | Timeline → FCPXML 1.10 oder CMX 3600 EDL | xml.etree + eigener Timecode-Layer |
|
||||
1. **`CUTTER_REPORT.md`** — die Tabelle für die manuelle Kontrolle und das
|
||||
Nachschneiden. Pro Beat steht drin:
|
||||
- der Trailer-Zeitcode (h:mm:ss:ff),
|
||||
- der vorgeschlagene Source-Zeitcode aus dem Spielfilm,
|
||||
- ein Status: `OK` (kann übernommen werden), `?` (bitte sichten) oder
|
||||
`MAN.` (kein Treffer, manuell setzen),
|
||||
- eine kurze Beschreibung, was im Trailer-Beat zu sehen ist (damit du
|
||||
die richtige Stelle im Source schneller findest).
|
||||
2. **`output/*.fcpxml`** und **`output/*.edl`** — die fertige Timeline für
|
||||
FCP / Premiere / Avid / Resolve. Beats mit Status `OK` sind dort schon
|
||||
richtig gesetzt; `?` und `MAN.` musst du im NLE prüfen bzw. selbst setzen.
|
||||
|
||||
**Text-Safe Crop:** Obere 15% und untere 30% des Frames werden vor jedem Vergleich ausgeblendet, um Title Cards, Logos und Letterbox zu ignorieren.
|
||||
**Workflow-Empfehlung:**
|
||||
|
||||
1. Öffne `CUTTER_REPORT.md` und arbeite die Tabelle von oben nach unten ab.
|
||||
2. Importiere die FCPXML/EDL ins NLE, lade Trailer und Spielfilm dazu.
|
||||
3. Bei `OK`-Beats nur stichprobenartig sichten.
|
||||
4. Bei `?`-Beats den Vorschauclip aus dem Report-HTML (siehe unten) prüfen
|
||||
und im NLE den Source-In um wenige Frames vor/zurück verschieben, bis die
|
||||
Bewegungsphase exakt zum Trailer passt.
|
||||
5. Bei `MAN.`-Beats selbst die passende Stelle im Spielfilm suchen — die
|
||||
Beschreibung im Report sagt dir was du suchst.
|
||||
|
||||
Alles andere unten ist Hintergrund für den Tool-Verantwortlichen.
|
||||
|
||||
---
|
||||
|
||||
## Wie das Tool die Treffer findet (Kurzfassung)
|
||||
|
||||
| Phase | Was passiert |
|
||||
|-------|--------------|
|
||||
| **0** | Trailer in Beats zerlegen (PySceneDetect). |
|
||||
| **1** | Schneller Vibe-Check: für jeden Beat die Top-K ähnlichsten Szenen aus dem Spielfilm vorauswählen (Histogramm + pHash). |
|
||||
| **2** | Optional: Vision-LLM beschreibt unsichere Szenen mit 3-Frame-Samples; die Beschreibungen liegen gecached vor. |
|
||||
| **3** | Frame-genaue Verfeinerung pro Beat (OpenCV-Templatematching, Bewegungsphasen-Vergleich). |
|
||||
| **4** | Phasen-Reparatur: bei segmentierten Beats wird die Bewegungsphase im Source mit der sichtbaren Trailerphase abgeglichen. |
|
||||
| **5** | Recovery: Beats ohne Treffer werden via Vision-Phasensuche in den Top-K Szenen nochmal probiert. |
|
||||
| **6** | Export als FCPXML 1.10 oder CMX-3600-EDL plus `CUTTER_REPORT.md`. |
|
||||
|
||||
**Text-Safe Crop:** Obere 15 % und untere 30 % jedes Frames werden vor dem
|
||||
Vergleich ausgeblendet, damit Title-Cards, Logos und Letterbox die Treffer
|
||||
nicht verfälschen.
|
||||
|
||||
**Wichtig:** Auch wenn Vision aktiviert ist — der finale Match bleibt
|
||||
CV-verifiziert. Das LLM liefert nur zusätzliche Suchanker.
|
||||
|
||||
---
|
||||
|
||||
|
||||
Reference in New Issue
Block a user