Communitygithub.com

tokentalentlabs/TTL-Media

Schneide jede rohe Sprachaufnahme (YouTube-Talking-Head, Vlog, Tutorial, Kurs, Podcast, Interview, Produktrezension, Kurzformat) in einen sauberen Schnitt: nur Wiederholungen, Fehlstarts, Stottern, Fülllaute, Anweisungen an den Editor und tote Momente werden entfernt. Jeder Schnitt liegt auf exakten Wortgrenzen, sodass nie ein Wort abgeschnitten wird. Liefert eine Einzelspur-Timeline (FCPXML mit To-Do-Markern, EDL für Premiere Pro und DaVinci Resolve) sowie eine lesbare Schnittliste.

Was ist TTL-Media?

Diese Skill-Fertigkeit enthält eine komplette Pipeline zum präzisen Zuschneiden von Sprachaufnahmen – sie entfernt ausschließlich Fehler des Sprechers (Wiederholungen, Versprecher, Stottern, Fülllaute, lange Pausen) und produziert einen Schnitt, den ein menschlicher Editor sofort übernehmen kann. Sie ist für Claude Code, Cursor und ähnliche KI-Entwicklungswerkzeuge geeignet und wird über eine Reihe von Python-Skripten gesteuert. Die Pipeline beginnt mit einer wortgenauen Transkription (Parakeet oder Whisper), identifiziert dann Kandidaten für Schnitte (via Retake-Finder, Lücken-Scan und Lektüre des Transkripts), schreibt die Schnittvorgaben in eine JSON-Datei und erzeugt am Ende eine Final-Cut-Pro-XML-Zeitleiste sowie eine EDL für Premiere/DaVinci. Jeder Schnitt wird durch eine automatisierte Hörprobe verifiziert und kann mit fremdsprachigen oder mehrsprachigen Inhalten umgehen. Die Fertigkeit ist modular aufgebaut: Transkription, Schnitterkennung, Ausgabe und Qualitätskontrolle sind getrennte Skripte, die nacheinander im Arbeitsordner ausgeführt werden. Durch integrierte Lernmechanismen (Sprecherprofile, Abgleich mit Editoren-Fassungen) verbessert sich die Qualität mit jeder Nutzung – jeder Korrekturhinweis wird analysiert, seine Ursache behoben und ins Profil aufgenommen, sodass dieselben Fehler nicht wiederholt werden.

Funktioniert mit~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/tokentalentlabs/TTL-Media/tree/HEAD/skills/video-trimming

In Ihrer bevorzugten KI fragen

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

Dokumentation

Videobearbeitung – Zuschnitt

Verwandle eine rohe Aufnahme in einen sauberen Erstschnitt, den ein menschlicher Editor abzeichnen würde: Jede Wiederholung und jeder Stolperer ist weg, der natürliche Rhythmus des Sprechers bleibt intakt, kein Wort wird abgeschnitten, jede Verbindung liest sich wie der vom Sprecher gemeinte Satz. Die Fertigkeit funktioniert für jedes Fachgebiet, jedes Format und jede Sprache, die die Spracherkennung versteht – die Regeln betreffen die Art, wie Menschen sprechen, nicht das, worüber sie sprechen. Format- und Sprachunterschiede (Pausen-Stile, Demos, Interviews, laute Umgebungen, Nicht-Muttersprachler) sind in references/formats.md beschrieben.

Diese Fertigkeit ist nur der Zuschnitt: eine Kamera-/Audioquelle rein, eine Einzelspur-Timeline raus. Das Einblenden von Bildschirmaufnahmen, B-Roll oder Grafiken ist eine spätere Phase; diese kann segments.json (die genauen Quell-In/Out jedes behaltenen Stücks) wiederverwenden, um andere Spuren synchron zu schneiden.

Was weggeschnitten wird, und was niemals

Weggeschnitten (Fehler): Wiederholungen (der letzte Versuch gewinnt), Fehlstarts, abgebrochene Ansätze, Stottern und doppelte Wörter, Fülllaute („äh“, „hm“, „ehm“, halbe Wörter wie „we-„), Versprecher, die korrigiert werden, Gemurmel, Dinge, die der Sprecher dem Editor on camera zum Entfernen sagt, und tote Momente (lange Stille, Pausen mit nur Atmen/Klicken).

Behalten: natürliche Pausen (unter ~1 s), die Formulierung des Sprechers auch wenn holprig, Meinungen, Geschichten, Witze, rhetorische Wiederholungen, die aufbauen („das ist, was die Profis machen, das ist, was die Leute machen, die gewinnen“), Zeilen, die auf etwas auf dem Bildschirm zeigen, Demo-Momente, die der Zuschauer sehen muss, und alles, was keine Wiederholung ist.

Nicht in dieser Fertigkeit zu entscheiden: kreative Kürzungen (Weglassen einer Geschichte, eines Nebengedankens, einer Sponsor-Aussage aus Tempogründen). Ein menschlicher Editor darf das tun; ahme sie nicht nach und markiere sie nicht. Wenn der Benutzer dir später die Version des Editors zeigt, lerne daraus nur die Lektionen zu den Fehlern, nicht die kreativen Lektionen.

Warum diese Trennung: Die Benutzer dieser Fertigkeit sind Editoren. Ein Erstschnitt, der nur Fehler entfernt, ist vertrauenswürdig und kann darauf aufgebaut werden; ein Schnitt, der auch Geschmacksentscheidungen trifft, zwingt sie, alles nochmal zu überprüfen.

Vollständige Regeln mit echten Beispielen: Lies references/cutting-rules.md, bevor du Schnitte notierst. Es ist der Kern dieser Fertigkeit.

Einrichtung (einmal pro Rechner)

Python 3.10+, ffmpeg und:

pip install numpy soundfile num2words torch torchaudio
# Haupt-Spracherkennung: NVIDIA Parakeet (Englisch + 24 europäische Sprachen)
pip install parakeet-mlx                  # Apple Silicon (auf der GPU)
pip install "nemo_toolkit[asr]"           # Windows/Linux mit NVIDIA GPU
# Whisper: verwendet von der Lückenprüfung (kann angewiesen werden, „uh“/„um“ auszuschreiben) und für Sprachen, die Parakeet nicht hat
pip install mlx-whisper                   # Apple Silicon
pip install faster-whisper                # alles andere
pip install uroman                        # nur für Sprachen mit nicht-lateinischer Schrift (Hindi, Arabisch, Japanisch, ...)

Der erste Lauf lädt Parakeet (~1,2 GB), Whisper large-v3 (~3 GB) und den MMS-Aligner (~1,2 GB) herunter.

Warum Parakeet: In einer 41-minütigen Testaufnahme mit 9 bekannten versteckten Wiederholungen (Wiederholungen, die ein gewöhnliches Transkript zu einer sauberen Zeile zusammenfasst – was zusätzliche Überprüfungsrunden und Korrekturen des Reviewers erforderte) hörte Parakeet 8 und Whisper 1. Parakeet schreibt auch Gemurmel („Mm-hmm“) aus, das Whisper weglässt, und der gesamte wortgetreue Durchlauf dauerte 3 Minuten statt ~11. Dennoch übersehen beide Engines einige Ein-Wort-Stotterer, die die andere hört („Weil… Weil“), weshalb die Hörprobe und die Lückenprüfung erhalten bleiben. Die Engine-Wahl erfolgt automatisch (Konfiguration "asr": "auto"); setze "parakeet" oder "whisper", um eine zu erzwingen.

Arbeitsablauf

Arbeite in einem „Schnittordner“ (einer pro Aufnahme). Skripte befinden sich im scripts/-Ordner dieser Fertigkeit; führe sie aus mit python <skill>/scripts/<name>.py <Schnittordner>.

1. Aufnahme (2 min)

  • Kopiere assets/config.example.json nach <Schnittordner>/config.json; setze title, source (die Kameradatei mit ihrem Audio), timeline_fps (die Ausgabe-Bildrate; die Quell-Bildrate wird ermittelt) und language (Sprachcode: „en“, „es“, „hi“, … oder „auto“). Lass die Zeitangaben in Ruhe, es sei denn, das Format erfordert einen anderen Pausen-Stil (references/formats.md): Jeder Wert ist das Ergebnis eines echten Fehlers (references/edges-and-pauses.md).
  • Notiere das Format (Solo, mit Skript, Tutorial, Podcast, Kurzformat…) und lies seine Zeile in references/formats.md.
  • Extrahiere das Audio: ffmpeg -i <Kameradatei> -vn -ac 1 -ar 16000 <Schnittordner>/audio.wav
  • Falls ein Sprecherprofil existiert (profiles/<Sprecher>.md, siehe unten), lies es jetzt.

2. Wortgetreues Transkript (~5 s pro Minute Audio mit Parakeet; starte es sofort im Hintergrund)

python scripts/transcribe_verbatim.py <Schnitt>/audio.wav <Schnitt>/verbatim.json

Dies ist kein gewöhnliches Transkript. Ein gewöhnlicher Volltext-Durchlauf versteckt viele der Stotterer und Wiederholungen („weil das, weil das“ wird zu „weil das“; Whisper versteckte etwa ein Drittel davon) und seine Wortzeiten sind nur grob richtig, was Wortenden abschneidet. Dieser Durchlauf transkribiert kurze, an Pausen geteilte Abschnitte und richtet dann jedes Wort zwangsweise auf das Audio aus. Jeder Schnitt wird auf diese Wortzeiten gelegt.

3. Finde die Kandidaten

Führe alle drei aus, dann lies ihre Ausgabe zusammen mit dem Transkript:

  • python scripts/make_reading_copy.py <Schnitt>: schreibt reading.txt, das Transkript mit jeder Wortnummer.
  • python scripts/retake_finder.py <Schnitt>: jede Stelle, an der der Sprecher mit denselben Anfangsworten neu startet. Die meisten sind Wiederholungen (behalte den letzten Versuch); einige sind rhetorische Wiederholungen (behalte beide). Entscheide bei jedem.
  • python scripts/gap_scan.py <Schnitt>: hört sich jede lange Lücke mit Geräusch nochmal an. Genurmelte Neustarts verstecken sich dort („Der Akku li - der Akku hält“); das Transkript überspringt sie oft.

4. Lies das gesamte Transkript und notiere die Schnitte

Lies reading.txt von oben nach unten wie ein Editor, mit references/cutting-rules.md im Kopf. Schreibe <Schnitt>/cuts.json:

{"remove":   [[0, 236, "Wiederholungen: zwei frühere Versuche des Intros"],
              [1047, 1064, "Fehlstarts: 'weil wir einfach nicht hatten, weil wir haben…'"]],
 "remove_t": [[1125.80, 1129.45, "versteckte Wiederholung in Lückenprüfung gehört: 'Also in jedem dieser Rezepte…'"]],
 "markers":  [[2680, "HOST-HINWEIS: 'Lösche den Teil über meinen Vermieter' -> entfernt 'Also mein Vermieter rief an…' (3 Sätze)"]],
 "markers_t": [[1501.2, "PRÜFEN: behalte die 4 s stille Gießszene, der Sprecher zeigt die Demo"]]}
  • remove = inklusive Wortindex-Bereiche aus reading.txt (bevorzugt: exakte Grenzen für mehr Freiheit).
  • remove_t = Sekunden, nur für Geräusche, die das Transkript nicht als Wörter hat (aus der Lückenprüfung oder der Hörprobe).
  • markers (Wortindex) / markers_t (Sekunden) = rote To-Do-Marker in der Zeitleiste für jede Anweisung des Hosts, jede Ermessensentscheidung und jeden Rückspuler, der 20+ s einzigartigen Inhalts verwirft, damit der Editor sie in Sekunden prüfen kann.
  • Gib jedem Schnitt einen Grund. Er landet in CUTS.md, und Gründe machen eine Schnittliste überprüfbar.

Lies vor dem Weitermachen die Wörter auf beiden Seiten jedes Schnitts als einen Satz. Ergibt er nicht den vom Sprecher gemeinten Satz, liegt der Schnitt an der falschen Stelle. Diese einzelne Gewohnheit verhindert die meisten Rückmeldungen wie „Der Schnitt ergibt keinen Sinn“.

5. Erstelle

python scripts/trim.py <Schnitt> schreibt timeline.fcpxml, timeline.edl, segments.json, words-cut.json und CUTS.md und gibt die Roh- und Schnittlängen aus. Plausibilitätsprüfung: Ein Schnitt, der 30-45 % einer weitschweifigen unvorbereiteten Aufnahme entfernt, ist normal (10-20 % bei einer mit Skript); unter 10 % bei einer unvorbereiteten Aufnahme deutet meist auf übersehene Wiederholungen hin.

6. Hörprobe (~15 s pro Minute Schnitt) und Korrektur

python scripts/check_cut.py <Schnitt> rendert das geschnittene Audio, transkribiert es auf dieselbe Weise und vergleicht es Wort für Wort mit dem, was der Schnitt sagen sollte. Dann listet python scripts/retake_finder.py <Schnitt> --kept wiederholte Anfänge auf, bei denen beide Versuche überlebt haben.

Behandle jede JOIN-Zeile als Fehler, bis ein erneutes Anhören das Gegenteil beweist. Wie die Ausgabe zu lesen ist, die üblichen Transkriptionsgeräusche und wie jede Art von Problem behoben wird: references/checks.md. Korrigiere, erstelle neu, prüfe erneut. Zwei oder drei Runden sind normal.

Lies dann words-cut.json einmal von Anfang bis Ende, so wie ein Zuschauer es hören würde. Der Prüfer vergleicht Audio mit Absicht; nur das Lesen erwischt eine Absicht, die selbst falsch ist (ein hängengebliebener Satz, eine absichtlich behaltene Wiederholung aus Versehen).

7. Ausliefern

  • Final Cut Pro: Doppelklick auf timeline.fcpxml (Ablage → Import → XML). Premiere/Resolve: Importiere timeline.edl und verknüpfe es mit der Kameradatei.
  • Teile dem Benutzer in einfachen Worten mit: Roh- → Schnittlänge, Anzahl der Schnitte, jeder Marker (Zeit + was gemacht wurde), alles, worüber du dir unsicher warst, und wie lange es gedauert hat.
  • Wenn der Editor des Benutzers eine endgültige Version veröffentlicht, frage nach dessen Transkript und führe aus: python scripts/compare_editor.py <Schnitt> <deren Transkript.txt> – der schnellste Weg, um zu finden, was du übersehen hast (references/checks.md → „Vergleich mit einer Version des Editors“).

Lernen aus Feedback (der Teil, der diese Fertigkeit besser macht)

Jeder Kreative spricht anders. Was du über einen Sprecher lernst, halte in einem Profil fest: profiles/<Sprecher-Kurzname>.md (starte mit references/speaker-profile-template.md; ein ausgefülltes Beispiel aus echten Bewertungen findest du in assets/profiles/example-solo-youtube-host.md). Es enthält ihre verbalen Gewohnheiten, wie sie dem Editor Anweisungen geben, ihren Pausen-Stil, ein Glossar und jede Korrektur, die der Benutzer gemacht hat.

Wenn der Benutzer einen Schnitt überprüft:

  1. Ordne jede Beschwerde ihrer Ursache zu, bevor du sie behebst. Ist es eine Schnittentscheidung (eine Regel), eine Kantenplatzierung (eine Zahl) oder etwas, das das Transkript versteckt hat (eine Erkennungslücke)? references/lessons.md listet die bisher bekannten Ursachen auf, und die meisten neuen Beschwerden entpuppen sich als eine davon.
  2. Behebe die Ursache, nicht nur den Einzelfall. Ein abgeschnittenes Wort bedeutet, dass eine Kantenregel irgendwo falsch ist; eine übersehene Wiederholung bedeutet, dass ein Muster zum Profil hinzugefügt werden muss.
  3. Bevor du eine Zeitangabe änderst, wende die Änderung zuerst auf die Verbindungen einer vorherigen Aufnahme an. Eine Änderung, die eine Beschwerde behebt, kann leise dreißig neue erzeugen (references/lessons.md, Einstiegsgeschichte).
  4. Schreibe die Lektion mit Beispiel und Grund in das Profil. Wenn sie auf jeden Sprecher zutrifft, füge sie zu references/cutting-rules.md hinzu.

Dateien in dieser Fertigkeit

  • scripts/transcribe_verbatim.py: Chunked Parakeet (oder Whisper) + Zwangsausrichtung → verbatim.json
  • scripts/make_reading_copy.py: Nummeriertes Transkript → reading.txt
  • scripts/retake_finder.py: Wiederholte Anfänge → retakes.txt (--kept nach dem Erstellen)
  • scripts/gap_scan.py: Hört sich laute Lücken nochmal an → gaps.txt
  • scripts/trim.py: Schnitte → timeline.fcpxml, timeline.edl, segments.json, words-cut.json, CUTS.md
  • scripts/check_cut.py: Hörproben-Diff → check.txt
  • scripts/compare_editor.py: Diff gegen das endgültige Transkript des Editors → compare-editor.txt
  • references/cutting-rules.md: Was geschnitten und behalten wird, mit Beispielen (vor jedem Schnitt lesen)
  • references/edges-and-pauses.md: Warum jede Zeitangabe genau diesen Wert hat
  • references/checks.md: Lesen der Prüfungen, Transkriptionsrauschen, Beheben jeder Art von Problem
  • references/lessons.md: Echte Fehler, ihre Ursachen und Korrekturen
  • references/formats.md: Pausen-Stile und Eigenheiten nach Format, lautes Audio, mehrere Sprecher, andere Sprachen
  • references/speaker-profile-template.md: Die Vorlage für sprecherbezogene Profile
  • assets/config.example.json, assets/profiles/example-solo-youtube-host.md

Verwandte Skills