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
899 stars 158 forks source link

[QUESTION] Weird intra-period value #358

Closed birdie-github closed 4 months ago

birdie-github commented 4 months ago
ffmpeg -i *webm -r 60 -f yuv4mpegpipe -hide_banner -loglevel error - | ./vvencapp --y4m -i - --preset slower -q 31 -o y4m.266

vvenc [info]: Input File                             : -  (y4m)
vvenc [info]: Bitstream File                         : y4m.266
vvenc [info]: Real Format                            : 3840x2160  yuv420p  60 Hz  SDR  
vvenc [info]: Frames                                 : encode 0 frame 
vvenc [info]: Internal format                        : 3840x2160  60 Hz  SDR
vvenc [info]: Threads                                : 8  (parallel frames: 4)
vvenc [info]: Rate control                           : QP 31
vvenc [info]: Perceptual optimization                : Enabled
vvenc [info]: Intra period (keyframe)                : 64
vvenc [info]: Decoding refresh type                  : CRA

Why does vvenc default to 64 frames keyframe interval instead of you know every second, i.e. 60? Won't it make fast seeking problematic?

And then weirdly vvenc prints stats every 60 frames regardless. Won't it make more sense to print them every 64 frames?

adamjw24 commented 4 months ago
ffmpeg -i *webm -r 60 -f yuv4mpegpipe -hide_banner -loglevel error - | ./vvencapp --y4m -i - --preset slower -q 31 -o y4m.266

vvenc [info]: Input File                             : -  (y4m)
vvenc [info]: Bitstream File                         : y4m.266
vvenc [info]: Real Format                            : 3840x2160  yuv420p  60 Hz  SDR  
vvenc [info]: Frames                                 : encode 0 frame 
vvenc [info]: Internal format                        : 3840x2160  60 Hz  SDR
vvenc [info]: Threads                                : 8  (parallel frames: 4)
vvenc [info]: Rate control                           : QP 31
vvenc [info]: Perceptual optimization                : Enabled
vvenc [info]: Intra period (keyframe)                : 64
vvenc [info]: Decoding refresh type                  : CRA

Why does vvenc default to 64 frames keyframe interval instead of you know every second, i.e. 60?

If not instructed differently, vvenc allocates an intra frame at integer multiples of GOP size, which is 32. This is for coding efficiency reasons. If you want to have intra frames at frame-exact intervals, use eg. -ip 60. Otherwise if you use -rs 1 (specifying intra period in seconds), it is an approximate and optimized for maximal efficiency.

Won't it make fast seeking problematic?

No, this is not at all a problem for noone.

And then weirdly vvenc prints stats every 60 frames regardless. Won't it make more sense to print them every 64 frames?

The stats are printed every second of input video. Its only 60 frames for 60fps content, would be 24 frames for 24fps content.