TikTok-ähnlichen Text zu einem Video hinzufügen
Die Dateien dieser Skill befinden sich in ${CLAUDE_PLUGIN_ROOT}/skills/add-text/:
scripts/add_text.py: verwende dies. Es erledigt die gesamte Arbeit mit zwei Befehlen.scripts/caption_match.py(Erkennung / Anpassung / Prüfung) undscripts/tiktok_text.py(zeichnet + brennt ein): die Engine.scripts/setup_check.py: Ersteinrichtung und Überprüfung.fonts/: TikTok Sans (Open Source, OFL Lizenz).
Die Stile wurden an echten In-App-TikToks gemessen. Gib Text auf keine andere Weise wieder (ffmpeg drawtext, eine einfache Schriftart usw.). Es wird nicht übereinstimmen.
Schritt 0: Einrichtung (jedes Mal; dauert nach einmaligem Durchlauf ca. 2 Sekunden)
Führe Folgendes mit dem verfügbaren python / python3 aus:
python "${CLAUDE_PLUGIN_ROOT}/skills/add-text/scripts/setup_check.py" "${CLAUDE_PLUGIN_DATA}"
-
Beim ersten Durchlauf wird ein privates Python-Umfeld im Plugin-Datenordner erstellt und die Pakete installiert (ca. 1–2 Minuten). Informiere den Benutzer darüber, was passiert.
-
Die letzte Zeile ist
READY PY=<Pfad>. Verwende diesen<Pfad>als Python für jeden nachfolgenden Befehl (im Folgenden alsPYgeschrieben). -
NOT READY: ...gibt an, was fehlt und die genaue Lösung:- ffmpeg: Frage den Benutzer, führe dann den angegebenen Installationsbefehl aus (
wingetunter Windows,brewunter Mac,aptunter Linux). Unter Windows ist möglicherweise ein neues Terminal erforderlich, bevor ffmpeg gefunden wird. Falls ja, teile dem Benutzer mit, dass er Claude Code neu starten soll. - Kein Python 3.9+: Der Benutzer muss es installieren (python.org) und Claude Code neu starten.
Dann führe die Einrichtung erneut aus.
- ffmpeg: Frage den Benutzer, führe dann den angegebenen Installationsbefehl aus (
-
Kein
pythonBefehl? Probierepython3, oder unter Windowspy.
In den folgenden Befehlen gilt S = ${CLAUDE_PLUGIN_ROOT}/skills/add-text/scripts. Setze jeden Pfad in Anführungszeichen. Verwende in PowerShell vor jedem Befehl & (z. B. & "PY" "S/add_text.py" ...).
Regeln
- Die Ausgabe behält die Größe und Bildrate des Eingabevideos bei (TikTok: 1080×1920). Speichere die Textversion neben dem Original als
<Name> (MIT TEXT).mp4und überschreibe niemals das Original. - Inhalt: TikTok bestraft irreführende Behauptungen. Vermeide absolute Ergebnisversprechen („geheilt“, „in 3 Tagen behoben“, „garantiert“). Wenn der Aufhänger einer Referenz eine Behauptung aufstellt, passe den Wortlaut an (gleicher Rhythmus und gleiche Zeilenanzahl) und teile dem Benutzer mit, was du geändert hast und warum. Frage bei Unsicherheit nach.
- Der eingegebene Text muss dem entsprechen, was ein iPhone produzieren würde:
…nicht...- Geschweifte Anführungszeichen
’„ “, wenn die Referenz sie verwendet - Emoji als echte Emoji-Zeichen
- Führende und nachfolgende Leerzeichen sind wichtig: TikTok zentriert jede Zeile inklusive ihrer Leerzeichen.
fitfügt sie für dich hinzu.
A. Text eines Referenz-TikToks kopieren
Verwende einen Arbeitsordner neben dem Video des Benutzers, z. B. text work/.
- Start:
"PY" "S/add_text.py" start "REF.mp4" "WORKDIR"- Gibt jede Bildunterschrift aus: Start/Ende (frame-genau, Referenz-Zeitleiste), Stil, Füllfarbe und Box.
- Schreibt
WORKDIR/captions.jsonmit"text": "??"und einen herangezoomten AusschnittWORKDIR/caption_<n>.pngvon jeder. - Überspringt TikToks eigenen „TikTok @user“-Wasserzeichen.
- Muss die Referenz zuerst heruntergeladen werden?
yt-dlpfunktioniert, wenn es installiert ist. Sonst bitte den Benutzer um die Datei.
- Text ausfüllen. Lies jedes Ausschnittsbild und ersetze jedes
"??".- Lasse die anderen Felder unverändert. Die
_-Felder (_ref_t,_bbox_1080, ...) werden vonfinishverwendet. - Zeilenumbrüche sind
\n, und Emoji sind Zeichen. Kümmere dich nicht um führende oder nachfolgende Leerzeichen. - Wenn zwei Zeilen etwa doppelt so weit voneinander entfernt sind wie normal, handelt es sich um eine Leerzeile:
"A\n\nB". - Zwei separate Textboxen in einer Bildunterschrift (sehr unterschiedliche Größen, eine große Lücke oder nicht auf derselben x-Achse zentriert): Teile sie in zwei Einträge mit demselben Start/Ende,
_ref_tund Stil auf. Gib jeder ihre eigene_bbox_1080: die Vereinigung ihrer Zeilen aus_lines_1080(erkennen gibt die Box und Höhe jeder Zeile aus), damitfitden richtigen Text betrachtet. Beispiel: Zeilen 1:[346,1126,735,1167] und 2+3 →[346,1126,735,1167]und[204,1272,887,1389]. - Kam
stylealscustom/custom_outlinezurück? Das ist eine andere Schriftart, eine Hintergrundbox oder eine andere Farbe, die dieses Tool nicht hat. Informiere den Benutzer und wähle den ähnlichsten Stil. Rate nicht stillschweigend. - Zeitliche Anpassung hier, wenn die Schnitte des Benutzers von der Referenz abweichen: Bearbeite
start/end(Sekunden, Ende exklusiv). Fit und Check betrachten die Referenz weiterhin zu ihrer eigenen Zeit (_ref_t).
- Lasse die anderen Felder unverändert. Die
- Abschluss:
"PY" "S/add_text.py" finish "REF.mp4" "VIDEO.mp4" "WORKDIR"- Passt Größe, Position und Leerzeichen im Json an und schreibt
WORKDIR/fit_<n>.png(Referenz oben, unsere unten). - Beendet jede Bildunterschrift, die über das Video hinausläuft, an der Videolänge.
- Brennt
VIDEO (MIT TEXT).mp4neben dem Video ein (bzw.(ohne Text)→(MIT TEXT)). Ein 4. Argument wählt einen anderen Ausgabedateinamen. - Überprüft das Ergebnis und schreibt
WORKDIR/check.jpg(Referenz links, unsere rechts). - Gibt eine ZUSAMMENFASSUNG: BESTANDEN oder ÜBERPRÜFUNG mit den Gründen aus.
- Passt Größe, Position und Leerzeichen im Json an und schreibt
- Sieh dir
check.jpgan und zeige es dem Benutzer, bevor du sagst, dass es fertig ist.- Geringe Überschneidung mit „Kanten stimmen mit der Referenz innerhalb von N px überein“: Größe und Position sind korrekt. Komprimierter Gold- oder Gelbtext erreicht oft 0,45–0,7, selbst wenn er korrekt ist. Bestätige einfach den Wortlaut durch einen Blick.
- Geringe Überschneidung mit „Kanten um N px abweichend“: Meist ein Tippfehler, ein fehlender Zeilenumbruch, der falsche Stil oder eine falsche
_bbox_1080nach einer Aufteilung. Korrigiere das Json und führe den Abschluss erneut aus. - Um die manuell angepasste Größe/y/x beizubehalten, füge
--no-fithinzu.
B. Neue Bildunterschriften (keine Referenz)
Schreibe ein captions.json:
[{"text": "Zeile eins\nZeile zwei", "start": 0, "end": 3.5, "style": "outline", "size": 70, "y": 0.5}]
Führe dann "PY" "S/add_text.py" new "VIDEO.mp4" "WORKDIR/captions.json" aus. Es brennt den Text ein und schreibt preview.jpg (ein Frame pro Bildunterschrift) neben das Json. Zeige es dem Benutzer.
- style:
classic(einfarbig weiß),outline(weiß + schwarze Kontur),yellow(hellgelb),yellow_gold(goldgelb),lilac(lila). - size: etwa 50 (klein) bis 85 (groß). Typische Aufhänger sind 54–77.
- y: 0,4–0,5 = Bildschirmmitte, 0,65 = unteres Drittel. Halte Abstand zu den unteren 20 % (TikToks Untertitel/UI) und dem rechten Rand (Schaltflächen).
- Optional:
x(horizontale Mitte, Standard 0,5),weight,color(„#RRGGBB“ für eine benutzerdefinierte Füllung). - Brich Zeilen dort um, wo eine Person auf einem Telefon tippen würde. Zeilen haben bei Größe 70 etwa 20–28 Zeichen.
Schneller Blick ohne Videorendering: "PY" "S/tiktok_text.py" --png "Text\nmehr" out.png (classic Stil).
Fallstricke
- Typische Zeiten: Start etwa 25 s, Abschluss 1–3 Minuten je nach Anzahl der Bildunterschriften (Bildunterschriften mit Kontur passen am langsamsten),
--no-fitetwa 40 s. - Emoji: Jedes neue wird einmal heruntergeladen (Apple-Set, Emoji-Daten-CDN auf jsDelivr), daher ist beim ersten Mal eine Internetverbindung erforderlich. Wenn ein Download fehlschlägt, löst das Skript einen Fehler aus. Informiere den Benutzer, anstatt das Emoji wegzulassen.
- Kein Schatten, absichtlich: Echter TikTok-Text hat keinen. Die „sauberere“ Optik neben der komprimierten Referenz ist normal und verschwindet, sobald TikTok den Upload neu kodiert.
- Bei nur 2 Zeilen kann der Leerzeichen-Korrektor von fit nicht erkennen, welche Zeile nicht zentriert ist. Wenn
fit_<n>.pngeine um etwa 5 px verschobene Zeile zeigt und die Überschneidung unter etwa 0,6 bleibt, versuche, selbst ein führendes oder nachfolgendes Leerzeichen in jede Zeile einzufügen, und führe den Vorgang erneut aus. - Windows: Wenn Emoji in anderen Python-Snippets seltsam gedruckt werden, setze
PYTHONIOENCODING=utf-8. Diese Skripte handhaben das.