簡體   English   中英

使用多個CPU核心優化目錄中的映像

[英]Optimize images in directory using multiple CPU cores

我在目錄中有幾個PNG圖像,我正在使用optipng來優化和縮小圖像大小。 問題是優化所有文件需要很長時間。

我有一個四核處理器,我注意到optipng在優化目錄時只使用了一個核心。

這是我正在使用的代碼:

ls -1 | while read line
do 
    optipng -o7 "$line"
done

在讀取目錄時是否可以並行執行四個不同文件的optipng

還有另一種涉及xargs解決方案。

find some/dir/ -iname '*.png' -print0 | xargs -0 -n 1 -P 4 optipng -o7

其中-P 4啟動4個並行進程, -n 1每個進程最多使用一個文件名。

或者,如果您有換行符分隔的文件名,請使用:

find some/dir/ -iname '*.png' | sort | xargs -d \\n -n 1 -P 4 optipng -o7

感謝Joe Lencioni對博客的評論


更新:我編寫了一個shell腳本來為多個圖像並行調用zopflipng (比optipng提供更高的壓縮率): zopflipng_in_place

您需要將每個optipng放在后台以使用四個核心,並使用計數器n來跟蹤它們的數量。 我在這種情況下使用n=4 ,因此在給定時間將運行4個后台作業:

n=0
for image in *
 do
  optipng -o7 "$image" &
  n=$(( $n + 1 ))
  [ "$n" -eq 4 ] && n=0 && wait
done

不要同時運行多個BG作業(保持n低),或者還會有性能損失。 根據需要修改代碼,尤其是*for image in ** pattern。

我使用與GNU並行的 optipng(包含在每個Linux發行版中):

parallel --bar 'optipng {}' ::: file1.png file2.png morefile*.png

優點:您有一個指示進度的欄。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM