Was macht Stille-Schneiden (Pipeline Agent 1)?
Erster Schritt der automatisierten Bearbeitung. Nimmt eine Rohaufnahme und ihr Wort-für-Wort-Transkript und entfernt nur Stille: tote Luft vor dem ersten Wort und nach dem letzten Wort, sowie Wortpausen länger als ein Schwellenwert (gekürzt auf einen natürlichen Atemzug, nie auf eine harte Lücke). Es lässt die Wörter des Sprechers unberührt – Fehlstarts, Neuaufnahmen und Stotterer sind die Aufgabe des cut-mistakes Agenten (Agent 2).
Dieser Agent ist deterministisch und transkriptgesteuert, sodass seine Ausgabe (*.silence-transcript.json) sauber an die nächsten Agenten und den Beat-Sync-Validator übergeben werden kann.
Wann verwenden
- "Schneide die Stille heraus", "Kürze die Pausen", "Entferne tote Luft", "Straffe das Tempo"
- Als erste Stufe des Master-Edit-Workflows, direkt nach der Transkription.
Voraussetzungen
Ein Wort-für-Wort-Transkript als JSON. Entweder im ElevenLabs Scribe Format
({ words: [{ text, start, end, type }], audio_duration_secs }) oder einem generischen
{ words: [{ text, start, end }] }. Erzeugen Sie eines mit dem Workspace-Transkriptor:
node scripts/transcribe-elevenlabs.mjs path/to/raw.mp4 # -> path/to/raw.json
Verwendung
# 1) Nur Planung – Schnitt berechnen, EDL + neu getimtes Transkript schreiben (kein Video bearbeitet)
node .agents/skills/cut-silences/scripts/cut-silences.mjs <transkript.json> \
--out-dir video-projects/<slug>/assets
# 2) Mit einem Video – auch den ffmpeg-Befehl schreiben (noch keine Ausführung)
node .agents/skills/cut-silences/scripts/cut-silences.mjs <transkript.json> \
--video video-projects/<slug>/assets/raw.mp4 --out-dir video-projects/<slug>/assets
# 3) Das geschnittene Video rendern (lokales ffmpeg, Neuencodierung, A/V synchron halten)
# --apply hinzufügen, um ffmpeg tatsächlich auszuführen
node .agents/skills/cut-silences/scripts/cut-silences.mjs <transkript.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 / Render |
--out-dir <verz> | neben dem Transkript | Ausgabeverzeichnis für die Ergebnisse |
--output <pfad> | <video-stem>.silenced.mp4 | Pfad für das geschnittene Video |
--gap <s> | 0.55 | Minimale Pause, die als entfernbare Stille gilt |
--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 |
Entscheidungslogik (Die Stille-Regeln)
- Pausen unter
--gap(0,55s) werden belassen – natürlicher Sprechrhythmus. - Bei einer gekürzten Pause wird ein natürlicher Atemzug erhalten, skaliert nach Kontext:
0,24sfür lange Pausen (≥2s),0,20snach einem Satzende (. ! ?), andernfalls0,14s. Der erhaltene Atemzug ist leicht zum Ende der vorherigen Phrase hin tendiert. - Tote Luft am Anfang/Ende wird auf
--head-pad/--tail-padgekürzt. - Entfernungsbereiche werden zusammengeführt; Behaltensbereiche sind das Komplement. Der Schnitt wird mit einem ffmpeg
trim/atrim+concatFiltergraph gerendert (geschrieben in eine*.silence-filter.txtDatei und über-filter_complexübergeben), sodass Video und Audio synchron bleiben.
Ausgaben (geschrieben in --out-dir)
| Datei | Zweck |
|---|---|
<stem>.silence-edl.json | Schnitt-/Behaltensbereiche, Dauern, Parameter – die Edit Decision List |
<stem>.silence-transcript.json | Wörter neu getimt auf die bearbeitete Zeitleiste (füttert Agent 2 + Beats) |
<stem>.silence-decisions.md | Für Menschen lesbare Zusammenfassung + größte gekürzte Pausen |
<stem>.silence-filter.txt | Der ffmpeg Filtergraph (nur mit --video) |
<video-stem>.silenced.mp4 | Das geschnittene Video (nur mit --apply) |
Die JSON-Zusammenfassung, die auf stdout ausgegeben wird, enthält removed, removedPct, Bereichszahlen und Ausgabepfade – nützlich für den Master-Workflow zur Protokollierung und Verkettung.
Abstimmungshinweise
- YouTube-Talking-Head-Standard (
--gap 0,55) entfernt typischerweise etwa 15–20% einer rohen Aufnahme als reine Stille. Niedrigeres--gapfür einen knackigeren, schnelleren Schnitt; höheres--gap, um mehr natürliche Atempausen zu erhalten. - Falls ein Schnitt an Satzgrenzen zu aggressiv wirkt, erhöhen Sie den Atemzug bei Satzenden oder erhöhen Sie
--gap.
Übergabe an den nächsten Agenten
Übergeben Sie <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 das Beat-Timing und scripts/validate-beat-sync.mjs ohne weitere Anpassungen.