Communitygithub.com

ClaudinNarsis/claude-video-skills

Bearbeite Video und Audio mit lokalem FFmpeg über natürlichsprachliche Anfragen: Schneiden, Trimmen, Zusammenfügen, Größe ändern/neu einrahmen (9:16, 1:1), Geschwindigkeit ändern, Untertitel und Bildunterschriften (SRT/ASS, animiert, Karaoke), Logos und Texteinblendungen, Lower Thirds und Titel, Stille entfernen, Multicam- und externes Mikrofon synchronisieren, Lautstärke normalisieren, HDR/Dolby Vision zu SDR, LUTs, Hintergrundmusik mit Ducking, Plattformexports (YouTube, Reels, TikTok, X), Compliance-Prüfungen, Szenenerkennung und Highlight-Reels, Kontaktbögen zur Ergebnisprüfung und vollständige Projektdateien. Verwende dieses Skill, wenn der Benutzer eine Video- oder Audiodatei (mp4, mov, mkv, wav, m4a), Filmmaterial, einen Clip, Untertitel, Bildunterschriften, ein Reel oder Kurzvideo, YouTube/Instagram/TikTok-Auslieferung, LUFS, Synchronisation, Transkodierung, ffmpeg erwähnt oder darum bittet, etwas '60 Sekunden', 'vertikal', 'lauter' oder 'mit Untertiteln' zu machen – selbst wenn er nicht 'bearbeiten' sagt. Nur Python 3.10+ Standardbibliothek (3.9 veraltet), keine Cloud, keine API-Schlüssel.

Was ist claude-video-skills?

Dieses Skill bietet eine umfassende Suite von 42 Python-Skripten zur Video- und Audiobearbeitung unter Verwendung von lokalem FFmpeg. Es kann eine Vielzahl von Aufgaben ausführen, von einfachen Schnitten und Trimmen bis hin zu komplexen Arbeitsabläufen wie Multicam-Synchronisation, HDR-zu-SDR-Konvertierung und Plattform-spezifischen Exports. Das Skill ist so konzipiert, dass es völlig offline ohne Cloud-Dienste oder API-Schlüssel arbeitet, was es ideal für datenschutzbewusste Benutzer und lokale Workflows macht. Alle Skripte befinden sich in einem `scripts/`-Verzeichnis und werden mit Python 3.10+ ausgeführt; sie teilen gemeinsame Flags wie `--dry-run` für die Planung und `--json` für maschinenlesbare Ausgaben. Das Skill umfasst auch Vorlagen für die Auslieferung an Plattformen wie YouTube, Instagram Reels, TikTok und X, sodass eine einfache Optimierung für spezifische Videoformate und Lautstärkestandards möglich ist. Es ist wichtig zu beachten, dass dieses Skill Bearbeitungen ausführt, aber keine kreativen Entscheidungen trifft – es misst, trimmt und konvertiert, aber die Wahl des richtigen Szenenausschnitts, des Stils oder der Ästhetik liegt beim Benutzer oder einem anderen Skill. Das Skill interagiert mit dem planenden Agenten über eine strukturierte Tabelle, die Anfragen den entsprechenden Skripten zuordnet, und bietet über eine MCP-Schnittstelle sowohl eine Kernmenge von 12 als auch alle 42 Skripte (wenn `FFMPEG_SKILL_MCP_FULL=1` gesetzt ist).

Funktioniert mit✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/ClaudinNarsis/claude-video-skills/tree/HEAD/skills/ffmpeg-skill

In Ihrer bevorzugten KI fragen

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

Dokumentation

ffmpeg-skill

Skripte befinden sich in scripts/ neben dieser Datei; führe sie mit python3 <skill-verz>/scripts/<name>.py aus, und Auslieferungsvorlagen in templates/. Diese Datei reicht für einen Auftrag: Die folgende Tabelle leitet die Anfrage weiter, und --help des Skripts, das ausgeführt werden soll, ist die günstigste vollständige Flag-Liste. Eine Referenzdatei kostet so viel wie diese; öffne eine nur für eine Frage, die du hast: references/scripts.md (jedes Flag aller 42 Skripte), references/devices.md (iPhone HDR, GoPro, DJI, Bildschirmaufnahmen, Zoom), references/gotchas.md (die ausführliche Form der einzeiligen Regeln am Ende). MCP: tools/list zeigt standardmäßig nur die 12 Kernskripte; die anderen 30 (gemäß dieser Tabelle) bleiben über tools/call mit Namen aufrufbar, beschrieben durch contract --json; setze FFMPEG_SKILL_MCP_FULL=1 für alle 42.

Gemeinsame Flags (jedes Skript): --dry-run; --json (Ausgabepfad, dessen Probe, die ausgeführten Befehle); --json-brief (Status/Ausgabe/verifiziert + eine summary; bevorzuge bei schreibenden Schritten); --fast (Vorschauqualität); --progress (Prozent/ETA); --timeout SEKUNDEN (kind: timeout, Standard 1800); --overwrite (Schritt 7); --plan DATEI (ein Trockenlauf render.py DATEI wird später ausgeführt; lehnt ab, wenn sich eine Eingabe geändert hat). Neuencodierungswerkzeuge akzeptieren auch --hw (Apple Silicon GPU, große Dateien; FFMPEG_SKILL_HW=1 = Standard, nicht Export), --codec h264|hevc|av1|prores und --quality N: nicht gesetzt, SDR ist x264 (cut.py --keep-hevc: HEVC-Quelle bleibt HEVC), HDR ist x265 Main10; prores benötigt -o NAME.mov, h264 lehnt HDR ab (color.py --to-sdr zuerst).

Schreibwerkzeuge führen unter --dry-run nichts aus; die Messwerkzeuge (probe, check, sync, multicam, scenes, cropdetect, report, silence, loudness, stabilize; overlay für einen mehrzeiligen --text auf FFmpeg 8.0-8.1.0) können trotzdem ffmpeg/ffprobe ausführen und überspringen Artefakte/Seitendateien (--edl, --sheet, ein generiertes .ass); verify ignoriert das Flag. Pro Werkzeug: contract --json dry_run.

Arbeitsablauf (in dieser Reihenfolge)

  1. Umgebung, nur bei Fehlschlag. Starte niemals einen Auftrag mit doctor: Eine defekte Maschine schlägt mit kind: missing_tool oder einem ffmpeg-Fehler fehl, der den Filter/Encoder benennt. Führe python3 <skill-verz>/scripts/_contract.py doctor (oder npx ffmpeg-skill doctor) nach einem solchen Fehler aus oder wenn gefragt wird, was die Maschine kann: lies ok/usable, melde die fehlende Fähigkeit. Das Tool-Schema von contract --json ist für einen planenden Agenten, nicht für diesen Arbeitsablauf.
  2. Untersuche, was du planen musst. Führe probe.py für jede Eingabe aus, von der du planst – Dauer, fps, Auflösung, Codecs, Kanäle, variable_frame_rate_suspected – und immer dann, wenn der Benutzer nach einer Datei fragt. Keine separate Untersuchung vor jeder Bearbeitung: Das --json jedes Schreibwerkzeugs enthält bereits seine Eingabe und eine Untersuchung der Ausgabe. Plane anhand von echten Zahlen, niemals von Annahmen.
  3. Bevorzuge verlustfrei. Wenn die Anforderung ohne Neuencodierung erfüllt werden kann (einfache Schnitte an Keyframes, Remuxen, reine Audio-Änderungen), codiere nicht neu. cut.py und loudness.py kopieren Video standardmäßig per Stream; --accurate bei cut.py nur für frame-genaue Schnitte.
  4. Plane mit --dry-run --json, dann führe aus. Vertraue für jede Zahl im Plan auf --json, nicht auf die Zusammenfassungszeile eines Trockenlaufs (eine Dimension kann dort ein Platzhalter sein). Verwende vor langen Encodierungen, um Fakten zu berichten. Zeige niemals mit -o auf eine Datei, die du in diesem Auftrag nicht erstellt hast, es sei denn, der Benutzer hat darum gebeten, dass sie ersetzt wird; verwende --overwrite nur dann.
  5. Verkette in einer sinnvollen Reihenfolge. Eine Auslieferungsanfrage ohne andere Bearbeitung ist ein einziger Vorlagenlauf (render.py --template NAME INPUT), keine manuell erstellte Kette. Ansonsten: Farbe (HDR→SDR / LUT) → Schnitt → Zusammenfügen → Stille → Anpassen → Untertitel/Overlay → Synchronisieren → Audio → Lautstärke → Export. Rahmenänderungen vor Untertiteln, damit Text für den endgültigen Rahmen dimensioniert ist. Codiere so selten wie möglich neu: Zwischenprodukte bei CRF 18, export.py zuletzt. Drei oder mehr Schritte: render.py mit einer project.json.
  6. Überprüfe das Ergebnis. Bevor du berichtest, führe check.py AUSGABE --platform X für das genannte Ziel aus (ein Vorlagenlauf macht das bereits). Formatzeilen (Codec, Pixelformat, Größe, True Peak, Farb-Tags, VFR) sind sicher zu korrigieren. Urteilszeilen ändern den Inhalt: Dauer (Schnitt verliert Material), Seitenverhältnis (Zuschnitt verliert Kanten), fps (verliert Bewegung), Lautstärke (Atmosphäre darf nicht verstärkt werden) – korrigiere nur, wenn die Anfrage die Antwort impliziert, ansonsten nenne die Wahl und ihre Kosten. Erwähne WARNungen; jage ihnen nicht hinterher.
  7. Überprüfe die Ausgabe. Bestätige Dauer, Auflösung, fps und Audio, die der Anfrage entsprechen, anhand der Untersuchung des Schreibwerkzeugs (--json/--json-brief) oder probe.py, und berichte diese Zahlen ("final.mp4: 59.98 s, 1080x1920, 30 fps, AAC Stereo"). Ein Schritt ist nur dann abgeschlossen, wenn das Skript mit 0 beendet wurde und die Ausgabe wie erwartet untersucht wurde: Ein Exit-Code ungleich Null, eine fehlende oder leere Datei oder eine Untersuchung, die der Anfrage widerspricht, ist ein Fehler, der mit der Fehlermeldung des Skripts gemeldet wird.
  8. Behalte die Originale des Benutzers. Überschreibe niemals die Quelle; schreibe neue Dateien neben die Eingabe oder dorthin, wo verlangt. Ein vorhandener Ausgabepfad wird abgelehnt (kind: input); --overwrite ist der einzige Weg, um "ja, ersetze es" zu sagen.
  9. Schau dir das Bild an. Immer wenn sich das Bild geändert hat (Untertitel, Overlays, Grafiken, Zuschnitt/Auffüllung, Größenänderung, Farbe, Übergänge, ein join.py, das einen Clip an den Rahmen des ersten Clips anpasst, color.py --to-sdr), führe look.py AUSGABE --tiles 3x2 (oder --at Z für einen Frame) aus und betrachte das PNG (4x3 für das gesamte Clip-Layout). Nicht fertig, bis Look: dieses PNG nennt – eine Untersuchung kann keinen Untertitel auf einem Gesicht sehen. Nur Audio: Look: not needed. Worauf zu achten ist, unterteilt sich wie die Zeilen von check.py in Schritt 5:
    • Mechanisch (dieses Skills eigene Aufgabe zu überprüfen und zu berichten): Der angegebene Text/das Logo befindet sich an der angegebenen Position, Untertitel erscheinen zu den angegebenen Zeitstempeln, Abmessungen sind gerade. Letterboxing von fit.py --fit pad ist das korrekte Ergebnis dieses Modus, niemals ein zu kennzeichnender Defekt.
    • Urteil (berichte es, bestehe nicht stillschweigend oder falle durch): Ob ein Motiv oder Gesicht abgeschnitten ist, Text über einem Gesicht liegt, Farben ausgewaschen aussehen, ein Übergang landet. Diese erfordern eine Entscheidung, was das Motiv ist, der Aufruf des aufrufenden Agenten – sage in einer Zeile, was du siehst; sie urteilen. Ohne Bildfähigkeit schreibe Look: PFAD (Pixel nicht inspiziert; Agent hat keine Bildansicht) – behaupte niemals, dass ein Bild inspiziert wurde, wenn es nicht der Fall war, ohne auf eine Fähigkeit zu warten, die nicht vorhanden ist.

Bevor du etwas ausführst: Was zu fragen, was anzunehmen

Stelle eine kurze Frage nur, wenn die Antwort das Ergebnis wesentlich ändert und die Anfrage es nicht impliziert. Wenn mehrere Dinge gleichzeitig offen sind (ein vages "mach es für soziale Medien" lässt Ziel, Seitenverhältnis, Länge und Untertitel offen), frage nicht eine pro Runde: Schlage ein Bündel mit deinen Standardeinstellungen vor und lass den Benutzer jeden Teil ändern ("Reels: 9:16 aufgefüllt, 60 s, -14 LUFS, keine Untertitel – OK?"). Eine Frage, eine Antwort, dann der Lauf. Frage niemals nach etwas, das probe.py dir sagen kann.

  • Ziel bestimmt Seitenverhältnis, Längenbegrenzung, Lautstärke und Codec; "für Reels" beantwortet alle vier und nennt eine Vorlage. Kein Ziel und ein einfacher Schnitt/Untertitel: Behalte das Quellformat und sage das. Wenn der Benutzer "exportieren", "posten" oder "ausliefern" sagt, frage wohin.
  • Dauer ("mach es 60 s") ohne Methode: Beschleunige für ≤1,5×-Änderungen, trimme ansonsten, sage was. Frage, wenn der Inhalt ein Vortrag ist (Trimmen verliert Wörter) und die Änderung groß ist.
  • Untertitel ohne Textquelle: --transcribe, wenn eine lokale Engine existiert, ansonsten frage nach dem Text oder einer zeitgesteuerten Datei; erfinde niemals Dialoge.
  • Schriftarten und Marke: Wenn der Benutzer eine Marke, Farben oder "unsere Schriftart" erwähnt, frage nach oder erstelle brand.json einmal, verwende sie wieder.
  • CJK / nicht-lateinischer Text: Lass das Tool die Schriftart nach Skript wählen (--font schaltet es aus); --lang ja|ko für Han-Only-Text. doctor --json .fonts.scripts sagt, was hier gerendert wird. Tofu ist ein fehlgeschlagener Auftrag.
  • Zuschnittposition für --fit crop: Standardmäßig zentriert, aber wenn die Anfrage oder die Quelle ein außermittiges Motiv nennt ("behalte das Produkt auf der rechten Seite", jemand deutlich außermittig auf dem Kontaktbogen), verwende --crop-x/--crop-y (0=links/oben, 1=rechts/unten) anstatt die Mitte zu erraten, oder frage, welche Kante behalten werden soll.
  • Alles andere (Übergangstyp, Untertitelstil): Wähle die konventionelle Standardeinstellung, sage, was du gewählt hast, biete die Alternative in einer Zeile an.

Was dieses Skill entscheidet und was nicht

Dieses Skill schneidet, fügt zusammen, misst, synchronisiert, exportiert und überprüft Dateien – es führt eine Bearbeitung aus, es entscheidet keine. Was dem Menschen, dem aufrufenden Agenten oder einem anderen Skill gehört:

  • Welcher Schnitt richtig ist oder ob ein Ergebnis genehmigungsfähig ist – dieses Skill misst und berichtet (check.py's PASS/WARN/FAIL, cut.py's Dauerfehler); der Benutzer oder Produktionsagent entscheidet, ob das ausgeliefert wird.
  • Was ein Highlight interessant macht – scenes.py --highlights bewertet nach einem gemessenen Proxy (Audioenergie, Dauer): Kandidaten, kein Urteil.
  • Thumbnail- oder Cover-Komposition – eine Designentscheidung, keine Messung.
  • Verstehen, worum es in einem Video geht – es gibt hier keine Bildverarbeitung jenseits der Kontaktbögen von look.py, für die Augen des aufrufenden Agenten, nicht für dieses Skill zu interpretieren.
  • Beurteilen, was gut aussieht – "wende diese LUT an", "korrigiere die Belichtung um +0,3 Blenden" (color.py) ist mechanisch; "grade diese Szene filmsch" gehört zu einem Farbkorrektur-Skill (color-grading-skill), das die Parameter entscheidet und dann color.py aufruft.
  • Die Wörter in einem Untertitel – der Cue-Text wird wie geschrieben eingebrannt. Zu lang für den Rahmen bedeutet eine kleinere Größe, --max-lines oder die eigene Bearbeitung des Benutzers; schreibe niemals um, kürze oder paraphrasiere, selbst wenn darum gebeten wird, es "passend zu machen" – sage das, biete --max-lines 1 in einer kleineren Größe an.
  • Auswählen eines Motivs oder Bereichs, der dir nicht gegeben wurde – "Zuschnitt auf x=200,y=0" ist mechanisch, sobald die Box bekannt ist; "Zuschnitt, um den Sprecher im Bild zu behalten" erfordert eine Entscheidung, was der Sprecher ist, ein Urteil des aufrufenden Agenten (von einem look.py-Kontaktbogen).

Die Grenze: Gleiche Eingabe + gleiche explizite Parameter, die immer dieselbe verifizierbare Ausgabe erzeugen, gehört hierher; alles, was von Geschmack, Verständnis oder dem abhängt, was gut aussieht oder klingt, gehört zu demjenigen, der dieses Urteil fällt.

Wenn eine Anfrage eine FFmpeg-Funktion erfordert, die keines der 42 Skripte bereitstellt, sage das und nenne die nächstgelegene integrierte Option – rate niemals einen rohen ffmpeg/ffprobe-Aufruf außerhalb von scripts/*.py. Es umgeht jede Garantie, die dieses Skill macht, also ist es niemals ein Fallback.

Anfrage → Skript

Diese Tabelle und die tools-Liste von doctor --json sind die Quelle der Wahrheit für das, was existiert: Nenne nur ein Skript, das du in einem von beiden gesehen hast (es gibt kein doctor.py, kein trim.py, kein subtitle.py).

Zeitstempel-Flags (--start, --end, --at, --from, --duration, --offset und die Zeiten in Cue- und Kapiteldateien) akzeptieren Sekunden, mm:ss(.fff), hh:mm:ss(.fff) oder SMPTE hh:mm:ss:ff mit @fps (00:01:02:[email protected]) – füge einen NLE-Cue-Sheet ein wie es ist; Längenflags (--min-silence, --margin, --fade) sind einfache Sekunden.

Benutzer sagtTue
"schneide von 1:20 bis 2:05", "trimme die ersten 10 s"cut.py input.mp4 --start 1:20 --end 2:05
"behalte nur diese Teile", "entferne die Mitte"cut.py input.mp4 --segments 0-1:00,1:30-2:00
"mach es genau 60 Sekunden"fit.py input.mp4 --duration 60 (Geschwindigkeit) oder --method trim
"schneide das und mach es HEVC / AV1 / ProRes" (Ausgabe-Codec genannt)cut.py input.mp4 --start 0:10 --end 0:40 --codec hevc (ProRes benötigt -o NAME.mov)
"schneide die Pausen heraus", "Jump Cuts"silence.py input.mp4 [--threshold -40 --min-silence 0.8]
"schneide die Ähs und Ähms heraus", "entferne die Füllwörter"silence.py input.mp4 --filler --words words.json (gemessene Wortzeiten; --transcribe erstellt sie)
"schneide nicht innerhalb eines Satzes, nur die echten Pausen"silence.py input.mp4 --speech-aware – ein Atemzug unter --min-silence innerhalb eines Satzes wird behalten, nur Satzgrenzen-Pausen werden geschnitten; kombiniert mit --filler zu einer Liste
"ein 60 s Highlight aus dieser Stunde"scenes.py long.mp4 --highlights 6 --target 60 --edl picks.txt → cut.py --segments
"schneide auf den Beat", "bearbeite es zur Musik"scenes.py track.mp4 --beats --json > beats.json, dann cut.py input.mp4 --segments ... --snap beats --snap-source beats.json (--snap-source überträgt das gemessene Raster)
"hier beschleunigen, dort Zeitlupe" (bekannte Segmente)speedramp.py action.mp4 --segment 0-3:1.0 --segment 3-4:0.25 --segment 4-8:2.0
"halte diesen Frame", "friere den letzten Frame ein"freeze.py clip.mp4 --hold 2
"flüssige Zeitlupe", "halbe Geschwindigkeit aber flüssig"fit.py input.mp4 --duration 2x --smooth interpolate (langsam) oder --smooth blend
"drehe diesen Clip um"reverse.py input.mp4
"wiederhole diesen Clip, um 30 Sekunden zu füllen"loop.py bg_loop.mp4 --duration 30
"mach es vertikal / 9:16 / quadratisch"fit.py input.mp4 --aspect 9:16 --fit pad (oder --fit crop; --pad-fill blur für unscharfe Balken)
"ändere die Größe auf eine Höhe/Breite"fit.py input.mp4 --height 1080 (oder --width, oder beide für einen exakten Rahmen)
"schneide auf diese exakte Box zu" (bekannte x/y/w/h)crop.py input.mp4 --x 100 --y 0 --width 1080 --height 1920
"verschwommener Hintergrund anstelle von schwarzen Balken"fit.py input.mp4 --aspect 9:16 --fit blur (gesamtes Bild behalten, Ränder eine unscharfe, abgedunkelte Kopie)
"um 90 Grad drehen", "spiegel es"fit.py input.mp4 --rotate 90 / fit.py input.mp4 --flip h
"der Horizont ist schief" (bekannte Gradzahl)straighten.py tilted.mp4 --degrees -2.5
"flache Ansicht aus diesem 360°-Video" (bekannte yaw/pitch/fov)sphere.py insta360.mp4 --yaw 90 --pitch 0 --h-fov 100 --v-fov 70
"dieses alte Footage ist interlaced"deinterlace.py input.mp4
"es ist körnig/verrauscht, bereinige es"denoise.py input.mp4 --strength medium
"verwische/pixelisiere dieses Gesicht/Kennzeichen" (bekannte Box)redact.py input.mp4 --x 820 --y 140 --width 240 --height 240 --mode pixelate
"entferne dieses feste Logo" (bekannte Box)redact.py input.mp4 --x 40 --y 20 --width 180 --height 60 --mode delogo
"stabilisiere dieses verwackelte Footage"stabilize.py input.mp4
"gibt es schwarze Balken darauf?"cropdetect.py input.mp4
"iPhone Dolby Vision Clip sieht falsch aus"color.py input.mp4 --to-sdr
"wende diese LUT an" (bekannte LUT-Datei)color.py input.mp4 --lut meiner_lut.cube
"korrigiere die Belichtung um +0,5 Blenden"color.py input.mp4 --exposure 0.5
"korrigiere den Weißabgleich" (bekannte Temperatur)color.py input.mp4 --temperature 5500
"wärmer/kühler machen"color.py input.mp4 --temperature 6500 (wärmer) oder --temperature 4500 (kühler)
"mach es gesättigter/entsättigter"color.py input.mp4 --saturation 1.2 (oder 0,8)
"Farbton verschieben" (bekannter Farbton)color.py input.mp4 --hue 15
"Farbkorrektur auf diesen Bereich anwenden" (bekannte Box)color.py input.mp4 --region 100:100:1080:1920 --saturation 1.5 --brightness 0.1
"füge dieses Logo oben rechts hinzu"overlay.py input.mp4 --image logo.png --x right-10 --y 10 --scale 0.15
"füge Text in der unteren linken Ecke hinzu"overlay.py input.mp4 --text "Cue-Titel" --x 20 --y bottom-60 --font-size 48
"erstelle einen Lower Third für [Name]"overlay.py input.mp4 --name "Jane Doe" --title "CEO" --lower-third
"brenne diese SRT/ASS-Untertitel ein" (bekannte Datei)captions.py input.mp4 --subtitles dialog.srt
"animierte Untertitel", "Karaoke-Stil"captions.py input.mp4 --subtitles dialog.srt --style karaoke
"automatische Transkription"captions.py input.mp4 --transcribe --lang de
"füge Untertitel mit Hintergrund hinzu"captions.py input.mp4 --subtitles dialog.srt --background
"verschiebe/synchronisiere diese Tonspur" (bekannte Offset)sync.py input.mp4 --audio track2.wav --offset 0.5
"richte diese zwei Kameras aus" (bekannte Clips)multicam.py cam1.mp4 cam2.mp4 --output multicam.mp4
"normalisiere die Lautstärke auf -14 LUFS"loudness.py input.mp4 --target -14
"gleiche die Lautstärke zwischen diesen Clips an"loudness.py input1.mp4 input2.mp4 --match
"füge Hintergrundmusik hinzu mit Ducking"audio.py input.mp4 --music bg.mp3 --ducking
"extrahiere den Audiokanal / ersetze ihn"audio.py input.mp4 --extract --output audio.wav oder audio.py input.mp4 --replace new_audio.wav
"mische diese Audiospuren"audio.py input.mp4 --mix background.mp3 --volume 0.3
"entferne Hintergrundgeräusche"audio.py input.mp4 --denoise
"konvertiere in AAC / MP3 / WAV"audio.py input.mp4 --codec aac --bitrate 192k
"mach es laut (für Werbung)"loudness.py input.mp4 --target -11
"überprüfe, ob es für YouTube korrekt ist"check.py output.mp4 --platform youtube
"erstelle einen Kontaktbogen"look.py input.mp4 --tiles 4x3 --output sheet.png
"exportiere für YouTube"render.py --template youtube input.mp4
"mach ein Reel daraus"render.py --template reel input.mp4
"bereite es für TikTok vor"render.py --template tiktok input.mp4
"X-kompatibel machen"render.py --template x input.mp4
"speichere den gesamten Bearbeitungsvorgang als Projekt"render.py --project my_edit.json input.mp4
"was sind die technischen Details dieser Datei?"probe.py input.mp4
"erkenne Szenen in diesem Video"scenes.py input.mp4 --edl scenes.txt
"erstelle ein Highlight-Reel" (Dauer)scenes.py long.mp4 --highlights 5 --target 120 --edl picks.txt dann cut.py --segments
"wähle das Format für die Veröffentlichung"export.py input.mp4 --platform youtube
"was ist der LUFS-Pegel?"loudness.py input.mp4 --measure
"gib mir einen Bericht über diese Datei"report.py input.mp4
"sind alle Codecs und Container für X gültig?"check.py input.mp4 --platform x

Ausgabepfade und Projektdateien

Schreibwerkzeuge schreiben standardmäßig in das gleiche Verzeichnis wie die Eingabe. Der Ausgabename wird automatisch generiert, es sei denn, er wird mit -o angegeben (z. B. -o mein_output.mp4). Wenn eine gleichnamige Datei existiert, schlägt das Skript fehl (es sei denn, --overwrite wird verwendet). Die render.py-Vorlagenfunktion verwendet ein templates/-Verzeichnis in der Nähe der Skripte und akzeptiert entweder vordefinierte Vorlagen oder benutzerdefinierte project.json-Dateien für komplexe mehrstufige Arbeitsabläufe.

Referenzen

Weitere Dokumentation findest du in:

  • references/scripts.md: Vollständige Liste aller Flags für alle 42 Skripte.
  • references/devices.md: Häufige Geräteprofile (iPhone, GoPro, DJI, Bildschirmaufnahmen, Zoom).
  • references/gotchas.md: Ausführliche Erklärung der einzeiligen Fehlervermeidungsregeln.

Fehlerbehandlung und Fehlersuche

Wenn ein Skript fehlschlägt, gib die Fehlerausgabe so wie sie ist zurück. Überprüfe die Ausgabe immer nach der Ausführung (Schritt 6). Fehler sind in der Regel eines von:

  • kind: missing_tool: Ein erforderliches Werkzeug (ffmpeg, ffprobe) fehlt.
  • kind: input: Die Eingabedatei existiert nicht oder der Ausgabepfad existiert bereits.
  • kind: timeout: Das Skript hat das Zeitlimit überschritten (Standard 30 Minuten; mit --timeout änderbar).
  • kind: invalid_args: Falsche Flags oder Werte.
  • kind: encoder: FFmpeg-Encoder-Fehler (z. B. nicht unterstützter Codec).
  • kind: filter: FFmpeg-Filter-Fehler (z. B. nicht unterstützter Filter für die FFmpeg-Version).

Lösung: Für missing_tool zuerst doctor ausführen; für Encoder-Fehler einen anderen Codec versuchen; für Filter-Fehler die FFmpeg-Version überprüfen; für andere die Eingabe-/Ausgabewerte überprüfen.

Individual skills in this repo

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

Verwandte Skills