Automatizace a vývoj

Hromadná konverze obrázků pomocí FFmpeg: praktický průvodce

5 min čtení
Hromadná konverze obrázků pomocí FFmpeg: praktický průvodce

Máte 500 PNG screenshotů k převodu na WebP pro svůj web. FFmpeg je znám jako video nástroj, ale zpracovává obrázky stejně dobře — a protože funguje z příkazové řádky, zpracuje libovolné množství souborů jedním příkazem.

Proč používat FFmpeg pro obrázky?

FFmpeg je pravděpodobně již nainstalován, pokud děláte video práci. Podporuje širokou škálu formátů. Pro RAW formáty (CR2, NEF, ARW) použijte darktable nebo RawTherapee.

Install FFmpeg

bash
# macOS
brew install ffmpeg

# Ubuntu / Debian
sudo apt install ffmpeg

# Windows (Chocolatey)
choco install ffmpeg

bash
ffmpeg -version

Základní vzor

Každý příkaz hromadné konverze sleduje stejnou strukturu: smyčka shellu (Linux/macOS) nebo smyčka for (Windows). Klíčové pravidlo: nikdy nepřepisujte zdrojové soubory.

Hromadná konverze PNG na 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:vKvalitaTypické použití
1–2Téměř bezztrátováTisk, archiv
3–5Vysoká kvalitaWebová fotografie
6–10Střední kvalitaNáhledy
11+Nízká kvalitaVyhnout se

Hromadná konverze JPG na 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 vytváří soubory typicky o 25–35 % menší než ekvivalentní JPG. Pro fotografie je optimální rozsah 80–85.

Konverze na PNG

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

Konverze smíšených formátů

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

Změna velikosti při konverzi

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

Rekurzivní zpracování podadresářů

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

Paralelní zpracování pro rychlost

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

Na 8jádrovém stroji se SSD paralelní zpracování typicky zkrátí čas konverze 3–5×.

Ukazatel průběhu

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

Ošetření chyb

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

Reference příkazů

KonverzePříkaz (Linux/macOS)Poznámka
Všechny PNG → JPGfor f in *.pngdo ffmpeg -i "$f" -q:v 3 output/${f%.png}.jpg
Všechny JPG → WebPfor f in *.jpgdo ffmpeg -i "$f" -quality 85 output/${f%.jpg}.webp
Všechny JPG → PNGfor f in *.jpgdo ffmpeg -i "$f" output/${f%.jpg}.png
Vše → WebP bezztrátověfor f in *.pngdo ffmpeg -i "$f" -lossless 1 output/${f%.png}.webp
Změna velikosti + konverzefor f in *.jpgdo ffmpeg -i "$f" -vf scale=1080:-1 -q:v 3 output/${f%.jpg}.jpg

Kdy FFmpeg není správný nástroj

RAW formáty (CR2, NEF, ARW) — omezená podpora. Použijte darktable nebo RawTherapee.

Kódování AVIF — možné, ale velmi pomalé. libavif nebo Squoosh CLI jsou rychlejší.

Jen pár souborů? Online nástroj jako FastConvert je rychlejší.

Nejčastější dotazy

Ve výchozím nastavení ne. Přidejte -map_metadata 0: ffmpeg -i input.jpg -map_metadata 0 -q:v 3 output.jpg

Stává se to, když je zdrojový JPG již silně komprimován. Vždy konvertujte z nejvyšší dostupné kvality.

Použijte PNG jako výstupní formát nebo -lossless 1 pro WebP.

Přidejte -y pro automatické přepsání nebo -n pro přeskočení existujících souborů.

Shrnutí

Hromadná konverze obrázků přes FFmpeg se skládá z jednoduché smyčky. Vždy testujte na malé dávce před zpracováním celé knihovny.

Konvertovat obrázky bez příkazové řádky? FastConvert — zdarma, bez registrace.

Sdílet