ffmpeg ist seit 2000 das de-facto-Standardwerkzeug für die Verarbeitung von Audio- und Video-Dateien auf der Kommandozeile. Es liest, schreibt und konvertiert praktisch jeden gängigen Codec (H.264, H.265, VP9, AV1, AAC, MP3, FLAC, ProRes, DNxHD …) und Container (MP4, MKV, WebM, MOV, AVI, FLAC). Daneben bietet es Filter für Skalierung, Schnitt, Audio-Pegelung, Untertitel-Brennen und vieles mehr.
Das ffmpeg-Projekt umfasst neben dem Hauptkommando auch ffprobe (Datei-Inspektion) und ffplay (einfacher Player).
Datei inspizieren — ffprobe
ffprobe video.mp4
ffprobe -v error -show_streams -show_format video.mp4
ffprobe -v error -show_entries stream=codec_name,width,height,duration -of json video.mp4
Format-Konversion (Container ändern, Streams behalten)
ffmpeg -i input.mov -c copy output.mp4
# -c copy: keine Re-Enkodierung, nur Container-Wrap. Schnell und verlustfrei,
# sofern die Codecs vom Zielcontainer unterstützt sind.
Transkodierung mit Standard-Codecs
# H.264-Video + AAC-Audio in MP4 (Web-Standard)
ffmpeg -i input.mkv -c:v libx264 -crf 23 -preset medium -c:a aac -b:a 128k output.mp4
# H.265 (HEVC) — kleinere Dateien, langsamer
ffmpeg -i input.mp4 -c:v libx265 -crf 28 -c:a aac -b:a 128k output-hevc.mp4
# VP9 + Opus in WebM (lizenzfrei für Web)
ffmpeg -i input.mp4 -c:v libvpx-vp9 -crf 30 -b:v 0 -c:a libopus -b:a 96k output.webm
-crf (Constant Rate Factor): kleiner = besser. Typische Werte: H.264 18–24, H.265 23–28.
Schneiden / Trimmen
# Von Sekunde 30 bis Sekunde 90 (verlustfrei, Schnitte am nächsten Keyframe)
ffmpeg -ss 00:00:30 -to 00:01:30 -i input.mp4 -c copy out.mp4
# Mit Re-Enkodierung (genaue Schnittpunkte)
ffmpeg -i input.mp4 -ss 00:00:30 -to 00:01:30 -c:v libx264 -crf 23 -c:a aac out.mp4
-ss vor -i: schnell, am Keyframe. Nach -i: langsam, dafür framegenau.
Audio extrahieren
ffmpeg -i video.mp4 -vn -acodec copy audio.aac # Stream kopieren
ffmpeg -i video.mp4 -vn -acodec libmp3lame -q:a 2 audio.mp3
ffmpeg -i video.mp4 -vn -acodec flac audio.flac # verlustfrei
Frames als Bilder extrahieren
ffmpeg -i video.mp4 -vf fps=1 frame-%04d.png # 1 Bild pro Sekunde
ffmpeg -i video.mp4 -vf "select=eq(n\,0)" -vframes 1 thumb.jpg # erstes Frame
ffmpeg -ss 00:01:30 -i video.mp4 -vframes 1 -q:v 2 thumb.jpg # Frame bei 1:30
Aus Bildern ein Video bauen
ffmpeg -framerate 25 -i frame-%04d.png -c:v libx264 -pix_fmt yuv420p output.mp4
-pix_fmt yuv420p für Kompatibilität mit Browsern und QuickTime.
Skalieren
ffmpeg -i input.mp4 -vf "scale=1280:-2" out.mp4 # Breite 1280, Höhe proportional (durch 2 teilbar)
ffmpeg -i input.mp4 -vf "scale=-2:720" out.mp4 # Höhe 720
ffmpeg -i input.mp4 -vf "scale='min(1920,iw)':-2" out.mp4 # Breite max 1920, kleinere Werte unverändert
Mehrere Dateien zusammenfügen (concat)
# 1. Liste vorbereiten:
cat <<EOF > list.txt
file 'teil-01.mp4'
file 'teil-02.mp4'
file 'teil-03.mp4'
EOF
# 2. Concat (gleicher Codec/Container):
ffmpeg -f concat -safe 0 -i list.txt -c copy gesamt.mp4
Bei verschiedenen Codecs/Auflösungen muss neu enkodiert werden (concat-Filter).
Lautstärke und Audio-Filter
ffmpeg -i input.mp3 -af "volume=0.5" leiser.mp3
ffmpeg -i input.mp3 -af "loudnorm" normalisiert.mp3 # EBU R128
Untertitel einbrennen
ffmpeg -i video.mp4 -vf "subtitles=untertitel.srt" video-mit-titel.mp4
Streams selektieren (-map)
# Nur den ersten Video- und den deutschen Audio-Stream übernehmen
ffmpeg -i input.mkv -map 0:v:0 -map 0:m:language:deu -c copy out.mkv
Hardware-Beschleunigung
ffmpeg unterstützt diverse Hardware-Decoder/Encoder (VideoToolbox auf macOS, NVENC, QSV, VAAPI auf Linux):
# Beispiel macOS, H.264 mit VideoToolbox
ffmpeg -i input.mov -c:v h264_videotoolbox -b:v 4M out.mp4
Hardware-Encoder sind schneller, aber meist qualitativ etwas schlechter pro Bitrate als die Software-Pendants.
Archivierung — verlustfrei
# FFV1 in MKV: verbreitet im Archiv (ffv1 = lossless, MKV als Container)
ffmpeg -i input.mov -c:v ffv1 -level 3 -coder 1 -context 1 -g 1 \
-slices 24 -slicecrc 1 -c:a copy archive.mkv