Communitygithub.com

Video-Komposition – Montage, Audio, Kodierung & Validierung

Montiere, mische, normalisiere und validiere fertige Videos aus Blender, Remotion, Manim, Bildschirmaufnahmen und Audioquellen mit FFmpeg und FFprobe – Konkatenation, Overlays, Alpha-Compositing, Untertitel, Lautstärke, Überblendungen, Geschwindigkeitsrampen, GIF/Thumbnail-Export und plattformspezifische Kodierung.

Was ist Video-Komposition – Montage, Audio, Kodierung & Validierung?

Diese Skill-Anleitung beschreibt einen vollständigen Workflow zur professionellen Videoproduktion auf Basis von FFmpeg und FFprobe. Sie ist für Entwickler und KI-Agenten gedacht, die bereits gestaltete Szenen zu einem fehlerfreien Master zusammenfügen und daraus plattformoptimierte Dateien exportieren möchten. Die Anleitung behandelt die obligatorische Normalisierung aller Quellen (Auflösung, Bildrate, Farbraum, Audio), verlustfreie Konkatenation identischer Formate sowie Filter-basierte Montage von unterschiedlichen Formaten. Overlays, Alpha-Compositing und Picture-in-Picture werden erklärt, ebenso wie Audiomischung mit Sidechain-Ducking, Loudness-Normalisierung nach ITU-R BS.1770 und das Einbrennen oder Einbetten von Untertiteln. Für die Ausgabe werden Kodierungen für YouTube, soziale Medien und verlustfreie Zwischenformate (ProRes) bereitgestellt. Abschließend wird eine automatische Validierung (schwarze Frames, eingefrorene Szenen, Audio-Pegel) und Zusammenstellung eines Lieferpakets (Master, Varianten, Thumbnail, Kontaktbogen, Bericht) empfohlen. Die Skill nutzt das FFmpeg-Cookbook als Referenz und ein Validierungsskript für wiederholbare Qualitätssicherung.

Funktioniert mit~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/aminghaseminia/blender-animation-skill/tree/HEAD/skills/video-composition

In Ihrer bevorzugten KI fragen

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

Dokumentation

Was macht Video-Komposition – Montage, Audio, Kodierung & Validierung?

FFmpeg ist die Auslieferungsschicht, kein Designtool. Es sollte bereits gestaltete Szenen erhalten und daraus einen sauberen Master sowie plattformspezifische Kodierungen produzieren.

Lies references/FFMPEG-COOKBOOK.md für kopierfertige Befehle und scripts/validate.sh für einen Prüfung vor der Auslieferung.

Regel null: zuerst auslesen. Ein Filtergraph, der auf angenommene Stream-Eigenschaften aufbaut, ist die häufigste Ursache für defekte Ausgaben.

ffprobe -v error -show_streams -show_format -of json input.mp4

1. Vor dem Kombinieren normalisieren

Inkompatible Eingaben verursachen Ruckeln, Stille, Drift und Halos. Vor jeder Zusammenführung mehrerer Quellen müssen alle Eingaben in folgenden Eigenschaften übereinstimmen:

EigenschaftZiel
AuflösungProjekt-Master (z.B. 1920×1080)
Pixel-Seitenverhältnis1:1
BildrateProjekt-FPS, konstant
Zeitbasiskonsistent
Pixelformatyuv420p für Auslieferung, yuva444p10le/PNG für Alpha
Farbraum / Transferein Standard; markieren
Audio48 kHz, Stereo, konsistenter Codec
ffmpeg -i in.mp4 -vf "scale=1920:1080:flags=lanczos,fps=30,setsar=1" \
  -c:v libx264 -crf 14 -preset fast -pix_fmt yuv420p \
  -c:a aac -ar 48000 -ac 2 -b:a 256k normalized.mp4

Zwischenschritte in hoher Qualität halten (CRF 12–16 oder ProRes). Kodiere die Auslieferungsversion erst einmalig.

2. Konkatenation

Gleicher Codec, Größe, fps, Pixelformat und Audio-Layout → Stream-Kopie, schnell und verlustfrei:

printf "file 'shot_01.mp4'\nfile 'shot_02.mp4'\n" > list.txt
ffmpeg -f concat -safe 0 -i list.txt -c copy final.mp4

Alles andere → Filtergraph:

ffmpeg -i a.mp4 -i b.mp4 -filter_complex \
  "[0:v]scale=1920:1080,fps=30,setsar=1[v0]; \
   [1:v]scale=1920:1080,fps=30,setsar=1[v1]; \
   [v0][0:a][v1][1:a]concat=n=2:v=1:a=1[v][a]" \
  -map "[v]" -map "[a]" -c:v libx264 -crf 16 -pix_fmt yuv420p -c:a aac final.mp4

Stream-Kopie von nicht übereinstimmenden Eingaben niemals verwenden. Es „gelingt“ und produziert defekte Wiedergabe.

3. Overlay, Alpha und Bild-in-Bild

# transparentes Element über Hintergrund
ffmpeg -i bg.mp4 -i logo.mov -filter_complex \
  "[0:v][1:v]overlay=W-w-48:48:format=auto" -c:v libx264 -crf 16 out.mp4

# Bild-in-Bild, skalierte und abgerundete Quelle
ffmpeg -i main.mp4 -i insert.mp4 -filter_complex \
  "[1:v]scale=640:-2[pip];[0:v][pip]overlay=W-w-40:H-h-40" out.mp4

Alpha-Regeln:

  • H.264/MP4 kann kein Alpha tragen. Verwende PNG-Sequenz, ProRes 4444 oder WebM/VP9 mit Alpha.
  • Alpha nach jedem Schritt über einem kontrastreichen Hintergrund prüfen.
  • Achte auf Halos durch prämultiplikatives vs. direktes Alpha an dunklen Kanten; Folge der Konvention des Quell-Renderers.

4. Audio

# Musikbett mit Ein-/Ausblende und Ducking unter Sprache
ffmpeg -i video.mp4 -i music.mp3 -i voice.wav -filter_complex \
  "[1:a]volume=0.35,afade=t=in:st=0:d=1,afade=t=out:st=28:d=2[bed]; \
   [2:a]volume=1.0[vo]; \
   [bed][vo]sidechaincompress=threshold=0.08:ratio=6:attack=8:release=250[duck]; \
   [duck][vo]amix=inputs=2:duration=first:dropout_transition=0[a]" \
  -map 0:v -map "[a]" -c:v copy -c:a aac -b:a 192k out.mp4
# Lautstärke messen, dann normalisieren
ffmpeg -i in.mp4 -af loudnorm=I=-14:TP=-1:LRA=11:print_format=json -f null -
ffmpeg -i in.mp4 -af loudnorm=I=-14:TP=-1:LRA=11 -c:v copy out.mp4

Zielwerte variieren je nach Plattform (-14 LUFS für viele Web-Plattformen, -23/-24 für Rundfunk). Messen, dann wählen. Vermeide Normalisieren einer Datei, die bereits auf Zielniveau ist.

5. Untertitel

# einbrennen (harte Untertitel)
ffmpeg -i in.mp4 -vf "subtitles=captions.srt:force_style='FontName=Inter,FontSize=22,PrimaryColour=&H00FFFFFF,OutlineColour=&H80000000,BorderStyle=3,Outline=1,Shadow=0'" \
  -c:v libx264 -crf 18 -c:a copy out.mp4

# weiche Untertitel (verschiebbare Spur)
ffmpeg -i in.mp4 -i captions.srt -c copy -c:s mov_text -metadata:s:s:0 language=eng out.mp4

RTL prüfen: force_style mit einer formatauglichen Schriftart, korrekter Alignment und ein kontrolliertes gerendertes Bild. Halte Untertitel innerhalb der sicheren Bereiche und oberhalb der Plattform-UI.

6. Plattformkodierung

# landscape YouTube, 1080p30
ffmpeg -i master.mov -c:v libx264 -preset slow -crf 18 -pix_fmt yuv420p \
  -profile:v high -level 4.1 -movflags +faststart \
  -c:a aac -b:a 192k -ar 48000 out_1080p.mp4

# vertical social, 1080x1920
ffmpeg -i master.mov -vf "scale=1080:1920:force_original_aspect_ratio=increase,crop=1080:1920" \
  -c:v libx264 -preset slow -crf 18 -pix_fmt yuv420p -movflags +faststart \
  -c:a aac -b:a 192k out_vertical.mp4

# hochwertiges Zwischenformat für weitere Compositing-Schritte
ffmpeg -i master.mov -c:v prores_ks -profile:v 3 -pix_fmt yuv422p10le -c:a pcm_s24le master.mov

Prüfe, ob der Encoder existiert: ffmpeg -encoders | grep -E "libx264|prores|nvenc". Hardware-Encoder sind schnell, aber oft geringere Qualität pro Bit; vor dem Versand vergleichen.

7. Einzelbilder, Kontaktbogen, GIF

# Standbild zu Zeitpunkten
ffmpeg -ss 00:00:03.5 -i in.mp4 -frames:v 1 frame.png

# Kontaktbogen
ffmpeg -i in.mp4 -vf "fps=1,scale=320:-1,tile=4x4" -frames:v 1 sheet.jpg

# hochwertiges GIF (palettegen/paletteuse)
ffmpeg -i in.mp4 -vf "fps=15,scale=640:-1:flags=lanczos,palettegen" palette.png
ffmpeg -i in.mp4 -i palette.png -lavfi "fps=15,scale=640:-1:flags=lanczos[x];[x][1:v]paletteuse" out.gif

8. Validierung (nicht überspringen)

ffprobe -v error \
  -show_entries format=duration,size,bit_rate,format_name \
  -show_entries stream=index,codec_type,codec_name,width,height,r_frame_rate,avg_frame_rate,pix_fmt,channels,sample_rate,nb_frames \
  -of json final.mp4

Automatisierte Prüfungen:

# schwarze Segmente (versehentliche schwarze Frames)
ffmpeg -i final.mp4 -vf "blackdetect=d=0.1:pix_th=0.05" -an -f null - 2>&1 | grep blackdetect || true

# eingefrorene Segmente (zu lange statische Sequenz)
ffmpeg -i final.mp4 -vf "freezedetect=n=0.003:d=2" -an -f null - 2>&1 | grep freeze || true

# Audiopräsenz und Spitzenpegel
ffmpeg -i final.mp4 -af volumedetect -f null - 2>&1 | grep -E "mean_volume|max_volume"

Dann ersten Frame, letzten Frame, jeden Übergang und textreiche Frames prüfen. Zahlen belegen, dass die Datei wohlgeformt ist; sie belegen nicht, dass sie richtig aussieht.

9. Framegenauigkeits-Fallen

  • VFR-Quellen (Bildschirmaufnahmen, Handyvideos) driften gegenüber einer CFR-Zeitlinie. Mit fps=30 normalisieren und Dauer prüfen.
  • Off-by-one: N Frames bei 30 fps entsprechen genau N/30 Sekunden; ein 300-Frame-Render dauert 10,0 s. Wenn die Dauer 9,97 s beträgt, wurde ein Frame verworfen.
  • Abgeschnittenes Audio kürzer als Video → Stille am Ende; gezielt auffüllen oder kürzen.
  • Gedrehtes Handyvideo trägt eine Dispay-Matrix; -noautorotate nur verwenden, wenn wirklich gewünscht.
  • Farbverschiebung nach Kodierung: Tags color_primaries/transfer prüfen; eine Browser-Vorschau ist keine zuverlässige Farbreferenz.
  • Wiederholte Kodierung senkt die Qualität; einen hochwertigen Master behalten und davon kodieren.

10. Lieferpaket

output/
  final_1080p.mp4          # primär
  final_vertical.mp4       # Plattform-Variante, falls gewünscht
  final_master.mov         # ProRes/H.264 CRF 14, für zukünftige Kodierungen aufbewahren
  thumbnail.png            # 1280x720 oder 1080x1920
  contact-sheet.jpg
  captions.srt
  project-report.md        # Tool-Versionen, Einstellungen, durchgeführte Prüfungen

Exakte Eigenschaften aus ffprobe angeben; niemals raten.

Individual skills in this repo

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

aminghaseminia/blender-animation

Build 3D animations in Blender headlessly with Python (bpy) — scene setup, materials, lighting, camera rigs, keyframe and procedural animation, Geometry Nodes, particles and simulations, EEVEE/Cycles rendering, and MP4/PNG-sequence output. Triggers include "animate in Blender", "blender python", "bpy script", "3D logo animation", "cinematic render", "particle animation", "product turntable", "render an .blend", "blender headless", or any 3D scene, camera move, or motion graphics job that needs real geometry, light, and depth.

aminghaseminia/motion-studio

End-to-end animation and motion-graphics production from a natural-language brief. Routes work to Blender (3D), Remotion (2D/typography/data), Manim (math/science), motion-design craft, and FFmpeg (encode/composite/validate), then builds, previews, inspects, revises, and delivers an editable project plus final MP4. Use for any request to "make an animation", "create a video", "animate this logo", "render a motion graphic", "vibe-code an animation", or produce a promo, explainer, title sequence, or social clip.

aminghaseminia/remotion-motion-graphics

Create 2D motion graphics as code with Remotion and React — kinetic typography, logo reveals, explainers, animated charts, UI demos, social clips, subtitles, and data-driven or batch-rendered video. Use when the deliverable is primarily layout, text, and 2D graphics rather than real 3D; when a video must be generated from data or a template; or when a Blender 3D pass needs titles, captions, and transitions composited on top. Covers project setup, deterministic frame-based animation, easing, typography, audio, rendering, and licensing.

Verwandte Skills