Communitygithub.com

social-media-skills/video-editing-skill

Fähigkeit zur Videobearbeitung: Bearbeitet Talking-Head-Videos (YouTube, Kurslektionen, Produktdemos, Podcasts, Vlogs) wie ein Profi: Transkription mit Wortzeitstempeln, Entfernung von Stille, „Ähs“ und „Hmms“, Stottern und Wiederholungen, Jump-Cut-Punch-Ins, Audiobereinigung, SRT-Untertitel und YouTube-Kapitel. Läuft auf Mac, Windows und Linux – keine kostenpflichtige API erforderlich.

Was ist video-editing-skill?

Der Video-Editing-Skill automatisiert den ersten Schnitt einer Talking-Head-Aufnahme, indem er das Transkript analysiert, einen detaillierten Schnittplan erstellt, diesen dem Nutzer zur Genehmigung vorlegt und dann das endgültige Video rendert. Er entfernt typische „Luft“ wie Pausen, Füllwörter (Ähs, Hmms), Stotterer und Wiederholungen, fügt subtile Punch-Ins (Zoom) an Jump Cuts hinzu, bereinigt und normalisiert die Audiospur und erstellt SRT-Untertitel sowie YouTube-Kapitel. Der Skill unterstützt sowohl lokale Transkription (über faster-whisper) als auch cloudbasierte Dienste (Groq oder OpenAI) oder vorhandene SRT/VTT-Dateien. Nach der Freigabe durch den Nutzer kann das Video direkt mit WoopSocial auf YouTube und anderen Plattformen veröffentlicht werden. Er ist als eigenständiges Skill-Paket konzipiert, benötigt keine anderen Skills und funktioniert plattformunabhängig mit ffmpeg und Pillow.

Funktioniert mit✓Claude Code✓Codex CLI~Cursor
npx skills add https://github.com/social-media-skills/video-editing-skill/tree/main/skills/video-editing-skill

In Ihrer bevorzugten KI fragen

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

Dokumentation

Was macht video-editing-skill?

Eine rohe Talking-Head-Aufnahme besteht meist zu 20 bis 40 % aus Luft: Pausen, „Ähs“, Fehlstarts, zweimal gesagte Sätze. Das von Hand zu schneiden dauert länger als die Aufnahme selbst. Dieser Skill erledigt den ersten Schnitt: Er liest das Transkript, plant jeden Schnitt mit Begründung, zeigt den Plan, rendert den Schnitt mit Punch-Ins an den Jump Cuts und sauberem Audio, erstellt Untertitel und Kapitel und postet nach einer Bestätigung. Alles, was er braucht, befindet sich in diesem Ordner.

Vier Grundsätze:

  1. Die Worte des Nutzers bleiben erhalten. Es werden nur Pausen, Füllwörter, Stotterer, Wiederholungen und vom Nutzer freigegebene Bereiche entfernt. Der Inhalt wird nie verändert.
  2. Planen vor dem Rendern. Die Schnittliste wird zuerst angezeigt und genehmigt.
  3. Nichts wird ohne ein „Ja“ gepostet.
  4. Nur Material, das der Nutzer verwenden darf. Seine eigene Aufnahme oder mit Genehmigung.

Unter Windows in jedem Befehl py statt python3 verwenden.

Schritt 0: Einrichtung und die Quelle

Führen Sie python3 scripts/check_setup.py aus: Es meldet ffmpeg, Pillow, Transkriptions-Routen und OpenCV mit dem Installationsbefehl für das System des Nutzers. Erforderlich: ffmpeg und Pillow.

Fragen Sie in einer einzigen Nachricht nur das, was Sie nicht sehen können:

  1. Welche Datei, und gehört sie dem Nutzer?
  2. Wohin soll es gehen: YouTube (16:9), soziales Netzwerk (vertikal) oder beides.
  3. Wie straff: youtube (Standard: Pausen über 0,5 s entfernen, natürliche Beats erhalten), tight (0,3 s, schnelles YouTube und Social) oder podcast (sanft, keine Punch-Ins).
  4. Wörter, die der Nutzer als Angewohnheit verwendet und die sicher geschnitten werden können („like“, „so“, „you know“, „basically“). Diese haben in anderen Sätzen eine Bedeutung, daher sind sie opt-in.
  5. Alles, was so bleiben muss, wie es ist (eine Demo, ein Witz mit einer Pause, eine Sponsorenansage).

Schritt 1: Transkribieren

python3 scripts/transcribe.py VIDEO --out work/ --terms "Produktname, Fachbegriff, Gästename"

--terms listet Namen und Fachbegriffe auf, damit sie richtig geschrieben werden; korrigieren Sie, was immer noch falsch verstanden wird, mit "replace" in der edit.json vor dem Rendern, da in ein gepostetes Video eingebrannte Untertitel nicht korrigiert werden können.

Die gleichen drei Routen wie immer, mit dem einmal erklärten Kompromiss:

RouteWieKosten und Geschwindigkeit
Vorhandenes Transkript--from captions.srtKostenlos, sofort; Wortzeitstempel werden geschätzt und die meisten „Ähs“ fehlen, daher ist der Füllwort-Schnitt schwächer
Groq oder OpenAIGROQ_API_KEY oder OPENAI_API_KEYGroq etwa 0,04 $ pro Stunde Audio, ein bis zwei Minuten pro Stunde
Lokalpip install faster-whisperKostenlos und privat; etwa die Hälfte bis die gesamte Videolänge mit --model small

Der Transkriptor wird angewiesen, Füllwörter zu notieren; Whisper lässt sie sonst weg. Vom Editor werden dennoch übersehene Laute (ein „mm“, das niemand notiert hat, ein Atemzug) im Audio selbst gefunden.

Schritt 2: Den Schnitt planen

Lesen Sie work/transcript.txt einmal vollständig. Erstellen Sie dann edit.json (Format am Anfang von scripts/edit_video.py):

  • Stil: "style": "youtube", "tight" oder "podcast" (Schwellenwerte in references/editing-rules.md). Pausen über dem Grenzwert werden auf einen natürlichen Beat verkürzt: kürzer mitten im Satz, länger nach einem Satz, am längsten bei einem Themenwechsel.
  • Füllwörter: Die Standardliste („um“, „uh“, „er“, „hmm“, „mm“) ist sicher. Fügen Sie die Angewohnheitswörter des Nutzers nur dann zu extra_fillers hinzu, wenn er darum gebeten hat.
  • Abschweifungen und tote Abschnitte: Eine Abschweifung, ein „Können Sie mich hören?“, eine lange Einleitung vor dem Punkt. Fügen Sie sie mit einer Begründung zu cut hinzu und informieren Sie den Nutzer.
  • Schützen Sie alles, das erhalten bleiben muss, mit keep, einschließlich stiller Passagen.
  • Interviews mit Fragenkarten oder sichtbarem Interviewer: Behalten Sie die Fragen (etwa 3 Sekunden jeder Karte in keep), sofern der Nutzer nichts anderes sagt; ohne sie beginnt jede Antwort mit „Also...“ und ohne Kontext.
  • Falsch verstandene Namen: "replace": {"Cyrus Rex": "OSIRIS-REx"}.
  • Kapitel (für YouTube): 3 bis 10 Kapitel aus den Themenwechseln, erstes bei 0:00, jedes mindestens 10 Sekunden, benannt nach dem, was der Zuschauer bekommt („Warum die Kamera versagte“, nicht „Teil 2“). Zeitangaben im Originalvideo; das Skript verschiebt sie.

Erstellen Sie dann den Plan:

python3 scripts/edit_video.py edit.json --transcript work/transcript.json --out edited/ --plan

edited/edit-plan.md gibt die neue Länge, wie viel aus dem Sprechen selbst versus langen Lücken und Karten stammt, das Tempo in Wörtern pro Minute und jede Entfernung über einer Sekunde mit Begründung und Wörtern an. Lesen Sie jede Wiederholungs- und Stotterer-Zeile sowie die Liste „mögliche Wiederholungen“: zwei beendete Sätze, die gleich beginnen, werden nie automatisch geschnitten; entscheiden Sie über jede und fügen Sie sie zu cut hinzu, wenn es sich um eine echte Wiederholung handelt. Zeigen Sie dem Nutzer die Zusammenfassung, die Wiederholungen, die von Ihnen gewählten Abschweifungen und die Kapitel und holen Sie ein „Ja“ ein.

Schritt 3: Rendern

python3 scripts/edit_video.py edit.json --transcript work/transcript.json --out edited/

Was es tut:

  • Kürzt Pausen über dem Grenzwert auf einen natürlichen Beat, plus Füllwörter, Stotterer, Wiederholungen und alle cut-Bereiche. Entfernungen, die kürzer als das stilistische Minimum sind (0,4 s bei youtube), bleiben unberührt: ein Jump Cut kostet mehr, als er bringt.
  • Platziert jeden Schnitt durch Zuhören: Wortgrenzen werden dorthin verschoben, wo der Ton tatsächlich endet und beginnt, sodass Wortenden nicht abgeschnitten werden, und vom Transkript übersehene Laute (ein nicht notiertes „mm“) werden gefunden.
  • Betrachtet auch das Bild: Titelcards und Szenenwechsel werden sauber geschnitten, niemals bleiben ein paar Frames einer Karte übrig.
  • Rendert in Gruppen von Teilen in jeweils einem Durchlauf, sodass Ton und Bild bei beliebig vielen Schnitten synchron bleiben.
  • Punch-Ins: Wechselt zwischen dem Vollbild und einem 1,1-fachen Punch-In, wo ein Jump Cut versteckt werden muss: immer bei einem Schnitt, der eine Sekunde oder mehr entfernt hat, sonst erst nach 4 Sekunden derselben Einstellung, niemals bei einem Schnitt auf eine neue Kameraeinstellung. "punch_in": 0 schaltet es aus.
  • Audio: Verstärkung auf Arbeitspegel, Rumpelfilter, Rauschunterdrückung basierend auf dem gemessenen Raumrauschen (übersprungen, wenn der Raum bereits leise ist), sanfte Kompression, ein Spitzenbegrenzer und ein Zweidurchlauf-Lautstärkedurchlauf auf -14 LUFS.
  • Untertitel: Schreibt immer captions.srt (maximal 2 Zeilen mit 42 Zeichen, jeweils 1 bis 7 Sekunden, kein Zeilenumbruch nach einem kleinen Wort oder in einem Namen) zum Hochladen auf YouTube. "captions": {"burn": true} zeichnet sie für soziale Netzwerke ins Video ein, wo viele Leute stumm schauen; vertikale Versionen brennen sie standardmäßig ein. Brennen Sie keine Untertitel in ein YouTube-Video ein, das auch die SRT-Datei erhält: Zuschauer mit eingeschalteten Untertiteln würden beide sehen.
  • Vertikal: "format": "vertical" erstellt eine 1080x1920-Version, beschnitten auf focus_x.

Es schreibt edited/edited.mp4, captions.srt, chapters.txt, edit-report.md und manifest.json.

Überprüfung vor dem Zeigen für den Nutzer: Öffnen Sie cuts.jpg (Frames kurz vor und nach den größten Schnitten: achten Sie auf Aufblitzen einer Karte, einen Sprung in einer anderen Einstellung, einen eingefrorenen Gesichtsausdruck) und lesen Sie die Warnungen in manifest.json (Sync, Tempo über 190 Wörter pro Minute, Lautstärke). Korrigieren und neu rendern Sie, wenn eine Wiederholung die falsche Aufnahme behalten hat, das Tempo atemlos wirkt (ein sanfterer Stil) oder ein Schnitt schlecht sitzt (keep an dieser Stelle).

Schritt 4: Mit WoopSocial posten

So verbinden, hochladen und posten Sie: references/woopsocial.md. Kurzversion:

  1. social_accounts_list; nicht verbunden: den einen Verbindungspfad für diesen Agenten (kostenloser Plan: 2 soziale Konten), dann oauth_create_authorization pro Plattform.
  2. Laden Sie edited.mp4 mit einer Upload-Sitzung hoch (media_uploads_create_session mit der Byte-Größe aus manifest.json, python3 scripts/upload_parts.py session.json edited/edited.mp4, media_uploads_complete_session).
  3. YouTube: title (wichtigste Suchbegriffe zuerst, unter 70 Zeichen), privacy und eine Beschreibung, die mit einer Zeile beginnt, was der Zuschauer bekommt, dann die Kapitel aus chapters.txt. Laden Sie captions.srt anschließend in YouTube Studio hoch (WoopSocial sendet keine Untertiteldateien).
  4. Zeigen Sie den Post (Datei, Titel, Beschreibung, Konto, Uhrzeit mit Zeitzone) und holen Sie ein klares „Ja“ ein. Dann posts_create und posts_get.

Schritt 5: Ergebnisse auswerten

Nach einer Woche social_account_posts_list: Aufrufe, Likes, Kommentare, soweit gemeldet, mit dem Datum der Erhebung; fehlend bedeutet „nicht gemeldet“. Verweildauer und durchschnittliche Anzeigedauer finden Sie in YouTube Studio; fragen Sie den Nutzer danach. Wenn Zuschauer früh abspringen, bekommt der nächste Schnitt einen strafferen Einstieg; wenn sie bei einem Kapitel abspringen, war dieser Abschnitt zu lang.

Qualitätsanspruch

Würde ein professioneller Editor dies so übergeben? Lehnen Sie ab, wenn ein Wort abgeschnitten ist, ein Schnitt mitten im Atem mit einem Knackser landet, ein Punch-In sich alle paar Sekunden ändert, das Tempo keinen Raum zum Denken lässt oder sich der Inhalt geändert hat.

Randfälle

  • Zwei Personen vor der Kamera: Behalten Sie format bei der Quelle; Punch-Ins funktionieren weiterhin bei einer Totalen.
  • Bildschirmaufnahme mit Stimme: Setzen Sie "punch_in": 0.
  • Musik unter der Stimme: Die Stille-Erkennung sieht Musik als Ton; setzen Sie "voiced_gaps": false.
  • Sehr lange Aufnahmen (über eine Stunde): Funktioniert, aber die Renderzeit entspricht etwa der Videolänge; zuerst planen, einmal rendern.
  • Bewusst keine Sprache für einen Abschnitt (eine Demo): keep.

Referenzen

  • references/editing-rules.md: Schwellenwerte, Füllwörter, Wiederholungsmuster, Punch-Ins, Audio-Kette, Untertitel und Kapitel, mit Quellen.
  • references/woopsocial.md: Verbinden, hochladen, posten und Ergebnisse lesen.

Verwandte Skills