Strip-meta - curăță metadatele din poze și le convertește în WebP

Aveam vreo 10 GB de poze pe calculator și m-am gândit că ar fi momentul să fac puțină ordine. Două probleme de rezolvat: metadatele EXIF care conțin locație GPS, model de cameră și tot felul de informații personale, și formatul - JPEG și PNG ocupă mult mai mult spațiu decât ar trebui.

Soluția evidentă era un script Python care să rezolve ambele probleme dintr-o singură comandă. Am scris strip-meta, un instrument de terminal care caută imagini recursiv într-un director, le convertește în WebP la quality 90 (vizual identic cu JPEG la quality 85, dar mult mai mic) și elimină toate metadatele în același timp.

Ce face concret

  • Convertește JPEG, PNG, BMP și altele în WebP quality 90, cu metadatele eliminate
  • Fișierele WebP care deja există și au metadate sunt curățate fără reconversie
  • Fișierele deja curate sunt sărite automat la rulări repetate
  • Dacă există foto.jpg și foto.png în același folder, devin foto.webp și foto1.webp - fără suprascrieri
  • Numele fișierelor sunt curățate automat: emoji și caractere speciale dispar, literele românești rămân
  • Fișierele corupte sunt șterse (nu pot fi recuperate oricum)
  • Symlink-urile, GIF-urile, TIFF-urile, RAW-urile și ICO-urile sunt ignorate
  • Directoarele fără permisiune de scriere sunt ignorate și raportate
  • Fișierele deschise de alte programe sunt sărite
  • Fișierele read-only sunt convertite, dar originalul nu poate fi șters - e notat în raport
  • Dacă scriptul e întrerupt brusc, originalele rămân intacte; la rularea următoare, fișierele .webp.tmp orfane sunt șterse automat înainte de a începe

La final afișează un raport complet: ce s-a convertit, ce s-a sărit și de ce, ce erori au apărut, și cât spațiu s-a economisit.

Instalare

Necesită doar Pillow, care probabil e deja instalat:

pip install pillow --break-system-packages

Apoi:

sudo cp strip-meta.py /usr/local/bin/strip-meta
sudo chmod +x /usr/local/bin/strip-meta

Utilizare

# Procesează recursiv tot folderul
strip-meta ~/Poze

# Simulare - afișează ce s-ar face fără să modifice nimic
strip-meta ~/Poze --dry-run

# Păstrează fișierele originale după conversie
strip-meta ~/Poze --pastreaza

# Face copii .bak înainte de conversie
strip-meta ~/Poze --backup

# Doar folderul dat, fără subdirectoare
strip-meta ~/Poze --no-recursiv

# Mod silențios - afișează doar raportul final
strip-meta ~/Poze -q

Codul sursă

strip-meta.py pe Forgejo


Reducerea de spațiu depinde mult de ce ai în folder - la mine JPEG-urile s-au redus cu ~88% și PNG-urile cu ~70%. Pe 10 GB de poze rezultatul a fost undeva la 2-3 GB.

Dacă găsiți cazuri neacoperite sau comportamente ciudate, lăsați un mesaj mai jos.