Sie haben 500 PNG-Screenshots, die für Ihre Website in WebP umgewandelt werden müssen. Oder einen Ordner mit TIFF-Exporten aus Lightroom, die zu JPG werden sollen. FFmpeg ist vor allem als Videowerkzeug bekannt, verarbeitet Bilder aber genauso gut — und da es von der Kommandozeile aus läuft, verarbeitet es mit einem einzigen Befehl beliebig viele Dateien.
Warum FFmpeg für Bilder?
FFmpeg ist wahrscheinlich bereits installiert, wenn Sie Videoarbeit machen. Es unterstützt eine breite Palette von Formaten und lässt sich nahtlos in Shell-Skripte und CI-Pipelines integrieren. Für RAW-Kameraformate (CR2, NEF, ARW) besser darktable oder RawTherapee verwenden — FFmpegs RAW-Unterstützung ist begrenzt.
FFmpeg installieren
# macOS
brew install ffmpeg
# Ubuntu / Debian
sudo apt install ffmpeg
# Windows (Chocolatey)
choco install ffmpegffmpeg -versionDas Grundmuster
Jeder Stapelkonvertierungsbefehl folgt dem gleichen Aufbau: eine Shell-Schleife (Linux/macOS) oder eine for-Schleife (Windows). Wichtigste Regel: niemals Quelldateien überschreiben — immer in ein separates Verzeichnis schreiben.
PNG stapelweise in JPG konvertieren
mkdir -p output
for f in *.png; do
ffmpeg -i "$f" -q:v 2 "output/${f%.png}.jpg"
donemkdir output
for %f in (*.png) do ffmpeg -i "%f" -q:v 2 "output/%~nf.jpg"New-Item -ItemType Directory -Force output
Get-ChildItem *.png | ForEach-Object {
ffmpeg -i $_.FullName -q:v 2 "output/$($_.BaseName).jpg"
}| -q:v | Qualität |
|---|---|
| T | ['Nahezu verlustfrei', 'Fast ohne Verlust'] |
| y | ['Drucken, Archivieren', 'Archivieren'] |
| p | ['Hohe Qualität', 'Gute Qualität'] |
| i | ['Webfotografie', 'Web'] |
JPG stapelweise in WebP konvertieren
mkdir -p output
for f in *.jpg *.jpeg; do
[ -f "$f" ] || continue
ffmpeg -i "$f" -quality 85 "output/${f%.*}.webp"
donemkdir -p output
for f in *.png; do
ffmpeg -i "$f" -lossless 1 "output/${f%.png}.webp"
doneWebP erzeugt Dateien, die typischerweise 25–35 % kleiner sind als gleichwertige JPG. Für Fotos ist Qualität 80–85 der optimale Bereich. Für Logos und Grafiken mit Text besser verlustfreies WebP verwenden.
Stapelweise in PNG konvertieren
mkdir -p output
for f in *.jpg *.jpeg; do
[ -f "$f" ] || continue
ffmpeg -i "$f" "output/${f%.*}.png"
doneGemischte Formate konvertieren
mkdir -p output
for f in *.jpg *.jpeg *.png *.webp *.tiff *.bmp; do
[ -f "$f" ] || continue
ffmpeg -i "$f" -q:v 3 "output/${f%.*}.jpg"
doneGröße ändern und gleichzeitig konvertieren
mkdir -p output
for f in *.png; do
ffmpeg -i "$f" -vf scale=1080:-1 -q:v 3 "output/${f%.png}.jpg"
donemkdir -p output
for f in *.jpg; do
ffmpeg -i "$f" -vf "crop='min(iw,ih)':'min(iw,ih)',scale=200:200" \
"output/${f%.jpg}_thumb.jpg"
doneUnterverzeichnisse rekursiv verarbeiten
find . -name "*.png" -not -path "./output*" | while read f; do
output="output/${f#./}"
mkdir -p "$(dirname "$output")"
ffmpeg -i "$f" -q:v 3 "${output%.png}.jpg"
doneParallele Verarbeitung für mehr Geschwindigkeit
mkdir -p output
ls *.png | xargs -P 4 -I {} sh -c 'ffmpeg -i "$1" -q:v 3 "output/${1%.png}.jpg"' _ {}Auf einem 8-Kern-Rechner mit SSD-Speicher reduziert die parallele Verarbeitung die Konvertierungszeit typischerweise um den Faktor 3–5.
Fortschrittsanzeige
total=$(ls *.png | wc -l)
count=0
mkdir -p output
for f in *.png; do
count=$((count + 1))
echo "[$count/$total] $f"
ffmpeg -loglevel quiet -i "$f" -q:v 3 "output/${f%.png}.jpg"
doneFehler abfangen
mkdir -p output
error_log="errors.txt"
> "$error_log"
for f in *.jpg *.jpeg *.png *.webp; do
[ -f "$f" ] || continue
if ffmpeg -loglevel error -i "$f" -quality 85 "output/${f%.*}.webp" 2>>"$error_log"; then
echo "✓ $f"
else
echo "✗ $f"
fi
doneBefehlsreferenz
| Konvertierung | Befehl (Linux/macOS) | Hinweis |
|---|---|---|
| Alle PNG → JPG | for f in *.png | do ffmpeg -i "$f" -q:v 3 output/${f%.png}.jpg |
| Alle JPG → WebP | for f in *.jpg | do ffmpeg -i "$f" -quality 85 output/${f%.jpg}.webp |
| Alle JPG → PNG | for f in *.jpg | do ffmpeg -i "$f" output/${f%.jpg}.png |
| Alle → WebP verlustfrei | for f in *.png | do ffmpeg -i "$f" -lossless 1 output/${f%.png}.webp |
| Größe ändern + konvertieren | for f in *.jpg | do ffmpeg -i "$f" -vf scale=1080:-1 -q:v 3 output/${f%.jpg}.jpg |
Wann FFmpeg nicht das richtige Werkzeug ist
RAW-Kameraformate (CR2, NEF, ARW) — begrenzte Unterstützung. darktable oder RawTherapee verwenden.
AVIF-Kodierung — möglich via -c:v libaom-av1, aber ohne Hardware-Beschleunigung sehr langsam. libavif oder Squoosh CLI sind schneller.
ICC-Farbprofile — FFmpeg bewahrt eingebettete Farbprofile nicht immer. Für farbkritische Arbeit ist ImageMagick zuverlässiger.
Nur wenige Dateien konvertieren? Ein Online-Tool wie FastConvert ist schneller — keine Installation nötig.
Häufig gestellte Fragen
Fazit
FFmpegs Stapelbildkonvertierung läuft auf einer einfachen Shell-Schleife: Quelldateien durchlaufen, Konvertierungsbefehl ausführen, Ergebnis in separates Verzeichnis schreiben. Immer zuerst an einem kleinen Stapel testen, bevor die gesamte Bibliothek verarbeitet wird.
Bilder ohne Kommandozeile konvertieren? FastConvert Bildkonverter — kostenlos, ohne Anmeldung.
