fraunhoferhhi / vvenc

VVenC, the Fraunhofer Versatile Video Encoder
https://www.hhi.fraunhofer.de/en/departments/vca/technologies-and-solutions/h266-vvc.html
BSD 3-Clause Clear License
942 stars 170 forks source link

About I P and B frames encoding support #380

Closed thx4ever closed 4 months ago

thx4ever commented 4 months ago

Hi, is there a possibility without change the code to output I P and B frames? Actually the encoder outputs I and B only

Regards

jungleboynx commented 4 months ago

The uvg266 encoder uses all the frames types including 'P' but these frames are 2 or 3 times bigger than 'B' frames and can't be used as references. 'B' frames can be used as references to other 'b' frames. I assume that VVenC is similar to 264 and 265. In VVC the frame order is not sequential. An 'I' reference frame is created 32 frames in the future and then 7 x 'B' reference frames are sparsely created before the 'I' frame. The 'b' frames hang off the 'B' reference frames. The frame layout changes depending on the refresh period used. This keeps the differences w.r.t the reference frames small and lowers the bitrate. The quantizer difference between 'I' and 'B' frames is about 10 which is similar to 264 and 265. A --tune grain parameter in x264/5 flattens out the quantizer differences to stop pulsating noise but it also doubles the bitrate. I assume VVC will eventually use FGS (like AV1) to get around the grain/noise problem.

adamjw24 commented 4 months ago

There is, alas not too easy. You have to use the full-feature app and use config files.

vvencFFapp ... -c cfg/gop32.cfg ...

Than, in cfg/gop32.cfg change Frame1 entry from Type B to P. Mind that using config file, especially with this change, will reduce the coding efficiency. This will only produce P frames if the intra period is at least 33.

There is no easier way.