Automatisering og udvikling

Massekonvertering af billeder med FFmpeg: en praktisk guide

5 min. læsetid
Massekonvertering af billeder med FFmpeg: en praktisk guide

Du har 500 PNG-skærmbilleder, der skal konverteres til WebP til din hjemmeside. FFmpeg er bedst kendt som et videoværktøj, men håndterer billeder ligeså godt — og da det kører fra kommandolinjen, behandler det et vilkårligt antal filer med én enkelt kommando.

Hvorfor FFmpeg til billeder?

FFmpeg er sandsynligvis allerede installeret, hvis du arbejder med video. Det understøtter et bredt udvalg af formater. For RAW-formater (CR2, NEF, ARW), brug darktable eller RawTherapee.

Install FFmpeg

bash
# macOS
brew install ffmpeg

# Ubuntu / Debian
sudo apt install ffmpeg

# Windows (Chocolatey)
choco install ffmpeg

bash
ffmpeg -version

Det grundlæggende mønster

Hver bulk-konverteringskommando følger den samme struktur: en shell-løkke (Linux/macOS) eller en for-løkke (Windows). Grundregel: overskriv aldrig kildefiler.

Massekonverter PNG til JPG

bash
mkdir -p output
for f in *.png; do
  ffmpeg -i "$f" -q:v 2 "output/${f%.png}.jpg"
done

bash
mkdir output
for %f in (*.png) do ffmpeg -i "%f" -q:v 2 "output/%~nf.jpg"

bash
New-Item -ItemType Directory -Force output
Get-ChildItem *.png | ForEach-Object {
  ffmpeg -i $_.FullName -q:v 2 "output/$($_.BaseName).jpg"
}

-q:vKvalitetTypisk brug
1–2Næsten tabsfriTryk, arkivering
3–5Høj kvalitetWebfotografi
6–10Middel kvalitetForhåndsvisninger
11+Lav kvalitetUndgå

Massekonverter JPG til WebP

bash
mkdir -p output
for f in *.jpg *.jpeg; do
  [ -f "$f" ] || continue
  ffmpeg -i "$f" -quality 85 "output/${f%.*}.webp"
done

bash
mkdir -p output
for f in *.png; do
  ffmpeg -i "$f" -lossless 1 "output/${f%.png}.webp"
done

WebP producerer typisk filer, der er 25–35 % mindre end tilsvarende JPG. For fotos er 80–85 det optimale område.

Konverter til PNG

bash
mkdir -p output
for f in *.jpg *.jpeg; do
  [ -f "$f" ] || continue
  ffmpeg -i "$f" "output/${f%.*}.png"
done

Konverter blandede formater

bash
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"
done

Tilpas størrelse og konverter i ét trin

bash
mkdir -p output
for f in *.png; do
  ffmpeg -i "$f" -vf scale=1080:-1 -q:v 3 "output/${f%.png}.jpg"
done

bash
mkdir -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"
done

Rekursiv behandling af undermapper

bash
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"
done

Parallel behandling for hastighed

bash
mkdir -p output
ls *.png | xargs -P 4 -I {} sh -c 'ffmpeg -i "$1" -q:v 3 "output/${1%.png}.jpg"' _ {}

På en 8-kerne-maskine med SSD-lager reducerer parallel behandling typisk konverteringstiden med 3–5 gange.

Statusindikator

bash
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"
done

Fejlhåndtering

bash
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
done

Kommandoreference

KonverteringKommando (Linux/macOS)Bemærkning
Alle PNG → JPGfor f in *.pngdo ffmpeg -i "$f" -q:v 3 output/${f%.png}.jpg
Alle JPG → WebPfor f in *.jpgdo ffmpeg -i "$f" -quality 85 output/${f%.jpg}.webp
Alle JPG → PNGfor f in *.jpgdo ffmpeg -i "$f" output/${f%.jpg}.png
Alle → WebP tabsfritfor f in *.pngdo ffmpeg -i "$f" -lossless 1 output/${f%.png}.webp
Tilpas størrelse + konverterfor f in *.jpgdo ffmpeg -i "$f" -vf scale=1080:-1 -q:v 3 output/${f%.jpg}.jpg

Hvornår FFmpeg ikke er det rigtige værktøj

RAW-kameraformater (CR2, NEF, ARW) — begrænset understøttelse. Brug darktable eller RawTherapee.

AVIF-kodning — mulig men meget langsom uden hardwareacceleration.

Blot et par filer? Et onlineværktøj som FastConvert er hurtigere.

Ofte stillede spørgsmål

Som standard nej. Tilføj -map_metadata 0: ffmpeg -i input.jpg -map_metadata 0 -q:v 3 output.jpg

Det sker, når kilde-JPG allerede er kraftigt komprimeret. Konverter altid fra den bedst tilgængelige kilde.

Brug PNG som outputformat eller -lossless 1 til WebP.

Tilføj -y for automatisk overskrivning eller -n for at springe eksisterende filer over.

Opsummering

Masse-billedkonvertering med FFmpeg koger ned til en simpel shell-løkke. Test altid på en lille batch, inden du behandler hele dit bibliotek.

Konvertere billeder uden kommandolinjen? FastConvert — gratis, ingen registrering.

Del