Communitygithub.com

legenda-simples

Legenda „simples“ für vertikale 9x16-Videos in Premiere Pro – kurze Sätze (3–4 Wörter, bei schneller Passage bis zu 5), einzeilig, weiß mit weichem Schatten, Montserrat Bold, nur Satzanfang groß, KEINE Einblend-Animation (erscheint vollständig und verschwindet in hartem Schnitt), synchron mit der Sprache und innerhalb des sicheren Bereichs. Enthält die Pipeline für dynamische Schnitte (entfernt Pausen/Atemgeräusche und wechselt Zoom) im Podcast-Stil.

Was ist legenda-simples?

Diese AI-Skill automatisiert die Erstellung von einfachen, gut lesbaren Untertiteln für vertikale 9x16-Videos (z. B. für Instagram Reels, TikTok, YouTube Shorts) direkt in Adobe Premiere Pro. Sie analysiert eine Transkription des Videos, zerlegt den Text in kurze, sprechsynchrone Phrasen (3–4 Wörter, maximal 5 bei schneller Rede) und generiert transparente PNG-Bilder mit weißem, fettem Text (Montserrat Bold) und weichem Schatten. Die Untertitel erscheinen ohne Einblend-Animation genau zu Beginn des gesprochenen Wortes und verschwinden mit einem harten Schnitt – das ergibt einen sauberen, professionellen Look, wie man ihn von Podcasts kennt. Neben der reinen Untertitelung bietet die Skill auch eine Option zur vollständigen dynamischen Bearbeitung: Sie entfernt Pausen und Atemgeräusche, unterteilt das Material in kurze Clips und fügt automatisch Zooms (100 % / 116 %) hinzu, um das Video visuell aufzuwerten. Die Skill wird über die Kommandozeile (Python + ExtendScript) gesteuert und arbeitet mit Premiere Pro zusammen, entweder über MCP oder eine CEP-Bridge. Sie ist ideal für Creator, die schnell hochwertige, barrierefreie Untertitel ohne manuelle Nacharbeit benötigen. Die Skill ist Open Source und auf GitHub unter `legenda-simples` verfügbar.

Funktioniert mit~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/gbrand-lab/premiere-legendas-skills/tree/HEAD/skills/legenda-simples

In Ihrer bevorzugten KI fragen

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

Dokumentation

Legenda Simples – kurze Sätze, keine Animation, im Takt der Sprache

Ein Satz nach dem anderen, weißer, fetter Text, klein geschrieben mit großem Anfang (wie transkribiert), ohne Hintergrund, weicher Schatten, im unteren Drittel, ohne Rot und ohne Einblend-Animation. Z.B.: „O problema é que“ / „sem prática“.

Voraussetzungen

  • Premiere Pro (getestet mit 2027/27.0; ExtendScript) und Python 3.9+ mit pip install -r requirements.txt (Pillow).
  • Eine Möglichkeit, ExtendScript in Premiere auszuführen (MCP mit execute_extendscript oder die CEP-Bridge via Datei) – siehe docs/PREMIERE-BRIDGE.md im Stammverzeichnis des Repositorys.
  • Schriftart Montserrat Bold installiert (kostenlos, Google Fonts). Falls nicht gefunden, setzen Sie CAPTION_FONT_DIR oder legen Sie die .ttf in fonts/ innerhalb der Skill.
  • Der Standardmodus (PNG) benötigt keine .mogrt. Nur die .mogrt-Alternative benötigt assets/Simple_Text_WbW.mogrt (siehe assets/LEIA-ME.md).

Parameter (Quelle der Wahrheit: style.json und RULES in scripts/plan_phrases.py)

  • 9x16 (1080x1920). Montserrat Bold 66 px, weiß, weicher Schatten (Blur 6, dy 4, 55 %). y_center 0,70.
  • Keine Einblend-Animation: Jeder Satz ist ein transparentes PNG 1080x1920 (make_stills.py), das im ersten Frame vollständig erscheint und in einem harten Schnitt verschwindet. Die .mogrt Wort-für-Wort ist nicht geeignet: Die Animation ist fest eingebaut (es gibt nur „Out Animation“ und „Anim Speed“ 50–500, keine „In Animation“). Nachteil des PNG: Der Text ist in Premiere nicht editierbar – zur Korrektur bearbeiten Sie blocks.json und generieren neu (Sekunden).
  • Satz von 3–4 Wörtern, per dynamischer Programmierung: Vermeidet 1–2 einzelne Wörter, endet nicht mit „o/de/que…“, bevorzugt Schnitt an Komma oder Pause; ein Komma schneidet nur bei mindestens 3 Wörtern. Bei schneller Sprache (Satz < 0,9 s) werden bis zu 5 Wörter zusammengefasst, ohne das Satzende (. ? !) zu überschreiten.
  • Sicherer Bereich: Nichts außerhalb des Title Safe von Premiere (80 % x 80 %); nutzbare Breite 78 % (842 px bei 1080), Block innerhalb von 10 %–90 % der Höhe. Der Text wird bis zu min_scale verkleinert; passt er nicht, wird in 2 Zeilen umgebrochen; die Größe wird ABGERUNDET. Überprüfung mit check_margins.py (muss fora da margem: 0 ergeben).
  • Auslieferung: Direkt in der angegebenen Sequenz bearbeiten (ohne Kopie), es sei denn, der Benutzer wünscht eine Kopie.

Anzeigedauer = Sprechdauer (Modus sync, Standard)

  • Der Satz beginnt mit dem ersten gesprochenen Wort (keine Verzögerung) und endet mit dem letzten Wort + tail 0,3 s, verlängert auf min_dur 0,8 s nur wenn danach Stille folgt (niemals in den nächsten Satz hinein). Ein Satz, der kürzer als 0,5 s wäre, wird an den vorherigen angehängt, wenn dieser unter 5 Wörter bleibt und keinen Satzabschluss bildet.
  • Projektnotiz: Es gibt auch den Modus schedule_mode: "lag" (Lesezeit: jeder Satz bleibt mindestens ~0,9 s; ist die Sprache schneller, erscheint der nächste Satz später, bis zu 0,9 s). Dadurch löst sich die Untertitelung von der Stimme (Beginn und Ende stimmen nicht mehr überein, die Dauer variiert unabhängig vom Gesprochenen). Daher ist der Standard sync. Verwenden Sie lag nur, wenn der Benutzer eine langsamere Lesbarkeit wünscht (--config mit {"schedule_mode":"lag"}).
  • Ehrliche Grenze: Sehr dichte Sprache (~3,6 Wörter/s, Spitzen bis 6/s) führt zu einigen sehr kurzen Sätzen (0,36–0,8 s). Das liegt an der Sprache, nicht an der Untertitelung.

Option A – Nur Untertitel in einer bereits geschnittenen Sequenz

  1. Bestätigen Sie Projekt/Sequenz mit dem Benutzer und machen Sie sie aktiv.
  2. Transkription: JSON exportiert aus Premiere (Text > Transkription > … > Exportieren; liegt in Dokumente als ".json").
  3. PYTHONIOENCODING=utf-8 python -I <skill>/scripts/plan_phrases.py <transkription.json> <ordner>/blocks.json; zeigen Sie die Liste und die Wörter [überprüfen].
  4. python -I <skill>/scripts/make_stills.py <ordner>/blocks.json <ordner>/png --track 1 (erzeugt PNGs + JSX; verwenden Sie bei jeder Generierung einen NEUEN Ordner – Premiere sperrt bereits importierte PNGs) und python -I <skill>/scripts/check_margins.py <ordner>/png/stills_clips.json.
  5. Führen Sie in Premiere bei aktiver Sequenz stills_import.jsx aus (importiert die PNGs in ein Bin) und dann nacheinander stills_01.jsx... (ok=20/20). Die Timings liegen bereits im Frame-Raster (--fps, Standard 30).

Option B – Vollständige dynamische Bearbeitung (Schnitte + Zoom + Untertitel)

  1. Importieren Sie das Video in das Projekt und haben Sie die Transkription aus Premiere.
  2. python -I <skill>/scripts/plan_edit.py <transkription.json> <ordner>: Entfernt Pausen/Atemgeräusche > 0,3 s und Stockungen (leerer Text), erstellt Unterclips von ~3 s bei Satzzeichen, wechselt Zoom 100 %/116 % und schreibt clips.json + blocks.json bereits in der geschnittenen Zeit. Anpassungen oben im Skript (GAP, ZOOM_ALT, SUB_MIN/MAX).
  3. python -I <skill>/scripts/build_cut_script.py <ordner>/clips.json <ordner> --item <Dateiname im Projekt> --name "<Name> bearbeitet 9x16" -> montar.jsx; führen Sie es in Premiere aus (die Originalsequenz bleibt unberührt).
  4. Untertitel: Schritte 4 und 5 von Option A mit dem blocks.json aus diesem Ordner.
  5. Speichern Sie das Projekt und liefern Sie es mit einer Liste aus: Schnitte, Zoom, fragwürdige Wörter und was nicht gesehen wurde.

Alternative .mogrt (editierbarer Text, MIT Wort-für-Wort-Animation)

python -I <skill>/scripts/make_graphics_script.py <ordner>/blocks.json <ordner>/lote.js --track 1 (verwendet assets/Simple_Text_WbW.mogrt; Anim Speed in style.json) und führen Sie die Batches lote_NN.js aus. Verwenden Sie dies nur, wenn der Benutzer die Animation akzeptiert.

Premiere-Tipps (aus der Praxis)

  • importFiles benötigt einen absoluten Pfad (new File(...).fsName); createNewSequenceFromClips erbt 1080x1920 von einem vertikalen Video.
  • Render: app.encoder.encodeSequence(...) + startBatch() wird möglicherweise nicht in der Media Encoder-Warteschlange angezeigt. Was funktioniert hat: seq.exportAsMediaDirect(ausgabe, preset, app.encoder.ENCODE_ENTIRE) (rendert innerhalb von Premiere, ~5 Min für 90 s). Preset: <Premiere-Ordner>/MediaIO/systempresets/.../H264 Match Source - High bitrate.epr (mit glob suchen; liegt innerhalb der Installation). Das Preset „MooV“ erzeugt PCM-Audio in .mov/.mp4; für die Veröffentlichung neu verpacken mit ffmpeg -c:v copy -c:a aac.
  • Frame exportieren (exportFramePNG via QE) kann fehlschlagen; die PNGs der Untertitel machen dies überflüssig: Was im PNG zu sehen ist, kommt auch ins Video.

Schnellanpassungen

Gewünschte ÄnderungStelle in...
Schriftart/Größe/Position/Schattenstyle.json (font_path, mogrt_font, mogrt_size, y_center, shadow_*)
Längere Anzeigedauermin_dur, tail in RULES (bei sync nur verlängert, wenn Stille folgt)
3 Wörter statt 4{"max_words": 3} via --config
Mehr/weniger Schnitte und ZoomGAP, ZOOM_ALT, SUB_MIN/SUB_MAX in plan_edit.py

Bekannte Einschränkungen

  • PNG ist kein editierbarer Text (Korrektur = blocks.json bearbeiten und neu generieren).
  • Die Transkription von Premiere kann Fehler enthalten; blocks.json vor dem Anwenden überprüfen.
  • Die Referenzschriftart scheint Proxima Nova Bold (schmaler) zu sein; verwendet wird Montserrat Bold (frei).

Individual skills in this repo

This repo contains 1 individual skill — each has its own dedicated page.

Verwandte Skills