Communitygithub.com

ukvalley/video-editing-skills

Bearbeiten Sie rohes Kameramaterial mit FFmpeg in einen vertikalen, beat-synchronisierten Kinofilm für Instagram Reels / YouTube Shorts – z.B. für Autolieferungen, Events, Produkte oder Reisen. Nutzen Sie diesen Skill, wenn der Benutzer einen kinoreifen Clip, einen Autolieferungs-Reel, einen Beat-Sync-Schnitt oder eine B-Roll-Montage aus seinen Clips wünscht.

Was ist video-editing-skills?

Dieser Skill verwandelt einen Ordner mit rohen Videoclips und einem Musikstück in einen kurzen, vertikalen (9:16) Kinofilm mit Beat-Synchronisation, ideal für Plattformen wie Instagram Reels und YouTube Shorts. Er verwendet ausschließlich FFmpeg und Python-Bibliotheken wie librosa, um die Beats der Musik zu erkennen und die Schnitte darauf abzustimmen. Die Bearbeitung basiert auf einer bearbeitbaren Schnittliste (edl.json), die es ermöglicht, einzelne Änderungen vorzunehmen, ohne den gesamten Vorgang neu starten zu müssen. Der Skill folgt einem klaren, fünfstufigen Story-Aufbau (Hook, Aufbau, Heldenmoment, Emotion/Auszahlung, Outro) und bietet eine anpassbare Vorlage für Autolieferungsvideos. Zu den Funktionen gehören die automatische Beat-Erkennung, das Zuschneiden von Landschafts- auf Hochformat, Farbkorrektur mit LUTs oder integrierten Filtern, einfache Überblendungen und das Hinzufügen von Text. Der Workflow umfasst die Überprüfung der Rohdateien, die Erstellung einer Shot-Liste, das Rendern einzelner Segmente, das Zusammenfügen und den finalen Export mit Audio-Normalisierung. Nach dem Export folgt eine Qualitätskontrolle mit FFprobe und Kontaktbögen. Der Skill arbeitet in einem strukturierten Projektordner, schützt die Originaldateien und erleichtert Revisionen durch iterative Bearbeitung der edl.json.

Funktioniert mit~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/ukvalley/video-editing-skills/tree/HEAD/skills/cinematic-reel

In Ihrer bevorzugten KI fragen

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

Dokumentation

Cinematic Reel Editor

Verwandeln Sie einen Ordner mit Rohclips + einem Musikstück in einen 15–45 s langen, 9:16, beat-synchronisierten Kinofilm. Die gesamte Bearbeitung erfolgt mit FFmpeg über die Kommandozeile. Der Plan befindet sich in einer bearbeitbaren Schnittliste (edl.json), sodass Änderungen ohne Neustart neu gerendert werden können.

0. Harte Regeln

  • Ändern oder löschen Sie NIEMALS etwas in raw/. Schreiben Sie alle Ausgaben nach work/ und out/.
  • Die Musik muss vom Benutzer bereitgestellt werden (lizenziert / lizenzfrei). Wenn music/ leer ist, fragen Sie nach einem Track – laden Sie keine urheberrechtlich geschützte Musik herunter.
  • Zeigen Sie dem Benutzer den Shot-Plan (Schritt 4) und holen Sie dessen Zustimmung vor dem endgültigen Rendern ein.
  • Bevorzugen Sie harte Schnitte auf den Beats. Verwenden Sie Übergänge sparsam (max. 2–3 pro Film).

1. Voraussetzungen prüfen

ffmpeg -version && ffprobe -version
python3 -c "import librosa, numpy" || pip install librosa numpy soundfile

Wenn FFmpeg fehlt, fordern Sie den Benutzer auf, es zu installieren (Windows: winget install ffmpeg, Mac: brew install ffmpeg, Linux: sudo apt install ffmpeg) und brechen Sie ab.

2. Ordnerstruktur

projekt/
  raw/      # Kamera-Clips (schreibgeschützt)
  music/    # ein Musikstück
  luts/     # optionale .cube-LUT für Farbkorrektur
  work/     # Thumbnails, Segmente, edl.json, beats.json
  out/      # endgültige Render (reel_v1.mp4, reel_v2.mp4 ...)

3. Bestandsaufnahme und Begutachtung des Filmmaterials

Notieren Sie für jeden Clip Dauer, Auflösung, Bildrate und Ausrichtung:

ffprobe -v error -show_entries format=duration:stream=width,height,r_frame_rate,codec_type -of json raw/CLIP.mp4

Erstellen Sie ein Kontaktblatt pro Clip (ein Bild alle 2 s) und BETRACHTEN Sie es mit dem Read-Tool, um zu wissen, was in jeder Aufnahme ist:

ffmpeg -y -i raw/CLIP.mp4 -vf "fps=1/2,scale=320:-1,tile=4x3" -frames:v 1 work/thumbs/CLIP.jpg

Taggen Sie jeden nutzbaren Moment: Aufnahmeart (Weit / Mittel / Nahaufnahme / Detail), Motiv, Bewegung, Qualität (scharf, stabil, gut belichtet) und ob er für Zeitlupe geeignet ist (Quelle ≥ 50 fps).

4. Die Geschichte aufbauen (Shot-Plan)

Strukturieren Sie jeden Film wie folgt:

  1. Hook (0–2 s) – der auffälligste Schuss. Kein Logo oder Textintro.
  2. Aufbau – Details und Spannung (Nahaufnahmen, Zeitlupe).
  3. Heldenmoment – auf dem größten Beat / Musik-Drop.
  4. Emotion / Auszahlung – Reaktionen, Menschen, Feierlichkeiten.
  5. Outro (letzte 2–3 s) – sauberer Weitwinkel, optional Text oder Logo, Musik ausgeblendet.

Vorlage für Autolieferungen (an das Material anpassen): Außenansicht Weit → Logo-Nahaufnahme → Rad/Scheinwerfer-Details → Familie hereinkommend (Zeitlupe) → Enthüllung (auf dem Drop) → Schlüsselübergabe → Reaktionen/Lächeln → Innenraum + Lenkrad → Kuchen / Girlande / Pooja → erste Abfahrt (Weitwinkel, Outro).

Regeln: Variieren Sie die Aufnahmegrößen (niemals zwei Weitwinkel hintereinander), halten Sie jede Aufnahme 0,5–2,5 s, verwenden Sie Zeitlupe nur für emotionale oder Enthüllungsaufnahmen, schneiden Sie nach Möglichkeit auf Bewegungen.

5. Beat-Erkennung

# work/beats.py
import librosa, json, sys
y, sr = librosa.load(sys.argv[1])
tempo, frames = librosa.beat.beat_track(y=y, sr=sr)
beats = librosa.frames_to_time(frames, sr=sr).tolist()
onset = librosa.onset.onset_strength(y=y, sr=sr)
json.dump({"tempo": float(tempo), "beats": beats}, open("work/beats.json", "w"), indent=1)
print(f"tempo {float(tempo):.1f} BPM, {len(beats)} beats")

Schneiden Sie auf den Beats (jeder Beat für schnelle Abschnitte, jeder 2. oder 4. Beat für langsame). Finden Sie den Drop (größter Energieanstieg) und platzieren Sie dort den Heldenmoment.

6. Schnittliste schreiben: work/edl.json

{
  "output": {"w": 1080, "h": 1920, "fps": 30},
  "music": {"file": "music/track.mp3", "start": 12.0, "fade_out": 1.5},
  "grade": {"lut": "luts/teal_orange.cube", "vignette": true},
  "shots": [
    {"id": 1, "src": "raw/C0001.mp4", "in": 4.20, "dur": 1.40, "speed": 1.0, "crop_x": "center", "note": "hook – auto weit"},
    {"id": 2, "src": "raw/C0007.mp4", "in": 10.0, "dur": 1.00, "speed": 0.5, "crop_x": "center", "note": "rad zeitlupe"}
  ],
  "transitions": [{"after_shot": 4, "type": "fade", "dur": 0.3}],
  "text": [{"text": "Willkommen Zuhause", "start": 18.0, "end": 21.0}]
}

dur ist die Länge auf der Zeitleiste. Bei speed 0.5 beträgt der verwendete Quellbereich dur × speed Sekunden. Zeigen Sie dem Benutzer diesen Plan als einfache Tabelle (Aufnahme, Zeit, Beschreibung) vor dem Rendern an.

7. Jede Aufnahme als einheitliches Segment rendern

Jedes Segment muss identische Auflösung, Bildrate, Pixelformat und kein Audio haben, damit sie sauber zusammengefügt werden können:

# Landschaftsquelle → 9:16 Cropping, Geschwindigkeit, Grading
ffmpeg -y -ss IN -t SRC_DUR -i raw/CLIP.mp4 -an -vf "\
setpts=PTS/SPEED,\
scale=-2:1920,crop=1080:1920,\
fps=30,\
lut3d=luts/teal_orange.cube,\
eq=contrast=1.06:saturation=1.10,\
vignette=PI/5,\
format=yuv420p" \
-c:v libx264 -crf 16 -preset medium work/seg_01.mp4
  • SRC_DUR = dur × speed. Verwenden Sie für Zeitlupe eine Quelle mit hoher Bildrate; vermeiden Sie minterpolate, sofern nicht verlangt (langsam und Artefakte).
  • Vertikale Quelle: Verwenden Sie scale=1080:1920:force_original_aspect_ratio=increase,crop=1080:1920.
  • Keine LUT verfügbar: Verwenden Sie eq=contrast=1.08:saturation=1.15:gamma=0.98 plus curves=preset=increase_contrast für einen kinoreifen Look.
  • Optionale Kinobalken werden bei 9:16-Filmen NICHT verwendet.

8. Segmente zusammenfügen

Keine Übergänge – Concat Demuxer:

printf "file 'seg_%02d.mp4'\n" 1 2 3 ... > work/list.txt
ffmpeg -y -f concat -safe 0 -i work/list.txt -c copy work/video.mp4

Bei einem Übergang zwischen zwei Segmenten verwenden Sie xfade (Offset = Länge des ersten Clips − Übergangsdauer):

ffmpeg -y -i work/seg_04.mp4 -i work/seg_05.mp4 -filter_complex \
"[0][1]xfade=transition=fade:duration=0.3:offset=1.2,format=yuv420p" work/seg_04_05.mp4

Jeder Übergang verkürzt die Zeitleiste um seine Dauer – überprüfen Sie die Beat-Ausrichtung erneut.

9. Musik, Text, endgültiger Export

ffmpeg -y -i work/video.mp4 -ss MUSIC_START -i music/track.mp3 -filter_complex "\
[1:a]afade=t=in:d=0.3,afade=t=out:st=FADE_START:d=1.5,loudnorm=I=-14:TP=-1:LRA=11[a];\
[0:v]drawtext=fontfile=SCHRIFTART.ttf:text='Willkommen Zuhause':fontsize=72:fontcolor=white:\
x=(w-text_w)/2:y=h*0.72:enable='between(t,18,21)':alpha='if(lt(t,18.4),(t-18)/0.4,1)'[v]" \
-map "[v]" -map "[a]" -shortest \
-c:v libx264 -crf 18 -preset slow -profile:v high -pix_fmt yuv420p -r 30 \
-c:a aac -b:a 192k -movflags +faststart out/reel_v1.mp4

Finden Sie eine Schriftart auf dem Rechner für drawtext (oder fragen Sie nach). Halten Sie Text minimal, innerhalb des sicheren Bereichs (vermeiden Sie die oberen 15% und unteren 25%, wo die Instagram-UI sitzt).

10. Qualitätskontrolle (immer)

  • ffprobe out/reel_vN.mp4 → 1080×1920, 30 fps, H.264, AAC, Dauer wie geplant.
  • Kontaktblatt des endgültigen Films (fps=2,scale=270:-1,tile=6x5) und betrachten: keine schwarzen Frames, keine falschen Zuschnitte (abgeschnittene Köpfe), konsistente Farbe.
  • Überprüfen Sie die Lautstärke und dass der Heldenmoment auf dem Drop landet.
  • Berichten Sie dem Benutzer: Dauer, Anzahl der Aufnahmen, Dateipfad und alles, worüber Sie sich unsicher waren.

11. Überarbeitungen

Nie neu anfangen. Bearbeiten Sie work/edl.json (eine Aufnahme austauschen, in/dur ändern, Geschwindigkeit, Text, Grading), rendern Sie nur die geänderten Segmente neu, fügen Sie sie wieder zusammen und exportieren Sie als nächste Version (reel_v2.mp4). Behalten Sie alte Versionen, damit der Benutzer sie vergleichen kann.

Individual skills in this repo

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

Verwandte Skills