以下の内容はhttps://hepokon365.hatenablog.com/entry/2024/04/06/210000より取得しました。


IrfanViewのCLIでフォルダ構造を維持して画像フォーマットを一括変換する

オンラインストレージと同期しているフォルダに、BMP形式の画像が大量に保存されており、ストレージ容量を圧迫しているので、ファイルサイズを圧縮できないか相談を受けた。

一括で変換するならいくらでもツールがあるが、フォルダ階層はそのままで変換したいとのこと。また、非エンジニアのWindows PCのため、ツールのインストール等はなるべく簡単にしたい。

ちょっと調べたところ、IrfanViewCLIが使え、それとバッチファイルの組み合わせで対応できたのでメモ。

要件

ルートフォルダ配下のサブフォルダに保存されたBMPファイルをJPEGファイルに変換し、元のBMPファイルは削除する。

サブフォルダの中にもフォルダが存在するため、再帰的に処理する。

また、BMP以外の画像(PNGJPEG、GIF)も存在するが、それらは変換の対象外とする。

調査

Microsoft StoreからIrfanView 64bitをインストールしてもらい、一括変換で「サブフォルダを含む」にチェックしてみたが、出力先は単一のフォルダになった。

apps.microsoft.com

他にもサブフォルダ配下のファイルを対象とするようなツールはあるが、出力先が単一のフォルダになるものしか思いつかない。

Goあたりで変換処理を実装しようかと思ったが面倒。

画像変換といえばImageMagickということで、それを使ったバッチファイルを書こうかもと思ったが、ImageMagickMicrosoft Storeで公開されていないので、インストールがやや手間。

IrfanViewCLIがあればなあ、と思ってヘルプを見ていたら、「Command Line Options」の項目を発見。コマンドを調べたところ、品質指定してJPEG変換できたため、それを使うことにした。

実装

GUIの実行ファイルである i_view64.exe (32bit版であれば i_view32.exe )が、そのままCLIの実行ファイルとしても使用可能。

Microsoft Storeからインストールしたアプリは C:\Program Files\WindowsApps\ 配下に保存される。インストールしたIrfanViewのバージョンにもよると思うが、2017/7/28リリースの場合、「30067IrfanSkiljanIrfanVie.IrfanView64_4.6.7.0_x64__psgec73n2n7ne」が対象の模様。デフォルトではPATHが通っていないので、コマンド実行時はPATHを通すかフルパスで指定する。

画像の変換処理は、 i_view64.exe 入力ファイル /convert=出力ファイル 。変換形式は、出力ファイルの拡張子で自動判別される。また、JPEGの変換品質は、 /jpgq=パーセンテージ で指定可能。

以下のようなバッチファイルを作成、保存する。

@echo off

setlocal

set IRFAN_VIEW=C:\Program Files\WindowsApps\30067IrfanSkiljanIrfanVie.IrfanView64_4.6.7.0_x64__psgec73n2n7ne\i_view64.exe

rem カレントディレクトリ配下のBMPファイルを抽出
for /r %%a in (*.bmp) do (
  rem 進捗確認のため、処理対象ファイルの一部を出力
  echo "%%~pnxa"

  "%IRFAN_VIEW%" "%%a" /convert="%%~dpna.jpg" /jpgq=85

  rem BMPの削除
  del "%%a"
)

endlocal

今回のユースケースがシンプルだったので、実装も簡単。

また、例えば別フォルダに出力したい場合も、for内の処理を追加すれば対応できる。

変換処理には他にもオプションはあるが、今回は未使用。以下、やや古いがコマンドラインオプションの解説記事。

IrfanView Command Line Options - ETCwiki

実行

コマンドプロンプトを管理者権限で実行し、処理対象のフォルダをカレントディレクトリとし、前述のバッチファイルを実行。

処理速度は1秒あたり2~3ファイル程度。遅いが実行速度は求められていないため、作業中にバックグラウンドで実行してもらい対応。

振り返り

もともと画像の一括変換にIrfanViewをよく使っていたが、CLIがあることを今回初めて知った。

日本語の記事だと、以下のページくらいしか見つからず。

blog.ch3cooh.jp

IrfanView、サイズの違う画像を結合できたりと便利なんだけど、あまり使われていないのかな。

余談

はてなWindowsバッチファイルのシンタックスハイライト用ファイルタイプ、 dosbatch かな? cmd みたいなのはないんだろうか。




以上の内容はhttps://hepokon365.hatenablog.com/entry/2024/04/06/210000より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14