web-dev-qa-db-fra.com

Comment utiliser FFmpeg et rav1e pour créer des fichiers AV1 de haute qualité?

J'utilise Ubuntu Bionic Beaver 18.04 LTS et je voudrais créer des fichiers AV1 de haute qualité en utilisant FFmpeg et librav1e. J'ai été stimulé par le ajout récent du support de rav1e à FFmpeg comme librav1e.

Le matériel avec lequel je suis intéressé à travailler est donné ici:

  1. Vidéo bande-annonce Sintel (720p non compressé 1,7 Go)
  2. Bande-annonce audio Sintel (flac 5 Mo)

C'est très les premiers jours (novembre 2019) pour le support de rav1e sous FFmpeg avec pas beaucoup de documentation et d'expérimentation publiée en place pour le moment. Ce serait formidable de voir tout cela fonctionner sous une version Ubuntu LTS!

5
andrew.46

Il semble que cet objectif puisse être atteint en 4 relativement facile étapes, permettant ainsi à Bionic Beaver 18.04 LTS de se familiariser avec l'encodage AV1 avec FFmpeg et rav1e!

1. Obtenez une copie récente de Rust ...

Bionic Beaver a une copie de Rust c'est-à-dire trop vieux alors prenez une copie plus récente comme suit:

Sudo apt-get install curl
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

Suivez les valeurs par défaut (appuyez simplement sur "Entrée"), puis exécutez:

source ~/.profile

pour permettre un accès instantané aux plus récents Rust et amis.

2. Installez rav1e

Il est préférable d'installer à la fois l'exécutable (la commande rav1e --fullhelp Affichera alors les options pouvant être utilisées à partir de FFmpeg avec l'option -rav1e-params) Ainsi que les bibliothèques que FFmpeg utilisera pour réussir à compiler et produire librav1e.

Tout d'abord l'exécutable, à l'aide d'un simple bloc de code copier-coller:

Sudo apt-get install nasm && 
mkdir -pv $HOME/{bin,ffmpeg_sources,ffmpeg_build} && 
cd $HOME/ffmpeg_sources && 
wget https://github.com/xiph/rav1e/archive/v0.3.1.tar.gz && 
tar xvf v0.3.1.tar.gz && cd rav1e-0.3.1 && 
cargo build --release && 
find target -name rav1e -exec install -m 755 {} $HOME/bin \; && 
strip ~/bin/rav1e

Installez ensuite l'applet cargo-c Ainsi que les bibliothèques et le fichier pkg-config nécessaires à FFmpeg. Exécutez d'abord une commande unique pour installer cargo-c:

cargo install cargo-c

puis compilez à nouveau rav1e en utilisant le cargo-c installé:

cd $HOME/ffmpeg_sources/rav1e-0.3.1 && 
cargo cinstall --release \
     --prefix=$HOME/ffmpeg_build \
     --libdir=$HOME/ffmpeg_build/lib \
     --includedir=$HOME/ffmpeg_build/include

Mieux vaut alors supprimer le rav1e bibliothèques partagées, laissant les bibliothèques statiques pour que FFmpeg récupère:

rm -v $HOME/ffmpeg_build/lib/librav1e.so*

3. Installer FFmpeg

Allez maintenant sur le site trac FFmpeg et installez FFmpeg comme indiqué, en vous rappelant d'ajouter:

--enable-librav1e

à la chaîne ./configure. Ensuite, le travail acharné est terminé :)

4. Exécutez l'encodeur

Un encodage très raisonnable peut ensuite être exécuté sur les fichiers de test mentionnés dans la question d'origine:

ffmpeg -i sintel_trailer_2k_720p24.y4m -i sintel_trailer-audio.flac \
       -c:v librav1e -qp 80 -speed 4 \
       -tile-columns 2 -tile-rows 2 \
       -c:a libfdk_aac -b:a 128k \
       sintel_trailer_av1.mp4

Les choses à manipuler ici seraient:

  • -qp 80: Utilise le mode "quantificateur" pour encoder avec une plage de 0 à 255. Les valeurs plus petites sont de meilleure qualité, la valeur par défaut est 100. 80 semble être le point idéal pour ce clip multimédia.
  • -speed 4: Sélectionne le préréglage de vitesse (0-10) avec lequel encoder, 0 est la meilleure qualité tandis que 10 est la plus rapide. Ce paramètre particulier est un joli compromis entre vitesse et qualité sur mon système (Threadripper de 2ème génération).
  • -tile-columns 2 -tile-rows 2 Des améliorations de vitesse assez décentes peuvent être apportées en manipulant le rav1e codage basé sur les tuiles . L'exemple donné ici divise l'encodage et le décodage en 4 segments et semble un choix décent pour la vidéo d'entrée suggérée, n'hésitez pas à expérimenter cependant ..

Cela code à plusieurs reprises la vitesse observée avec FFmpeg et libaom-av1 et produit sans doute une bien meilleure qualité. Sans aucun doute, cette chaîne d'encodage peut être affinée et je le ferai en tant que codage rav1e, FFmpeg et AV1 mature ...

5. Capture d'écran gratuite

OK donc il y a une 5ème étape facultative; prendre une capture d'écran du fichier de sortie terminé en cours d'exécution :)

enter image description here

Notes supplémentaires ...

  • Temps d'encodage: L'encodage en av1 est notoirement lent, pas inattendu dans ces premiers jours. En ajoutant la commande time devant la ligne de commande suggérée, certaines statistiques intéressantes peuvent être générées:

    FFmpeg + rav1e 0.3.1    FFmpeg + rav1e 0.2.1  FFmpeg + rav1e 0.2.0
    real    10m50.144s      real    15m22.059s    real   14m22.045s
    user    42m20.816s      user    50m40.257s    user   48m32.285s
    sys     2m5.363s        sys     0m52.360s     sys    0m49.788s
    

    Il s'agit d'un ordinateur Threadripper de 2e génération spécialement conçu pour l'encodage vidéo, vos propres chiffres différeront sans aucun doute ...

  • Documentation FFmpeg: Les documents sur l'implémentation FFmpeg de l'encodage avec rav1e, cela peut également être vu en recherchant les pages de manuel FFmpeg , man ffmpeg-all ou man ffmpeg-codecs. N'oubliez pas que les options natives de rav1e peuvent être vues avec rav1e --help Et ajoutées à n'importe quelle ligne de commande FFmpeg en utilisant l'option -rav1e-params ...

  • Le court-métrage de FFmpeg et Blender 'Sintel' ...: Ma propre page qui utilise la bande-annonce Sintel pour non seulement l'encodage AV1 mais aussi pour l'encodage avec VP9, ​​Theora et l'encodage GPU H.264. Intéressant si vous souhaitez étendre vos connaissances d'encodage ou peut-être simplement jouer un peu plus avec Sintel ...

9
andrew.46