
こんにちは、吟遊詩人です。ACEMAGIC K1のレビュー記事の中で、「JPEG画像ファイルをよりファイルサイズが小さいAVIF画像ファイルに変換してストレージを節約すれば512GBでも結構いける」と説明した部分があるのですが、昨今のHDDやSSDの価格の高騰を見て「これは別途記事にしたら助かる人いるかも」と思い、執筆してみました。
皆さんスマホやデジカメやミラーレスで撮影した画像をどのように保存していますか?ローカルに貯めこむにしてもクラウドストレージに入れるにしてもファイルサイズが大きければそれだけ扱いが厄介になります。もしかすると空きがなくて泣く泣くファイルを消したりしていませんか?これ、PCがあれば何とかなるかもしれません。
iPhoneは先見の明があったと思います。写真を撮るとデフォルトではJPEG形式ではなくHEIC形式というフォーマットで保存して、ストレージの枯渇を防ごうとしていました。簡単に言うとHEICはHEVC(H.265)映像フォーマットを画像ファイルに転用したものです。いわば、「1コマしかないHEVC動画」がHEICというわけです。
でも実は問題がありました。H.265が完全無料というわけではなかったんです。つまり、(誰が負担しているかはさておき)お金がかかります。 Appleのエコシステム内では便利でもWebやWindowsの世界ではあまり便利ではないんです。
そこでAVIFです!!
AVIFもHEICと似たような立ち位置です。AVIFはAV1映像フォーマットを画像ファイルに転用したものです。つまり「1コマしかないAV1動画」がAVIFです。しかもAV1はロイヤリティフリーのフォーマットです。ロイヤリティフリーのため色々なツールが開発されています。まあ、そのおかげで有償、無償、オープンソース問わず色々なツールが乱立しているんですが…。
この記事の趣旨はオープンソースの変換ツールを使ってJPEGからAVIFへ画像変換してストレージの枯渇を防ごう (遅らせよう)というものです。
ソフトの概要
libavifはGitHubでホストされているオープンソースのソフトです。開発者への感謝と敬意を忘れずに使っていきましょう。Windows用にはコンパイル済みの解凍すればすぐ使える状態で配布されています。
まずは、ダウンロードしていきましょう。
Releaseページに最新版がありますので、Windows用の「windows-artifacts.zip」をダウンロードします。
※基本的に最新版の方がいいですが、何か不具合が出た場合にはひとつ前のバージョンを試すといいでしょう。
ダウンロードしたら解凍してください。
libavifはダウンロードして解凍してもらえば分かると思いますが、CLI (Command Line Interface:コマンドラインインターフェース)ソフトです。そうです、あの謎の黒い窓 (?)で動くソフトです。
CLIというだけで敬遠されるようですが、それは非常にもったいないです。特に今回のように「風呂に入っている間にバッチ処理で画像をまとめて変換する」といった用途にはピッタリなんです。
使い方(稼働確認)
では早速使い方を説明していきます。

まず解凍したフォルダを開きましょう。実行ファイルが3個あるはずです。ちゃんと動くか確認していきましょう。

解凍したフォルダにひとまず写真(JPEGファイル)を一枚コピーしてきましょう。このJPEGファイルをAVIFファイルに変換していきます。

黒い画面を起動しましょう。pathが書かれているところ(アドレスバー)に「cmd」と入力してエンターを押します。

うまくいけばこんな感じの画面が表示されます。C:¥~~の部分はファイルを解凍した場所になるので上記画像と一致しませんので読み替えてください。

では早速コマンドを実行して画像を変換していきましょう。
コマンドは下記です。
avifenc.exe -q 80 DSC01802.JPG DSC01802.avif
コマンドの意味は下記のとおりです。
avifenc.exe -q 80 入力ファイル(JPEG) 出力ファイル(AVIF)

エラーがなければ実行後に上記のようにメッセージが表示されてファイルが出力されているはずです。

ちゃんとファイルが変換されてavifファイルができていますね!

Windows標準のフォトでもちゃんと開けます。
※開けない場合はMicrosoft StoreからAV1ビデオ拡張機能をインストールしてください。

画質がほぼ変わらないのにファイルサイズが16,096KB(JPEG)から2,595KB(AVIF)と小さくなりました。これは助かる!
ちなみに、変換コマンドの「-q 80」の80はクオリティ指定なのでこれを50とかにすればさらにファイルサイズが小さくなる可能性があります。ただ、画質も悪くなるので、色々試行錯誤して自分で満足できる値を指定してください。
80でもファイルサイズが20%以下に小さくなったので十分だと思います。だって言い換えると「80% OFF」ですよ?!
こんなに小さくなっていいの?って心配になります(笑)

ちなみに、JPEGに埋め込まれているEXIF情報もAVIFに引き継がれています。カメラの情報などがちゃんと見れていますね。EXIF情報が引き継がれるので、(アプリさえ対応していれば)JPEGに出来て、AVIFに出来ないことはありません。
※WebPへの変換では明示しないとEXIF情報は削除されることが多いです。
では、変換したAVIFファイルをLocalSendなどでスマホへ転送して表示してみましょう!

転送出来ましたね。では早速、Pixel10で表示してみましょう。

あれ、うまく表示できませんね…。Android12以降であれば標準機能で表示できるはずなのになんで?
色々調べてみたところ、標準のAndroidで表示できるAVIFには制限があるようです。YUV(映像の明るさと色差成分による色表現方式)が4:2:0である必要があります。

もう一度変換結果を見てみましょう。やはりFormatが「YUV422」になっていますね。これをYUV420になるようにオプションを変更しましょう。
avifenc.exe -q 80 --yuv 420 DSC01802.JPG DSC01802.avif

今度はFormatが「YUV420」になっていますね。再度スマホに転送して見てみましょう

今度は無事表示されました!これでソフトの使い方はわかりましたね。あとは変換対象のファイルをまとめて指定すればいいだけです。
使い方(バッチ処理)
上記で1ファイルの変換方法はわかりました。大量に変換する場合は対象を列挙すればいいだけです。例えば画像ファイル名をまとめて取得して、エクセルでコマンドを組み立ててもいいですが、ファイル名をあらかじめ調べておかなければいけません。これは面倒ですよね?
こんな時にはプログラム的に処理すればいいんです。フォルダにJPEGファイルを複数コピーしておきましょう。

画像ファイルをコピー出来たら、下記コマンドを実行してみましょう。
for %f in (*.jpg) do avifenc.exe -q 80 --yuv 420 "%f" "%~nf.avif"
このコマンドはこのフォルダにある拡張子がjpgのファイルを順にavifenc.exeに渡していきます。入力ファイルは「%f」で、出力ファイルは拡張子部分を除いたファイル名「%~nf」+拡張子(avif)とします。

実行すれば、想定通りに各ファイル名に展開されて変換されているのがわかります。

うまくいきました!後はこのフォルダに処理対象をコピーしてきて毎度このコマンドを実行すればいいですね!処理後は画像ファイルを元のところに移動してください。このフォルダにJPEGファイルがあると常に変換対象となり、無駄に処理時間がかかってしまいます。
バッチファイルに少し詳しい方は、「avifenc.exe」をフルパスで記述すれば、わざわざこのフォルダに画像ファイルをコピーしてこなくても画像ファイルがあるフォルダで実行すれば行けることがわかると思います。今回は分かりやすさ優先でここまでにしますが、まだまだ改善の余地はあります。
終わりに
スマホでも変換できないことはないと思いますが、PCなら大量の画像ファイルでもバッチ処理で風呂に入っている間に処理が終わっているんです。やっぱりPCは自由度が高いですね!
PCがあればこんなことが出来ます!いまスマホしか持っていなくて別にPCなんてなくてもいいかと思っている人も、これを機にPCってあると便利と思ってもらえればいいなと思います。
ガジェットを買ったり、便利なアプリやサイトを見つけると人につい教えたくなり周りから煙たがられて、それなら記事にすればいいじゃんとウインタブに投稿し始めたら、いつの間にかライターに。万人受けはしないかもしれないけど、誰かが共感してくれたらうれしいです。▶ サイト紹介・ウインタブについて


コメント