【FFmpeg】フォルダ内の画像を一括でAVIFに変換する【Windows】
[2023/10/24]
ほぼ自分メモです。
以前にこのブログの画像はAVIFやWebPにしてると書きました。
ブログに掲載する画像はGIMPで1枚ずつ変換をしているんですが、それ以外の画像もAVIFに変換したいと思いやり方を考えてみた。
FFmpegで変換
FFmpegという本来は動画のエンコードに使うソフトを使います。
コマンドで変換するんですが、JPEGをAVIFにするには次のとおり実行します。
ffmpeg -i image.jpg -c:v libaom-av1 -crf 30 image.avif
crfが品質です。0-63の範囲で設定します。30が標準?で、小さい数字の方が高画質になります。
バッチファイルで回す
あとは実行するコマンドをバッチファイルで回すように書き直します。
@ECHO OFF
SET TARGETDIR=D:\convert_image
SET TARGETEXT=jpg
FOR /R %TARGETDIR% %%i IN (*.%TARGETEXT%) DO (
ffmpeg -y -i "%%i" -c:v libaom-av1 -crf 30 "%%~dpni.avif"
DEL "%%i"
)
TARGETDIRは変換するファイルが保存されているフォルダの絶対パス。
TARGETEXTは変換元の拡張子。CONVERTEXTは変換後の拡張子を指定します。
DELコマンドで変換が終わったファイルを削除しています。
FORコマンドに/Rを付けることで、サブフォルダにも対応しています。
ffmpegのオプションで-yを付けています。これは同名のファイルがある場合に上書きの確認を行わないオプションです。
上書き確認でバッチが一時停止するのを防止するために付けています。
ffmpegへのパスを通していないので、exeと同じフォルダに保存(またはexeまでのフルパスで記載)してください。
さいごに
FFmpegはインストール不要で、解凍するだけで使えます。
ファイルを回すのもバッチファイルで行っているので、Windows環境であれば特別なソフトは必要ありません(FFmpegは必要)。
内容を修正すれば、同様にフォルダ内の動画を一括変換もできますね。こっちの方が需要ありそうか?