Automaatio ja kehitys

Kuvien massamuuntaminen FFmpegillä: käytännön opas

5 min lukuaika
Kuvien massamuuntaminen FFmpegillä: käytännön opas

Sinulla on 500 PNG-kuvankaappausta muutettavaksi WebP-muotoon verkkosivustollesi. FFmpeg tunnetaan parhaiten videotyökaluna, mutta se käsittelee kuvia yhtä hyvin.

Miksi käyttää FFmpegiä kuviin?

FFmpeg on todennäköisesti jo asennettu jos teet videotyötä. RAW-kameraformaateille (CR2, NEF, ARW) käytä darktablea tai RawTherapeeta.

Asenna FFmpeg

bash
# macOS
brew install ffmpeg

# Ubuntu / Debian
sudo apt install ffmpeg

# Windows (Chocolatey)
choco install ffmpeg

bash
ffmpeg -version

Perusrakenne

Jokainen joukkokäsittelykomento noudattaa samaa rakennetta: shell-silmukka (Linux/macOS) tai for-silmukka (Windows). Kirjoita aina erilliseen tuloskansioon.

Muunna kaikki PNG JPG-muotoon

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:vLaatuTyypillinen käyttö
1-2Lähes häviötönTulostus, arkistointi
3-5Korkea laatuWebvalokuvaus
6-10KeskitasoEsikatselut
11+Alhainen laatuVältä

Muunna kaikki JPG WebP-muotoon

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 tuottaa tyypillisesti 25–35 % pienemmät tiedostot kuin vastaava JPG. Valokuville 80–85 on optimaalinen alue.

Muunna PNG-muotoon

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

Muunna sekalaisia formaatteja

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

Muuta kokoa ja muunna yhdellä kertaa

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

Rekursiivinen alikansioiden käsittely

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

Rinnakkainen käsittely nopeuden parantamiseksi

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

8-ytimisellä koneella SSD-tallennuksella rinnakkainen käsittely nopeuttaa tyypillisesti 3–5 kertaa.

Edistymisen seuranta

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

Virheenkäsittely

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

Komentoviite

MuunnosKomento (Linux/macOS)Huomio
Kaikki PNG → JPGfor f in *.pngdo ffmpeg -i "$f" -q:v 3 output/${f%.png}.jpg
Kaikki JPG → WebPfor f in *.jpgdo ffmpeg -i "$f" -quality 85 output/${f%.jpg}.webp
Kaikki JPG → PNGfor f in *.jpgdo ffmpeg -i "$f" output/${f%.jpg}.png
Kaikki → WebP häviötönfor f in *.pngdo ffmpeg -i "$f" -lossless 1 output/${f%.png}.webp
Koon muutos + muunnosfor f in *.jpgdo ffmpeg -i "$f" -vf scale=1080:-1 -q:v 3 output/${f%.jpg}.jpg

Milloin FFmpeg ei ole oikea työkalu

RAW-kameraformaatit — rajoitettu tuki. Käytä darktablea tai RawTherapeeta.

AVIF-koodaus — mahdollinen mutta erittäin hidas ilman laitteistokiihdytystä.

Vain muutama tiedosto? FastConvert on nopeampi — ilman asennusta.

Usein kysytyt kysymykset

Oletuksena ei. Lisää -map_metadata 0: ffmpeg -i input.jpg -map_metadata 0 -q:v 3 output.jpg

Tapahtuu kun lähde-JPG on jo voimakkaasti pakattu. Muunna aina korkeimman laadun lähteestä.

Käytä PNG lähtömuotona tai -lossless 1 WebP:lle.

Lisää -y automaattista ylikirjoitusta varten tai -n olemassa olevien ohittamiseen.

Yhteenveto

FFmpegin joukkomuuntaminen perustuu yksinkertaiseen shell-silmukkaan. Testaa aina pienellä erällä ennen koko kirjaston käsittelyä.

Muunna kuvia ilman komentoriviä? FastConvert — ilmaiseksi, ilman rekisteröitymistä.

Jaa