.webp…一体何者なんだ
謎の企業Googleが作成した謎の画像形式webp
Google検索によるとこの謎の画像形式webpは
謎の企業Googleが作成した謎の画像形式らしい
謎の拡張子webmもあり、そちらは動画形式のようだ
仕組み的にはwebpはwebmの1フレームらしい
謎である
webpの特徴
概ね以下のようだ
- ・png/jpgとそれぞれ可逆、非可逆双方で圧縮率が高い
- ・元々動画形式なのでgifもOK
- ・現在は主要な環境では対応済みで特に不自由はない
- ・ただしwindowsでは標準で表示できないので対応が必要(後述)
最近の画像形式を見直す
webpの事は大体わかった
最近の他形式はどうなのだろうか
可逆=png,非可逆=jpgで完全に頭が止まっていたので調べ直してみる
png/jpgとの比較
既存の画像形式と比較してどのような利点があるのか
jpg/pngファイルの混合であるアイギス画像フォルダを
各々圧縮して比較を行う
コマンドラインツールのインストール
作業はMacでそれぞれ以下のコマンドを使用
webp -> cwebp 1.3.0
jxl -> cjxl v0.8.1
avif -> avifenc 0.11.1
圧縮方法はpngはロスレス、jpgは画質80
avifは圧縮5設定
元サイズ
758MB
画像形式:圧縮後サイズ:圧縮率
webp : 489MB : 65%
avif : 667MB : 88%
jxl : 441MB : 56%
webp、jxlは圧縮率がかなり良い、avifは伸び悩んでいる
様子を見ているとpng圧縮時に逆に大きくなっている事が多い
jpgは5割、上手くいっている時のpngは3割程度圧縮しているのだが
また、エンコード速度はavifが圧倒的に遅い。speedは中間のつもりなのだが…
ここは詰める必要があるかもしれない
jxlはそこそこ遅くなるが許容範囲
webpは早い、そして画質80でやったがデフォルト(推奨)は75なので
もう少し早く小さくなるはず
使用コード
to_webp.sh
#!/bin/bash
if [ "$#" -ne 2 ]; then
echo "Error: Invalid number of arguments."
echo "Usage: $0 source_folder output_folder"
exit 1
fi
source_folder="$1"
output_folder="$2"
if [ ! -d "$source_folder" ]; then
echo "Error: Source folder does not exist."
exit 1
fi
if [ ! -d "$output_folder" ]; then
echo "Error: Output folder does not exist."
exit 1
fi
for file in "$source_folder"/*; do
if [ -f "$file" ]; then
filename=$(basename -- "$file")
extension="${filename##*.}"
filename="${filename%.*}"
if [ "$extension" == "png" ]; then
cwebp -lossless "$file" -o "$output_folder/$filename.webp"
elif [ "$extension" == "jpg" ] || [ "$extension" == "jpeg" ]; then
cwebp -q 80 "$file" -o "$output_folder/$filename.webp"
fi
fi
done
to_jxl.sh コマンド部分のみ
if [ "$extension" == "png" ]; then
cjxl -q 100 "$file" "$output_folder/$filename.jxl"
elif [ "$extension" == "jpg" ] || [ "$extension" == "jpeg" ]; then
echo "convert jpg: $file"
cjxl -q 80 --lossless_jpeg=0 "$file" "$output_folder/$filename.jxl"
fi
to_avif.sh コマンド部分のみ
if [ "$extension" == "png" ]; then
avifenc -c aom --lossless --speed 5 "$file" "$output_folder/$filename.avif"
elif [ "$extension" == "jpg" ] || [ "$extension" == "jpeg" ]; then
avifenc -c aom --speed 5 "$file" "$output_folder/$filename.avif"
fi
コマンドを詰めればavifも改善するかも
また、上記コードは
waless「png/jpgをwebp/jxl/avifに変換するバッチ書いて(はぁと」
ChatGPT先輩「アイヨー」
waless「これファイル名じゃなくて相対パスになってない?」
ChatGPT先輩「あ、間違ってますね。修正しました」
waless「あ、Macでやるからバッチじゃなくてシェルだったわ…」
ChatGPT先輩「しょうがないにゃあ」
というやりとりで作成されました
webp/jxl/avifの扱い方
標準ではwindowsでは扱えないのでwebpすら無理…だと…?
対応方法は以下
webp
Windows
webpコーデックをインストール
(exe直は怪しさMAXな気がしたのでここからWebpCodecSetup.exeを)
フォトビューワーも使用できるようになる
が、何か画像が暗くなる。エクスプローラでは問題ない
ビューワーの拡張機能が衝突しているよう
PowerShellで設定してやれば良いらしいがうまくいかず
この辺りで面倒になったので別のフォトビューワーを使用する事に(ぉぃ
-> honeyviewが枠を消せてグッド
Mac
標準で対応
avif
Windows, Mac共に標準対応
jxl
Windows, Mac共に標準では対応していない
honeyviewも対応しておらず
XnViewMPが対応しているよう
ゲームエンジンでの対応
ゲームエンジンではどうだろうか
インポート元画像として使用できなければ普段遣いしていると不便である
UE5
- ・webp -> 駄目
- ・jxl -> 駄目
- ・avif -> 駄目
Unity
- ・webp -> 駄目
- ・jxl -> 駄目
- ・avif -> 駄目
全滅☆
せめてwebpは使いたいので調べていると
UE/Unity共にプラグインを作っている方がおられるようだ
webp-UE
webp-Unity
jxl/avif => 見当たらない?
結果
webp、良い奴じゃないか…ありがとう謎の企業Google先生
windows対応をすれば基本webpにしていって良いかもしれない
ブログ画像は全て置き換えて4-5割サイズカットといった所
avifはAV1でGPU処理が始まっているのでそこから本気出す感じだろうか
jxlは優等生なのだが周辺がまだといった印象
ここまで書いていて最もサイズ削減したいのは
動画と気づいたので次は動画ですね
こっちは多分AV1で良いのかな?
目次