Communitygithub.com

businessbaum/vedit

Diese Fähigkeit wird verwendet, wenn der Benutzer nach einer mechanischen Straffung von bereits ausgewähltem Material fragt – „mach den Rohschnitt“, „bau den Rohschnitt“, „schneid die Ähms raus“, „nimm die Füllwörter raus“, „entferne die Pausen“, „kürz die Pausen“, „schneid die Versprecher raus“, „mach den Radioschnitt“, „straff das“, „build the rough cut“, „cut the fillers“, „remove the ums“, „tighten the pauses“, „trim the dead air“, „cut the retakes“, „radio edit“. Sie wandelt beibehaltene Story-Blöcke in aktivierte Segmente in project.json um. Sie entscheidet nicht, worum es im Video geht – das übernimmt cut-story.

Was ist vedit?

Diese Fähigkeit führt einen mechanischen Rohschnitt (Rough Cut) an bereits ausgewähltem Videomaterial durch. Sie entfernt automatisch Ähs, Füllwörter, Versprecher und tote Pausen, fügt Überblendungen hinzu und stellt die Schnitthygiene sicher. Der Schnitt ist nicht-destruktiv – jede Entscheidung ist durch einen `provenance`-Eintrag und ein `enabled`-Boolean in den Segmenten rückgängig zu machen. Die Fähigkeit unterstützt Plattformen wie Claude Code, Cursor und Codex und arbeitet mit einem `project.json`-Dateiformat. Sie führt vier Durchläufe durch: Stille-staffelung, Füllwort-Staffelung (mit einer besonders wichtigen Trennung von automatisch entfernbarer und nur zu kennzeichnender Ebene), Versprechererkennung und Schnitthygiene. Ein zentrales Prinzip ist die Framegenauigkeit: Schnittpunkte werden auf ganze Frames gesnappt, um einen A/V-Drift zu vermeiden. Die Ergebnisse werden wie von einem Editor präsentiert, mit detaillierten Statistiken und der Möglichkeit, Parameter anzupassen.

Funktioniert mit~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/businessbaum/vedit/tree/HEAD/.agents/skills/cut-rough

In Ihrer bevorzugten KI fragen

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

Dokumentation

cut-rough

Mechanische Straffung: tote Pausen, Füllwörter, Versprecher, Schnitthygiene. Alles hier ist umkehrbar und jede Entscheidung trägt eine Herkunft (Provenance).

Argument $project ist der Slug; die vollständige Anfrage in $ARGUMENTS. Ein leerer $-Platzhalter bedeutet, dass die Fähigkeit automatisch ausgelöst wurde und nicht per Schrägstrich aufgerufen: Nimm das Projekt aus PIPELINE_STATE im Sitzungskontext und sag, welches du ausgewählt hast. Die Verbnamen folgen dem Build-Vertrag; python engine/ve.py --help gewinnt bei Konflikten.

Vorbedingungen und warum sie streng sind

Führe zuerst cut-story aus. Wenn story.blocks fehlt, sag das und biete cut-story an, statt fortzufahren – mechanisches Schneiden an Material, das bald komplett verworfen wird, verschwendet Zeit mit Versprecher- und Füllworterkennung, die niemand hören wird.

Wenn der Benutzer explizit einen mechanischen Durchlauf über alles möchte („einfach nur die Ähms raus“), ist das legitim. Tu es und sag, dass keine Inhaltsauswahl stattgefunden hat.

Die Frame-Regel

Schnittpunkte rasten auf ganze Frames ein. Das ist keine Ordnungsliebe – Schnittpunkte außerhalb des Frame-Rasters lassen den Concat-Filter pro Schnitt 8,33 ms A/V-Drift akkumulieren, 1250 ms bei 150 Schnitten. Eingefasst driften dieselben 150 Schnitte um genau 0 Samples.

in_frame  = floor(t_in  * fps + 0.5)    # Aufrunden bei 0,5 -> Bindungen landen später
out_frame = ceil(t_out * fps - 0.5)    # Abrunden bei 0,5 -> Bindungen landen früher
if out_frame <= in_frame: out_frame = in_frame + 1

out ist exklusiv – ffmpeg implementiert trim=end als striktes <, und halboffene [in, out)-Intervalle machen die Verkettung exakt. Wenn die OUT-Rundung falsch ist, wird jedes Segment einen Frame lang; 200 Schnitte ergeben 6,7 s Drift und hörbar kaputten Sync.

Führe diese Arithmetik niemals von Hand aus. vedit/timebase.py ist dafür zuständig: snap_in / snap_out.

Schritt 1 – Die Durchläufe ausführen

python engine/ve.py cut $project

Vier Durchläufe über die abgeflachte Wortliste, dann das Einrasten:

  1. Stille-Staffelung. Lücken unter min_gap werden nie geschnitten. Darüber skaliert die beibehaltene Pause mit der Interpunktion des vorangehenden Wortes: .?! x1,5 (Minimum 0,40 s), ,;: x1,0, Mittel-Nebensatz x0,7 (Minimum 0,20 s), Themenwechsel x2,0 (Minimum 0,60 s). Eine gleichmäßige Pausenlänge ist das erkennbarste Zeichen einer maschinellen Bearbeitung – das Ohr erwartet einen längeren Atemzug nach einem Punkt.
  2. Füllwort-Staffelung. Siehe unten.
  3. Versprechererkennung. Wiederholte N-Gramme, bei denen die spätere Aufnahme die frühere ersetzt.
  4. Schnitthygiene. Padding, Überblendungen, Nullpunkt-Snap, Schnittdichte-Begrenzung.

Schritt 2 – Füllwort-Ebenen und die eine, die nicht automatisiert werden darf

  • Ebene A – nicht-lexikalisch (äh ähm hm mh uh um er): Automatisch entfernen. Niemand will diese.
  • Ebene B – lexikalische Füllwörter (weißt du, sozusagen, quasi, im Prinzip, you know, I mean): Automatisch entfernen mit Schutzmaßnahmen – nicht am Satzanfang, nicht wenn die Entfernung ein Fragment unter min_clip hinterlässt.
  • Ebene C – Modalpartikel: also halt eben ja mal doch schon eigentlich genau und englische like just well right so basically actually. Nur kennzeichnen. Niemals automatisch entfernen.

Ebene C ist der Punkt, an dem automatisierte Editoren die deutsche Sprache ruinieren. doch, eben, halt und ja tragen Haltung und Diskursstruktur; sie zu entfernen lässt den Sprecher nicht straffer klingen, sondern wie eine Übersetzung. Wenn der Benutzer sie trotzdem entfernen möchte, tu es – aber sag einmal, was es kostet, und erwähne es dann nicht mehr.

Erkennungsreihenfolge: lexikalischer Treffer, dann Dauer/Zeichen >= 0,12 s, dann umgebende Lücke >= 0,10 s, dann Energie innerhalb von 6 dB der umgebenden Sprache.

Verwende niemals WhisperX score als Füllwortsignal. Es misst die Ausrichtung, nicht Zögern. Niedrige Scores cluster auf seltenen Wörtern und Eigennamen – das Gegenteil von Füllwörtern. Verwende es nur als Zeitstempel-Zuverlässigkeits-Flag: score < 0,35 vergrößert das Padding um 60 ms und verbietet einen Schnitt innerhalb dieses Wortes.

Schritt 3 – Die Standardwerte und ihr Status

ParameterStandardHinweis
pad_in0,08 sPlosivverschluss vor /p t k b d g/
pad_out0,10 s/t k s/-Auslaute laufen über das end des Aligners hinaus
keep_pause0,18 s MinimumDer Atemzugschlitz, der anstelle toter Luft bleibt
min_gap0,55 sDarunter nie schneiden
min_removal0,20 sKürzere Entfernungen sind keinen Schnitt wert
max_cut_density1 pro 1,5 sJump-Cut-Ermüdung
min_clip0,35 sKürzere beibehaltene Clips werden mit einem Nachbarn verschmolzen
Überblendung20 ms (10 min, 40 max)curve=tri gleiche Aufnahme, qsin über Aufnahmen hinweg
Nullpunktsuche+/-5 ms (240 Samples)Nur Audio, niemals Video verschieben

Diese Werte sind forschungsbasiert, nicht perzeptuell getestet. Solange project.json "calibrated": false enthält, sag das immer, wenn du einen Schnitt verteidigst. Präsentiere keine nicht kalibrierte Schwelle als justierte. Der Sitzungshaken zeigt dieses Flag aus diesem Grund in jeder Sitzung an.

Der Nullpunkt-Snap ist wichtig zu verstehen: Ein harter Schnitt bei einem Nicht-Nulldurchgang erzeugt einen Sample-Sprung, der 29,5x größer ist als das natürliche Maximum des Signals – ein hörbarer Klick. Sowohl ein Nullpunkt-Snap als auch eine 20-ms-Überblendung bringen ihn auf das Ausgangsniveau zurück. Verwende beide. Der Snap bewegt nur Audio, niemals Video; eine sub-Frame-Videoverschiebung ist nicht darstellbar.

Schritt 4 – J/L-Schnitte

4–12 Frames ist der nutzbare Bereich; Standard 6.

Lehne jeden J/L-Schnitt ab, bei dem beide Seiten dieselbe source_id teilen und keine mit B-Roll oder einem Vollbild-Overlay abgedeckt ist. Bei einem sichtbaren Mund, der kein J-Schnitt ist, handelt es sich um einen Lippensynchronfehler, der als technischer Fehler und nicht als Schnitt gelesen wird.

Schritt 5 – Segmente schreiben

Segmente werden in segments[] geschrieben, mit src_in_frames (inklusive) und src_out_frames (exklusiv) als einziger Autorität. Außerdem erforderlich für jedes Segment:

  • enabled – Abgelehntes Material ist false mit einem Grund, niemals entfernt. Jede automatische Entscheidung muss durch Umlegen eines Booleans umkehrbar sein. Diese Eigenschaft macht einen aggressiven Standard sicher.
  • order – Explizite Ausgabereihenfolge, dicht über aktivierte Segmente.
  • provenance – stage (content für Story-Ebene-Drops, silence, filler, retake), rule, confidence, applied_by, und der gemessene Wert, der es ausgelöst hat (original_gap_s). Provenance ist es, das dem Benutzer erlaubt, „alle Ebene-B-Entfernungen rückgängig zu machen“.
  • word_range und denormalisierter text. Der Text dient nur zum Lesen und ist niemals autoritativ – wenn er mit word_range in Konflikt steht, gewinnt der Wortbereich.

Zeitachsenpositionen sind abgeleitet, niemals gespeichert. Sie sind eine laufende Summe über aktivierte Segmente, die beim Laden in _computed geschrieben wird. Schreibe niemals _computed von Hand.

Setze stage auf "rough_cut".

Schritt 6 – Berichte wie ein Redakteur, nicht wie ein Skript

Berichte: Quellendauer, geschnittene Dauer, entfernter Prozentsatz, Schnittanzahl, Schnittdichte (Schnitte pro Minute) und die Anzahl pro Provenance-Regel. Markiere dann alles, was wie ein Überschnitt wirkt: einen Bereich mit mehr als einem Schnitt pro 1,5 s, jeden beibehaltenen Clip nahe min_clip und die Anzahl der gekennzeichneten, aber nicht entfernten Ebene-C-Füllwörter.

Biete drei nächste Schritte an: einen Bereich als Vorschau anzeigen, einen Schwellenwert anpassen oder zu Grafiken/Untertiteln übergehen.

Fehlermodi

SymptomUrsacheBehebung
Jedes Segment ist 1 FrameOUT aufgerundet statt abgerundetVerwende snap_out; niemals die Mathematik inline
Hörbare Klicks an SchnittenNullpunkt-Snap übersprungenSnap plus eine 20-ms-Überblendung
Sprache klingt abgehackt und atemlosEinheitliche beibehaltene PauseWende die interpunktionsskalierte Tabelle an
Sprecher klingt roboterhaft und undeutschEbene C entferntEbene C ist nur kennzeichnen; stelle per Provenance wieder her
Schnitte landen mitten im WortTranskript ist Stufe 3 (BPE-Token)Neu transkribieren; Token-Zeitstempel können nicht geschnitten werden
A/V-Drift wächst über das VideoSchnittpunkte nicht Frame-gesnapptJeden Schnittpunkt snapen, dann QC-Prüfung (a) erneut ausführen

Individual skills in this repo

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

businessbaum/vedit

This skill should be used when the user asks for subtitles or on-screen text of what is being said - "brenn die Untertitel ein", "mach Untertitel", "Untertitel drauf", "leg Untertitel drüber", "brenn die Subs ein", "mach die Captions", "Wort für Wort Untertitel", "Karaoke-Untertitel", "korrigier den Untertitel-Text", "burn in the captions", "add subtitles", "burn the subs", "word-by-word captions", "fix a caption typo". Covers ASS generation, the pixel-width grouping rule for German, the font table, and burn-in through libass.

businessbaum/vedit

This skill should be used when the user asks to decide what the video is actually about before any mechanical cutting - "bau die Story", "was soll ins Video", "was kann raus", "welche Themen bleiben", "kürz das auf 6 Minuten", "mach daraus ein kurzes Video", "wo ist der Hook", "sortier die Themen", "worum geht es hier eigentlich", "build the story", "decide what stays", "structure this", "cut this down to N minutes", "find the hook", "reorder the topics". This is the CONTENT-selection pass that writes the "story" block in project.json; it runs after transcribe and before cut-rough.

businessbaum/vedit

This skill should be used when the user asks for the finished video file - "exportier das", "render das fertig", "mach das final", "renderte das Video", "mach den Endexport", "bau das Video zusammen", "mach es fertig für YouTube", "gib mir die MP4", "export the final", "render the final cut", "make the master", "export for TikTok", "give me the mp4". Covers segment rendering with the cache, guarded concat, the one-pass audio, loudness normalisation and the single mux.

Verwandte Skills