映像圧縮技術 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上で解凍する
次にビルドをする。ビルドの方法は、README.mdに書かれている
cd build
ビルドが成功すると、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 エンコード後の画像
若干圧縮されているのがわかりそうです。
自分でビルドしたEncoderAppStaticとDecoderAppStaticを添付します。Linux上で動作すると思います。
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 エンコード後の画像
若干圧縮されているのがわかりそうです。
自分でビルドしたEncoderAppStaticとDecoderAppStaticを添付します。Linux上で動作すると思います。
コメント
コメントを投稿