Prelude
Download and Build (in Windows)
Sources and building instructions are available in here
Go to the folder ‘build’ (cd build
)
Use cmake
to construct Visual Studio 2019 solution (x64) of uvg266 codec:
cmake .. -G "Visual Studio 16 2019" -DCMAKE_GENERATOR_PLATFORM=x64
Open uvg266.sln and build the projects uvg266 and uvg266-bin, uvg266.exe is created under uvg266\build\Release\
If you fail in building of uvg266 on Windows, take already built uvg266.exe codec (remind, it’s not the latest version of uvg266)
Running
For full help info run uvg266 --help
Example: [encoding IP-only stream with GOPs of 30 frame and the bitrate 200Kbps, tiling 2×2 and therefore multiple treads=4, single reference]
By default the preset is medium, to set the fastest preset use '--preset ultrafast',
for the slowest preset use '--preset veryslow'.
The list of presets:
ultrafast, superfast, veryfast, faster, fast, medium, slow, slower, veryslow
uvg266 -i .\yuv\battlefield_384x320.yuv --input-res 384x320 -o battlefield_384x320.vvc --threads=4 --no-wpp -p 0 --tiles 2x2 --ref 1 --gop lp-g30d1t1 --no-open-gop --bitrate 200000
Disabling TMVP because tiles are used.
uvg266 0.4.1-cd2d406 [GNU 12.1.0] 2022-07-30
Compiled: INTEL, flags: MMX SSE SSE2 SSSE3 SSE41 SSE42
Detected: INTEL, flags: MMX SSE SSE2 SSE3 SSSE3 SSE41 SSE42 AVX AVX2
Available: avx2(58) sse2(2) sse41(7)
In use: avx2(58) sse2(1) sse41(3)
–owf=auto value set to 2.
Input: .\yuv\battlefield_384x320.yuv, output: battlefield_384x320.vvc
Video size: 384×320 (input=384×320)
POC 0 QP 19 AVG QP 19.0 (I-frame) 201696 bits PSNR Y 44.5388 U 47.0688 V 48.6977
POC 1 QP 35 AVG QP 27.0 (P-frame) 13880 bits PSNR Y 35.4673 U 43.0650 V 45.9294 [L0 0 ] [L1 ]
POC 2 QP 35 AVG QP 29.7 (P-frame) 6240 bits PSNR Y 35.6660 U 42.8458 V 45.6823 [L0 1 ] [L1 ]
POC 3 QP 35 AVG QP 31.0 (P-frame) 8448 bits PSNR Y 36.2473 U 42.8882 V 45.4948 [L0 2 ] [L1 ]
POC 4 QP 36 AVG QP 32.0 (P-frame) 4576 bits PSNR Y 35.8866 U 41.7932 V 44.9608 [L0 3 ] [L1 ]
POC 5 QP 34 AVG QP 32.3 (P-frame) 8560 bits PSNR Y 36.9664 U 42.2836 V 44.5883 [L0 4 ] [L1 ]
POC 6 QP 36 AVG QP 32.9 (P-frame) 4464 bits PSNR Y 37.6886 U 42.6054 V 44.5403 [L0 5 ] [L1 ]
POC 7 QP 34 AVG QP 33.0 (P-frame) 5080 bits PSNR Y 37.8487 U 42.6512 V 44.4995 [L0 6 ] [L1 ]
POC 8 QP 34 AVG QP 33.1 (P-frame) 4464 bits PSNR Y 38.6689 U 42.3193 V 44.2745 [L0 7 ] [L1 ]
POC 9 QP 34 AVG QP 33.2 (P-frame) 2560 bits PSNR Y 39.0016 U 42.1840 V 44.0175 [L0 8 ] [L1 ]
POC 10 QP 33 AVG QP 33.2 (P-frame) 1664 bits PSNR Y 39.2678 U 42.9377 V 44.8113 [L0 9 ] [L1 ]
POC 11 QP 32 AVG QP 33.1 (P-frame) 1376 bits PSNR Y 39.1807 U 42.9798 V 45.0693 [L0 10 ] [L1 ]
POC 12 QP 30 AVG QP 32.8 (P-frame) 4608 bits PSNR Y 39.6365 U 44.2169 V 46.4282 [L0 11 ] [L1 ]
POC 13 QP 27 AVG QP 32.4 (P-frame) 11088 bits PSNR Y 40.6898 U 45.6579 V 47.2804 [L0 12 ] [L1 ]
POC 14 QP 26 AVG QP 32.0 (P-frame) 13008 bits PSNR Y 40.9927 U 45.9226 V 47.8098 [L0 13 ] [L1 ]
POC 15 QP 29 AVG QP 31.8 (P-frame) 8400 bits PSNR Y 39.8423 U 45.9334 V 47.7605 [L0 14 ] [L1 ]
POC 16 QP 28 AVG QP 31.6 (P-frame) 18792 bits PSNR Y 41.6388 U 46.0678 V 47.8598 [L0 15 ] [L1 ]
POC 17 QP 27 AVG QP 31.3 (P-frame) 12168 bits PSNR Y 41.8970 U 46.5536 V 48.0997 [L0 16 ] [L1 ]
POC 18 QP 29 AVG QP 31.2 (P-frame) 5616 bits PSNR Y 41.2942 U 46.5500 V 48.0858 [L0 17 ] [L1 ]
POC 19 QP 29 AVG QP 31.1 (P-frame) 10088 bits PSNR Y 41.0320 U 46.5441 V 48.1626 [L0 18 ] [L1 ]
POC 20 QP 27 AVG QP 30.9 (P-frame) 11448 bits PSNR Y 41.4378 U 46.5525 V 48.2351 [L0 19 ] [L1 ]
POC 21 QP 28 AVG QP 30.8 (P-frame) 5744 bits PSNR Y 41.4663 U 46.5446 V 48.2550 [L0 20 ] [L1 ]
POC 22 QP 29 AVG QP 30.7 (P-frame) 2488 bits PSNR Y 41.1935 U 46.5088 V 48.2512 [L0 21 ] [L1 ]
POC 23 QP 28 AVG QP 30.6 (P-frame) 3256 bits PSNR Y 41.3896 U 46.5682 V 48.2441 [L0 22 ] [L1 ]
POC 24 QP 28 AVG QP 30.5 (P-frame) 1896 bits PSNR Y 41.4123 U 46.6111 V 48.2415 [L0 23 ] [L1 ]
POC 25 QP 26 AVG QP 30.3 (P-frame) 3304 bits PSNR Y 41.6678 U 46.6423 V 48.3255 [L0 24 ] [L1 ]
POC 26 QP 26 AVG QP 30.1 (P-frame) 3808 bits PSNR Y 41.9538 U 46.7136 V 48.3743 [L0 25 ] [L1 ]
POC 27 QP 24 AVG QP 29.9 (P-frame) 3224 bits PSNR Y 42.1235 U 46.8992 V 48.5317 [L0 26 ] [L1 ]
POC 28 QP 25 AVG QP 29.8 (P-frame) 6392 bits PSNR Y 42.6335 U 46.9295 V 48.6389 [L0 27 ] [L1 ]
POC 29 QP 25 AVG QP 29.6 (P-frame) 4536 bits PSNR Y 42.8911 U 47.1008 V 48.8129 [L0 28 ] [L1 ]
POC 0 QP 18 AVG QP 29.2 (I-frame) 84992 bits PSNR Y 47.0792 U 49.3670 V 51.0272
POC 1 QP 24 AVG QP 29.1 (P-frame) 1552 bits PSNR Y 46.8513 U 49.3292 V 51.0239 [L0 0 ] [L1 ]
POC 2 QP 24 AVG QP 28.9 (P-frame) 1576 bits PSNR Y 46.6592 U 49.3432 V 51.0319 [L0 1 ] [L1 ]
POC 3 QP 23 AVG QP 28.7 (P-frame) 3496 bits PSNR Y 46.7988 U 49.3455 V 51.0727 [L0 2 ] [L1 ]
…
7 QP 29 AVG QP 36.4 (P-frame) 32424 bits PSNR Y 35.0599 U 41.3741 V 43.0775 [L0 6 ] [L1 ]
POC 8 QP 36 AVG QP 36.4 (P-frame) 696 bits PSNR Y 34.6178 U 41.3718 V 43.0724 [L0 7 ] [L1 ]
POC 9 QP 47 AVG QP 36.4 (P-frame) 1760 bits PSNR Y 28.7140 U 40.2295 V 42.0565 [L0 8 ] [L1 ]
POC 10 QP 31 AVG QP 36.4 (P-frame) 32304 bits PSNR Y 34.4102 U 41.0338 V 43.3139 [L0 9 ] [L1 ]
POC 11 QP 29 AVG QP 36.4 (P-frame) 9336 bits PSNR Y 33.8779 U 40.9921 V 43.1144 [L0 10 ] [L1 ]
POC 12 QP 43 AVG QP 36.4 (P-frame) 1272 bits PSNR Y 31.7173 U 40.2950 V 42.3548 [L0 11 ] [L1 ]
POC 13 QP 33 AVG QP 36.4 (P-frame) 9888 bits PSNR Y 33.2683 U 40.8831 V 42.7931 [L0 12 ] [L1 ]
POC 14 QP 30 AVG QP 36.4 (P-frame) 24384 bits PSNR Y 34.2527 U 41.0853 V 43.2271 [L0 13 ] [L1 ]
POC 15 QP 37 AVG QP 36.4 (P-frame) 1008 bits PSNR Y 33.3166 U 40.9707 V 43.1480 [L0 14 ] [L1 ]
POC 16 QP 35 AVG QP 36.4 (P-frame) 2408 bits PSNR Y 33.2510 U 40.8429 V 42.9711 [L0 15 ] [L1 ]
Processed 557 frames, 5170840 bits AVG PSNR Y 34.3779 U 42.4837 V 44.2733
Total CPU time: 4.398 s.
Encoding time: 4.345 s.
Encoding wall time: 4.345 s.
Encoding CPU usage: 100.00%
FPS: 128.20
Bitrate: 0.221 Mbps
AVG QP: 36.4
Note: because number of references equals to 1, then all I-frame is the start of closed GOP.
Playback
To play vvc-stream i use vvdecapp.exe, details are here to decode the vvc-file into y4, format:
vvdecapp.exe -b battlefield_384x320.vvc --y4m -o battlefield.y4m
Appendix: More Details on VVC
It’s reported here the emerging VVC video codec is by 41% more efficient than HEVC for 8K resolution.
Due adoption two additional CU divisions – binary and ternary, the number of partitions of 64×64 CTU is 5781 in VVC against 85 partitions in HEVC (where only the quadtree division is used)
It’s also reported that encoding times of VVC are 8x-26x higher than HEVC.
23+ years’ programming and theoretical experience in the computer science fields such as video compression, media streaming and artificial intelligence (co-author of several papers and patents).
the author is looking for new job, my resume