Communitygithub.com

13kailouis-stack/wecut

Videos lokal schneiden, untertiteln und bearbeiten mit der `wecut` CLI (FFmpeg auf diesem Rechner, keine Cloud, kein API-Key). Nutzen, wenn Short-Form-Clips erstellt, Untertitel oder Karaoke-Einblendungen hinzugefügt, Videos getrimmt oder zusammengefügt, Fotos in Diashows verwandelt, Text, Logos, Musik oder Übergänge eingefügt, 9:16 / 1:1 / 16:9 Video gerendert, die Wirkung eines viralen Videos analysiert oder dessen Format als Vorlage für neues Material wiederverwendet werden soll.

Was ist wecut?

WeCut ist ein leistungsstarkes CLI-Tool (und MCP-Server), das JSON-Projektbeschreibungen in MP4- oder GIF-Videos umwandelt, indem es lokal installiertes FFmpeg nutzt – ganz ohne Cloud-Abhängigkeit oder API-Key. Entwickler und KI-Agenten können damit Short-Form-Clips erstellen, untertiteln (auch Karaoke), Videos trimmen und zusammenfügen, Fotos in Diashops verwandeln, Text, Logos, Musik und Übergänge hinzufügen sowie Formate wie 9:16, 1:1 oder 16:9 rendern. Der Workflow ist klar strukturiert: Zuerst wird die Umgebung mit `wecut doctor` geprüft, dann Medien mit `wecut probe` inspiziert, ein JSON-Projekt geschrieben, mit `wecut validate` validiert, mit `wecut preview` eine Vorschau erzeugt und schließlich mit `wecut render` ausgegeben. Ein besonderes Feature sind die sogenannten „Rezepte“ – editierbare Vorlagen, die den Schnittstil eines viralen Videos extrahieren und auf neues Material anwenden, sodass erfolgreiche Formate ohne Urheberrechtsverletzung kopiert werden können. WeCut unterstützt die MCP-Schnittstelle (z. B. für Claude Code, Cursor, Codex) und bietet dann Werkzeuge wie `wecut_analyze`, `wecut_recipe_list` und `wecut_recipe_apply` für eine nahtlose Integration in Agenten-Workflows. Fehlermeldungen sind ausführlich und enthalten JSON-Pointer sowie Hinweise zur Behebung, was die Fehlersuche vereinfacht.

Funktioniert mit~Claude Code✓Codex CLI~Cursor
npx skills add https://github.com/13kailouis-stack/wecut/tree/HEAD/skills/wecut

In Ihrer bevorzugten KI fragen

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

Dokumentation

Was macht wecut?

wecut rendert ein JSON-Projekt in ein MP4 (oder GIF) mit dem auf diesem Rechner installierten FFmpeg. Du beschreibst den Schnitt; WeCut erledigt die Videoarbeit. Es ruft niemals einen Netzwerkdienst auf.

Wenn wecut nicht im PATH ist, verwende stattdessen überall npx -y wecut (Node 16+). Wenn WeCut als MCP-Server verbunden ist, sind die gleichen Schritte die Werkzeuge wecut_doctor, wecut_probe, wecut_validate, wecut_preview (gibt die Frames als Bilder zurück), wecut_render, wecut_list, wecut_schema, wecut_example, wecut_analyze (gibt das Frame-Blatt als Bild zurück), wecut_recipe_list, wecut_recipe_show, wecut_recipe_apply und wecut_recipe_from_project; übergib ein Projekt als project (Objekt) oder projectFile (Pfad).

Arbeitsablauf

  1. Überprüfe den Rechner einmal: wecut doctor. Wenn es FFmpeg als fehlend meldet, folge dem hint (z. B. sudo apt-get install -y ffmpeg).
  2. Lege Medien im Arbeitsverzeichnis ab. Jeder Pfad in einem Projekt ist relativ zu dem Ordner, von dem aus du wecut ausführst (oder --root VERZ). URLs werden abgelehnt: Lade zuerst Dateien herunter.
  3. Betrachte die Medien: wecut probe media/vortrag.mp4 media/musik.mp3 liefert Dauer, Größe, fps und ob es Audio gibt. Verwende diese Zahlen für from/to.
  4. Schreibe projekt.json (Format siehe unten). wecut example podcast-clip gibt ein vollständiges Beispiel aus; wecut schema gibt das JSON-Schema aus; wecut list zeigt jeden Stil, jede Schriftart, jeden Übergang und jeden Filternamen an.
  5. Validiere: wecut validate projekt.json. Fehler werden mit einem JSON-Pointer (/clips/0/to) und einem hint zurückgegeben. Korrigiere und wiederhole.
  6. Prüfe vor dem Rendern: wecut preview projekt.json --at 0.5,3,10 schreibt kleine JPG-Frames in out/preview/. Öffne sie und überprüfe Bildausschnitt, Textgröße und Untertitelposition.
  7. Rendere: wecut render projet.json. Verwende --preset draft für eine schnelle 540p-Prüfung, die Standardeinstellung final für die endgültige Ausgabe.

Jeder Befehl gibt genau ein JSON-Objekt aus. Exit-Codes: 0 ok, 2 ungültige Eingabe, 3 fehlende Abhängigkeit, 4 Rendern fehlgeschlagen, 5 über einem Limit. Du kannst ein Projekt mit wecut render - über die Pipe einlesen.

Projektformat

{
  "wecut": "1",
  "output": { "file": "out/clip-01.mp4", "ratio": "9:16", "res": 1080, "fps": 30 },
  "clips": [
    { "src": "media/vortrag.mp4", "from": 754.2, "to": 781.0, "focus": { "x": 0.42, "y": 0.5 } },
    { "src": "media/vortrag.mp4", "from": 795.5, "to": 812.0, "zoom": 1.15 }
  ],
  "texts": [
    { "text": "Wie ich meine ersten 10k verdient habe", "start": 0, "end": 3, "style": "hook", "y": 0.2, "in": { "type": "pop" } }
  ],
  "captions": { "words": "media/vortrag.words.json", "src": "media/vortrag.mp4", "style": "karaoke" },
  "audio": [ { "src": "media/musik.mp3", "volume": 25, "loop": true, "duck": true, "fadeOut": 1.5 } ]
}

Wichtige Regeln:

  • Zwei Zeitachsen. Clip from/to sind Sekunden der Quelldatei. Alles andere (texts, overlays, audio.at, filters, effects) sind Sekunden des fertigen Videos. wecut validate gibt die fertige duration aus.
  • Übergänge überlappen sich. Ein transition auf Clip N überblendet zu Clip N+1 und verkürzt das Video um seine duration.
  • Bildausschnitt. Standardmäßig ist fit cover (ausfüllen und zuschneiden). Lenke den Zuschnitt mit focus (0..1; x 0.3 behält die linke Seite) und zoom. Verwende "fit": "contain" mit "background": "blur", um den gesamten Frame anzuzeigen.
  • Positionen sind Bruchteile der Leinwand, 0.5 ist die Mitte. Die Schriftart size ist in Pixeln bei 1080p.
  • Bilder verwenden duration (Standard 3) und können motion haben: in, out, left, right, up, down.
  • Emojis werden nicht im Text gezeichnet. Lege sie in ein PNG und verwende overlays.

Untertitel

Gib WeCut ein Transkript mit Wortzeitangaben und es erstellt Untertitel:

  • words: ein .json-, .srt- oder .vtt-Pfad oder ein Inline-Array [{"word": "hallo", "start": 0.1, "end": 0.4}]. OpenAI/Groq verbose_json und whisper.cpp JSON werden so gelesen, wie sie sind.
  • src: Setze dies auf das Video, zu dem das Transkript gehört. Dann behält das Transkript die eigenen Zeiten der Quelldatei bei, und WeCut verschiebt jedes Wort auf die Ausgabezeitleiste durch jeden Clip, der aus dieser Datei geschnitten wurde (inklusive Geschwindigkeit). Ohne src müssen die Zeiten bereits Ausgabezeiten sein.
  • style: classic, yellow, box-black, box-white, bold, comic, shadow (jeweils eine Phrase), karaoke, karaoke-green (gesprochenes Wort leuchtet auf), pop (jeweils ein großes Wort).

Wenn du ein Transkript benötigst: wecut doctor meldet local_transcription: true, wenn dieses FFmpeg den Whisper-Filter hat. Verwende andernfalls die Spracherkennung, die du bereits hast, und speichere die Wortzeitangaben als JSON.

Vorlagen: Übernehmen, was funktioniert

Ein Rezept ist die Form eines Schnitts ohne seinen Inhalt: Abschnitte (z. B. ein 5-Sekunden-Hook mit einer Überschriftenkarte, dann der Vortrag), Textfelder, Untertitel- und Musikstil, Effekte. Die Anwendung auf neue Clips, Wörter und Musik ergibt ein Projekt.

  1. Analysiere ein Video, das funktioniert hat: wecut analyze media/viral.mp4 liefert Einstellungen und Tempo, Schnitte in den ersten 3 s, Blitze, Tempo, Pausen, einen stillen Plattform-Abspan (weglassen) und sheet: einen Frame pro Einstellung in einem einzigen Bild. Sieh dir das Blatt für die Überschriftenkarte, den Textstil, den Bildausschnitt und den Untertitelstil an.
  2. Wähle oder schreibe ein Rezept: wecut recipe list (integriert: news-headline, news-headline-blur, quote-hook, vlog-phrases, podcast-punch, photo-slideshow, plus recipes/*.json des Arbeitsverzeichnisses). wecut recipe show <name> listet seine Rollen und Textfelder auf. Um eines zu schreiben, folge wecut recipe schema.
  3. Wende es an:
{
  "recipe": "news-headline",
  "clips": [
    { "src": "media/broll.mp4", "role": "hook" },
    { "src": "media/vortrag.mp4", "from": 120, "to": 165 }
  ],
  "texts": { "label": { "text": "Seitenname" }, "headline": { "text": "Die Behauptung in einem Satz", "emphasis": ["behauptung"] } },
  "transcript": "media/vortrag.words.json",
  "write": "projekte/clip-01.json"
}

wecut recipe apply --input request.json (oder --input - mit dem JSON auf stdin) prüft alles und speichert das Projekt; dann preview und render es. Clips ohne Rolle speisen body; ein Abschnitt ohne Clips leiht sich den Anfang des nächsten Filmmaterials.

  1. Speichere dein eigenes: wecut recipe from-project projekte/clip-01.json --name mein-stil --write recipes/mein-stil.json behält Abschnitte, Übergänge, Textfelder, Untertitelstil, Effekte und die Musik als Standardspur.

Musik: Ein Rezept kann seine eigene Spur enthalten (music.src), die standardmäßig wie der Song in einer CapCut-Vorlage verwendet wird. Übergib "music": "media/song.mp3" (oder ein Video, dessen Ton verwendet wird), um sie zu ersetzen, oder "none". Ein aus einem Fremdvideo übernommener Song kann nach dem Hochladen von der Plattform stummgeschaltet werden; das Hinzufügen eines trendigen Sounds in der App beim Posten vermeidet dies.

Kopiere die Struktur, nicht den Inhalt: Filmmaterial, genaue Wortwahl und Musik anderer Ersteller bleiben deren Eigentum.

Mehrere Clips aus einem langen Video erstellen

  1. wecut probe die Quelle und erstelle ein Transkript mit Wortzeitangaben.
  2. Lies das Transkript und wähle die Momente aus (du entscheidest; WeCut bewertet keine Inhalte).
  3. Schreibe ein Projekt pro Clip, jedes mit captions.src, das auf die Quelle verweist, sodass ein Transkript für jeden Clip dient.
  4. wecut preview eines davon, passe focus an, dann wecut render jedes.

Fehlerbehebung

  • E_RANGE: to liegt hinter dem Ende der Datei. Verwende wecut probe für die tatsächliche Dauer.
  • E_PATH: der Pfad liegt außerhalb des Arbeitsverzeichnisses oder ist eine URL.
  • E_MEDIA: die Datei ist keine lesbare Video-, Bild- oder Audiodatei oder die falsche Art für dieses Feld (Musik in clips, Video in overlays).
  • E_DEPENDENCY: FFmpeg fehlt, ist älter als 6 oder wurde ohne libass erstellt. Führe wecut doctor aus.
  • Rendern zu langsam: --preset draft, eine niedrigere output.res oder weniger Clips pro Projekt. render_seconds und realtime_factor im Ergebnis zeigen die Geschwindigkeit auf diesem Rechner.
  • Um genau zu sehen, was FFmpeg ausführen wird: wecut render project.json --dry-run.

Verwandte Skills