FFmpeg Essentials
Immer zuerst proben, niemals die Eingabe überschreiben und beim Schneiden neu kodieren, sofern nicht anders angegeben.
Proben
# Menschliche Zusammenfassung
ffprobe -v error -show_entries stream=codec_type,codec_name,width,height,r_frame_rate,sample_rate -show_entries format=duration,size -of default=nw=1 input.mp4
# Maschinenlesbar
ffprobe -v quiet -print_format json -show_format -show_streams input.mp4
Trimmen
# Ab 30 s, 15 s lang. Neu kodieren: genau und sicher.
ffmpeg -i input.mp4 -ss 00:00:30 -t 15 -c:v libx264 -crf 20 -c:a aac out/clip.mp4
# Schnell, ohne erneute Kodierung. Nur auf Keyframes, daher kann der Start um Sekunden abweichen.
ffmpeg -ss 00:00:30 -i input.mp4 -t 15 -c copy out/clip.mp4
-ss vor -i sucht schnell. Nach -i sucht es genau, aber langsamer. Für Neukodierungen ist beides bei modernem FFmpeg in Ordnung.
Zusammenfügen
# Gleicher Codec, Auflösung, fps: sofort, verlustfrei
printf "file 'a.mp4'\nfile 'b.mp4'\n" > list.txt
ffmpeg -f concat -safe 0 -i list.txt -c copy out/joined.mp4
# Verschiedene Quellen: Normalisieren beim Zusammenfügen
ffmpeg -i a.mp4 -i b.mp4 -filter_complex \
"[0:v]scale=1920:1080:force_original_aspect_ratio=decrease,pad=1920:1080:(ow-iw)/2:(oh-ih)/2,fps=30,setsar=1[v0];\
[1:v]scale=1920:1080:force_original_aspect_ratio=decrease,pad=1920:1080:(ow-iw)/2:(oh-ih)/2,fps=30,setsar=1[v1];\
[0:a][1:a]concat=n=2:v=1:a=1[v][a]" \
-map "[v]" -map "[a]" -c:v libx264 -crf 20 -c:a aac out/joined.mp4
PowerShell: Schreiben Sie list.txt mit Set-Content und verwenden Sie Backtick-Zeilenumbrüche oder eine einzelne lange Zeile anstelle von \.
Skalieren und neu einrahmen
# In 1920x1080 mit Balken einpassen
-vf "scale=1920:1080:force_original_aspect_ratio=decrease,pad=1920:1080:(ow-iw)/2:(oh-ih)/2"
# 1920x1080 ausfüllen, Überlauf zuschneiden
-vf "scale=1920:1080:force_original_aspect_ratio=increase,crop=1920:1080"
# Breite 1280, Höhe automatisch und gerade
-vf "scale=1280:-2"
Komprimieren
ffmpeg -i input.mp4 -c:v libx264 -crf 23 -preset medium -c:a aac -b:a 128k -movflags +faststart out/small.mp4
| Zweck | CRF | Voreinstellung |
|---|---|---|
| Master / Archiv | 16-18 | slow |
| Produktion | 20-22 | medium |
| Web / Vorschau | 23-26 | fast |
| Schneller Entwurf | 28+ | veryfast |
Niedrigere CRF bedeutet höhere Qualität und eine größere Datei. Für eine Zielgröße verwenden Sie den Zwei-Pass--b:v anstelle von CRF.
Geschwindigkeit
# 2x schneller, Video und Audio
ffmpeg -i in.mp4 -filter_complex "[0:v]setpts=0.5*PTS[v];[0:a]atempo=2.0[a]" -map "[v]" -map "[a]" out/fast.mp4
# 0.5x Zeitlupe
ffmpeg -i in.mp4 -filter_complex "[0:v]setpts=2.0*PTS[v];[0:a]atempo=0.5[a]" -map "[v]" -map "[a]" out/slow.mp4
# Nur Video
ffmpeg -i in.mp4 -an -filter:v "setpts=0.25*PTS" out/timelapse.mp4
setpts-Multiplikator = 1 / Geschwindigkeit. atempo akzeptiert 0,5 bis 2,0 pro Filter, also für mehr verketten: atempo=2.0,atempo=2.0 für 4x.
Ein- und Ausblendungen
# 1 s ein, 1 s aus bei einem 10 s Clip
ffmpeg -i in.mp4 -vf "fade=t=in:st=0:d=1,fade=t=out:st=9:d=1" -af "afade=t=in:st=0:d=1,afade=t=out:st=9:d=1" out/faded.mp4
Audio
ffmpeg -i in.mp4 -vn -c:a libmp3lame -q:a 2 out/audio.mp3 # mp3 extrahieren
ffmpeg -i in.mp4 -vn -c:a copy out/audio.m4a # ohne Neukodierung extrahieren (AAC-Quelle)
ffmpeg -i video.mp4 -i voice.wav -map 0:v -map 1:a -c:v copy -c:a aac -shortest out/dubbed.mp4 # Audio ersetzen
ffmpeg -i in.mp4 -an -c:v copy out/silent.mp4 # Audio entfernen
GIF
ffmpeg -i in.mp4 -t 5 -vf "fps=15,scale=480:-1:flags=lanczos,split[a][b];[a]palettegen[p];[b][p]paletteuse" out/preview.gif
Bilder
ffmpeg -ss 5 -i in.mp4 -frames:v 1 -q:v 2 out/frame.jpg # Ein Bild
ffmpeg -framerate 30 -i frames/%04d.png -c:v libx264 -pix_fmt yuv420p out/from-frames.mp4
ffmpeg -loop 1 -i still.png -t 5 -c:v libx264 -pix_fmt yuv420p -r 30 out/still.mp4
Fehlerbehebung
| Symptom | Lösung |
|---|---|
height not divisible by 2 | Fügen Sie scale=trunc(iw/2)*2:trunc(ih/2)*2 hinzu |
| Läuft in VLC, aber nicht im Browser oder auf dem Handy | -c:v libx264 -pix_fmt yuv420p -movflags +faststart |
| Audio driftet nach Geschwindigkeitsänderung | Verwenden Sie setpts und atempo zusammen in filter_complex |
| Audio driftet bei Clips mit variabler Bildrate vom Telefon | Fügen Sie -vsync cfr -r 30 (oder -fps_mode cfr) hinzu |
Schwarze erste Bilder nach -c copy-Trimmen | Statt Stream-Kopie neu kodieren |
| Ausgabe ist 0 Bytes | Lesen Sie den vollständigen Fehler mit -v error; überprüfen Sie das Stream-Mapping |
| Pfade mit Leerzeichen | Setzen Sie sie in Anführungszeichen: "mein Clip.mp4" |
| Überschreiben-Abfrage blockiert Automatisierung | Fügen Sie -y (überschreiben) oder -n (niemals) hinzu |
Sicherheitsgewohnheiten
- Schreiben Sie in
out/, niemals in den Eingabepfad. - Fügen Sie
-hide_banner -loglevel errorin Skripten hinzu,-stats, um den Fortschritt zu sehen. - Überprüfen Sie das Ergebnis mit
ffprobeund dervideo-qa-Fähigkeit.