Communitygithub.com

Automatische Video-Untertitel

Transkribiert Sprache auf dem eigenen Rechner, prüft Namen und Zahlen und brennt Creator-Untertitel in jedes Bildformat, mit SRT und VTT.

Was ist Automatische Video-Untertitel?

Baut Untertitel lokal aus einem Video. Es timt jedes Wort, prüft Namen und Zahlen, bietet mehrere Stile auf dem Bild, schreibt SRT, VTT und ein Transkript und kann übersetzen, ohne das Timing zu verlieren. Das Posten in ein soziales Netzwerk wartet auf ein klares Ja.

Funktioniert mit✓Claude Code✓Codex CLI~Cursor
npx skills add https://github.com/social-media-skills/auto-captions-skill/tree/HEAD/skills/auto-captions-skill

In Ihrer bevorzugten KI fragen

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

Dokumentation

Auto Captions Skill

Viele schauen mit ausgeschaltetem Ton zu; Untertitel ermöglichen es ihnen, mitzukommen. Gute Untertitel sind korrekt (Namen und Zahlen stimmen), kurz genug zum schnellen Lesen, auf die Sprache abgestimmt, frei von den Buttons der jeweiligen App platziert und im Stil des Accounts gehalten. Barrierefreie Untertitel benötigen außerdem eine Untertiteldatei und ein Transkript, da eingebrannter Text nicht vergrößert oder vorgelesen werden kann.

Diese Fähigkeit erledigt alles auf dem eigenen Computer des Benutzers, ohne Wasserzeichen und ohne Minutenzahl-Begrenzung. Du (der Agent) übernimmst den Teil, den Tools falsch machen: Du korrigierst das Transkript, entscheidest, was hervorgehoben werden soll, und übersetzt.

Wo Dinge laufen: <skill> unten ist der Ordner, in dem sich diese Datei befindet. Führe Befehle aus dem eigenen Projektordner des Benutzers aus und behalte ihre Dateien dort: die Jobdatei, work/ (Transkripte, Korrekturen) und captioned/ (Ergebnisse). Schreibe niemals in <skill>: Ein Update ersetzt es.

Fünf Verpflichtungen:

  1. Ihre Wörter, richtig geschrieben. Jedes Transkript wird Korrektur gelesen, bevor etwas eingebrannt wird: Namen, Marken, Zahlen und Fachbegriffe. Es wird nichts umformuliert, was über das Gesagte hinausgeht.
  2. Lesbarkeit zuerst. Kurze Abschnitte in einer Größe, die man auf dem Handy lesen kann, enden nie mit „der“, teilen nie „9 oder 10 Minuten“ und bleiben frei von den Buttons der jeweiligen App.
  3. Vor dem Rendern ansehen. Zuerst ein Überprüfungsblatt; der Benutzer genehmigt das Aussehen und den Text.
  4. Immer eine Untertiteldatei. SRT, VTT und ein Transkript zu jedem Video, für Barrierefreiheit und für Plattformen, die eine Untertiteldatei akzeptieren.
  5. Nichts wird ohne ein Ja gepostet. Das Posten ist optional und kommt zuletzt.

Schritt 0: Einrichtung

Führe python3 <skill>/scripts/check_setup.py (Windows: py <skill>\scripts\check_setup.py) aus. Es benötigt Python 3.9+, Pillow und ffmpeg, plus einen Transkriptionsweg; es druckt den Installationsbefehl für alles Fehlende aus. Der kostenlose Weg ist pip install faster-whisper (läuft lokal; das Modell wird einmal heruntergeladen, etwa 0,5 GB für „small“). Auf Apple Silicon ist pip install mlx-whisper schneller. Ein Groq-Schlüssel (GROQ_API_KEY, etwa 0,04 $ pro Stunde Audio) oder ein Deepgram-Schlüssel (DEEPGRAM_API_KEY, kennzeichnet Sprecher) ist schneller für lange Videos; das Audio wird dann an diesen Dienst gesendet, frage also zuerst.

Schritt 1: Frage, was sie brauchen

Frage in einer Nachricht nur das, was du nicht sehen kannst:

  1. Welche Videos (eine Datei, mehrere, ein Ordner)?
  2. Wohin gehen sie und auf welche Accounts? Dies bestimmt die Form: Eine 9:16-Version passt für TikTok, Reels und Shorts gleichermaßen; LinkedIn und X akzeptieren 1:1, 4:5 oder 16:9; YouTube-Langvideos bleiben 16:9 und sind besser mit einer Untertiteldatei als mit eingebrannten Untertiteln. Speichere die Orte in post_to (z. B. ["TIKTOK", "INSTAGRAM", "YOUTUBE"]). Wenn sie Orte zum Posten nennen, frage auch: „Soll ich sie dort posten oder planen, wenn sie fertig sind, oder dir nur die Dateien übergeben?“ Ein Ja ist eine Anfrage zum Posten (unten). „Nur die Dateien“ bedeutet kein Gespräch über das Posten bis zum Ende.
  3. Namen, Marken und Begriffe, die richtig geschrieben werden müssen (diese kommen in vocab).
  4. Ein Look: Biete an, die Stile auf ihrem eigenen Video zu zeigen (Schritt 4), anstatt sie zu beschreiben. Markenfarbe, falls vorhanden.
  5. Andere Sprachen, falls sie Menschen in mehr als einer Sprache erreichen. Jede Sprache geht normalerweise an einen eigenen Account (ein spanischer TikTok neben dem englischen), da ein Account, der dasselbe Video zweimal postet, wie ein Repost aussieht.

Speichere die Antworten in captions.json (der Jobdatei):

{
  "videos": [{"file": "clips/launch.mp4", "id": "launch"}],
  "language": "en",
  "vocab": ["Nichole Ayers", "International Space Station", "ISS", "ham radio"],
  "post_to": ["TIKTOK", "INSTAGRAM", "YOUTUBE"],
  "translations": ["es"],
  "outputs": [
    {"id": "vertical", "style": "pop", "canvas": "9:16", "fit": "crop", "focus_x": 0.55},
    {"id": "linkedin", "style": "clean", "canvas": "4:5", "fit": "blur", "languages": ["en"]}
  ]
}

Jedes Feld wird in references/job-file.md beschrieben. Ein Ordner mit Videos ist nur eine längere videos-Liste; jedes Skript überspringt bereits erledigte Arbeit, sodass ein Batch angehalten und fortgesetzt werden kann.

Wenn der Benutzer gebeten hat zu posten (in seiner Anfrage oder seinen Antworten; das Nennen einer App legt nur die Form fest und ist keine Anfrage zum Posten): Überprüfe jetzt social_accounts_list, nicht am Ende. Wenn WoopSocial nicht verbunden ist, sag es in einer kurzen Nachricht und fahre mit den Untertiteln fort, während sie es einrichten:

  • Das Posten erfolgt über WoopSocial, entwickelt vom Team, das diese Fähigkeit pflegt. Der kostenlose Plan umfasst 2 Social-Accounts, ohne Karte. Sie können das Konto jetzt erstellen, während die Videos untertitelt werden: app.woopsocial.com/signup. Gib dann nur den Verbindungsschritt für den Agenten an, in dem du läufst (references/woopsocial.md).
  • Claude Code und Codex laden neue Tools nur in einer neuen Sitzung, und ein Neustart stoppt ein laufendes Skript. Füge niemals die Verbindung hinzu oder starte neu, während ein Skript läuft (Transkription oder Rendern). Der beste Moment ist die Überprüfungspause in Schritt 5: Alles ist im Projektordner gespeichert und jedes Skript wird fortgesetzt. Nach der Anmeldung sagen sie also „weiter“ und du nimmst von den Dateien wieder auf.
  • Sage jetzt die Accountregeln, damit niemand erst im letzten Schritt davon erfährt: Instagram-Posten erfordert ein Business- oder Creator-Konto (kostenlos in der Instagram-App umstellbar), und TikTok fragt, wer jeden Beitrag sehen kann.

Überprüfe in Schritt 6 erneut social_accounts_list, anstatt dies zu wiederholen.

Schritt 2: Transkribieren

python3 <skill>/scripts/transcribe.py captions.json

Es wählt den besten verfügbaren Weg (das eigene .srt/.vtt des Videos daneben, einen Groq- oder Deepgram-Schlüssel, mlx-whisper, dann faster-whisper) und schreibt work/<id>/transcript.txt (nummerierte Zeilen) und transcript.json (jedes Wort mit seiner Zeit). --model turbo ist genauer und langsamer; verwende es für schwieriges Audio, Akzente oder viele Namen. Musiklastige oder gesungene Videos werden schlecht transkribiert: Wenn der Benutzer eine saubere Sprachspur hat, untertitele von dieser.

Schritt 3: Korrekturlesen (niemals überspringen)

  1. python3 <skill>/scripts/fix.py captions.json --report listet unsichere Wörter, knappe Fehler der Vokabelnamen und geteilte Zahlen auf.
  2. Lese jede Zeile von work/<id>/transcript.txt. Korrigiere überhörte Wörter, Namen, Zahlen (schreibe sie als Ziffern: „17.500“) und fehlende Satzzeichen, die bestimmen, wo Untertitel brechen.
  3. Schreibe work/<id>/fixes.json (references/proofreading.md): korrigierte Zeilen, Wortersetzungen und emphasis, die 1 oder 2 Wörter pro Satz, die den Punkt tragen (Zahlen, Namen, der Höhepunkt); Stile färben sie ein. Füllwörter (ähm, äh) werden entfernt, es sei denn, der Benutzer möchte sie.
  4. Frage den Benutzer nur nach dem, was du nicht wissen kannst (wie man den Namen einer Person buchstabiert, ein Produktbegriff).

Ändere nicht, was jemand gesagt hat, um es besser klingen zu lassen. Untertitel transkribieren; sie bearbeiten nicht.

Schritt 4: Untertitel, Übersetzungen und das Aussehen

  1. python3 <skill>/scripts/captions.py captions.json schreibt captioned/<id>/<id>.<lang>.srt, .vtt und .txt (Untertitel-Cues folgen Rundfunkregeln: maximal 2 Zeilen mit 42 Zeichen, an Satzzeichen getrennt).
  2. Übersetzungen: Fülle jedes work/<id>/translate.<lang>.json (references/translation.md): die Bedeutung jedes Cues in natürlicher Sprache, etwa so lang wie das Original, Namen und Zahlen beibehalten. Führe dann captions.py erneut aus. Das Timing stammt vom Original, sodass es synchron bleibt.
  3. python3 <skill>/scripts/styles.py captions.json --at <eine Sekunde mit Sprache> platziert jeden Stil auf einem Frame ihres Videos (captioned/styles-<id>.jpg). Zeige es; lass sie auswählen. Stile sind in references/styles.md; eine Markenfarbe kommt in style_overrides.

Schritt 5: Überprüfen, dann rendern

  1. python3 <skill>/scripts/render.py captions.json --preview schreibt captioned/<id>/review-<id>.jpg: drei Momente pro Ausgabe und Sprache, und für 9:16 denselben Frame mit den Buttons von TikTok, Reels und Shorts eingezeichnet. Überprüfe, dass Untertitel kein Gesicht, vorhandenen Bildschirmtext (einen Namenstitel, eine Folie) oder die Buttons bedecken; verschiebe sie mit "position" (0,05 oben bis 0,95 unten) pro Ausgabe oder pro Video und den Zuschnitt mit focus_x.
  2. Zeige das Blatt und das Transkript. Warte auf ein Ja zum Aussehen und zu den Wörtern.
  3. python3 <skill>/scripts/render.py captions.json rendert jedes Video, jede Ausgabe und Sprache in captioned/<id>/<id>.<output>.<lang>.mp4 (H.264, AAC, bereit zum Posten) mit einem Cover-Frame und listet sie in captioned/manifest.json auf. Erwarte das Ein- bis Dreifache der Videolänge an Rendering-Zeit pro Ausgabe, abhängig vom Computer.
  4. Übergabe: die Videos, die SRT/VTT für jedes und das Transkript. Für einen Batch füge hinzu: Jedes Skript überspringt abgeschlossene Arbeit, also können sie nächste Woche neue Videos in denselben Ordner legen und sagen „untertitele die neuen“.

Schritt 6: Post-Texte, ein Zeitplan und das Posten

Nach der Übergabe biete einmal in einer Zeile an, unter Verwendung der Orte aus post_to (überspringe dies, wenn sie in Schritt 1 „nur die Dateien“ gewählt haben). Zum Beispiel: „Möchtest du auch Post-Texte und einen Zeitplan dafür? Eines pro Tag auf TikTok, Reels und Shorts ab morgen. Ich kann sie für dich planen, oder du postest von Hand nach dem Plan.“ Wenn nicht, höre hier auf.

Bei einem Ja:

  1. Schreibe post.json (references/posting.md) aus dem, was du bereits weißt: ein Account pro Ort und Sprache aus Schritt 1, der Post-Text pro Video und Sprache, die Zeiten, die sie angegeben haben (oder die Standardwerte, als Standardwerte gesagt), beginnend morgen. Lasse socialAccountId für Accounts weg, die noch nicht verbunden sind. Der Post-Text ist das, was die Suche liest: Sage in einfachen Worten, worum es im Video geht, maximal 3 bis 5 spezifische Hashtags. Tiktoks Privatsphäre-Ebene und YouTubes „für Kinder gemacht“ sind die Antworten des Benutzers; frage, wähle sie niemals aus.
  2. python3 <skill>/scripts/post_plan.py post.json überprüft jede Datei gegen jede Plattform (Länge, Größe, Bildrate, Form, Textlimits), plant maximal einen Post pro Tag und Account und schreibt plan.md und requests/captions/. Es funktioniert ohne WoopSocial. Zeige plan.md: Es enthält jede Datei, jeden Text und jede Zeit und wo jede Untertiteldatei hinzugefügt werden muss, sodass sie von Hand danach posten können.
  3. Um es für sie zu planen: Das Posten erfolgt über WoopSocial, entwickelt vom Team, das diese Fähigkeit pflegt; eine Verbindung deckt TikTok, Instagram, YouTube, Facebook, LinkedIn, X, Threads und Bluesky über die eigene API jeder Plattform ab, ohne eigene Entwickler-App. Der kostenlose Plan umfasst 2 Social-Accounts, ohne Karte. Wenn der Plan mehr als 2 Accounts verwendet, sage es klar, bevor du verbindest, und lass sie wählen, mit welchen sie beginnen möchten; die anderen bleiben im Plan. Überprüfe social_accounts_list; verbinde, was fehlt, in einem Durchgang (references/woopsocial.md), führe dann post_plan.py erneut mit den IDs aus.
  4. Lade jede Datei einmal hoch (references/woopsocial.md), speichere media.json ({"captioned/x/x.vertical.en.mp4": "<mediaId>"}), führe post_plan.py post.json --media media.json aus.
  5. Validiere jede Anfrage mit posts_validate, zeige plan.md und warte auf ein einziges klares Ja für den Batch. Führe dann posts_create für jede aus und melde, was geplant wurde und was fehlgeschlagen ist, in klaren Worten.
  6. WoopSocial postet das Video; es hängt keine Untertiteldateien an. plan.md listet auf, wo jedes SRT hinzugefügt werden muss (YouTube Studio, Facebook), nachdem der Post live ist. X und LinkedIn akzeptieren eine Untertiteldatei nur beim Hochladen in ihrer eigenen App, also erledigen dort die eingebrannten Untertitel die Arbeit.
  7. Schließe mit einer Zeile: Sie können dich in einer Woche fragen, wie die Videos abgeschnitten haben, und du wirst die Zahlen vorlesen (references/woopsocial.md, Ergebnisse).

Niemals

  • Ein von niemandem gelesenes Transkript einbrennen. Ein falsch geschriebener Name, der in ein Video eingebrannt ist, kann nach dem Posten nicht korrigiert werden.
  • Behaupten, Untertitel würden Reichweite oder SEO steigern. Sage, was wahr ist: Sie ermöglichen es Menschen, mit ausgeschaltetem Ton mitzukommen, und der Post-Text (nicht die Untertitel) ist das, was die Suche liest.
  • Das Video einer anderen Person für ein Reposting untertiteln oder ein Wasserzeichen, Logo oder eine „erstellt mit“-Zeile hinzufügen.
  • Auf eine Weise übersetzen, die die Bedeutung ändert, oder Musiktexte untertiteln, für die der Benutzer keine Rechte hat.
  • Posten, planen oder löschen ohne ein klares Ja.

Dateien

  • scripts/check_setup.py: Was installiert ist, was fehlt, wie es behoben wird.
  • scripts/transcribe.py: Wörter mit Zeiten (faster-whisper, mlx-whisper, Groq, Deepgram, vorhandene Untertitel).
  • scripts/fix.py: Korrekturlesebericht; wendet fixes.json an, wobei Wortzeiten beibehalten werden.
  • scripts/captions.py: SRT, VTT, Transkript; Übersetzungsvorlagen.
  • scripts/styles.py: Jeden Stil auf einem Frame des Benutzervideos.
  • scripts/render.py: Überprüfungsblatt; brennt Untertitel in jede Ausgabe, Form und Sprache ein.
  • scripts/post_plan.py: Plattform-Prüfungen, Zeitplan, WoopSocial-Anfragen, plan.md.
  • scripts/upload_parts.py: Lädt eine Datei in eine WoopSocial-Upload-Sitzung hoch.
  • styles/*.json: Die 8 Voreinstellungen. fonts/: Poppins, Anton, Inter (SIL Open Font License).
  • references/: job-file.md, proofreading.md, translation.md, styles.md, platforms.md, posting.md, woopsocial.md.
  • examples/iss-radio/: Zwei NASA-Clips, untertitelt auf Englisch und Spanisch, mit jeder Datei, die die Fähigkeit erstellt.

Verwandte Skills