Intégration de l'encodeur AV1 libsvtav1 dans FFmpeg sous Windows

AV1 est un standard de codage vidéo ouvert développé par l'Alliance for Open Media (AOM) en 2018. Il synthétise les apports de trois projets open source : VP10 de Google, Daala de Mozilla et Thor de Cisco. Les benchmarks démontrent un gain de compression d'environ 27 % par rapport au H.265 (HEVC). Étant libre de droits et plus performant, AV1 est progressivement adopté par les principales plateformes de streaming en remplacement du HEVC.

FFmpeg prend en charge plusieurs encodeurs/décodeurs AV1 : libaom, libdav1d, libsvtav1 et librav1e. Ce guide décrit la procédure d'intégration de l'encodeur libsvtav1 dans FFmpeg sous Windows.

Compilation de SVT-AV1

Le projet SVT-AV1, initialement développé conjointement par Intel et Netflix, a été intégré officiellement par l'AOM. Le dépôt source se trouve à l'adresse https://gitlab.com/AOMediaCodec/SVT-AV1. La version v3.0.2 (mars 2025) présentant des problèmes de compilation sous Windows 10, nous utilisons la version v2.3.0 (octobre 2024), téléchargeable à l'adresse https://gitlab.com/AOMediaCodec/SVT-AV1/-/archive/v2.3.0/SVT-AV1-v2.3.0.tar.gz.

Après téléchargement, copiez l'archive dans le répertoire /usr/local/src de l'environnement MSYS, puis décompressez-la :

tar xzf SVT-AV1-v2.3.0.tar.gz
cd SVT-AV1-v2.3.0

Lancez la configuration via CMake en générant une bibliothèque partagée :

cd Build
cmake -DBUILD_SHARED_LIBS=ON ..

Cette étape produit le fichier de solution Visual Studio svt-av1.sln dans le répertoire Build.

Ouvrez ensuite Visual Studio 2022, chargez la soultion svt-av1.sln, puis basculez la configuration de Debug vers Release via le menu Générer → Gestionnaire de configurations. Enfin, lancez la compilation du projet ALL_BUILD. Une fois le processus terminé, les fichiers SvtAv1Enc.lib et SvtAv1Enc.dll seront disponibles dans SVT-AV1-v2.3.0/Bin/Release.

Déploiement de libsvtav1 dans MSYS

Prérequis : MSYS2 doit être installé et configuré sur le système. Procédez ensuite à l'installation manuelle :

  1. Créez l'arborescence /usr/local/libsvtav1/lib dans l'environnement MSYS2.
  2. Copiez SvtAv1Enc.lib et SvtAv1Enc.dll depuis le répertoire Bin/Release du projet vers ce sous-répertoire lib.
  3. Créez le sous-répertoire lib/pkgconfig et placez-y le ficheir SvtAv1Enc.pc situé dans Build/. Éditez ensuite ce fichier pour corriger le chemin du préfixe :
prefix=/usr/local/libsvtav1

  1. Créez l'arborescence /usr/local/libsvtav1/include/svt-av1 et copiez-y les fichiers d'en-tête du répertoire Source/API du projet (tels que EbSvtAv1.h, EbSvtAv1Enc.h, etc.).

La structure finale attendue :

/usr/local/libsvtav1
├── lib
│   ├── SvtAv1Enc.lib
│   ├── SvtAv1Enc.dll
│   └── pkgconfig
│       └── SvtAv1Enc.pc
└── include
    └── svt-av1
        ├── EbSvtAv1.h
        ├── EbSvtAv1Enc.h
        └── ...

Compilation de FFmpeg avec libsvtav1

Téléchargez les sources de FFmpeg (version ≥ 7.1) et placez l'archive dans /usr/local/src sous MSYS. Décompressez-la :

cd /usr/local/src
unzip ffmpeg-n7.1.1.zip

Assurez-vous que les bibliothèques libx264, libx265, libvvenc, SDL2, libaom et libdav1d sont déjà installées dans l'environnement MSYS. Configurez ensuite la compilation de FFmpeg en activant libsvtav1 :

cd ffmpeg-n7.1.1
export PKG_CONFIG_PATH=/usr/local/libsvtav1/lib/pkgconfig:$PKG_CONFIG_PATH

./configure \
    --prefix=/usr/local/ffmpeg \
    --arch=x86_64 \
    --enable-shared \
    --disable-static \
    --disable-doc \
    --enable-libx264 \
    --enable-libx265 \
    --enable-libvvenc \
    --enable-liblc3 \
    --enable-librist \
    --enable-libdav1d \
    --enable-libaom \
    --enable-libsvtav1 \
    --enable-sdl2 \
    --enable-gpl \
    --enable-nonfree \
    --enable-iconv \
    --enable-zlib \
    --cross-prefix=x86_64-w64-mingw32- \
    --target-os=mingw32

Lancez la compilation et l'installation, puis copiez la DLL de libsvtav1 vers le répertoire bin de FFmpeg :

make -j$(nproc)
make install
cp /usr/local/libsvtav1/lib/SvtAv1Enc.dll /usr/local/ffmpeg/bin/

Vérification de l'intégration

Contrôlez que FFmpeg reconnaît bien libsvtav1 :

ffmpeg -version

Le résultat attendu :

ffmpeg version 7.1.1 Copyright (c) 2000-2025 the FFmpeg developers
built with gcc 12.2.0 (Rev10, Built by MSYS2 project)
configuration: --prefix=/usr/local/ffmpeg --arch=x86_64 --enable-shared --disable-static --disable-doc --enable-libx264 --enable-libx265 --enable-libvvenc --enable-liblc3 --enable-librist --enable-libdav1d --enable-libaom --enable-libsvtav1 --enable-sdl2 --enable-gpl --enable-nonfree --enable-iconv --enable-zlib --cross-prefix=x86_64-w64-mingw32- --target-os=mingw32
libavutil      59. 39.100 / 59. 39.100
libavcodec     61. 19.101 / 61. 19.101
libavformat    61.  7.100 / 61.  7.100
libavdevice    61.  3.100 / 61.  3.100
libavfilter    10.  4.100 / 10.  4.100
libswscale      8.  3.100 /  8.  3.100
libswresample   5.  3.100 /  5.  3.100
libpostproc    58.  3.100 / 58.  3.100

La présence de l'option --enable-libsvtav1 dans la ligne de configuration confirme que l'encodeur AV1 libsvtav1 est correctement intégré à FFmpeg.

Étiquettes: FFmpeg libsvtav1 AV1 SVT-AV1 MSYS2

Publié le 28 juin à 22h48