Fast and save dive into VVC (H.266) development

Alexander Dydychkin
Sep 27 · 2 min read
Photo by Jakob Owens on Unsplash

Hi folks,

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.

Prerequisites

  • any Linux machine (I used Ubuntu 17.10)
  • git
  • cmake
  • gcc
  • 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

Where

  • encoder_randomaccess_vtm.cfg is a file from VVCSoftware_VTM/cfg
  • vicue_test_432x240_420_8_500.yuv is a simple source stream

Parameters

  • -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

Parameters

  • -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!

Alexander Dydychkin

Written by

DevOps Expert at ViCueSoft.com

vicuesoft-techblog

ViCueSoft.com Technology Blog

Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade