APNGと並んで互換性の低かったAnimated WebPについて。対応ブラウザは、Chrome、Opera、Winodws 10のMicrosoft Edge44以降、そしてFirefox 65以降である。画像投稿サイトはほとんど対応してないと思うので実用性は高くない。対応カラーフォーマットは YUV420p(YUVA420p)。APNGのように可逆圧縮だけではないので低容量でアニメGIFよりも高画質に作れるが互換性が低いのが弱点。
2020年11月現在、ffmpegではAnimated WebPをデコードできない。2026年5月19日以降のffmpegでAnimated WebPをデコードできるようになった。Patchworkにパッチが来ているが公式には組み込まれていない。9.0から使えるようになった。
- #4907 (Support decoding animated WebP images) – FFmpeg
- [FFmpeg-devel] avformat/webpdec: WebP demuxer implementation – Patchwork
- avcodec/webp: add support for Animated WebP decoding · FFmpeg/FFmpeg@a3d8ba6 · GitHub
基本コマンド
ffmpeg -i input -c:v libwebp -lossless 0 -q:v 75 -preset default -loop 0 -an -fps_mode vfr output.webp
複数の静止画像で出力する。
ffmpeg -i input -c:v libwebp -lossless 0 -q:v 75 -preset default -loop 0 -an -fps_mode vfr output%03d.webp
公式ドキュメント:FFmpeg Codecs Documentation : libwebp
オプション
- -lossless[int]
可逆圧縮指定
既定値:0(1が可逆圧縮) - -preset[int]
プリセットの指定 - -1, none:プリセットを使わない。既定値
- 0, default:自動指定
- 1, picture:人物写真
- 2, photo:風景写真
- 3, drawing:線画など
- 4, icon:小さなサイズで色彩豊富
- 5, text:文字が中心
- -cr_threshold[int]
条件付き差分更新の閾値。0は常に変化ありと捉えて全フレームエンコードするが、値を上げるほど変化なしと判定されるブロックが増え、ファイルサイズは小さくなり、閾値以下の微妙な変化(緩やかなフェード、ノイズ、細かい動きなど)が実際には反映されなくなる
既定値:0
範囲:0からINT_MAXまで - -cr_size[int]
条件付き差分更新のブロックサイズ。判定・更新の空間的な粒度を決める。ブロックが大きいほど、一部だけ変化していてもblock全体がまとめて変化あり、または変化なしと判定されるため、更新の無駄(大きめの領域を丸ごと再エンコード)や、逆に本来更新すべき部分が見逃される粗さが出やすくなる。ブロックを小さくすると判定はより局所的・精密になるが、SSE(差分の二乗和、Y/U/V全プレーン合算)はブロック面積が小さいほど累積しにくく閾値を超えにくくなるため、同じ-cr_thresholdでも変化なし判定が出やすくなる
既定値:16
範囲:0から256まで - -quality、-qscaleは廃止予定
圧縮品質の指定。数値が高いほど高画質。不可逆圧縮時に高い数値だとエンコードが長時間の高画質で大容量。可逆圧縮指定に高い数値だとエンコードが長時間で低容量
既定値:75
範囲:0から100まで
指定フレームだけを出力する場合はtrimフィルタを使い、リサイズや、フレームレートを減らすにはscale, fpsフィルタを使う。
ffmpeg -i input -vf fps=15,scale=320:-2 -c:v libwebp -lossless 0 -quality 75 -preset default -an -fps_mode vfr output.webp