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_extendscriptoder die CEP-Bridge via Datei) – siehedocs/PREMIERE-BRIDGE.mdim Stammverzeichnis des Repositorys. - Schriftart Montserrat Bold installiert (kostenlos, Google Fonts). Falls nicht gefunden, setzen Sie
CAPTION_FONT_DIRoder legen Sie die.ttfinfonts/innerhalb der Skill. - Der Standardmodus (PNG) benötigt keine
.mogrt. Nur die.mogrt-Alternative benötigtassets/Simple_Text_WbW.mogrt(sieheassets/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_center0,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.mogrtWort-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 Sieblocks.jsonund 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_scaleverkleinert; passt er nicht, wird in 2 Zeilen umgebrochen; die Größe wird ABGERUNDET. Überprüfung mitcheck_margins.py(mussfora da margem: 0ergeben). - 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 +
tail0,3 s, verlängert aufmin_dur0,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 Standardsync. Verwenden Sielagnur, wenn der Benutzer eine langsamere Lesbarkeit wünscht (--configmit{"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
- Bestätigen Sie Projekt/Sequenz mit dem Benutzer und machen Sie sie aktiv.
- Transkription: JSON exportiert aus Premiere (Text > Transkription > … > Exportieren; liegt in Dokumente als ".json").
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].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) undpython -I <skill>/scripts/check_margins.py <ordner>/png/stills_clips.json.- Führen Sie in Premiere bei aktiver Sequenz
stills_import.jsxaus (importiert die PNGs in ein Bin) und dann nacheinanderstills_01.jsx...(ok=20/20). Die Timings liegen bereits im Frame-Raster (--fps, Standard 30).
Option B – Vollständige dynamische Bearbeitung (Schnitte + Zoom + Untertitel)
- Importieren Sie das Video in das Projekt und haben Sie die Transkription aus Premiere.
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 schreibtclips.json+blocks.jsonbereits in der geschnittenen Zeit. Anpassungen oben im Skript (GAP,ZOOM_ALT,SUB_MIN/MAX).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).- Untertitel: Schritte 4 und 5 von Option A mit dem
blocks.jsonaus diesem Ordner. - 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)
importFilesbenötigt einen absoluten Pfad (new File(...).fsName);createNewSequenceFromClipserbt 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 mitffmpeg -c:v copy -c:a aac. - Frame exportieren (
exportFramePNGvia QE) kann fehlschlagen; die PNGs der Untertitel machen dies überflüssig: Was im PNG zu sehen ist, kommt auch ins Video.
Schnellanpassungen
| Gewünschte Änderung | Stelle in... |
|---|---|
| Schriftart/Größe/Position/Schatten | style.json (font_path, mogrt_font, mogrt_size, y_center, shadow_*) |
| Längere Anzeigedauer | min_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 Zoom | GAP, ZOOM_ALT, SUB_MIN/SUB_MAX in plan_edit.py |
Bekannte Einschränkungen
- PNG ist kein editierbarer Text (Korrektur =
blocks.jsonbearbeiten und neu generieren). - Die Transkription von Premiere kann Fehler enthalten;
blocks.jsonvor dem Anwenden überprüfen. - Die Referenzschriftart scheint Proxima Nova Bold (schmaler) zu sein; verwendet wird Montserrat Bold (frei).