Was macht OpenCaptions Erweiterung?
Binde CWI (Caption With Intent) Untertitel in die Post-Production Pipeline von Content Engine ein. Anstelle von flachen, statischen Untertiteln codiert CWI die gefühlte Erfahrung von Sprache – Tonhöhe steuert die Schriftstärke, Lautstärke die Schriftgröße, Betonung löst Glow-Animationen aus und die Sprecheridentität wird auf WCAG-AA-konforme Farben abgebildet. Das Ergebnis sind Untertitel, die nicht nur vermitteln, was gesagt wurde, sondern auch wie.
CWI ist der Oscar-prämierte (2025) Untertitelstandard von FCB Chicago und Chicago Hearing Society. OpenCaptions ist die erste quelloffene, programmatische Toolchain dafür.
Pipeline-Hakenpunkt
Phase: Post-Production (Phase 3) Position: Nach Upscaling und Color Grading, vor dem finalen Export.
Post-Production-Kette:
1. Upscaling (Real-ESRGAN / Topaz) --> Höhere Auflösung
2. Color Grading (Brand LUT / ffmpeg) --> Markenkonforme Farben
3. OpenCaptions (CWI) --> Intent-gesteuerte Untertitel
4. Finaler Export (ffmpeg) --> Produktionsreife Datei
Die Erweiterung erhält eine fertig gradierte Videodatei und erzeugt:
- Ein CWI-Dokument (
.cwi.json) mit wortgenauen Intent-Annotationen - Ein WebVTT-Fallback (
.vtt) für Plattformen, die Standard-Untertitel benötigen - Einen Validierungsbericht (JSON) mit Pillar-Scores
- Ein untertitelte Video (
.mp4) gerendert via Remotion oder ffmpeg-Burn-in
Funktionsweise
Gradiertes Video + Szenenbeschreibung
|
├── [1] Transkription (faster-whisper) --> Wortgenaue Zeitstempel
├── [2] Diarisierung (pyannote-audio) --> Sprecherzuordnung
├── [3] Intents extrahieren --> Tonhöhe, Lautstärke, Emotion, Betonung pro Äußerung
| V1: parselmouth + FER (Audio+Video)
| V2: V-JEPA2 World Model
| V3: TRIBE v2 neuronale Vorhersage
├── [4] Intent → CWI abbilden --> Schriftstärke, Größe, Betonung, Animation pro Wort
| V1: RulesMapper (Tonhöhe→Stärke, Lautstärke→Größe)
| V2: LearnedMapper (trainiert auf Korrekturdaten)
| V3: NeuralMapper (Gehirnregion-Aktivierungen steuern Styling)
├── [5] Validieren (12 Regeln) --> Attributions-, Synchronisations- und Intonations-Scores
└── [6] Rendern --> Remotion-Overlay ODER ffmpeg-Burn-in
Schritt 1–2: Transkription + Diarisierung
Die Pipeline ruft die OpenCaptions-CLI oder den MCP-Server auf, der faster-whisper für wortgenaue Zeitstempel und pyannote-audio für die Sprechererkennung verwendet. Diese Phasen erzeugen ein DiarizedTranscript, in dem jedes Wort einem Sprecher zugeordnet ist.
Schritt 3: Intent-Extraktion
Der Intent-Extraktor analysiert Audio und Video, um den gefühlten Register jeder Äußerung zu bestimmen:
- Stimm-Signale: Tonhöhe (Hz), Lautstärke (dB), Sprechgeschwindigkeit (WPM), Pausen-Timing
- Affekt-Signale: Valenz (-1 bis 1), Erregung (0 bis 1), vorherrschende Emotion
- Semantische Signale: Sarkasmus-Wahrscheinlichkeit, Betonungswörter, rhetorische Mittel
Diese Signale bilden einen IntentFrame für jede Äußerung. Wörter, die von der Äußerungsbasislinie abweichen, erhalten WordIntent-Überschreibungen.
Schritt 4: Intent-Abbildung
Der Mapper wandelt Intentsignale in visuelle CWI-Parameter um:
| Intent-Signal | CWI-Eigenschaft | Abbildung (V1 RulesMapper) |
|---|---|---|
| Tonhöhe (normalisiert 0–1) | weight (100–900) | Lineare Interpolation: 100 + pitch_norm * 800 |
| Lautstärke (normalisiert 0–1) | size (0,7–1,5) | Lineare Interpolation: 0,8 + volume_norm * 0,55 |
| Semantische Betonung + hohe Lautstärke | emphasis (boolesch) | Wort in emphasis_words ODER Lautstärke > p90 |
| Sprecheridentität | color des Sprechers | Aus 12-Farben-WCAG-AA-Palette zugewiesen |
| Flüstern (leise) | weight < 300 | Überschreibung: Stärke auf 100–250 begrenzt |
| Schreien (laut) | size > 1,3 + emphasis | Überschreibung: Größe 1,35–1,5, emphasis true |
Schritt 5: Validierung
Der @opencaptions/spec-Validator prüft das CWI-Dokument gegen 12 Regeln, verteilt auf drei Säulen:
Attribution (3 Regeln):
- ATT_001: Jeder Untertitel hat einen Sprecher im Cast
- ATT_002: Sprecher haben eindeutige Farben
- ATT_003: Farben erfüllen WCAG-AA-Kontrast (4,5:1 gegen #1a1a1a)
Synchronisation (5 Regeln):
- SYN_001: Alle Wörter haben Zeitstempel
- SYN_002: Zeitstempel sind monoton steigend
- SYN_003: Untertitelereignisse überlappen sich nicht
- SYN_004: Animationsdauer 600 ms gemäß Spezifikation
- FCC_001: Keine Lücken > 3 s während Sprache
- FCC_002: Max. 42 Zeichen pro Zeile (FCC-konform)
Intonation (3 Regeln):
- INT_001: Stärke im gültigen Bereich (100–900)
- INT_002: Größe im gültigen Bereich (0,7–1,5)
- INT_003: > 20 % der Wörter haben nicht-standardmäßige Stärke (Untertitel variieren tatsächlich)
Jede Säule wird mit 0–100 bewertet. Ein CWI-Dokument gilt als bestanden, wenn alle drei Säulen >= 80 erreichen.
Schritt 6: Rendern
Zwei Rendering-Pfade:
Remotion-Pfad (bevorzugt für Content Engine): CWI-Wörter werden zu React-Komponenten in einer <CaptionOverlay>-Komposition. Jedes Wort erscheint zu seinem Zeitstempel mit einer spring()-Eingangsanimation, Sprecherfarbe, variabler Schriftstärke und einem Betonungs-Glow. Siehe references/cwi-remotion-bridge.md für die vollständige Abbildung.
ffmpeg-Burn-in (Fallback): Erzeuge eine ASS-Untertiteldatei aus dem CWI-Dokument und brenne sie mit ffmpeg -vf ass=captions.ass in das Video ein. Verliert wortgenaue Animationen, behält aber Sprecherfarben und Schriftstärken-Variation.
CLI-Verwendung
# CWI-Untertitel aus einem Video erzeugen
npx opencaptions generate video.mp4 --output captions.cwi.json
# Mit TRIBE v2 neuronalem Backend erzeugen
npx opencaptions generate video.mp4 --backend tribe --output captions.cwi.json
# Ein CWI-Dokument validieren
npx opencaptions validate captions.cwi.json
# Untertitel im Terminalvorschau (ANSI-farbig)
npx opencaptions preview captions.cwi.json
# Nach WebVTT exportieren
npx opencaptions export captions.cwi.json --format webvtt
# Nach After Effects ExtendScript exportieren
npx opencaptions export captions.cwi.json --format ae-json
# Nach Premiere Pro XML exportieren
npx opencaptions export captions.cwi.json --format premiere-xml
# Systemabhängigkeiten prüfen
npx opencaptions doctor
# Python-Abhängigkeiten installieren
npx opencaptions setup
MCP-Server-Verwendung
Der OpenCaptions MCP-Server stellt vier Tools für die Agentenintegration bereit:
| Tool | Beschreibung |
|---|---|
generate_captions | Führt die gesamte Pipeline für eine Videodatei aus |
validate_captions | Validiert ein CWI-Dokument gegen 12 Regeln |
preview_captions | Terminalformatierte Vorschau zu einem bestimmten Zeitpunkt |
export_captions | Exportiert in das WebVTT-Format |
Zur Verwendung mit Claude Code fügen Sie den MCP-Server zu Ihren Einstellungen hinzu:
{
"mcpServers": {
"opencaptions": {
"command": "npx",
"args": ["@opencaptions/mcp"]
}
}
}
Rufen Sie es dann im Gespräch auf: "Generiere CWI-Untertitel für video.mp4" löst generate_captions aus.
compose-video.py-Integration
compose-video.py von Content Engine akzeptiert ein --captions-Flag:
python3 scripts/compose-video.py storyboard.md --brand arcan-studio --captions
Wenn --captions übergeben wird, führt die Pipeline nach der Generierung und dem Zusammensetzen aller Clips Folgendes aus:
npx opencaptions generate {final-video}.mp4 --output {output-dir}/captions.cwi.json- Validiert das CWI-Dokument (warnt bei Score < 80, blockiert aber nicht)
- Wenn auch
--remotionübergeben wird, wird das CWI-JSON als<CaptionOverlay>-Props in die Remotion-Komposition injiziert - Andernfalls wird WebVTT als Sidecar-Datei neben dem finalen Video erzeugt
Wenn OpenCaptions nicht installiert ist (npx opencaptions doctor schlägt fehl), degradiert die Pipeline anmutig:
- Fallback: Textüberlagerung aus der Szenenbeschreibung (statischer Text aus den
## Shot-Beschreibungen des Storyboards) - Loggt eine Warnung: "OpenCaptions not available, using scene brief text overlay"
- Erzeugt dennoch eine
.vtt-Datei mit aus Clip-Grenzen abgeleiteten Zeitangaben
Untertitel-Stile
Drei integrierte Untertitel-Stilvorlagen, auswählbar über Konfiguration:
1. Wort-für-Wort (brainrot)
Stil mit hoher Merkfähigkeit: Jedes Wort erscheint einzeln, zentriert, maximale Größenvarianz. Optimiert für Social/TikTok/Reels-Inhalte mit Dopamin-Hooks.
- Ein Wort gleichzeitig sichtbar
- Große Basisgröße (64px bei 1080p)
- Extreme Stärkevariation (100–900, voller Bereich)
- Betonungswörter skalieren auf 1,5x mit Glow
- Hintergrund: keiner (Wörter schweben über Video)
- Schriftart: Roboto Flex variable
2. Narrativ (editorial)
Ganze Satzanzeige mit wortgenauem Styling. Optimiert für Langform-Inhalte, Dokumentationen, Blog-Video-Einbettungen.
- Vollständiges Untertitelereignis sichtbar, Wörter inline gestylt
- Mittlere Basisgröße (48px bei 1080p)
- Mäßige Stärkevariation (300–700)
- Betonungswörter erhalten subtile Größenanpassung (1,15x)
- Hintergrund: halbtransparente Tablette (rgba(0,0,0,0,6))
- Schriftart: Roboto Flex variable
3. Minimal (unteres Drittel)
Saubere Präsentation im unteren Drittel. Sprechername + Text. Minimale visuelle Ablenkung. Optimiert für Interviews, redende Köpfe, Konferenzaufzeichnungen.
- Sprechername-Label in Sprecherfarbe, Untertiteltext in Weiß
- Kleine Basisgröße (36px bei 1080p)
- Stärkevariation nur für Betonung (400 Standard, 700 Betonung)
- Keine Größenvarianz
- Hintergrund: Verlaufsbalken (untere 15 % des Bildes)
- Schriftart: system sans-serif
Datenvertrag
Liest (unveränderlich)
- Gradiertes Video-Asset aus vorherigem Post-Production-Schritt
knowledge/compiled/brands/{brand_slug}.md– für Untertitel-Farbpalette und Typografie-Präferenzen- Szenenbeschreibung (Laufzeitparameter) – für Kontext des beabsichtigten emotionalen Tons
Schreibt (nur eigener Namespace)
extensions/opencaptions/output/{asset_id}.cwi.json– CWI-Dokumentextensions/opencaptions/output/{asset_id}.vtt– WebVTT-Fallbackextensions/opencaptions/output/{asset_id}-report.json– Validierungsberichtextensions/opencaptions/output/{asset_id}-captioned.mp4– gerendertes Video (nur Remotion-Pfad)
Konfiguration
opencaptions:
# Stilvorlage für Untertitel
style: "narrative" # word-by-word | narrative | minimal
# Visuelle Parameter
font_family: "Roboto Flex" # Variable Schriftart für Gewichtsachse
base_font_size: 48 # Pixel bei 1080p
position: "bottom" # top | center | bottom
max_chars_per_line: 42 # FCC-Konformität
background: "pill" # pill | shadow | gradient | none
background_opacity: 0.6 # 0.0 - 1.0
# Pipeline-Backend
backend: "av" # av (V1) | jepa (V2) | tribe (V3)
language: "en" # ISO 639-1 Hinweis für Transkription
# Sprecher-Überschreibungen (optional, standardmäßig automatisch erkannt)
speakers:
- name: "Narrator"
color: "#6B8AFF"
- name: "Guest"
color: "#FF6B6B"
# Rendering
render_mode: "remotion" # remotion | ffmpeg | sidecar-only
output_format: "mp4" # mp4 | webm
fps: 30 # Muss Quellvideo entsprechen
# Validierung
min_score: 80 # Minimale Gesamtpunktzahl zum Fortfahren
fail_on_low_score: false # Wenn true, Pipeline bei niedrigem Score blockieren
# TRIBE v2 neuronale Abbildung (nur V3-Backend)
neural_mapping: false # Vorhersage von neuronalen Antwort-styling aktivieren
Anmutige Degradierung
Die Erweiterung blockiert niemals die Content Engine Pipeline. Degradierungsleiter:
| Zustand | Verhalten |
|---|---|
| OpenCaptions CLI installiert + alle Python-Abhängigkeiten | Vollständige CWI-Pipeline (Transkription, Diarisierung, Intent, Abbildung) |
| OpenCaptions CLI installiert, keine Python-Abhängigkeiten | Mock-Backends mit Platzhalter-Untertiteln + Validierung |
| OpenCaptions CLI nicht installiert | Szenenbeschreibungs-Textüberlagerung als statische Untertitel an Clip-Grenzen |
| Video hat keine Audiospur | Überspringe Untertitelgenerierung, logge Info-Nachricht |
| Validierungs-Score < 80 | Warne, fahre aber fort (außer fail_on_low_score: true) |
| Remotion nicht verfügbar | Fallback auf ffmpeg ASS-Burn-in |
| ffmpeg nicht verfügbar | Gebe CWI-JSON + WebVTT nur als Sidecar aus (kein gerendertes Video) |
Verwandte Themen
- OpenCaptions-Projekt:
~/broomva/apps/opencaptions/ - CWI-Remotion-Brücke:
references/cwi-remotion-bridge.md - Integrationsanleitung:
references/integration-guide.md - Content Engine SKILL.md:
../../SKILL.md - Erweiterungs-Framework:
../README.md