フォルダ内の画像を1枚に対して何かしら処理をするのはググればすぐに出てくるのに、まとめて何かすることについては、全く触れていない記事が多いと感じます。
しかも、一概にループさせるといっても様々な記法があり、そこそこ文章を書かないといけないため、いちいち書くのも面倒です。
私は、画像を縦512pixelを基準にしてサイズを揃えたいと思い、Python3とBashで同様の動作を行うスクリプトのテンプレートを作成しました。コマンドはffmpegを用いました。
動作は インプット用フォルダからファイルパスを取得→アウトプット用フォルダに対して同名で処理後のファイルを配置 という流れです。
コマンドライン引数は採用していません。一応絶対パスを取得しています。
実行環境
Ubuntu18.04 LTS
Python3.6
Ubuntu Bash実装
Ubuntuに標準実装されている機能を活用します。環境変数の設定やその呼び出しが頻繁に発生するならBashが有利かもしれません。
INPUT_FOLDER=test OUTPUT_FOLDER=output height=512 mkdir -p $OUTPUT_FOLDER ABS_DIR=$(cd $(dirname $0); pwd) files=`find $ABS_DIR/$INPUT_FOLDER -maxdepth 1 -type f` for filename in $files; do #処理の内容↓ ffmpeg -i $filename -vf scale=-2:$height $ABS_DIR/$OUTPUT_FOLDER/`basename $filename` done
Python3実装
Python3を用いた実装です。Shellと異なり、変数が扱いやすいです。また、他のOSでも扱いやすいです。
#! /usr/bin/python3 import glob import os folder_name = 'input/' output_folder_name = 'output/' height = 512 os.makedirs(output_folder_name,exist_ok=True) for imgfile in sorted(glob.glob(os.path.abspath(folder_name)+'/*')): #処理の内容↓ os.system('ffmpeg -i '+imgfile+' -vf scale=-2:'+str(height)+' '+os.path.abspath(output_folder_name)+'/'+os.path.basename(imgfile))
結構面倒な書き方をしたなー。私は必要だからいいんだけどさ‥