Αυτοματοποίηση και ανάπτυξη

Μαζική Μετατροπή Εικόνων με FFmpeg: Πρακτικός Οδηγός

5 λεπτά ανάγνωσης
Μαζική Μετατροπή Εικόνων με FFmpeg: Πρακτικός Οδηγός

Έχετε 500 στιγμιότυπα οθόνης PNG για μετατροπή σε WebP για τον ιστότοπό σας. Το FFmpeg είναι γνωστό κυρίως ως εργαλείο βίντεο, αλλά χειρίζεται εικόνες εξίσου καλά.

Γιατί FFmpeg για εικόνες;

Το FFmpeg πιθανώς είναι ήδη εγκατεστημένο αν εργάζεστε με βίντεο. Για μορφές RAW (CR2, NEF, ARW), χρησιμοποιήστε darktable ή RawTherapee.

Εγκατάσταση FFmpeg

bash
# macOS
brew install ffmpeg

# Ubuntu / Debian
sudo apt install ffmpeg

# Windows (Chocolatey)
choco install ffmpeg

bash
ffmpeg -version

Το βασικό μοτίβο

Κάθε εντολή μαζικής μετατροπής ακολουθεί την ίδια δομή: βρόχος shell (Linux/macOS) ή βρόχος for (Windows). Πάντα γράφετε σε ξεχωριστό κατάλογο εξόδου.

Μαζική Μετατροπή PNG σε 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:vΠοιότηταΤυπική χρήση
1-2Σχεδόν χωρίς απώλειαΕκτύπωση, αρχειοθέτηση
3-5Υψηλή ποιότηταΦωτογραφία web
6-10Μέτρια ποιότηταΠροεπισκοπήσεις
11+Χαμηλή ποιότηταΑποφύγετε

Μαζική Μετατροπή JPG σε 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 παράγει αρχεία τυπικά 25–35 % μικρότερα από ισοδύναμο JPG. Για φωτογραφίες, 80–85 είναι το βέλτιστο εύρος.

Μετατροπή σε PNG

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

Μετατροπή Μικτών Μορφών

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

Αλλαγή Μεγέθους και Μετατροπή σε Ένα Βήμα

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

Αναδρομική Επεξεργασία Υποκαταλόγων

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

Παράλληλη Επεξεργασία για Ταχύτητα

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

Σε μηχανή 8 πυρήνων με SSD, η παράλληλη επεξεργασία μειώνει τον χρόνο μετατροπής κατά 3–5 φορές.

Ένδειξη Προόδου

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

Διαχείριση Σφαλμάτων

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

Αναφορά Εντολών

ΜετατροπήΕντολή (Linux/macOS)Σημείωση
Όλα PNG → JPGfor f in *.pngdo ffmpeg -i "$f" -q:v 3 output/${f%.png}.jpg
Όλα JPG → WebPfor f in *.jpgdo ffmpeg -i "$f" -quality 85 output/${f%.jpg}.webp
Όλα JPG → PNGfor f in *.jpgdo ffmpeg -i "$f" output/${f%.jpg}.png
Όλα → WebP χωρίς απώλειαfor f in *.pngdo ffmpeg -i "$f" -lossless 1 output/${f%.png}.webp
Αλλαγή μεγέθους + μετατροπήfor f in *.jpgdo ffmpeg -i "$f" -vf scale=1080:-1 -q:v 3 output/${f%.jpg}.jpg

Πότε το FFmpeg δεν είναι το κατάλληλο εργαλείο

Μορφές RAW κάμερας — περιορισμένη υποστήριξη. Χρησιμοποιήστε darktable ή RawTherapee.

Κωδικοποίηση AVIF — δυνατή αλλά πολύ αργή χωρίς επιτάχυνση υλικού.

Μόνο λίγα αρχεία; FastConvert είναι πιο γρήγορο — χωρίς εγκατάσταση.

Συχνές Ερωτήσεις

Από προεπιλογή όχι. Προσθέστε -map_metadata 0: ffmpeg -i input.jpg -map_metadata 0 -q:v 3 output.jpg

Συμβαίνει όταν το αρχικό JPG είναι ήδη πολύ συμπιεσμένο. Μετατρέπετε πάντα από την πηγή καλύτερης ποιότητας.

Χρησιμοποιήστε PNG ως μορφή εξόδου ή -lossless 1 για WebP.

Προσθέστε -y για αυτόματη αντικατάσταση ή -n για παράλειψη υπαρχόντων αρχείων.

Συμπέρασμα

Η μαζική μετατροπή εικόνων με FFmpeg βασίζεται σε έναν απλό βρόχο shell. Πάντα δοκιμάζετε σε μικρή παρτίδα πριν επεξεργαστείτε ολόκληρη τη βιβλιοθήκη σας.

Μετατροπή εικόνων χωρίς γραμμή εντολών; FastConvert — δωρεάν, χωρίς εγγραφή.

Κοινοποίηση