WebpとAVIFをWindowsでローカルに使ってみる
ブラウザツールはいろいろあるのだが、ローカルでやるのがやはり便利なのでその方法を模索する。

非公式なコマンドラインツールなどもあるが、開発が最新のバージョンに追随していなかったりするので、おとなしく公式実装を使うのがよさそう。

Webp
WebpはGoogleが作ったナウい画像形式。古臭いJPEGに比べて画質を保ったまま小さくできるのがウリ。
WebpのダウンロードはGoogle公式ページの「Windows版をダウンロード」から。

libwebp-1.6.0-windows-x64 のようなフォルダーがダウンロードされるハズ。その中にある bin フォルダー以下に cweb.exe などの各種ツールが入っているので、 適当に C:\\program files\\libwebp-1.6.0-windows-x64\\bin\\ のように配置して、環境変数にパスを登録しておく。
使い方
公式サイトに詳しく説明がある。

WebpにはLossyとLosslessの圧縮モードがある。
非可逆圧縮
Lossyならこれ。
cwebp input_file -o output_file.webp
基本的にはこれでOK。引数などのパラメータはデフォルトが結構考えられてセットされているので、下手にいじらないほうがいいのかもなあという結論。
可逆圧縮
PNGやTiffのような可逆圧縮の代替として使いたいならLossless圧縮。
cwebp -lossless input_file -o output_file.webp
圧縮モードの指定を -z int 引数で行える。1から9まで指定ができる。デフォルトは6だが私は基本的に9を指定してる。オプション -q または -m が後で使用されると、このオプションの効果が無効になります。
AVIF
AVIFのお勉強サイトをGoogleが公開しているので、参考にする。
avifencを導入する
ここから最新のリリースビルドをダウンロードする。
windows-artifacts.zip をダウンロードすればよい。
適当に C:\\Program Files\\windows-artifacts のように配置して、環境変数にパスを登録しておく。
使い方
たぶん、avifはLossyしかないハズ。
avifenc happy_dog.jpg example.avif
基本的にこのコマンドでOK。
カレントディレクトリ以下の全JPEG/PNG画像ファイルをWebpあるいはAVIFに変換する
Powershellワンライナーに。
画像ファイルを新しい形式に変換して、置換する。
注意点
- デフォルト品質を使用(avifencとcwebpのデフォルト設定)
- 必ずバックアップを取ってからテスト実行してください
- まずは
WhatIfや小さなフォルダーでテストすることをお勧めします
AVIF Lossy
Get-ChildItem -Recurse -Include *.jpg,*.jpeg,*.png | ForEach-Object { $out = $_.FullName -replace '\\.(jpg|jpeg|png)$','.avif'; avifenc $_.FullName $out; if($LASTEXITCODE -eq 0) { Remove-Item $_.FullName } }
WebP Lossy (デフォルト品質)
Get-ChildItem -Recurse -Include *.jpg,*.jpeg,*.png | ForEach-Object { $out = $_.FullName -replace '\\.(jpg|jpeg|png)$','.webp'; cwebp $_.FullName -o $out; if($LASTEXITCODE -eq 0) { Remove-Item $_.FullName } }
WebP Lossless
Get-ChildItem -Recurse -Include *.jpg,*.jpeg,*.png | ForEach-Object { $out = $_.FullName -replace '\\.(jpg|jpeg|png)$','.webp'; cwebp -lossless $_.FullName -o $out; if($LASTEXITCODE -eq 0) { Remove-Item $_.FullName } }
動作説明
Get-ChildItem -Recurse -Include *.jpg,*.jpeg,*.png: カレントフォルダー以下の全画像を再帰的に取得- 拡張子を
.avifまたは.webpに置換 - 変換コマンド実行
$LASTEXITCODE -eq 0で成功確認後、元ファイルを削除




