ffmpegで大量の画像をwebp化する [mac]

ffmpegは動画圧縮で愛用していたが、画像も圧縮できるとは知らなかった。

大量の画像を圧縮したいと思ってツールを探していたのだが、灯台もと暮らしだったんだね。

ファイル1枚もしくは連番で

input_0001.jpgのような連番に使える。

ffmpeg -i input_%04d.jpg -c:v libwebp -qscale 75 output_%04d.webp

フォルダ 「aa」 内の JPG/PNG をすべて WebP 化するコマンド(macOS/Linux)

bashにて

for f in aa/*.jpg aa/*.png; do
  [ -e "$f" ] || continue
  ffmpeg -i "$f" -c:v libwebp -qscale 75 "${f%.*}.webp"
done

aaフォルダ内にそれぞれのwebpが作成されます。だいたい1/10~1/20くらいの容量に。

出力先を別フォルダにしたい場合(例:「output」 フォルダ)

mkdir -p output

for f in aa/*.jpg aa/*.png; do
  [ -e "$f" ] || continue
  base=$(basename "$f")
  ffmpeg -i "$f" -c:v libwebp -qscale 75 -compression_level 6 \
    "output/${base%.*}.webp"
done

オプション

  • -lossless 0 : 非可逆だが透過保持しつつ軽量
  • -lossless 1 : 透過保持で可逆(画質は最強だが容量大)
  • -compression_level 6 : WebP の圧縮効率最大(0〜6)