Communitygithub.com

rizomaai/video-narrado

Konvertiert eine .md-Datei (Bericht, Protokoll, Karteikarten, Analyse) in audiovisuelle Produkte: zuerst ein detailliertes 16:9-Video mit ausgewählter Stimme, Untertiteln und Hintergrundmusik; danach kurze 9:16-Versionen für Reels, YouTube Shorts und TikTok mit Veröffentlichungstexten.

Was ist video-narrado?

Dieses Skill ermöglicht es, aus einer Markdown-Datei automatisch professionelle Videos zu erstellen. Es generiert zunächst ein detailliertes 16:9-Video (2–4 Minuten), das den gesamten Inhalt der .md-Datei durchläuft, und anschließend mehrere kurze 9:16-Versionen (unter 60 Sekunden), die jeweils einen wichtigen Punkt hervorheben. Der gesamte Prozess ist stark automatisiert: Die Inhalte werden in Storyboards organisiert, die Sprachausgabe erfolgt über eine ausgewählte Stimme (Standard: HeyGen ElevenLabs), Untertitel und eine synthetisierte Hintergrundmusik werden automatisch hinzugefügt. Der Workflow umfasst die Erstellung von Storyboards, die Generierung der Sprachdateien, das Rendern der Videos mit Playwright und ffmpeg sowie die automatische Erstellung von Veröffentlichungstexten. Das Skill ist besonders nützlich für Content-Ersteller, die schnell und konsistent Videoinhalte aus textbasierten Analysen oder Berichten produzieren möchten, und unterstützt Plattformen wie YouTube, Instagram Reels, TikTok und LinkedIn.

Funktioniert mit~Claude Code~Codex CLI~Cursor
npx skills add rizomaai/video-narrado

In Ihrer bevorzugten KI fragen

Öffnet einen neuen Chat, in dem dieser Agent-Skill bereits geladen ist.

Dokumentation

Was macht video-narrado?

Eingabe: eine .md-Datei. Ausgabe, in dieser Reihenfolge:

  1. Detailvideo 16:9 (2 bis 4 Min.), das die gesamte MD durchläuft.
  2. Kurzfassungen 9:16 (2 oder 3, unter 60 s): jede greift einen Erkenntnis aus dem Detailvideo auf.
  3. Ein publicacion.md pro Stück (Titel, Beschreibung, Hashtags und Alternativtext).

Alles mit der ausgewählten Stimme, Untertiteln und eigener Hintergrundmusik.

  • Motor: motor/, innerhalb dieses Skills (Playwright 1.63.0 + ffmpeg; Python 3 ohne Abhängigkeiten). MOTOR = absoluter Pfad dieses Ordners.
  • Projekt: ein Ordner pro Video, z. B. videos/AAAA-MM-TT_thema/, mit einem Unterordner pro Stück: largo/, short-1-…/, short-2-…/. Jedes Stück enthält sein eigenes storyboard.json.
  • Installation (einmalig): siehe README.md.

Ausgewählte Stimme

Standardmäßig die geklonte Stimme „audio_pmm“ von HeyGen:

Feld von create_speechWert
voiceIdb088805628184836963fa5d2881bb23b
engineelevenlabs
settings{"model_id": "eleven_v4"}
languagees

Wenn die Person, die das Video bestellt, eine andere Stimme wünscht, suche sie mit mcp__heygen__list_voices und bestätige sie vor der Generierung.

Ablauf

1. MD lesen und Stücke vorschlagen

Die gesamte MD-Datei lesen. Den Verlauf des Detailvideos (alle Erkenntnisse in Reihenfolge) und eine Erkenntnis pro Kurzversion (die stärkste zuerst) festlegen. Die Liste der Stücke vor dem Schreiben der Storyboards anzeigen.

2. Storyboards → Freigabe

Eine Szene pro Idee. Das Detailvideo: 8 bis 16 Szenen; eine Kurzversion: 4 bis 7 Szenen, mit einem Aufhänger (destacado) in der ersten. Vollständiges Beispiel: motor/ejemplos/storyboard-desalacion-16x9.json.

{"id": "03-sesiones", "tipo": "barras", "kicker": "Sitzungen pro Fall", "titulo": "Wo am meisten gesprochen wurde",
 "items": [{"etiqueta": "Caleta Chañaral", "valor": 6}], "destacar": 0, "nota": "Quelle…",
 "subtitulo": "Chañaral de Aceituno war der Fall mit den meisten Sitzungen.",
 "voz": "Chañaral de Aceituno war der Fall mit den meisten Sitzungen."}

Kopfzeile des Storyboards: titulo, serie (was neben „Rizoma ·“ oben steht), formato ("16:9" für das Detailvideo, "9:16" für die Kurzfassungen), fuente_md und optional musica (siehe Schritt 5).

Szenentypen (alle akzeptieren kicker, tono: "oscuro" und lluvia: true):

TypFelderVerwendungszweck
portadatitulo, bajadaDetailvideo eröffnen
cifrastitulo, items[{valor, prefijo?, sufijo?, texto, detalle?}] (1 bis 3), destacarZahlen, die hochzählen
barrastitulo, items[{etiqueta, valor, rotulo?}] (bis 8), destacar, notaMengen vergleichen
hitofecha, etiqueta, titulo, texto, progreso{i, n}Ein Ereignis in einer Zeitleiste
listatitulo, items[{marca?, texto, alerta?}] (bis 6)Argumente oder Schritte
citafecha, texto, quien, notaWas jemand gesagt hat
destacadotexto, bajadaDer Satz, den man sich merken muss; der Aufhänger einer Kurzversion
cierrebajada, url, fuenteMarke und Quelle

Redaktionelle Regeln:

  • Nur Fakten aus der MD. Was die MD als zweifelhaft markiert, bleibt außen vor oder wird als solches benannt.
  • voz ist das, was gesprochen wird: Zahlen, Jahre, Prozentangaben und Abkürzungen werden ausgeschrieben (texto_voz.py lehnt Ziffern ab). subtitulo ist das, was zu sehen ist, mit Ziffern. texto ist der Text auf dem Bildschirm bei hito, cita und destacado.
  • Kurze Sätze, neutrales chilenisches Spanisch, ~2,9 Wörter pro Sekunde. Eine Kurzversion überschreitet nicht ~140 Wörter Sprachausgabe.
  • Was aus einer automatischen Transkription stammt, wird als Paraphrase markiert (nota).
  • Was veröffentlicht wird, nennt keine Kunden oder internen Plattformen. Der Schluss enthält die Quelle.

Jedes Storyboard als Tabelle anzeigen (Szene · Typ · was zu sehen · was gesprochen wird) und auf die Genehmigung warten: jede Vertonung verbraucht Stimmkontingent.

3. Stimme (ein Aufruf pro Stück)

python3 $MOTOR/texto_voz.py <stueck>

Den ausgegebenen Text (die Stimme jeder Szene verbunden mit <break time="1.2s"/>) an mcp__heygen__create_speech mit der ausgewählten Stimme übergeben. Mit der zurückgegebenen audio_url:

python3 $MOTOR/bajar_voz.py <stueck> "<audio_url>"

Das Audio herunterladen und anhand der Pausen szenenweise zuschneiden. Falls gemeldet wird, dass Pausen fehlen, mit niedrigerem Schwellwert erneut über das bereits heruntergeladene Audio laufen: python3 $MOTOR/bajar_voz.py <stueck> <stueck>/voz/narracion.wav --pausa 0.7 (in der Praxis kürzt ElevenLabs manchmal eine Pause etwas). Falls es dennoch fehlschlägt, hat die Stimme einen <break> nicht respektiert: vor der Neugenerierung nachfragen. Nie die Generierung allein nach einem Fehler wiederholen.

4. Bauen und rendern

bash $MOTOR/producir.sh <stueck>                                   # komplettes Video
bash $MOTOR/producir.sh <stueck> --hasta 15 --salida test.mp4    # kurzer Test

Jede Szene dauert so lange wie ihre Sprachausgabe. Das MP4 liegt unter <stueck>/salida/video.mp4; die Dauer entspricht in etwa der Videolänge.

5. Hintergrundmusik

Automatisch: Ambient-Klangteppich mit ffmpeg synthetisiert (keine Rechte Dritter), 14 dB unter der Stimme, mit sanftem Ducking und Endmischung auf -16 LUFS. Im Storyboard: "musica": {"bajo_voz_db": 18} senkt sie ab; {"archivo": "track.mp3"} verwendet einen eigenen Track (nur lizenzfrei, mit Lizenzvermerk); false schaltet sie aus.

6. Kurzfassungen

Nach Genehmigung des Detailvideos jede Kurzfassung als separates Stück anlegen (formato: "9:16"), dabei Szenen des Detailvideos wiederverwenden: Aufhänger → 2 bis 4 Datenszenen → Schluss. Gleicher Schritt 3 (ein Sprachaufruf pro Stück) und Schritt 4.

7. Prüfung und Abgabe

  • 4 bis 8 Einzelbilder mit ffmpeg extrahieren und prüfen: dass der Untertitel kein Datum verdeckt, kein Text aus dem Rahmen ragt und keine Szene leer bleibt.
  • publicacion.md pro Stück schreiben: Titel (≤ 60 Zeichen), Beschreibung mit Quelle, 3 bis 5 Hashtags, Alternativtext und was vor der Veröffentlichung noch zu überprüfen ist.
  • Die MP4s mit klaren Namen nach ~/Downloads kopieren (Video_Thema.mp4, Short_Nr_Thema.mp4). Audio und MP4s kommen nicht ins Git (**/voz/*.wav, **/salida/).

Von einem eigenen animierten HTML

Falls bereits ein HTML mit window.seek(t) und Szenen mit festen Zeiten existiert, wird guion.json von Hand geschrieben (html: [a, b] pro Segment) und preparar.py + render.mjs ausgeführt. Für manuell erstellte Kurzfassungen: motor/plantillas/motor-vertical.js.

Format und sichere Zonen

  • 16:9: 1920×1080, Untertitel 34 px unten, Zeilen bis zu 58 Zeichen.
  • 9:16: 1080×1920, Untertitel 54 px bei 400 px Abstand vom unteren Rand, Zeilen bis zu 34 Zeichen; Inhalt zwischen y=400 und y=1380 (oben/unten liegen die Buttons der jeweiligen Plattform).
  • Kein Untertitel endet mit „que“, „las“, „por“ und Ähnlichem.

Bekannte Fehler

  • Kein Netzwerk: Googles Schriften laden nicht und das Rendering fällt auf Arial zurück.
  • ffmpeg ohne libass (Homebrew): deshalb werden Untertitel innerhalb der Seite gezeichnet.
  • Unbekannter Szenentyp: das Video bleibt weiß; tipo prüfen.

Verwandte Skills