【Ubuntu】 ffmpegとVMAFで映像の品質劣化具合を数値化
研究で使うかもしれないので動画の品質比較のためのツールをいくつか試したのですが、VMAFだけ資料が少なくて手間取ったのでメモしておきます。
VMAFとは
VMAF(Video Multimethod Assistant Fusion)はNetflixが開発した映像の品質劣化具合を表す指標です。元の映像と劣化した映像の2つを与え、どの程度劣化したかを100点満点で評価します。
映像の品質に関わる指標は他にPSNRとかSSIMとかありますが、VMAFがそれらに比べて優れているのは、機械学習を用いて人間の感じ方に近い評価をしてくれるとこです。いくつかの指標があって、入力映像に応じてそれぞれの指標にどの程度のウェイトをかけるかを学習しています。詳しくはこちらをご覧ください。
環境
PC: MacBook Air(M2チップ)
OS: Ubuntu 20.04(UTMを用いた仮想マシン)
Python3.8.10
ffmpeg 7.0
インストール手順
VMAFのインストール(git clone https://github.com/Netflix/vmaf.git)
終わったらcd vmafで移動しておく。
ここを参考にffmpegをインストール。
通常のapt-get等で手に入るffmpegは--enable-libvmafが有効になっていないのでVMAFが使えないため手動でインストールの必要がある。
最後のNVIDIA云々は関係ないのでスキップしてOK。
途中でmesonやninjaのバージョンが不足していた場合は、apt-getの--upgradeオプションもしくはpip3で最新版をインストール。ビルドがうまくいかない原因は多分これ。
最後のexport=…のところは、自身のマシンの共有ライブラリの場所(echo $LD_LIBRARY_PATH の出力に入っている)を選択。
実行
元の映像がinput_video.mp4、品質を調べたい映像がoutput_video.mp4とする。この場合、以下のコマンドで実行できます。
ffmpeg
-i output_video.mp4
-i input_video.mp4
-lavfi libvmaf='model=version=vmaf_v0.6.1\\:name=vmaf|
version=vmaf_v0.6.1neg\\:vmaf_neg' -f null -
ffmpegの後に-iオプションと映像のファイル名を「品質を調べたいもの→元の映像」の順に書きます。映像はコマンドを実行するところと同じとこに置いといてください。versionはvmaf/modelsにあるものならなんでも構いません。
しばらく出力が続いて、以下のような画面が出たら成功です。VMAF score: 8.940050と出ています。100点満点で90点程度が高品質といわれる指標なので、スコア的には全然です。
ネットで調べると、'model_path=…'みたいなコマンドが多くヒットしますが、これは新しいバージョンでは使えなくなっているので注意です(参考)。
ちなみに使った映像についてですが、適当な猫の映像にガウスノイズをかけただけの簡単なものになります。ノイズはかなり大きいですが元は同一の映像だったことはわかる程度のノイズです。これで9点はちょっと辛口採点な気もしますが。
おわりに
本記事では、Ubuntu20.04においてffmpegでVMAFを測定する方法を説明しました。VMAFはまだ新しくてマイナーな指標なので情報が少なくて大変かもしれませんが、この手順通りにやれば動くことが確認できています。参考になれば幸いです。
この記事が気に入ったらサポートをしてみませんか?