VVenC
37c3317fd058; modified for Encode Wiki · CC BY-SA 4.0
VVenC is an open source command line application for encoding H.266/VVC written in C++ and developed by Fraunhofer Heinrich-Hertz-Institute (HHI).
Installation
Section titled “Installation”Arch Linux users may check the AUR for the vvenc and vvenc-git packages.
Compilation from source as shown belowe requires CMake.
git clone https://github.com/fraunhoferhhi/vvenc.gitcd vvencmkdir buildcd buildcmake .. -DCMAKE_BUILD_TYPE=Releasecmake --build .Binaries will be available in bin/release-static/
FFmpeg Integration
Section titled “FFmpeg Integration”Since 15th June 2024, you can officially compile your own FFmpeg binary with libvvenc. If you use earlier FFmpeg revisions you will need to apply a custom patch. A comprehensive tutorial can be found in the official VVenC wiki (archive).
A VVC decoder has been integrated into FFmpeg in early 2024, FFmpeg 7.0 is the first release to support it. However if you still want to compile FFmpeg with the vvdec decoder, you can refer to the official VVenC wiki (archive).
There is an FFmpeg fork called FFmpeg-VVC. It is maintained by Martin Eesmaa, who is the author of the VVCEasy GitHub repo featuring guides and more general information about working with VVC.
Please be aware the script below produces a build of FFmpeg licensed under LGPL version 2.1 or later. It is legal to distribute the resulting binary, given you do not interfere with the flags provided below.
brew install libxml2 ffmpeg nasm # macOS-only; if on Linux, use your native package manager. Package names may differ.git clone https://github.com/fraunhoferhhi/vvencgit clone https://github.com/fraunhoferhhi/vvdecgit clone https://github.com/mstorsjo/fdk-aaccd vvenc && mkdir build && cd buildcmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr/local ..sudo cmake --build . --target install -j $nproccd ../../cd vvdec && mkdir build && cd buildcmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr/local ..sudo cmake --build . --target install -j $nproccd ../../cd fdk-aac && ./autogen.sh && ./configuremake -jsudo make installcd ../git clone --depth=1 https://github.com/MartinEesmaa/FFmpeg-VVCcd FFmpeg-VVCexport PKG_CONFIG_PATH=/usr/local/lib/pkgconfig./configure --enable-libfdk-aac --enable-libvvenc --enable-libvvdec --enable-static --enable-pic --enable-libxml2 --pkg-config-flags="--static" --enable-sdl2make -jBinaries will be available in the final directory you end up in after the build process is complete.
To be filled. If you believe you can help, see our Contribution Guide.
There are two encoders, the simple encoder (vvencapp) and the full-featured expert mode encoder (vvencFFapp) which is based on the VTM configuration scheme. VVenC used to only accept YUV files input until support was added for Y4M.
Here are some examples:
vvencapp -i input.y4m --qp 20 -o output.266vvencapp -i input.y4m --preset slow --qpa on --qp 20 -c yuv420_10 -o output.266ffmpeg -hide_banner -loglevel error -i input.mkv -pix_fmt yuv420p10le -strict -1 -f yuv4mpegpipe - | vvencapp -i - --y4m --preset medium --qpa on --qp 20 -c yuv420_10 -o output.266ffmpeg -i input.mkv -c:v libvvenc -qp 32 -preset fast out.mp4:::note QPA VVenC by default operates with QP (Quantization Parameter), which is basically fixed quality. For “CRF-like” rate control, QPA is enabled by default QPA (provided by —qpa) enables perceptually motivated QP adaptation based on XPSNR. QPA modifies the QP value on the fly spatially and temporally as well as enabling temporal RDO. :::