Communitygithub.com

aminmzadev/ffmpeg-pipeline

Aus Standbildern Videos erstellen und Medienbearbeitung direkt von der Shell – Ken-Burns-Bewegung, Überblendungen, Voice-Over-Einbindung, Kontaktabzüge, Einzelbild-Extraktion, GIFs, Lautheitsnormalisierung und Geschwindigkeitsänderungen. Verwenden, wenn der Benutzer ein Video, eine Diashow, einen Vorschauclip, einen Kontaktabzug eines Videos wünscht oder Audio und Video kombiniert, getrimmt oder normalisiert werden müssen.

Was ist ffmpeg-pipeline?

Dieses Skill dient als Medien-Klebemaschine für KI-Agenten. Es verwandelt generierte oder bereitgestellte Standbilder in ein flüssiges MP4-Video mit Zoompan-Effekt (Ken Burns), Überblendungen und optionaler Audio-Spur (Sprache oder Musik). Darüber hinaus bietet es eine Reihe von praktischen Medienverarbeitungsbefehlen, die Agenten ständig benötigen: Extrahieren von Einzelbildern, Erstellen von Kontaktabzügen mit Zeitstempeln, Erzeugen von optimierten GIFs, Anhängen oder Trimmen von Audiospuren, Lautheitsnormalisierung auf -16 LUFS und Ändern der Audiogeschwindigkeit ohne Tonhöhenverschiebung. Der Skill ist auf Agentenplattformen wie Claude Code, Cursor oder Codex ausgelegt, die Shell-Zugriff haben. Er erfordert `ffmpeg` und `ffprobe` und kann optional die Skills `anon-image` (zur Bildgenerierung) und `anon-audio` (zur Sprachsynthese) nutzen, die automatisch im selben Verzeichnis gesucht werden. Die Bedienung erfolgt über ein einziges Kommandozeilentool (`vidkit.py`), das alle Funktionen über Unterbefehle wie `video`, `slideshow`, `mux`, `frames`, `sheet`, `gif`, `normalize`, `speed`, `info` und `probe` bereitstellt. Der Skill ist besonders nützlich für die schnelle Erstellung von Video-Inhalten, Medienvorschauen und die Automatisierung von Routineaufgaben in der Medienverarbeitung.

Funktioniert mit~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/aminmzadev/keyless-agent-skills/tree/main/ffmpeg-pipeline

In Ihrer bevorzugten KI fragen

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

Dokumentation

Was macht ffmpeg-pipeline?

Der Klebe-Skill. Er wandelt generierte (oder bereitgestellte) Standbilder in ein bewegtes MP4 mit Sprachausgabe um und erledigt die alltäglichen Medienaufgaben, mit denen ein Agent ständig konfrontiert ist.

Erfordert ffmpeg + ffprobe. Benötigt anon-image für den Prompt-Modus und anon-audio für --narration; beide werden automatisch als Geschwister entdeckt, und beide sind optional, wenn Sie stattdessen --images / --audio übergeben.

Befehle

BefehlWas er macht
videoStandbilder (generiert oder über --images) → MP4 mit Zoompan-Bewegung + Überblendungen, optionaler Sprachausgabe und Musikbett
slideshowvorhandene Bilder → MP4
muxeine Audiospur an ein Video anhängen, mit Wiederholung/Auffüllen auf die passende Länge
framesalle N Sekunden Einzelbilder extrahieren
sheetKontaktabzug (N gleichmäßig verteilte Einzelbilder mit Zeitstempeln)
gifbeschnittenes, palettenoptimiertes GIF aus einem beliebigen Abschnitt
normalizeAudio auf −16 LUFS lautheitsnormalisieren
speedAudiogeschwindigkeit ohne Tonhöhenverschiebung ändern (verkettetes Atempo)
infoeinzeilige ffprobe-Zusammenfassung
probeAbhängigkeitsprüfung

Kurzanleitung

# die gesamte Pipeline in einem Aufruf: 3 generierte Einstellungen, je 4 s, mit Sprachausgabe
vidkit.py video "a lighthouse on a basalt cliff at dusk, cinematic" -o story.mp4 \
  --shots 3 --seconds 4 --ratio 16:9 \
  --narration "Somewhere on a cold coast, a lighthouse keeps its watch." \
  --voice en-GB-RyanNeural

# bereits vorhandene Bilder wiederverwenden
vidkit.py video --images shots/ -o out.mp4 --seconds 3 --music bed.mp3

# Medienbearbeitung
vidkit.py mux clip.mp4 voiceover.mp3 -o final.mp4
vidkit.py sheet final.mp4 -o preview.jpg --cols 4 --count 8
vidkit.py gif final.mp4 -o teaser.gif --start 1 --dur 2.5 --width 480
vidkit.py normalize voiceover.mp3 -o clean.mp3
vidkit.py info final.mp4

Zeitberechnung (damit Sie das Ergebnis vorhersagen können)

Mit N Einstellungen von je S Sekunden und einer 0,8 s Überblendung:

duration = N*S - (N-1)*0.8

3 × 4 s → 10,4 s. Falls die Sprachausgabe länger ist als das Bild, wird das Video wiederholt, um sie abzudecken (-stream_loop). Ist sie kürzer, wird das Audio mit Stille aufgefüllt, damit Sie nie das Ende verlieren. Beide Fälle werden behandelt – fügen Sie nicht selbst -shortest hinzu.

Entscheidungsregeln

  • Seitenverhältnis: 16:9 für YouTube/Web, 9:16 für Shorts/Reels/TikTok, 1:1 für Feeds und Thumbnails. Alles wird im Scale-to-cover-Verfahren skaliert und dann beschnitten, sodass Quellbilder jeder Form ohne Letterboxing überleben.
  • Sekunden pro Einstellung: 3–4 s sind für ein Standbild richtig; länger als 6 s eines statischen Bildes wirkt tot. Wenn Sie mehr Laufzeit brauchen, erhöhen Sie die Anzahl der Einstellungen, nicht die Sekunden.
  • Musikbett: übergeben Sie --music, und es wird mit 12 % unter der Stimme gemischt. Mischen Sie nicht zwei laute Quellen; normalisieren Sie zuerst.
  • GIF: halten Sie die Breite ≤ 480 und die Dauer ≤ 3 s, sonst überschreitet die Datei die Chat-Limits.

Fehlermodi

SymptomUrsacheLösung
missing dependency: ffmpegnicht installiertapt install ffmpeg (oder brew install ffmpeg)
ffmpeg failed: … Invalid argument bei Zoompanungerade Quellmaßeder Filter skaliert bereits auf W*2; wenn Sie ihn bearbeitet haben, verwenden Sie gerade Zahlen
Ausgabe ist stummSprachdatei fehlt/leerPfad prüfen; --narration akzeptiert entweder Text oder einen Audio-Pfad
Ausgabe viel kürzer als erwartetAudio kürzer als Video und irgendjemand hat -shortest hinzugefügtentfernen Sie es; vidkit.py füllt stattdessen auf
contact sheet needs Pillowkein Pillowpip install pillow, oder verwenden Sie frames + Ihren eigenen Kontaktabzug

Hinweise für den Agenten

  • Rendern Sie in 720p, es sei denn, der Benutzer wünscht mehr. Das ist 4× schneller und niemand sieht den Unterschied auf einem Laptop-Bildschirm.
  • Führen Sie immer info auf dem endgültigen Artefakt aus und teilen Sie dem Benutzer die tatsächliche Dauer, Auflösung und Größe mit – das fängt stille Fehler.
  • Geben Sie den MP4-Pfad aus; betten Sie ihn nicht ein. Die Datei ist das Artefakt.

Verwandte Skills