0017

FFmpegを使いWebPへ画像変換。シェルスクリプトを使えば全ディレクトリを一括処理も可能!

FFmpegを使いWebPへ画像変換。シェルスクリプトを使えば全ディレクトリを一括処理も可能!

2020.6.27

SafariもWebPに対応すると思われる(βですが)ので、大量に画像を使っているサイトの高速化を図るため、WebPを使用しようと考えました。

画像の一括処理が大変

画像が大量にあるためどうしても一括で変換したかった。そしてpng、jpg、gif、表記ゆれのjpegなども相まって複数の拡張子にも対応しないといけないため、どのようにやるかいろいろ調べた結果、以下のような方法で行いました。当方Windowsです。

コード

早速コードを書いていきます。以下のコードを「webp.sh」で保存します。

#!/bin/bash

cd ★処理したいディレクトリまでのパス★
for file in `\find . -maxdepth 5 -type f`; do
  faname_ext="${file##*.}"   #拡張子を取得
  if [ "$faname_ext" != 'gif' ] ; then #gif以外を処理
    fname=${file%.*}  #拡張子を除くファイル名。パスを含む。
    newfile=$fname".webp"  # 新しい画像形式
    ffmpeg -y -i $file $newfile
  fi
done

★処理したいディレクトリまでのパス★には、自分の環境にあったパスを記載してください。例えばこんな感じの書き方です。

cd /c/Users/username/Desktop/data

使い方

bashの使えるCUIツールを使います。私は Git for Windowsのgitbashを使いました。流れとしては、以下の通りです。

  1. webp.shファイルのある場所へ移動する
  2. webp.shファイルに対してパーミンション755を付与
  3. webp.sh実行

それを踏まえたbashの流れは以下です。

$ cd Desktop/
$ chmod 755 webp.sh
$ ./webp.sh

応用

これを応用すれば、例えばmp4はwebmに、それ以外の拡張子はwebpみたいなこともできます。

#!/bin/bash

cd ★処理したいディレクトリまでのパス★
for file in `\find . -maxdepth 5 -type f`; do
  faname_ext="${file##*.}"   # 拡張子を取得
  if [ "$faname_ext" = 'mp4' ] ; then #mp4だったら
    fname=${file%.*}
    newfile=$fname".webp"  # webmに変換
    ffmpeg -y -i $file $newfile
  else  #それ以外は
    fname=${file%.*}
    newfile=$fname".webp"  # webpに変換
    ffmpeg -y -i $file $newfile
  fi
done

最後に

念の為、バックアップを取ってから行うことをおすすめします。

created by Rinker
¥2,673 (2020/07/14 15:21:13時点 Amazon調べ-詳細)