H266|VVC Reference Code

映像圧縮技術 VVC のReference Codeで、エンコードをしてみます。

VVCは、2020年に規格化予定の新しい映像圧縮技術になります。

Refernceo Codeは、VVCの規格を作った団体が作ったエンコーダ/デコーダになります。

ソフトウェアは、以下のサイトで入手可能です。

https://jvet.hhi.fraunhofer.de/
https://vcgit.hhi.fraunhofer.de/jvet/VVCSoftware_VTM


ある程度安定したソフトで確認したいのでTagからダウンロードします。
https://vcgit.hhi.fraunhofer.de/jvet/VVCSoftware_VTM/-/tags/VTM-5.2


以下のファイルをダウンロードします。
https://vcgit.hhi.fraunhofer.de/jvet/VVCSoftware_VTM/-/archive/VTM-5.2/VVCSoftware_VTM-VTM-5.2.tar.gz


Linux上で解凍する

tar -zxvf filename.tar.gz



次にビルドをする。ビルドの方法は、README.mdに書かれている

cd build
cmake .. -DCMAKE_BUILD_TYPE=Release
make -j




ビルドが成功すると、binディレクトリに、アプリケーションができあがります。

ls ./bin
DecoderAppStatic EncoderAppStatic


次にエンコードするための、データを用意する。

https://media.xiph.org/video/derf/

のサイトのcoastguardのCIFのデータを使用する。

https://media.xiph.org/video/derf/y4m/coastguard_cif.y4m


エンコーダが読み取れるデータ形式のyuv420pの形式で変更する。ffmpegを使用する。

./ffmpeg -i foreman_cif.y4m -f rawvideo -pix_fmt yuv420p -r 29.97 coastguard_cif.yuv

できたcoastguard_cif.yuvをエンコードする。

./EncoderAppStatic -i coastguard_cif.yuv -c ../cfg/encoder_randomaccess_vtm.cfg -fr 29.97 -f 300 -wdt 352 -hgt 288 --InputBitDepth=8 --OutputBitDepth=8 --InternalBitDepth=8 -b coastguard_cif.bin



結果、coastguard_cif.binとしてVVCのファイルが生成されました。

次にデコードを行います。

./DecoderAppStatic -b coastguard_cif.bin -o coastguard_cif_output.yuv


デコードした結果は、coastguard_cif.yuvとして生成される。画質の評価は、ffmpegを使用する。エンコード前の画像とエンコード後の画像をPSNRを測定する。

./ffmpeg -f rawvideo -vcodec rawvideo -s 352x288 -pix_fmt yuv420p -i coastguard_cif.yuv -f rawvideo -vcodec rawvideo -s 352x288 -pix_fmt yuv420p -i coastguard_cif_output.yuv -filter_complex psnr -an -f null -


PSNRの結果になります。PSNRは数字が大きい方が画像が良いです。ファイルサイズが小さいので画質が少し悪そうです。次は画質優先で圧縮してみます。

PSNR y:31.570499 u:43.588790 v:44.704490 average:33.212086 min:31.278601 max:38.063731


ファイルサイズは、45619200 byte → 220997 byteと大幅に削減されています。

1枚目だけ、画像を確認します。

オリジナル画像


VVC エンコード後の画像


若干圧縮されているのがわかりそうです。

自分でビルドしたEncoderAppStaticDecoderAppStaticを添付します。Linux上で動作すると思います。

コメント