【ImageMagick-7】でWebPに一括変換したいからバッチファイル書いてみた
2021.7.12追記「”mogrify”という便利なコマンドがありました」
後日、こちらのサイトから「mogrify」というコマンドがあることを知りました。
記事の中程にある「シェルスクリプトを活用した一括処理」に詳細があります。「ImageMagickで複数の画像を一括処理したい!」と検索して、不幸にもこの記事に辿り着いてしまわれた方は、おばちゃんのアホ記事を読まずに、さっさとこちらの良ページをご覧ください。
ちなみに、
M1 Mac(macOS ver.11.4)上のターミナル
ImageMagick ver.7.1.0-2 で
% mogrify -format jpg *.HEIC
で、iPhoneで撮影したHEIC形式の写真をJPEGに一括変換できました。
ついでに、
おばちゃんが記事中に書いたWebP一括変換のためのバッチをシェルスクリプトに書き換えるとこんな感じになります。
#!/bin/bash(←おばちゃんのwindows環境)
または
#!/bin/zsh(←いまのおばちゃん環境 M1 Mac)
for originalfile in $(ls *.jpg)
do
convertfile=`echo $originalfile | sed 's/jpg/webp/'`
convert -quality 75 $originalfile $convertfile
done
実行時
bash magick7.sh(←おばちゃんのwindows環境)
zsh magick7.sh(←いまのおばちゃん環境 M1 Mac)
ご了承いただけましたら幸いです。
(以下、元記事)
嗚呼、青春のAUTOEXEC.BAT。
昔はマウスも無くて、ディスプレイ触っても何の反応もしなくてね、自分でAUTOEXEC.BAT書いてパソコン(EPSONのPC-9800コンパチ)起動していたんだよ。と、若人に言ったらドン引きされそうで多くを語らなかった、おばちゃんです。
自分が関わっているウェブサイトを、Google PageSpeed Insightsでチェックしたらスコアが衝撃的に低くて、全画像をWebP変換してファイルサイズを小さくすることにしました。(おばちゃん、よくわからないので今のところサーバ側でWebP変換していません)
Macでは、公式WebPサイトのcwebpを使ってフォルダ内ファイル一括変換したけれど(デキる人のコマンドライン使って)、WindowsではImageMagickを使っている人が多い模様。ImageMagick は Debianさんの時に使った覚えがあるので友達感はある。それにWebPだけじゃなくて色々な画像形式に変換できるからお得かもしれない。これでいくか?
とはいえ、DebianにImageMagickを自分でインストールした覚えが無いから、インストールとかあらためて考えたことは無かった。ImageMagick の公式サイトでWindows版ダウンロードリストみたら吐き気がするほど種類がある。うげげ・・・
毎度のことながら困ったらネット検索かけて、デキる人の多くが選択している辺りをインストールすることにしている。(失敗しなさそうな気がするだけで、正直言うとよくわからないだけ。ちなみに M1 Mac には Homebrew で入れました)
ダウンロードしたのは実行ファイル(.exe)。ダブルクリックして、モットーは「何も足さない。何も引かない。by ピュアモルトウイスキー山崎」で、ただ粛々とNEXTボタンを押していきます。
インストール完了。では早速Git Bashを立ち上げてテストしてみます。
obachan@MacBookAir_WIN MINGW64 ~/work/test
$ ls
image.jpg
obachan@MacBookAir_WIN MINGW64 ~/work/test
$ magick image.jpg -resize 160x160 image.webp
obachan@MacBookAir_WIN MINGW64 ~/work/test
$ ls
image.jpg image.webp
やたー! 出来た!!
だけど一括変換の場合はどう書くの?
ImageMagick の公式サイトでは一括変換の方法がわからないし(公式サイト英語だし)、ネットのデキる人の情報はおばちゃんには理解できないし、バージョン6とはちょっと違うみたいだし。
うぐぐぐぐ・・・あきらめて ImageMagick で1つずつファイル名打って変換するのか? もしくは(大量の画像変換するのは面倒くさいけど)Googleの画像圧縮ツールSquooshで変換するのか?
!
もしかして、1回は変換できるってことは、フォルダ内の該当ファイル分だけバッチでグルグル回せばいいのかも?(そういえば調べている最中に、バッチ書いてる記事を見たような。そうか、そういうことだったのか!?)ってことで、冒頭の懐かしのAUTOEXEC.BATネタ。30年ぶりにおばちゃんの理解できる範囲でバッチファイルを書いてみます。(ネットのデキる人の記事も参考にしました)
@rem magick7.bat
@echo off
setlocal enabledelayedexpansion
cd %~dp0
set keyword=.jpg
for %%f in (*.jpg) do (
set OriginalFile=%%f
set ConvertFile=%%f
"C:\Program Files\ImageMagick-7.0.10-Q16\magick.exe" convert "!OriginalFile!" -quality 75 "!ConvertFile!.webp"
ren "!ConvertFile!.webp" "!ConvertFile:%keyword%=!.webp"
)
(\バックスラッシュは¥マークです)
プログラミング始めたばかりの人が練習で書いたようなコードだけど、そう、おばちゃんは30年前から初心者のままだった。パソコン歴が長いだけでバリバリのプログラミングできる人になるわけではないのだよ。(涙)
上記を拡張子.batの適当なファイル名(例:magick7.bat)にして、変換したいJPEG画像のあるフォルダに保存。コマンドプロンプトを立ち上げて、該当フォルダに移動してバッチを実行。(下のコマンドラインの\バックスラッシュはコマンドプロンプトでは¥マークが表示されます)
C:\Users\obachan\work\test>magick7.bat
これで、フォルダ内にあるJPEG全部がWebPに変換されました。PNGの時はバッチファイルの「.jpg」を「.png」に書き換えて対応。おばちゃんこれ以上無理・・・
本日のオチ
公式WebPサイトにWindows(64-bit)版のzipファイルが置いてありました。もしかして、こっち使ったほうが良かった???
libwebp-1.1.0-windows-x64.zip : 64-bit executables and libraries for Windows-x64 platform.
本日はこれにて。