WebPとAVIFの比較と違い!どっち!?

ソフトウェア・プログラム

覚書です。

WebPとAVIFのGUIとCLIの比較表!違いは?どっちを使う?

容量はこうなります。

AVIF < WebP < JPEG

特に写真では WebPより20〜40%小さい ケースが珍しくありません。

用途おすすめ
ブログ・WebサイトWebP
写真AVIF
イラスト・UIWebP(場合によってはPNG)
スクリーンショットWebP
編集用マスターPSD → Lossless WebP

WebPとAVIFまわりのツールをを調査しました。

順位方式WebPAVIFGUICLIMacWindows一括処理無料ライブラリおすすめ度
🥇cwebp + avifenc✅(シェル・PowerShell・Node.jsなど)libwebp / libavif★★★★★(コマンドラインを使えるなら)
🥈Alic??★★★★☆
🥉Zipic Pro開発中❌Free版と買い切りのPro版あり。Free版はAVIFに対応していないlibwebp / libavif★★★★☆
Squoosh✅(PWA)libwebp / libavif★★★☆☆
Smolr??★★★☆☆

次の条件で探しました。

  • 一括変換可
  • 無料
  • ライブラリが明記している

GUIのツールは決め手に欠け、結局、コマンドラインを採用することにしました。買い切り有料版のZipic Proでもいいかもしれません。Alicはよさそうだったけど、ライブラリの中身がよくわかりませんでした(ぱっと見で詳しくは調査していません)

libwebpとは?

libwebpライブラリです。

コマンド用途
cwebpPNG・JPEGなど → WebP
dwebpWebP → PNGなど
img2webp複数画像 → アニメーションWebP
gif2webpGIF → アニメーションWebP
webpmuxメタデータ編集・アニメーション編集
vwebpビューア

libwebp の開発元と公式

Google

正式には

Google / WebM Project

です。

libwebpのインストール

brew install webp

入るもの。

  • cwebp
  • dwebp
  • img2webp
  • gif2webp
  • webpmux

など。

cwebp -version

libwebpの使い方

cwebp input.webp -q 80 -m 6 -mt -o output.webp

ただし、二重圧縮には注意です。

WebPはJPEGと同じ「非可逆圧縮(Lossy)」です。

つまり

PSD

WebP(100%)

でも、100%だからといって元画像と完全一致ではありません。

Googleの cwebp-q 100 も「最高品質の非可逆圧縮」であり、「可逆圧縮(Lossless)」ではありません。

つまり

PNG

WebP(100%)

WebP(100%)

WebP(80)

では後者は二度圧縮になります。

cwebp -q 80 image.png -o image.webp

WebPの場合はどうしたらいいのでしょう。

Lossless WebPならOKです。理論上 PNGと同等品質 です。Photoshopの「劣化なし」は Lossless WebP です。

フォルダ内のファイルを一括置換

バックアップは取得の上、一括置換するサンプルです。

for f in *.webp; do tmp="${f%.webp}.tmp.webp"; cwebp -q 85 -m 6 -mt "$f" -o "$tmp" && mv "$tmp" "$f"; done

改行するとこうなります。

for f in *.webp
do
    tmp="${f%.webp}.tmp.webp"
    cwebp -q 85 -m 6 -mt "$f" -o "$tmp" && mv "$tmp" "$f"
done
for f in *.webp

意味は「このフォルダにあるすべての .webp ファイルを1つずつ取り出す」

例えばフォルダが

manga01.webp
manga02.webp

なら、シェルは内部的に

1回目
f="manga01.webp"

2回目
f="manga02.webp"

として実行します。

つまりf

現在処理しているファイル名が入る変数です。

do

doは

ここから繰り返し処理を始めます

という意味です。

例えばC言語なら

for (...) {

Pythonなら

for ...:

に相当します。

tmp="${f%.webp}.tmp.webp"

cwebp入力ファイルと出力ファイルを同じ名前にすることはできません

cwebp -q 85 -m 6 -mt input.webp -o input.webp

上書きしたい場合、一度テンポラリファイルを作って、成功したら置き換えるのが一般的です。

${f%.webp}

${f%.webp}「拡張子を外す」と覚えるとよいです。

f="manga01.webp"

だったとします。

manga01

になります。

つまり

.webp

だけを削除しています。

その後ろに

.tmp.webp

を付けます。

結果

tmp="manga01.tmp.webp"

になります。

つまり

f
↓
manga01.webp

tmp
↓
manga01.tmp.webp

になります。

-q 85

Quality(画質)

0 ~ 100
  • 100 = 最高画質
  • 80〜85 = ブログ画像では非常におすすめ
  • 75 = 容量重視
  • 60以下 = かなり劣化が見え始める

写真なら80前後がよく使われます。

イラストなら85くらいから試すのがおすすめです。

-m 6

Method(圧縮アルゴリズム)

0 ~ 6

これは

画質ではありません。

圧縮にどれだけ時間をかけるかです。

速度圧縮率
0最速低い
3普通普通
6最遅最高

画質は同じです。

違うのは

容量

だけです。

なので

常に6がおすすめです。

-mt

Multi Thread

CPUを全部使います。

MacBookなら

8コア
10コア
12コア

全部使います。

付けない理由がありません。

cwebp … "$f" -o "$tmp"

出力ファイル

-o output.webp

という意味です。

現在のファイル

一時ファイル

へ変換しています。

つまり

manga01.webp

manga01.tmp.webp

です。

&&

これはシェルでよく使います。

意味は

前が成功したら次を実行する

例えば

mkdir test && cd test

なら

mkdir成功

cd

です。

もし

mkdir失敗

なら

cd

は実行されません。

&&

これはシェルでよく使います。

意味は

前が成功したら次を実行する

例えば

mkdir test && cd test

なら

mkdir成功

cd

です。

もし

mkdir失敗

なら

cd

は実行されません。

mv "$tmp" "$f"
mv

つまり

Move(移動)

です。

でも同じフォルダなので、

実際は

名前変更

になります。

つまり

manga01.tmp.webp

manga01.webp

になります。

結果的に

元ファイルが置き換わります。

done

繰り返し終了です。

libavifとは?

AOMediaCodecの開発元はすごいメンバーみたいですね。

次のサイトのフッター部にGitHUBのリンクがあります。

代表的なメンバーには

  • Google
  • Apple
  • Microsoft
  • Amazon
  • Meta
  • Netflix
  • Intel
  • NVIDIA

などが参加しています

libavifの使い方

avifenc --quality 50 --speed 4 --jobs all manga01.webp manga01.avif
--quality 50

画質を指定します。

0 ~ 100
  • 100 = 最高画質
  • 50 = GoogleやNetflixなどでもよく使われる実用的な設定
  • 40 = 容量重視
  • 60 = 高画質

WebPとはスケールが異なるため、WebPの85 ≒ AVIFの50前後と考えてください。

--speed 4

圧縮速度です。

0 ~ 10
速度圧縮率
0最も遅い最高
4おすすめ高い
10最速低い

cwebp-m に近い役割です。

4 をおすすめします。

--jobs all

CPUを全部使います。

cwebp

-mt

に相当します。

manga01.webp

入力ファイルです。

manga01.avif

出力ファイルです。

libavifで一括変換の方法

for f in *.webp; do avifenc --quality 50 --speed 4 --jobs all "$f" "${f%.webp}.avif"; done
for f in *.webp;

このフォルダにある すべての WebP を1枚ずつ処理します。cwebpの場合と同様です。

"${f%.webp}.avif"

例えば

manga01.webp

manga01

manga01.avif

になります。

つまり

拡張子だけ .avif に変えているわけです。

コメント

タイトルとURLをコピーしました