Communitygithub.com

captions

Transkribiere Sprache lokal mit Wort-für-Wort-Zeitstempeln (faster-whisper, kein API-Key) und brenne gestylte, wortweise hervorgehobene Untertitel in ein Video ein oder exportiere SRT.

Was ist captions?

Dieses Skill ermöglicht die lokale, API-freie Transkription von Videos mit Wort-für-Wort-Zeitstempeln mittels faster-whisper und das anschließende Einbrennen von gestalteten, aktiv-wort-hervorgehobenen Untertiteln (ASS/SubStation Alpha) in das Video. Es unterstützt Plattformen wie Claude Code, Cursor oder Codex. Der Workflow ist dreistufig: 1) Transkription mit `transcribe.py` (Ergebnis wird gecached), 2) Erstellung von ASS und SRT mit `make-captions.mjs`, 3) Einbrennen mit `burn.mjs` unter Nutzung des libass-Filters von ffmpeg. Ein separates Skript `snap-to-words.mjs` stellt sicher, dass Schnittpunkte nie innerhalb eines Wortes liegen. Das Skill ist ideal für Entwickler, die kurze Video-Clips mit professionellen, wortweise hervorgehobenen Untertiteln versehen möchten, ohne auf Cloud-APIs angewiesen zu sein.

Funktioniert mit~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/zaddy99999/video-editing-skills/tree/main/skills/captions

In Ihrer bevorzugten KI fragen

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

Dokumentation

Was macht captions?

Lokale Wort-für-Wort-Transkription, Styling und Einbrennen von Kurzform-Untertiteln.

Skripte befinden sich in scripts/:

SkriptAufgabe
transcribe.pyfaster-whisper mit word_timestamps=True → words.json (gecached)
make-captions.mjswords.json → ASS (gestylt, aktives Wort hervorgehoben) und SRT
burn.mjsBrennt ASS/SRT mit libass (ass / subtitles Filter) ein
snap-to-words.mjsVerschiebt Schnittpunkte zur nächstgelegenen Lücke zwischen Wörtern

Arbeitsablauf

  1. Transkribieren (einmal pro Quelle; das Ergebnis wird gecached):
    pip install faster-whisper            # einmalig
    python3 scripts/transcribe.py --input clip.mp4 --out edit/clip.words.json --model small --language en
    
    Beim ersten Lauf wird das Modell von Hugging Face heruntergeladen. Falls dies blockiert ist, beendet sich das Skript mit Exit-Code 4 und einer JSON-fix-Nachricht anstelle eines Tracebacks; es schreibt niemals ein gefälschtes Transkript. Leite --model auf einen lokalen CTranslate2-Modellordner, um offline zu arbeiten.
  2. Untertitel erstellen:
    node scripts/make-captions.mjs --words edit/clip.words.json --out-ass edit/clip.ass --out-srt edit/clip.srt
    
    Der Stil stammt aus dem Brand-Pack (captions-Block: Größe, Rand, Umriss, Hervorhebung; colors.accent ist die Farbe des aktiven Wortes).
  3. Einbrennen als letzten visuellen Schritt:
    node scripts/burn.mjs --input edit/clip-hook.mp4 --subs edit/clip.ass --out edit/clip-captioned.mp4
    
    Verwende --fonts-dir, wenn die Untertitel-Schriftart eine Datei ist und keine installierte Schriftart.
  4. Überprüfen mit einem render-qc-Proof-Sheet: lesbar, innerhalb des sicheren Bereichs, nicht über der Hook-Platte.

Regeln

  • Schneide niemals innerhalb eines Wortes. Vor dem Aufteilen von Sprache, setze Schnitte auf Wortlücken zurück: node scripts/snap-to-words.mjs --words edit/clip.words.json --markers edit/cuts.json --out edit/cuts.json
  • Untertitel kommen zuletzt: nach Schnitten, Overlays und Farbe. Wenn du den Clip nach der Transkription zuschneidest, übergib --offset -<Sekunden abgeschnitten> an make-captions.mjs.
  • 1 bis 3 Wörter pro Block für Kurzvideos (maxWords, maxChars). Blöcke brechen an Satzzeichen und bei Pausen.
  • Halte Untertitel aus den unteren ~15 % (Plattform-UI) und fern von der Hook-Platte: stimme captions.marginV ab.
  • Transkripte werden gecached: führe erneut mit --force aus, nur wenn sich das Audio geändert hat.
  • Überprüfe Wörter stichprobenartig mit dem Audio; Whisper kann Namen und Fachbegriffe falsch verstehen. Korrigiere words.json bei Bedarf von Hand.

Ohne ffmpeg libass

Wenn burn.mjs keinen ass-Filter meldet, fehlt dem ffmpeg-Build libass. Installiere einen vollständigen Build (die meisten Paketmanager liefern einen), oder lade die SRT als separaten Untertitel-Track hoch anstatt sie einzubrennen.

Individual skills in this repo

This repo contains 2 individual skills — each has its own dedicated page.

Verwandte Skills