Otomasyon ve geliştirme

FFmpeg ile Toplu Görsel Dönüştürme: Pratik Bir Kılavuz

5 dk okuma
FFmpeg ile Toplu Görsel Dönüştürme: Pratik Bir Kılavuz

Web siteniz için WebP'ye dönüştürmeniz gereken 500 PNG ekran görüntünüz var. FFmpeg esas olarak bir video aracı olarak bilinir, ancak görselleri de aynı derecede iyi işler.

Görsel işleme için neden FFmpeg?

Video çalışması yapıyorsanız FFmpeg muhtemelen zaten kurulu. RAW kamera formatları (CR2, NEF, ARW) için darktable veya RawTherapee kullanın.

FFmpeg Kurulumu

bash
# macOS
brew install ffmpeg

# Ubuntu / Debian
sudo apt install ffmpeg

# Windows (Chocolatey)
choco install ffmpeg

bash
ffmpeg -version

Temel yapı

Her toplu dönüştürme komutu aynı yapıyı izler: bir kabuk döngüsü (Linux/macOS) veya bir for döngüsü (Windows). Her zaman ayrı bir çıktı dizinine yazın.

Tüm PNG'leri Toplu JPG'ye Dönüştür

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:vKaliteTipik kullanım
1-2Neredeyse kayıpsızBaskı, arşivleme
3-5Yüksek kaliteWeb fotoğrafçılığı
6-10Orta kaliteÖnizlemeler
11+Düşük kaliteKaçının

Tüm JPG'leri Toplu WebP'ye Dönüştür

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, eşdeğer JPG'den tipik olarak %25–35 daha küçük dosyalar üretir. Fotoğraflar için 80–85 optimum aralıktır.

PNG'ye Dönüştür

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

Karışık Formatları Dönüştür

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

Tek Geçişte Yeniden Boyutlandır ve Dönüştür

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

Alt Dizinlerin Özyinelemeli İşlenmesi

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

Hız için Paralel İşleme

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

8 çekirdekli bir makinede SSD depolama ile paralel işleme tipik olarak dönüştürme süresini 3–5 kat azaltır.

İlerleme Göstergesi

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

Hata Yönetimi

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

Komut Referansı

DönüşümKomut (Linux/macOS)Not
Tüm PNG → JPGfor f in *.pngdo ffmpeg -i "$f" -q:v 3 output/${f%.png}.jpg
Tüm JPG → WebPfor f in *.jpgdo ffmpeg -i "$f" -quality 85 output/${f%.jpg}.webp
Tüm JPG → PNGfor f in *.jpgdo ffmpeg -i "$f" output/${f%.jpg}.png
Tümü → WebP kayıpsızfor f in *.pngdo ffmpeg -i "$f" -lossless 1 output/${f%.png}.webp
Yeniden boyutlandır + dönüştürfor f in *.jpgdo ffmpeg -i "$f" -vf scale=1080:-1 -q:v 3 output/${f%.jpg}.jpg

FFmpeg Ne Zaman Doğru Araç Değildir

RAW kamera formatları — sınırlı destek. darktable veya RawTherapee kullanın.

AVIF kodlama — donanım hızlandırması olmadan çok yavaş.

Sadece birkaç dosya mı? FastConvert daha hızlı — kurulum gerektirmez.

Sıkça Sorulan Sorular

Varsayılan olarak hayır. -map_metadata 0 ekleyin: ffmpeg -i input.jpg -map_metadata 0 -q:v 3 output.jpg

Kaynak JPG zaten çok sıkıştırılmışsa olur. Her zaman mevcut en yüksek kaliteli kaynaktan dönüştürün.

PNG'yi çıktı formatı olarak kullanın veya WebP için -lossless 1 ekleyin.

Otomatik üzerine yazma için -y veya mevcut dosyaları atlamak için -n ekleyin.

Sonuç

FFmpeg toplu görsel dönüştürmesi basit bir kabuk döngüsüne dayanır. Tüm kütüphanenizi işlemeden önce daima küçük bir toplu iş üzerinde test edin.

Komut satırı olmadan görsel dönüştürmek mi? FastConvert — ücretsiz, kayıt gerektirmez.

Paylaş