ディレクトリ内の画像を一つずつwaifu2xで拡大するbashスクリプト2

bash コンピュータ
bash

基本的に特定のディレクトリ内にある画像ファイルを変換し指定のディレクトリに出力する作りは前回と同様です。

出来ればディレクトリを監視しファイルが置かれたら実行するような仕組みが良いのかもしれませんが、数分から数時間ほど要する処理に即時性はいらないだろうということでCRONをで5分ごとにスクリプトを実行するようにします。
5分間で処理が終了しない場合次のスクリプトが実行してしまうのを防止するため、スクリプト内で二重起動を禁止するコードを導入してみました。

「waifu2x-converter-cpp」にしても「OptiPNG」にしても非常に重たい処理で、実行するとパソコンのリソースを占有してしまうので、専用のパソコンを用意した方が良いです。共有フォルダを処理対象することで、共有フォルダに画像ファイルを置くと、そのうち拡大処理をしてくれる仕掛けになります。

ファイル名:waifu2x-cron.sh

#!/usr/bin/bash

# 
# waifu2xによる画像拡大処理
# 二重起動防止版
# 

<< CRON
crontab -e
# 五分おきに実行
*/5 * * * * ~/sh/waifu2x-cron.sh >> ~/sh/waifu2x-cron.log 2>&1
CRON

# 倍率
RATIO=2
# 変換前
#FILES="/mnt/smb/work/in_x${RATIO}/*.*"
FILES="/h/sh/in_x${RATIO}/*.*"
# 変更後
#OUTDIR="/mnt/smb/waifu2x/out_x${RATIO}/"
OUTDIR="/h/sh/out_x${RATIO}/"
# 二重起動禁止フラグ
EXEC=$0.exec

# 二重起動の禁止
if [ -d $EXEC ]; then
  echo "実行中"
  exit
else
  mkdir $EXEC
fi

for FILE in $INFILES; do
    if [ -f $FILE ]; then
        # 出力パスの生成
        OUTFILE="${OUTDIR}${FILE##*/}"
        # 拡張子をPNGに設定
        OUTFILE=${OUTFILE%.*}.PNG
        # 拡大処理 2倍
        /usr/local/bin/waifu2x-converter-cpp -s -t 1 -f png -c 0 --noise-level 3 --scale-ratio $RATIO -m noise-scale -i $FILE -o $OUTFILE 
        # 最適化
        /usr/bin/optipng $OUTFILE
        # 元ファイルの削除
        rm $FILE
        echo $OUTFILE
    fi
done

# 二重起動禁止の解除
rmdir $EXEC
echo "終了"

コメント