VVC (Versatile Video Coding), also referred to as H.266, released on July 6, 2020, by JVET and MPEG working groups. As the successor to HEVC video compression, VVC designed with two primary objectives: enhancing compression quality by up to 30-50% while maintaining the same bitrate, and providing extensive support for various applications, including High Definition, HDR, and immersive media like 360 video. In the article we will show the location of some parameters of the original video (FPS, frame size, aspect ratio, profile, level, chroma format and bit depth) in encoded VVC elementary stream. To analyze VVC video we will use Virinext Bitstream Analyzer. You can download the evaluation version on the download page. For license acquiring please check the Buy license page.
Profile, tier and level
Profile defines the algorithmic features that the encoder can use during encoding. Based on the profile value, the decoder can recognize the requirements for decoding specific bitstream. Level of tier specifies another set of constraints that indicate a required decoder performance. These constraints include maximum frame size, bitrate and decoding speed. Profile, tier and level are described by the general_profile_idc, general_tier_flag and general_level_idc fields in profile_tier_level group of parameters in Sequence parameter set.
Aspect ratio
Encoder can code the aspect ratio as either a predefined constant value or a pair of horizontal and vertical values.. Aspect ratio value is located in SPS::vui_parameters::vui_aspect_ratio_idc field. If SPS::vui_parameters::vui_aspect_ratio_idc == 255 then sar_width and sar_height fields are used.
Picture size
The picture size is stored in PPS::pps_pic_width_in_luma_samples and PPS::pps_pic_height_in_luma_samples fields. When the pps_conformance_window_flag is enabled, crop values from fields pps_conf_win_left_offset, pps_conf_win_right_offset, pps_conf_win_top_offset, and pps_conf_win_bottom_offset are applied.
In example file pps_conformance_window_flag is zero, pps_pic_width_in_luma_samples is 1920 and pps_pic_height_in_luma_samples is 1080, whic means picture size is 1920×1080 pixels.
Frames per second (FPS)
Information about frame rate in VVC bitstream is optional. The frame rate value is calculated from num_units_in_tick and time_scale fields from SPS::general_timing_hrd_parameters group of parameters when they are specified in bitstream.
In example file num_units_in_tick = 450450 and time_scale = 27000000, which means fps = time_scale / num_units_in_tick = 59,94 frames per second.
Bitrate mode
The VVC bitstream may optionally include a flag indicating the use of CBR (constant bit rate) mode. When present, this value is signaled in SPS::ols_timing_hrd_parameters::sublayer_nal_hrd_parameters::cbr_flag field.
Chroma format
Chroma format is specified by SPS::sps_chroma_format_idc field according to the following table:
In the example file shown in the screenshot, the value of sps_chroma_format_id is 1, indicating the use of 4:2:0 chroma subsampling.
Bit depth
The bit depth represents the number of bits used to store color and luma data in a video frame. Bit depth is described by SPS::sps_bitdepth_minus8 field.
In example file sps_bitdepth_minus8 = 0 which means bit depth is 8 bit.
Conclusion
In this article, we have explored the VVC video compression standard. We have examining details of standard by looking for the location of key video parameters within the encoded VVC/H.266 bitstream including profile, tier, level, aspect ratio, frame rate, bitrate mode, chroma format and bit depth. With Virinext Bitstream Analyzer we have demonstrated how these parameters are encoded and how they can be extracted from the bitstream. Virinext Bitstream Analyzer offers both in-depth and high-level analysis for various encoding standards, including VVC. If you interested in exploring further, we are offering you to try free evaluation version of Virinext Bitstream Analyzer.