# Official FFmpeg VVC native decoder implementation
It started at January 4 2024 when the native VVC decoder is released on FFmpeg, but it was experimental without IBC (Intra Block Copy).
On February 24 2024, the finally moment about Intra Block Copy has been merged into FFmpeg's official repository, which means native VVC decoder on FFmpeg is completed and it's stable.
His hard work is very good and made by [nuomi2021](https://github.com/nuomi2021) to make native VVC decoder release to FFmpeg.
But on March 14th 2024, James Almer set VVC native decoding from stable to experimental by reasons due to problem issues with different MD5 of some rare videos encoded along advanced parameters.
Frank Plowman and Nuo Mi removed experimental flag, cause it's now fully stable completed on September 7 2024 and should be released on version 7.1 for future date.
Meanwhile, you can use official FFmpeg binaries by BtBn or Gyan or my custom build of FFmpeg VVCEasy build to play or decode VVC in FFmpeg. Also mpv too with shinchiro or VVCEasy builds. :)
But for libvvenc VVC encoder has not implemented yet into official FFmpeg. FFmpeg VVCEasy build has still libvvenc VVC encoder available by Martin Eesmaa's FFmpeg-VVC repository.
Before encoding VVC video codec, see limitations below.
FFmpeg-VVC (for libvvenc feature) works for:
| Features | Notes |
--- | --- |
Pixel format | ⚠️ (only pixel format 10 bit is default, but you can still encode 8 bit by using vvenc params `-vvenc-params InternalBitDepth=8`)
Video size | (auto detects, but it doesn't detect for SAR and DAR anamorphic is glitch and corrupts the video) ⚠️ (Better way to use vvencapp without FFmpeg)
Frame rate | ✅ (auto detects)
MP4/TS Mux | ✅ (only works for stable if it's encoded VVC with MP4 or TS on FFmpeg and mp4box for muxing still works)
Mux MP4/TS container from raw bitstream on FFmpeg | ⚠️ (the first frame freezes may just print error messages for libvvdec when muxed and seeking in FFmpeg, use mp4box for recommendation)
Matroska Mux | ⚠️ (Only matroska mux has an experimental, causing problem of the video sync delay with audio and others for FFmpeg libvvdec. It is unofficial support)
Demux | ✅
Audio with encode VVC | ✅
Broadcasting | ✅ (MPEG-TS)
Streaming | ✅ (MPEG-DASH)
Bitrates | ✅ (average (`-b:v`) and maximum bitrate (`-maxrate`) are only supported)
Passes | ⚠️ (you may need get passes using vvenc params on FFmpeg VVCEasy or use vvencapp, also it is only available to use bitrate for two passes, QP supports only one pass)
About [xHE-AAC](https://www.iis.fraunhofer.de/en/ff/amm/broadcast-streaming/xheaac.html), now it's available decode support xHE-AAC of FFmpeg. [Exhale](https://gitlab.com/ecodis/exhale) (encoder) is free to use and open source, but if you want Fraunhofer IIS xHE-AAC, you can download [EZ CD Audio Converter](https://www.poikosoft.com/music-converter) for Windows only. You can also merge your encoded xHE-AAC audio into mp4 too.
To make playable mp4 with audio and video together, you need VVC video encoded, audio file and [GPAC Nightly build](https://gpac.wp.imt.fr/downloads/gpac-nightly-builds/). Code for mp4box/gpac to merge VVC video encoded and audio file:
[Windows (x64) & Linux (x64/arm64)](https://github.com/MartinEesmaa/FFmpeg-Builds/releases/tag/latest) - Automated builds every day at 12:00 (12 PM) UTC of FFmpeg VVCEasy custom builds.
Since 15th October 2024, Windows and Linux custom builds of FFmpeg-VVC on my forked repo FFmpeg-Builds will turn from my manual time to automatic computer to save my time.
15/10/2024: Updated FFmpeg with latest nightly, vvenc, vvdec and others. Fix static VVC Matroska mux, added Dolby AC-4 experimental decoder back & support JPEG-XL of mux on MP4, MOV, MKV, TS & AVI, also VVC mux of AVI. Automatic builds are on way for Windows & Linux...
25/09/2024: Updated FFmpeg with latest nightly, vvenc, vvdec and others. Added support of qrencode and quirc for QR-code encoding/decoding external filter for Windows & Linux builds only. (sorry for hiatus nearly three months)
30/06/2024: Updated FFmpeg with latest nightly, vvenc and others. Added support of SVT-HEVC and SVT-VP9 external libraries to FFmpeg VVCEasy builds for Windows & Linux x86_64 only.
09/04/2024: Updated FFmpeg with latest nightly and added early LC3 muxer & demuxer can encode, decode and play LC3 by liblc3 (Windows & Linux are already have liblc3) from FFmpeg patchwork.
19/03/2024: Updated FFmpeg, vvenc, libopus and others. Official commit set native VVC decoder is experimental, now decodes default VVC video by using external libvvdec.
04/03/2024: Updated FFmpeg, vvenc, vvdec, libopus and others. Added libdvdnav and libdvdread, especially libdvdcss to Windows & Linux. Switched from external VVC decoder (libvvdec) to native VVC decoder by removing experimental.
01/03/2024: Updated limitations of FFmpeg VVC encoder in FFMPEGVVC.md
29/02/2024: Note about official FFmpeg and VVCEasy builds can play stable video of VVC for playing via decode, but libvvenc (external VVC encoder via vvenc) is still available on FFmpeg VVCEasy builds. I'll release soon later...
15/01/2024: Updated FFmpeg, vvenc, vvdec and other libraries. Added AMR-WB & iLBC encoder using libvo_amrwbenc & libilbc to FFmpeg for Windows and Linux (except only for ilBC encoder on Linux build), but for Linux build does not include iLBC encoder for linking failed to FFmpeg reason about PIE.
22/11/2023: New FFmpeg VVCEasy Linux complete static build using BtbN FFmpeg-Builds script of my forked repository. FFplay is now working and no broken.
03/04/2023: New FFmpeg master latest VVCEasy builds with updated vvenc, vvdec and added libvmaf & libjxl. Removed AC4 for compilation/decoder errors for new AC4 audio files.
30/12/2022: Improved vvenc codes of FFmpeg VVCEasy, thanks Thomas Siedel from Spin Digital! TIP: Type "ffmpeg_vvceasy -h encoder=libvvenc" for FFmpeg vvenc available. See the new vvenc patch: https://patchwork.ffmpeg.org/project/ffmpeg/list/?series=7922
01/09/2022: Added libopus with latest version for improve decode quality, libdav1d and libvmaf (optional if they want calculate score by vvc video and original video).
Step 2: Go to Security & Privacy on Mac OS Settings app, then check App Store & identified developers or anywhere is on. Click "Allow anyway" to unblock an application.
If you want actually play VVC file with FFplay on your local distro, you need to remove command `--extra-ldexeflags="-static"`, otherwise it might give result segmentation fault for FFplay static only.
If compiling is success and finished, you can install FFmpeg VVC for using the code:
**Tip:** If you don't want to compile, you can download my latest automated builds of Windows & Linux, [link here](https://github.com/MartinEesmaa/FFmpeg-Builds/releases/tag/latest) and also you can have look logs on Actions tab.
This will download Martin Eesmaa's pre-package of non-free feature only. However only non-free pre-package is available, not others. If you would like want others than non-free, you can create an feature request to VVCEasy repo on GitHub.
Step 4: After making image and building FFmpeg, you can look `artifacts` folder by inside compressed files of Windows & Linux.
### Troubleshooting
1: If you tried to make image and you got permission denied after trying to run Docker as non-root user.
To fix the issue and make grant access permission Docker to your user:
```
sudo groupadd docker
sudo usermod -aG docker $USER
newgrp docker
```
After these commands, try again to build image again.
If it's still error, reboot the machine.
2: If the network connection is interrupted or disconnected while downloading repository and made timed out, it is recommended to cancel and retry again.
[@NuoMi](https://github.com/nuomi2021) of some codes and [Thomas Siedel](https://patchwork.ffmpeg.org/project/ffmpeg/list/?series=8577) of new external VVC encoder & decoder, also native VVC decoder ([ffvvc](https://github.com/ffvvc/FFmpeg)) by NuoMi.