ffmpeg ist das universelle Werkzeug für Audio- und Videoverarbeitung auf der Kommandozeile. Es konvertiert Formate, schneidet, skaliert, komprimiert, zieht Tonspuren heraus und streamt. Diese Referenz nennt die Befehle, die im Betrieb ständig gebraucht werden.
Grundschema
Der Aufruf folgt immer demselben Muster: ffmpeg [Optionen] -i eingabe [Optionen] ausgabe. Optionen vor -i betreffen die Eingabe, Optionen danach die Ausgabe. Diese Unterscheidung ist die häufigste Fehlerquelle.
# Formate und Codecs anzeigen
ffmpeg -formats
ffmpeg -codecs | grep -i h264
ffmpeg -encoders | grep -e libx264 -e libvpx
# Informationen zu einer Datei
ffprobe -hide_banner eingabe.mp4
ffprobe -v error -show_format -show_streams eingabe.mp4
ffprobe -v error -select_streams v:0 -show_entries stream=width,height,r_frame_rate -of csv=p=0 eingabe.mp4
Konvertieren
# MP4 nach WebM (Video und Audio)
ffmpeg -i eingabe.mp4 -c:v libvpx-vp9 -crf 32 -b:v 0 -c:a libopus ausgabe.webm
# H.264 mit Qualitätsziel (CRF 18-28, kleiner = besser)
ffmpeg -i eingabe.mov -c:v libx264 -preset medium -crf 23 -c:a aac -b:a 128k ausgabe.mp4
# Für Web: schnelles Starten, Metadaten an den Anfang
ffmpeg -i eingabe.mp4 -c:v libx264 -crf 23 -movflags +faststart ausgabe.mp4
# Nur den Ton extrahieren
ffmpeg -i video.mp4 -vn -c:a copy ton.m4a
# Audio nach MP3
ffmpeg -i ton.wav -c:a libmp3lame -q:a 2 ton.mp3
Schneiden und Zusammenfügen
# Ohne Neukodierung (schnell, Schnitt an Keyframes)
ffmpeg -ss 00:01:30 -to 00:03:00 -i eingabe.mp4 -c copy clip.mp4
# Mit Neukodierung (genauer Schnitt)
ffmpeg -ss 00:01:30 -to 00:03:00 -i eingabe.mp4 -c:v libx264 -crf 23 clip.mp4
# Mehrere Clips verbinden (gleiche Codecs) über eine Liste
# datei.txt: file 'a.mp4'\n file 'b.mp4'
ffmpeg -f concat -safe 0 -i datei.txt -c copy zusammen.mp4
# Dauer ohne Neukodierung kürzen: schnellste Variante
ffmpeg -i in.mp4 -t 30 -c copy kurz.mp4
Skalieren, Zuschneiden, Drehen
# Auf 1280 Breite skalieren, Höhe automatisch (gerade Zahl)
ffmpeg -i in.mp4 -vf scale=1280:-2 out.mp4
# Zuschneiden: Breite:Höhe:X:Y
ffmpeg -i in.mp4 -vf "crop=640:480:100:50" out.mp4
# Drehen um 90 Grad im Uhrzeigersinn
ffmpeg -i in.mp4 -vf transpose=1 out.mp4
# Zwei Videos nebeneinander
ffmpeg -i links.mp4 -i rechts.mp4 -filter_complex hstack out.mp4
# Bildrate ändern
ffmpeg -i in.mp4 -r 30 out.mp4
Bilder und Sequenzen
# Einzelbild zu einem Zeitpunkt
ffmpeg -ss 00:00:05 -i in.mp4 -frames:v 1 -q:v 2 bild.jpg
# Alle 10 Sekunden ein Bild
ffmpeg -i in.mp4 -vf fps=1/10 bild_%03d.jpg
# Aus Bildern ein Video
ffmpeg -framerate 25 -pattern_type glob -i 'bild_*.png' -c:v libx264 out.mp4
# Kontaktabzug (Kachelbild)
ffmpeg -i in.mp4 -vf "fps=1/30,scale=320:-1,tile=4x4" kontakt.jpg
Werkzeuge drumherum
# Tonspur ersetzen
ffmpeg -i video.mp4 -i ton.wav -c:v copy -map 0:v:0 -map 1:a:0 -shortest out.mp4
# Bereich prüfen, ob Datei beschädigt ist
ffmpeg -v error -i in.mp4 -f null - # gibt nur Fehler aus
# Netzwerkstream aufnehmen
ffmpeg -i http://stream.example.org/live.m3u8 -c copy -t 60 aufnahme.ts
# Fortschritt maschinenlesbar
ffmpeg -i in.mp4 -progress - -nostats out.mp4 | grep out_time
Praxis-Tipps
- Erst
ffprobe, dann entscheiden: Welche Codecs, welche Auflösung, welche Bildrate? Eine Konvertierung ohne diese Information ist geraten. -c copyist wörtlich „nicht neu kodieren“: Schnell und verlustfrei – funktioniert aber nur, wenn Zielformat und Container die Quell-Codecs unterstützen.- CRF statt Bitrate: Für Dateien mit gleichbleibender Qualität ist ein CRF-Wert die bessere Wahl als eine feste Bitrate; diese bleibt für Streaming mit Bandbreitenvorgabe sinnvoll.
-movflags +faststartfür Weboberflächen: Verschiebt die Metadaten an den Dateianfang, damit der Browser sofort abspielen kann.-yüberschreibt ohne Nachfrage: Bequem in Skripten, gefährlich von Hand.
Verwandte Grundlagen: bash-Befehle, Codec, Verlustbehaftete Kompression, ImageMagick-Befehle.