Communitygithub.com

Rohmaterial zu Shorts: Takes per Chat zu final.mp4

Schneidet jedes Video im Gespräch: Rohaufnahmen in einen Ordner legen, edit/final.mp4 zurückbekommen. Kostenlose lokale Whisper-Transkription, Füllwörter und Pausen raus, Color Grading pro Segment, 30-ms-Audioblenden an jedem Schnitt, eingebrannte Untertitel und Animations-Overlays, Selbstprüfung an jedem Schnitt. Kein API-Key nötig.

Was ist Rohmaterial zu Shorts: Takes per Chat zu final.mp4?

Rezept Rohmaterial zu Shorts, Schritt 1 (der fertige Master), aus Moh4696/freecut, einem Fork von browser-use/video-use, der die kostenpflichtige ElevenLabs-Abhängigkeit durch kostenlose, austauschbare Transkription ersetzt. Läuft in Claude Code, Codex und jedem Agenten mit Shell-Zugriff; Installation mit npx skills add Moh4696/freecut. Transkribiert Takes lokal (mlx-whisper oder faster-whisper; optional VibeVoice oder ElevenLabs für Sprechertrennung), erstellt ein Transkript auf Phrasenebene, stellt materialbezogene Fragen, schlägt eine Schnittstrategie in 4–8 Sätzen vor und wartet auf Ihr OK. Danach schreibt es eine EDL, gradet jedes Segment mit ffmpeg, setzt 30-ms-Blenden an jeden Schnitt, baut Overlays in parallelen Sub-Agenten (HyperFrames, Remotion, Manim oder PIL), brennt Untertitel zuletzt ein, prüft das Rendering an jeder Schnittgrenze (maximal 3 Durchläufe) und speichert das Sitzungsgedächtnis in project.md.

Funktioniert mit✓Claude Code✓Codex CLI~Cursor
npx skills add Moh4696/freecut

In Ihrer bevorzugten KI fragen

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

Dokumentation

freecut

Prinzip

  1. LLM schlussfolgert aus rohem Transkript + bedarfsgesteuerten Bildern. Das einzige abgeleitete Artefakt, das sich lohnt, ist ein gepacktes Phrasentranskript (takes_packed.md). Alles andere – Füllwort-Tagging, Retake-Erkennung, Shot-Klassifizierung, Betonungsbewertung – leitest du zum Entscheidungszeitpunkt ab.
  2. Audio ist primär, Bilder folgen. Schnittkandidaten stammen aus Sprachgrenzen und Stillelücken. Tauche nur an Entscheidungspunkten in die Bilder ein.
  3. Fragen → Bestätigen → Ausführen → Iterieren → Persistieren. Führe den Schnitt niemals aus, bevor der Nutzer die Strategie in einfachem Englisch bestätigt hat.
  4. Verallgemeinere. Gehe nicht davon aus, um welche Art von Video es sich handelt. Sieh dir das Material an, frage den Nutzer und schneide dann.
  5. Künstlerische Freiheit ist die Voreinstellung. Jeder spezifische Wert, jedes Preset, jede Schriftart, Farbe, Dauer, Tonhöhenstruktur und Technik in diesem Dokument ist ein ausgearbeitetes Beispiel aus einem bewährten Video – kein Befehl. Lies sie, um zu verstehen, was möglich ist und warum jedes funktioniert hat. Triff dann deine eigenen Geschmacksentscheidungen, basierend auf dem tatsächlichen Material und den tatsächlichen Wünschen des Nutzers. Das Einzige, was du TUN MUSST, steht im Abschnitt Harte Regeln unten. Alles andere liegt bei dir.
  6. Erfinde frei. Wenn das Material eine hier nicht beschriebene Technik erfordert – geteilter Bildschirm, Bild-im-Bild, Identitätskarten im unteren Drittel, Reaktionsschnitte, Geschwindigkeitsrampen, Standbilder, Überblendungen, Match Cuts, L-Cuts, J-Cuts, Geschwindigkeitsrampen über Atem, was auch immer – baue sie. Die Helfer sind ffmpeg und PIL. Sie können alles, was das Format unterstützt. Warte nicht auf Erlaubnis.
  7. Überprüfe deine eigene Ausgabe, bevor du sie dem Nutzer zeigst. Wenn du sie nicht ausliefern würdest, präsentiere sie nicht.

Harte Regeln (Produktionskorrektheit – nicht verhandelbar)

Dies sind die Dinge, bei denen Abweichung zu stillen Fehlern oder kaputter Ausgabe führt. Sie sind kein Geschmack, sondern Korrektheit. Merke sie dir.

  1. Untertitel werden als LETZTES in der Filterkette angewendet, nach jedem Overlay. Andernfalls verbergen Overlays die Untertitel. Stiller Fehler.
  2. Extraktion pro Segment → verlustfreie -c copy-Verkettung, nicht Single-Pass-Filtergraph. Andernfalls encodierst du jedes Segment doppelt, wenn Overlays hinzugefügt werden.
  3. 30ms Audio-Fades an jeder Segmentgrenze (afade=t=in:st=0:d=0.03,afade=t=out:st={dur-0.03}:d=0.03). Andernfalls hörbare Knackgeräusche an jedem Schnitt.
  4. Overlays verwenden setpts=PTS-STARTPTS+T/TB, um Frame 0 des Overlays an seinen Fensterstart zu verschieben. Andernfalls siehst du die Mitte der Animation während des Overlay-Fensters.
  5. Master-SRT verwendet Ausgabe-Zeitleisten-Offsets: output_time = word.start - segment_start + segment_offset. Andernfalls sind Untertitel nach der Segmentverkettung falsch ausgerichtet.
  6. Schneide niemals innerhalb eines Wortes. Jede Schnittkante muss an einer Wortgrenze aus dem Transkript einrasten.
  7. Polstere jede Schnittkante. Arbeitsfenster: 30–200 ms. ASR-Zeitstempel driften um 50–100 ms – die Polsterung absorbiert die Drift. Enger bei schnellem Tempo, lockerer bei filmischem Tempo.
  8. Nur wortgenaues ASR. Niemals SRT- / Phrasenmodus (verliert Sub-Sekunden-Lückendaten). Niemals normalisierte Füllwörter (verliert redaktionelles Signal).
  9. Cache Transkripte pro Quelle. Transkribiere niemals neu, es sei denn, die Quelldatei selbst hat sich geändert.
  10. Parallele Sub-Agenten für mehrere Animationen. Niemals sequentiell. Erzeuge N gleichzeitig über das Agent-Tool; die gesamte Wandzeit ≈ die des langsamsten.
  11. Strategiebestätigung vor der Ausführung. Führe den Schnitt niemals aus, bevor der Nutzer den Plan in einfachem Englisch genehmigt hat.
  12. Alle Sitzungsausgaben in <videos_dir>/edit/. Schreibe niemals innerhalb des freecut/-Projektverzeichnisses.

Alles andere in diesem Dokument ist ein ausgearbeitetes Beispiel. Weiche ab, wann immer das Material es erfordert.

Verzeichnisstruktur

Der Skill lebt in freecut/. Das Filmmaterial des Nutzers liegt, wo immer er es platziert. Alle Sitzungsausgaben gehen in <videos_dir>/edit/.

<videos_dir>/
├── <Quelldateien, unberührt>
└── edit/
    ├── project.md              ← Gedächtnis; wird jeder Sitzung angehängt
    ├── takes_packed.md         ← Phrasentranskripte, die primäre Lesesicht des LLM
    ├── edl.json                ← Schnittentscheidungen
    ├── transcripts/<name>.json ← zwischengespeichertes normalisiertes ASR-JSON
    ├── animations/slot_<id>/   ← Quellen + Rendering + Begründung pro Animation
    ├── clips_graded/           ← Extraktionen pro Segment mit Grading + Fades
    ├── master.srt              ← Untertitel der Ausgabezeitleiste
    ├── downloads/              ← yt-dlp Ausgaben
    ├── verify/                 ← Debug-Frames / Zeitleisten-PNGs
    ├── preview.mp4
    └── final.mp4

Einrichtung

Die Ersteinrichtung befindet sich in install.md (Klonen, Abhängigkeiten, ffmpeg, Skill-Registrierung, API-Key). Führe es nicht in jeder Sitzung erneut aus; bei Kaltstart überprüfe einfach:

  • Transkriptions-Backend ist verfügbar. Standard ist whisper (kostenlos, lokal) – überprüfe, ob mlx-whisper (Apple Silicon) oder faster-whisper importierbar ist. Wenn keines installiert ist, teile dem Nutzer mit, pip install mlx-whisper (oder faster-whisper) auszuführen, anstatt stillschweigend auf ein kostenpflichtiges Backend zurückzufallen. Für die optionalen vibevoice / elevenlabs-Backends überprüfe VIBEVOICE_ASR_URL / ELEVENLABS_API_KEY in der Umgebung oder .env im freecut-Repo-Stammverzeichnis.
  • ffmpeg + ffprobe im PATH.
  • Python-Abhängigkeiten installiert (uv sync oder pip install -e . im Repo).
  • Node.js + npm verfügbar, falls die Sitzung HyperFrames- oder Remotion-Slots benötigt. HyperFrames benötigt derzeit Node.js 22+.
  • yt-dlp, HyperFrames, Remotion, Manim nur bei erster Verwendung installieren.
  • Die Einrichtung von Animationen bei erster Verwendung erfolgt innerhalb des Slot-Verzeichnisses, niemals im freecut-Repo-Stammverzeichnis. HyperFrames kann mit npx --yes hyperframes ... aufgerufen werden; Remotion kann mit npx create-video@latest gerüstet oder als projektspezifische Abhängigkeit installiert werden, bevor der Befehl remotion render verwendet wird.
  • Dieser Skill vertreibt skills/manim-video/. Lies seine SKILL.md, wenn du einen Manim-Slot baust.

Helfer (helpers/transcribe.py, helpers/render.py, etc.) leben neben dieser SKILL.md. Löse ihre Pfade relativ zum Verzeichnis auf, das diese Datei enthält – der Skill ist normalerweise unter ~/.claude/skills/freecut/ oder ~/.codex/skills/freecut/ symbolisch verlinkt.

Helfer

  • transcribe.py <video> – Einzeldatei-Transkription. Austauschbares Backend über --backend {whisper,vibevoice,elevenlabs} (Standard whisper, lokal + kostenlos, einzelner Sprecher). vibevoice verwendet VIBEVOICE_ASR_URL für echte Diarisierung; elevenlabs verwendet ELEVENLABS_API_KEY und unterstützt --num-speakers. Zwischengespeichert.
  • transcribe_batch.py <videos_dir> – Parallele Transkription mit 4 Arbeitern. Gleiches --backend-Flag. Verwende für mehrere Takes.
  • pack_transcripts.py --edit-dir <dir> – transcripts/*.json → takes_packed.md (Phrasenebene, Umbruch bei Stille ≥ 0,5 s oder Sprecherwechsel). Funktioniert backendübergreifend identisch, da die JSON-Struktur normalisiert ist.
  • timeline_view.py <video> <start> <end> – Filmstreifen + Wellenform-PNG. Bedarfsgesteuerter visueller Drill-Down. Kein Scan-Tool – verwende es an Entscheidungspunkten, nicht ständig.
  • render.py <edl.json> -o <out> – Extraktion pro Segment → Verkettung → Overlays (PTS-verschoben) → Untertitel ZULETZT. --preview für 720p schnell. --build-subtitles zum Generieren von master.srt inline.
  • grade.py <in> -o <out> – ffmpeg-Filterketten-Grading. Presets + --filter '<raw>' für benutzerdefiniert.

Erstelle für Animationen <edit>/animations/slot_<id>/ mit Bash und starte einen Sub-Agenten über das Agent-Tool.

Der Prozess

  1. Inventar. ffprobe für jede Quelle. transcribe_batch.py für das Verzeichnis. pack_transcripts.py zur Erstellung von takes_packed.md. Mustere ein oder zwei timeline_views für einen visuellen ersten Eindruck.

  2. Vorab-Scan auf Probleme. Ein Durchlauf durch takes_packed.md, um verbale Ausrutscher, offensichtliche Versprecher oder zu vermeidende Formulierungen zu notieren. Einfache Liste, in die Editor-Brief einfließen lassen.

  3. Konversation. Beschreibe, was du siehst, in einfachem Englisch. Stelle Fragen, die vom Material geprägt sind. Sammle: Inhaltstyp, Ziellänge/-Seitenverhältnis, ästhetische/markenbezogene Ausrichtung, Tempo-Gefühl, Momente, die erhalten bleiben müssen, Momente, die geschnitten werden müssen, Animations- und Grading-Präferenzen, Untertitel-Bedarf. Verwende keine feste Checkliste – die richtigen Fragen sind jedes Mal anders.

  4. Strategie vorschlagen. 4–8 Sätze: Form, Auswahl der Takes, Schnittrichtung, Animationsplan, Grading-Richtung, Untertitel-Stil, Längenschätzung. Warte auf Bestätigung.

  5. Ausführen. Erzeuge edl.json über den Editor-Sub-Agenten-Brief. Tauche bei mehrdeutigen Momenten in timeline_view ein. Baue Animationen in parallelen Sub-Agenten. Wende Grading pro Segment an. Komponiere über render.py.

  6. Vorschau. render.py --preview.

  7. Selbstbewertung (bevor du es dem Nutzer zeigst). Führe timeline_view auf der gerenderten Ausgabe (nicht den Quellen) an jeder Schnittgrenze aus (±1,5 s Fenster). Überprüfe jedes Bild auf:

    • Visuelle Diskontinuität / Blitz / Sprung am Schnitt
    • Wellenform-Spitze an der Grenze (Audioknackgeräusch, das den 30ms-Fade passiert hat)
    • Untertitel, die von einem Overlay verdeckt werden (Verstoß gegen Regel 1)
    • Overlay falsch ausgerichtet oder falsche Frames anzeigend (Verstoß gegen Regel 4)

    Muster auch: erste 2 s, letzte 2 s und 2–3 Mittelpunkte – überprüfe Grading-Konsistenz, Untertitellesbarkeit, Gesamtkohärenz. Führe ffprobe auf der Ausgabe aus, um zu überprüfen, ob die Dauer der EDL-Erwartung entspricht.

    Wenn etwas fehlschlägt: beheben → neu rendern → neu bewerten. Begrenze auf 3 Selbstbewertungsdurchläufe – wenn nach 3 Durchläufen noch Probleme bestehen, melde sie dem Nutzer, anstatt in einer Endlosschleife zu verharren. Zeige die Vorschau nur, wenn die Selbstbewertung bestanden ist.

  8. Iterieren + Persistieren. Rückmeldung in natürlicher Sprache, Neuplanung, Neu-Rendering. Transkribiere niemals neu. Finales Rendern nach Bestätigung. An project.md anhängen.

Schnitt-Handwerk (Techniken)

  • Audio zuerst. Schnittkandidaten aus Wortgrenzen und Stillelücken.
  • Bewahre Höhepunkte. Lachen, Pointen, Betonungsschläge. Gehe über Pointen hinaus, um Reaktionen einzuschließen – das Lachen IST der Schlag.
  • Sprecherwechsel profitieren von Luft zwischen den Äußerungen. Übliche Werte: 400–600 ms. Weniger bei schnellem Tempo, mehr bei filmischem Tempo. Geschmackssache.
  • Audio-Ereignisse als Signale. (lacht), (seufzt), (Applaus) markieren Taktschläge. Gehe über sie hinaus.
  • Stillelücken sind Schnittkandidaten. Stille ≥400 ms ist normalerweise am saubersten. Phrasengrenzen von 150–400 ms sind mit einem visuellen Check nutzbar. <150 ms ist unsicher (mitten in der Phrase).
  • Beispiel für Schnittpolsterung (das mitgelieferte Launch-Video): 50 ms vor dem ersten erhaltenen Wort, 80 ms nach dem letzten. Enger für Montage-Energie, lockerer für Dokumentationen. Bleibe im Arbeitsfenster von 30–200 ms (Harte Regel 7).
  • Ziehe niemals unabhängige Schlussfolgerungen aus Audio und Video. Jeder Schnitt muss auf beiden Spuren funktionieren.

Das gepackte Transkript (primäre Lesesicht)

pack_transcripts.py liest alle transcripts/*.json und erzeugt eine Markdown-Datei, in der jeder Take eine Liste von Phrasenzeilen ist, jede mit ihrem [Start-Ende]-Zeitbereich versehen. Phrasen brechen bei einer Stille ≥ 0,5 s ODER Sprecherwechsel. Dies ist das Artefakt, das der Editor-Sub-Agent liest, um Schnitte auszuwählen – es bietet Wortgrenzgenauigkeit allein aus Text mit 1/10 der Token von rohem JSON.

Beispielzeile:

## C0103  (Dauer: 43,0 s, 8 Phrasen)
  [002.52-005.36] S0 Neunzig Prozent dessen, was ein Web-Agent tut, ist völlig verschwendet.
  [006.08-006.74] S0 Wir haben das behoben.

Editor-Sub-Agenten-Brief (für die Auswahl mehrerer Takes)

Wenn die Aufgabe darin besteht, "den besten Take jedes Takts aus vielen Clips auszuwählen", starte einen dedizierten Sub-Agenten mit einem Brief, der so geformt ist. Die Struktur ist tragend; das Pitch-Shape-Beispiel ist nicht.

Du schneidest ein <Typ>-Video. Wähle den besten Take jedes Takts aus und 
stelle sie chronologisch nach Takt zusammen, nicht nach der Reihenfolge des Quellclips.

EINGABEN:
  - takes_packed.md (zeitannotierte Phrasentranskripte aller Takes)
  - Produkt-/Erzählkontext: <2 Sätze vom Nutzer>
  - Sprecher: <Name, Rolle, Hinweis zum Vortragsstil>
  - Erwartete Struktur: <wähle einen Archetyp oder erfinde einen>
  - Zu vermeidende verbale Ausrutscher: <Liste aus dem Vorab-Scan>
  - Ziellaufzeit: <Sekunden>

Gängige strukturelle Archetypen (wähle, passe an oder erfinde):
  - Tech-Launch / Demo: HOOK → PROBLEM → LÖSUNG → NUTZEN → BEISPIEL → CTA
  - Tutorial: EINFÜHRUNG → EINRICHTUNG → SCHRITTE → STOLPERFALLEN → ZUSAMMENFASSUNG
  - Interview: (FRAGE → ANTWORT → NACHRAGE) wiederholt
  - Reise / Event: ANKUNFT → HIGHLIGHTS → RUHIGE MOMENTE → ABREISE
  - Dokumentation: THESE → BEWEISE → GEGENARGUMENT → SCHLUSSFOLGERUNG
  - Musik / Performance: INTRO → STROPHE → REFRAIN → BRÜCKE → OUTRO
  - Oder erfinde deine eigene.

REGELN:
  - Start-/Endzeiten müssen auf Wortgrenzen aus dem Transkript fallen.
  - Polstere Schnittgrenzen (Arbeitsfenster 30–200 ms).
  - Bevorzuge Stille ≥ 400 ms als Schnittziele.
  - Unvermeidbare Ausrutscher werden behalten, wenn kein besserer Take existiert. Notiere sie in "reason".
  - Bei Budgetüberschreitung revidiere: lasse einen Takt aus oder trimme Enden. Melde die Gesamtzeit und korrigiere selbst.

AUSGABE (JSON-Array, kein Prosa):
  [{"source": "C0103", "start": 2.42, "end": 6.85, "beat": "HOOK",
    "quote": "...", "reason": "..."}, ...]

Gib die endgültige EDL und eine einzeilige Gesamtlaufzeitprüfung zurück.

Farbkorrektur (auf Anfrage)

Deine Aufgabe ist es, über das Bild nachzudenken, nicht ein Preset anzuwenden. Sieh dir einen Frame an (über timeline_view), entscheide, was falsch ist, passe eine Sache an, sieh noch einmal hin.

Das Gedankenmodell ist ASC CDL. Pro Kanal: out = (in * slope + offset) ** power, dann globale Sättigung. slope → Lichter, offset → Schatten, power → Mitteltöne.

Beispiel-Filterketten (grade.py hat --list-presets; verwende sie als Ausgangspunkte oder mische deine eigenen):

  • warm_cinematic — Retro/technisch, subtiler Teal/Orange-Split, entsättigt. Ausgeliefert in einem echten Launch-Video. Sicher für Sprecherporträts.
  • neutral_punch — minimal korrigierend: Kontrastanhebung + sanfte S-Kurve. Keine Farbtonverschiebungen.
  • none — direkte Kopie. Standard, wenn der Nutzer nichts gefragt hat.

Für alles andere – Porträt, Natur, Produkt, Musikvideo, Dokumentation – erfinde deine eigene Kette. grade.py --filter '<raw ffmpeg>' akzeptiert jeden Filter-String.

Harte Regeln: wende sie pro Segment während der Extraktion an (nicht nach der Verkettung, was zweimal encodiert). Gehe niemals aggressiv vor, ohne Hauttöne zu testen.

Untertitel (auf Anfrage)

Untertitel haben drei Dimensionen, über die es sich nachzudenken lohnt: Chunking (1/2/3/Satz pro Zeile), Schreibweise (GROSSSCHRIFT/Titel/Natürlich) und Platzierung (Abstand von unten). Die richtige Kombination hängt vom Inhalt ab.

Ausgearbeitete Stile – wähle, passe an oder erfinde.

(Hinweis: Der ursprüngliche Inhalt wurde hier gekürzt. Die vollständige Übersetzung würde die restlichen Abschnitte des SKILL.md-Dokuments umfassen.)

Individual skills in this repo

This repo contains 1 individual skill — each has its own dedicated page.

Verwandte Skills