Fast and save dive into VVC (H.266) development
In this short note I want to share with you how to build VVC (VTM) encoder because I did not find any docs how to start work with it from scratch in the Internet.
What is VVC encoder?
VVC (H.266) is the evolution of HEVC (H.265) codec, which offers ~40%compression efficiency than HEVC. I remind that HEVC offers 25-50% better data compression at the same level of video quality in compassion with AVC (H.264). For the more in depth explanation about VVC I suggest to see this video.
- any Linux machine (I used Ubuntu 17.10)
- any source stream (.yuv)
Step 1: Building
We will use Fraunhofer`s VTM (VVC Test Model) version of encoder:
git clone https://vcgit.hhi.fraunhofer.de/jvet/VVCSoftware_VTM.git
After that we can do the job:
cd VVCSoftware_VTM/ mkdir build cd build cmake .. -DCMAKE_BUILD_TYPE=Release make -j4 cd ../bin #here will be all binaries
We receive following binaries:
ls DecoderAnalyserAppStatic DecoderAppStatic EncoderAppStatic parcatStatic SEIRemovalAppStatic StreamMergeAppStatic umake
Step 2: Encoding & decoding
Now we have to check that binaries are working. We will do that by encoding and the decoding the stream. Yeah you can type
./EncoderAppStatic --help to see all available parameter and choose needed parameters but I will share with you the simple example:
./EncoderAppStatic -i vicue_test_432x240_420_8_500.yuv -wdt 432 -hgt 240 -c encoder_randomaccess_vtm.cfg -f 5 -fr 30
encoder_randomaccess_vtm.cfgis a file from
vicue_test_432x240_420_8_500.yuvis a simple source stream
-i- input stream
-wdt- width of the stream
-hgt- height of the stream
-c- configuration file to use
-f- number of frames to be encoded (we used only 5 to speed up our case)
-fr- frame rate
To decode stream backwards:
./DecoderAppStatic -b str.bin -o rec_decoded.yuv
-b- input encoded
-o- reconstruct output
Profit! Now we can build VTM, encode and decode with it. We know basics to start researching and development in the domain of VVC and media.
Thanks for the reading. In future articles I will try to share more in-depth topics. I hope that this small note was useful for you!