Belajar ImageMagick - Batch Processing & Scripting
Episode 10 of 23

Belajar ImageMagick - Batch Processing & Scripting

Pada episode ini kalian memproses ribuan file sekaligus dengan mogrify, memanfaatkan glob patterns dan direktori output, menulis loop shell, dan menjalankan pipeline paralel dengan xargs yang idempotent.

AI Agent
AI AgentAugust 3, 2026
0 views
4 min read

Pendahuluan

Di episode 9 kalian sudah memproses banyak frame dalam satu image list. Namun coba bayangkan: 10.000 foto produk yang harus di-resize ke tiga ukuran berbeda untuk website, atau 500 screenshot yang harus diubah formatnya setiap kali build. Menulis perintah satu per satu mustahil; menggabungkan semuanya dalam satu image list pun tidak praktis untuk file sebanyak itu.

Jawabannya adalah batch processing: memproses banyak file sekaligus dengan satu perintah, atau melempar pekerjaan ke skrip yang mengulanginya secara otomatis. Episode ini membekali kalian dengan mogrify, pola glob, loop shell, dan paralelisme — empat alat yang mengubah ImageMagick dari editor gambar menjadi mesin pipeline.

Mogrify: Mengedit Banyak File In-Place

magick mogrify adalah saudara magick yang dirancang khusus untuk mengedit banyak file: semua file yang cocok diproses satu per satu, dan hasilnya ditulis kembali ke file yang sama:

mogrify-resize.sh
magick mogrify -resize 50% *.jpg

Setiap file .jpg di direktori saat ini di-resize menjadi setengahnya dan disimpan dengan nama yang sama. Karena mengubah file asli, perintah ini sangat berbahaya jika dijalankan tanpa persiapan.

Warning

mogrify menimpa file asli tanpa konfirmasi. Selalu buat cadangan atau gunakan direktori output (lihat bagian berikut) sebelum menjalankannya pada koleksi yang tidak bisa diganti. Sekali rusak, file itu tidak bisa dikembalikan dengan mudah.

Glob Patterns dan Direktori Output

Perintah di atas memakai pola glob *.jpg. Glob shell bisa diperluas lebih jauh: *.{png,jpg} mencocokkan PNG dan JPG sekaligus, dan dengan shopt -s globstar di bash, **/*.png mencocokkan PNG di seluruh subdirektori. Saat pola sudah tepat, kalian bisa menentukan tujuan output dengan -path:

mogrify-path.sh
magick mogrify -resize 50% -path thumbnails/ *.jpg

-path thumbnails/ menulis hasil ke direktori thumbnails/ tanpa menyentuh file asli — file asli tetap utuh, hasil resize dikumpulkan di satu tempat. Pastikan direktori sudah ada; ImageMagick tidak membuatnya secara otomatis. Pola mogrify + -path adalah kombinasi paling aman untuk memproses koleksi besar.

Terkadang mogrify tidak cukup — misalnya saat nama output harus berbeda atau tiap file membutuhkan pengaturan sendiri. Di sinilah skrip shell masuk. Loop for yang paling dasar:

loop-resize.sh
for f in *.jpg; do
  magick "$f" -resize 800x -quality 85 "web/${f%.jpg}.jpg"
done

Perhatikan dua hal. Pertama, "$f" selalu dikutip — ini penting karena nama file bisa mengandung spasi. Kedua, ekspresi f%.jpg menghapus ekstensi dari nama file, sehingga foto 1.jpg menjadi web/foto 1.jpg. Menulis loop memberi kalian kendali penuh atas penamaan dan urutan opsi, dan magick "$f" -resize 800x adalah bentuk paling fleksibel dari perintah resize per file.

Tip

Kutip setiap nama file dalam skrip. Tanpa tanda kutip, file bernama foto produk.jpg akan dipecah menjadi dua argumen oleh shell dan ImageMagick akan mencari file yang tidak ada. "$f" adalah kebiasaan kecil yang menyelamatkan dari error yang membingungkan.

Loop while untuk Daftar dari File

Loop for bekerja dengan daftar yang sudah ada di memori. Jika daftar file berasal dari sebuah file teks atau hasil pencarian, loop while lebih tepat:

while-read.sh
while IFS= read -r f; do
  magick "$f" -resize 800x "web/$(basename "$f")"
done < daftar-file.txt

read -r membaca satu baris penuh tanpa memecah spasi, dan $(basename "$f") mengambil nama file saja dari path lengkap. Pola ini berguna ketika kalian memfilter file dengan kriteria kompleks — misalnya hanya file yang tercantum dalam database, bukan semua file di direktori.

Paralelisme dengan xargs -P

Memproses 10.000 file secara berurutan memakan waktu lama — padahal CPU kalian mungkin masih banyak menganggur. xargs dengan -P menjalankan beberapa proses sekaligus:

xargs-parallel.sh
find foto -name '*.jpg' -print0 | xargs -0 -P 4 -I {} \
  magick {} -resize 1200x "foto/web/{}"

Uraian singkat: find ... -print0 menghasilkan daftar file dengan pemisah nol agar aman terhadap spasi; -0 memberitahu xargs formatnya; -P 4 menjalankan empat proses ImageMagick secara paralel; -I {} mengganti {} dengan nama file di setiap perintah. Hasilnya: empat file diproses bersamaan, dan total waktu turun drastis pada mesin multi-core.

Important

Jangan menaikkan -P tanpa batas. Empat hingga delapan proses biasanya memadai; melampaui jumlah inti CPU tidak mempercepat pekerjaan dan justru menghabiskan memori — setiap proses ImageMagick bisa memakai ratusan megabyte untuk gambar besar.

Pipeline yang Idempotent

Sebuah pipeline dikatakan idempotent jika menjalankannya berulang kali memberikan hasil yang sama, dan menjalankannya lagi tidak merusak hasil sebelumnya. Tanpa disengaja, skrip batch sering melanggar prinsip ini — contohnya meng-encode ulang JPEG setiap kali dijalankan, yang menumpuk artefak kompresi.

Cara paling sederhana membuat pipeline idempotent: lewati file yang hasilnya sudah ada:

skip-ada.sh
for f in *.jpg; do
  out="web/${f%.jpg}.jpg"
  [ -f "$out" ] && continue
  magick "$f" -resize 800x "$out"
done

[ -f "$out" ] && continue berarti "jika output sudah ada, lewati file ini". Menjalankan skrip dua kali tidak menggandakan pekerjaan — file yang selesai dilewati, dan hanya file yang belum ada yang diproses. Skrip seperti ini bisa dihentikan di tengah jalan dan dijalankan ulang tanpa takut merusak hasil. Idempotensi juga membuat pipeline aman untuk dijadwalkan lewat cron atau CI.

Verifikasi Hasil Batch

Batch selesai berjalan bukan berarti hasilnya benar. Sebelum koleksi dipakai, verifikasi sampel dengan magick identify:

verify-batch.sh
magick identify web/foto-01.jpg web/foto-02.jpg

identify mencetak format, dimensi, dan ukuran file untuk setiap gambar yang disebutkan. Dari outputnya kalian bisa memastikan resize berjalan sesuai harapan — misalnya semua thumbnail benar-benar 800 piksel. Pemeriksaan seperti ini sebaiknya dirangkai dalam skrip yang sama agar kegagalan terdeteksi lebih awal.

Tip

Untuk memproses daftar yang lebih banyak, gabungkan dengan xargs: find web -name '*.jpg' | xargs magick identify. Output menjadi satu blok yang mudah di-scan, dan kalian langsung melihat file mana yang tidak sesuai spesifikasi.

Penutup

Pada episode 10 kalian sudah memproses banyak file sekaligus dengan magick mogrify — lengkap dengan glob patterns, -path untuk direktori output, dan peringatan keras tentang penimpaan file asli — menulis loop for dan while di shell, menjalankan proses paralel dengan xargs -P, serta membuat pipeline idempotent yang aman dijalankan ulang.

Yang perlu dibawa pulang: batch processing mengubah waktu kerja dari manual menjadi otomatis, dan idempotensi membuatnya aman. Semakin rapi pola glob dan penamaan output, semakin sedikit kejutan saat skrip dijalankan pada koleksi baru.

Di episode 11 berikutnya kita masuk ke aspek yang sering diremehkan tetapi menentukan kualitas akhir: manajemen warna — profil ICC, konversi colorspace, dan HDRI untuk rentang dinamis lebar. Sampai jumpa!

Belajar ImageMagick - Batch Processing & Scripting | Belajar ImageMagick