Stille schneiden (Pipeline-Agent 1)
Erster Schritt der automatischen Bearbeitung. Nimmt eine Rohaufnahme + ihr Wort-für-Wort-Transkript und entfernt nur Stille: tote Momente vor dem ersten Wort und nach dem letzten Wort, plus Pausen zwischen Wörtern, die länger als ein Schwellenwert sind (gekürzt auf einen natürlichen Atemzug, niemals eine harte Null-Lücke). Die gesprochenen Wörter des Sprechers bleiben unberührt – Fehlstarts, Wiederholungen und Stottern sind Aufgabe des cut-mistakes-Agenten (Agent 2).
Dieser Agent arbeitet deterministisch und transkriptgesteuert, sodass seine Ausgabe (*.silence-transcript.json) sauber an die nächsten Agenten und den Beat-Sync-Validator übergeben werden kann.
Verwendung
- „Schneide die Stille“, „Kürze die Pausen“, „Entferne tote Momente“, „Straffe das Tempo“
- Als erste Stufe des Master-Edit-Workflows, direkt nach der Transkription.
Voraussetzungen
Ein Wort-für-Wort-Transkript im JSON-Format. Entweder das ElevenLabs-Scribe-Format ({ words: [{ text, start, end, type }], audio_duration_secs }) oder ein generisches { words: [{ text, start, end }] }. Erstelle eines mit dem Workspace-Transkriptor:
node scripts/transcribe-elevenlabs.mjs path/to/raw.mp4 # -> path/to/raw.json
Verwendung
# 1) Nur planen – Schnitt berechnen, EDL + neues Transkript schreiben (kein Video berührt)
node .agents/skills/cut-silences/scripts/cut-silences.mjs <transcript.json> \
--out-dir video-projects/<slug>/assets
# 2) Mit Video – auch den ffmpeg-Befehl schreiben (rendert noch nicht)
node .agents/skills/cut-silences/scripts/cut-silences.mjs <transcript.json> \
--video video-projects/<slug>/assets/raw.mp4 --out-dir video-projects/<slug>/assets
# 3) Das geschnittene Video rendern (lokales ffmpeg, Neucodierung, A/V synchron)
# --apply hinzufügen, um ffmpeg tatsächlich auszuführen
node .agents/skills/cut-silences/scripts/cut-silences.mjs <transcript.json> \
--video video-projects/<slug>/assets/raw.mp4 --apply \
--output video-projects/<slug>/assets/edited-silenced.mp4
Optionen
| Flag | Standard | Bedeutung |
|---|---|---|
--video <pfad> | — | Quellvideo; aktiviert den ffmpeg-Befehl / das Rendern |
--out-dir <verz> | neben dem Transkript | Verzeichnis für die Ausgabedateien |
--output <pfad> | <video-stem>.silenced.mp4 | Pfad für das geschnittene Video |
--gap <s> | 0.55 | Mindestpausenlänge, die als schneidbare Stille behandelt wird |
--head-pad <s> | 0.22 | Stille, die vor dem ersten Wort erhalten bleibt |
--tail-pad <s> | 0.34 | Stille, die nach dem letzten Wort erhalten bleibt |
--apply | aus | Führt ffmpeg tatsächlich aus, um den Schnitt zu rendern |
Entscheidungsfindung (die Stille-Regeln)
- Pausen unter
--gap(0,55s) bleiben unberührt – natürlicher Sprechrhythmus. - Bei einer gekürzten Pause wird ein natürlicher Atemzug beibehalten, skaliert nach Kontext:
0,24sfür lange Pausen (≥2s),0,20snach einem Satzende (. ! ?), sonst0,14s. Der beibehaltene Atemzug ist leicht zum Ende des vorherigen Satzes hin verschoben. - Tote Momente am Anfang/Ende werden auf
--head-pad/--tail-padgekürzt. - Löschbereiche werden zusammengeführt; Haltebereiche sind deren Komplement. Der Schnitt wird mit einer ffmpeg-
trim/atrim+concat-Filtergrafik gerendert (geschrieben in ein*.silence-filter.txt-Skript und über-/filter_complexübergeben), sodass Video und Audio synchron bleiben.
Ausgaben (geschrieben in --out-dir)
| Datei | Zweck |
|---|---|
<stem>.silence-edl.json | Halte-/Löschbereiche, Dauern, Parameter – die Editierliste |
<stem>.silence-transcript.json | Wörter neu auf die bearbeitete Zeitleiste getimt (für Agent 2 + Beats) |
<stem>.silence-decisions.md | Lesbare Zusammenfassung + größte gekürzte Pausen |
<stem>.silence-filter.txt | Die ffmpeg-Filtergrafik (nur mit --video) |
<video-stem>.silenced.mp4 | Das geschnittene Video (nur mit --apply) |
Die in stdout ausgegebene JSON-Zusammenfassung enthält removed, removedPct, Bereichszählungen und Ausgabepfade – nützlich für den Master-Workflow zum Protokollieren und Verketten.
Optimierungshinweise
- Standardwert für Talking-Head-YouTube (
--gap 0,55) entfernt etwa 15-20% einer typischen Rohaufnahme als reine Stille. Niedrigerer--gapfür einen knackigeren, schnelleren Schnitt; höherer Wert, um mehr natürlichen Atemraum zu erhalten. - Falls ein Schnitt an Satzgrenzen zu aggressiv wirkt, erhöhe den Satzende-Atemzug oder erhöhe
--gap.
Übergabe an den nächsten Agenten
Übergebe <stem>.silence-transcript.json (und die silenced.mp4, falls gerendert) an den cut-mistakes-Agenten. Da die Zeitstempel bereits auf der bearbeiteten Zeitleiste liegen, funktionieren nachgelagerte Beat-Timings und scripts/validate-beat-sync.mjs ohne weitere Anpassungen.