Bash

如果我停止 imagemagick 轉換,則會出現腐敗問題

  • December 10, 2017

我想使用 imageMagick 轉換功能調整一堆圖像(大約 100 萬張)的大小。我正在使用 Ubuntu 16.04

這比我想像的要花更長的時間(已經執行了大約 5 個小時 - 我可以再給它 5 個,但後來我想停止它)

我的問題是:如果我停止該程序,我是否需要擔心損壞的圖像?或者程序會以安全的方式停止嗎?

這是我的腳本:

find . -name "*.JPEG" | xargs -I {} convert {} -resize "256^>" {}

(基本上我正在調整 imagenet 數據集的大小)

按 Ctrl-C 會損壞某些圖像嗎?

從理論上講,不,它不應該導致圖像損壞。從記憶體中,我認為imagemagick可以使用臨時文件,一旦處理完成,這些文件就會重命名為選定的目標文件。

順便說一句,以您所做的方式轉換圖像是一種單向操作,我想您已經註意到了,因此您的問題,我猜。

要查找最後轉換的圖像,請按時間順序列出文件,首先是較新的文件。如果文件大小有明顯差異,您將很容易知道下次從哪裡開始。否則,您必須使用imagemagick 的 identify檢索圖像尺寸。

另請注意,對於一百萬張圖像,如果每張圖像在一秒鐘內處理完畢,仍需要大約280 小時才能完成!我希望你有一台速度快、功能強大的機器……


編輯:如果你想展示一些進展,這是我能想到的,基於馬丁的回答

mkdir -p thumbs; \
COUNT=$(find -name "*.JPEG" | wc -l); \
find -name "*.JPEG" | while read IMG; do \
   printf "\n$(( ++i )) / $COUNT\n" && \
   [ -s "thumbs/${IMG%.JPEG}-small.jpg" ] || \
   convert "$IMG" -resize "256^>" "thumbs/${IMG%.JPEG}-small.jpg"; \
done

這是做什麼的:

  1. 創建縮略圖目錄…
  2. 計算圖像的總數.JPEG
  3. 對於每個圖像…
  4. 列印目前圖像文件索引與總…
  5. 如果圖像尚未轉換…
  6. 製作一個縮略圖。

假設所有要調整大小的圖像都在同一個目錄中,我使用了一個子目錄來保存縮略圖,以避免與相應的縮略圖混淆主目錄。否則,您可以從第 5 行和第 6 行中刪除第一行和thumbs/子目錄。

如果圖像分散到子目錄中:

COUNT=$(find -name "*.JPEG" | wc -l); \
find -name "*.JPEG" | while read IMG; do \
   printf "\n$(( ++i )) / $COUNT\n" && \
   [ -s "${IMG%.JPEG}-small.jpg" ] || \
   convert "$IMG" -resize "256^>" "${IMG%.JPEG}-small.jpg"; \
done

請注意,此腳本將文件名中的空格作為讀取停止在換行符處。

引用自:https://unix.stackexchange.com/questions/410057