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:
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!
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 :)
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 ...