HTML5: petit test de compression vidéo

Pour le prochain standard vidéo NETVC, l’un des principaux candidats proposés à l’IETF est le format AV1, développé par le consortium AOMedia.

AV1 profite de nombreuses avancées du VP10 (Google), Daala (Xiph, Mozilla) et Thor (Cisco). Parmi ses contributeurs on peut citer quelques poids lourds du multimédia en ligne tels que Facebook, Microsoft, Netflix, Amazon Video, ainsi que des fabricants de puces tels qu’Intel, AMD, ARM, Broadcom, … Last but not least: l’association VideoLAN, développant notamment le lecteur multimédia VLC (et dont je recommande cet article par Jean-Baptiste Kempf, président de l’association)

AV1 fait son petit bonhomme de chemin, l’implémentation principale version 1.0 utilisant désormais le bitstream fixé, et le développement se focalise à présent sur l’optimisation de l’encodage/décodage logiciel, tandis que les premières puces de décodage matériel pourraient sortir en 2019.

Les premiers tests objectifs et subjectifs placent AV1 directement face (ou au dessus) à son concurrent à brevets HEVC, et distance les communs VP9 et H.264 AVC.

Côté navigateurs, AV1 peut être lu avec Chrome 70+ ou Firefox 64+, et VLC à partir de 3.0.5.

Bref, je voulais jeter un coup d’œil à ses performances.

Protocole technique

Pour ce test subjectif à la louche, j’ai utilisé:

La vidéo « Sundance in 4k (Ultra HD)« , récupérée depuis YouTube selon la meilleure qualité disponible (le code 313: vidéo seule au format VP9 résolution 3840×2160 pixels).

De cette source, j’en extrais un dixième de seconde à la position 20s avec ffmpeg, en utilisant en format de sortie la compression sans pertes ffv1:

ffmpeg -ss 00:00:20 -i Sundance\ in\ 4k\ \(Ultra\ HD\)-4pSzhZ76GdM.webm -t 0.1 -c:v ffv1 zsource.mkv

Cet extrait, ffmpeg en compose 3 frames. Je sélectionne la 2e frame. (ps: pour toutes les images ci-après j’utilise la compression sans pertes PNG)

Cette scène me semble pas mal pour mon comparatif, car elle associe une grande variété de nuances de couleurs, et la caméra effectue un mouvement vers la gauche. Je cible une zone en particulier avec Imagemagick:

convert zz0002.png -crop 700x500+1200+1200  z.png

Cette zone montre en premier plan des branches d’arbres que je prédis très difficiles à compresser, en second plan des cimes d’arbres aux couleurs variées, et un arrière plan plus flou en dégradés de couleurs.

J’effectue un premier test avec les différents codecs, le but étant de parvenir à un poids de fichier très proche. J’adapte alors le paramètre du bitrate jusqu’à obtenir des poids assez homogènes.

Si j’y suis parvenu avec tous les autres, x265 m’a posé soucis: quel que soit le bitrate exigé, le poids de fichier demeure 93.7 ko (contre ~45 ko pour mon étalon). J’inclurais son résultat tout à la fin à titre d’info, mais il n’est pas comparable aux autres.

Theora · libtheora

Premier sur le ring, le premier format sans brevets supporté par Firefox pour le HTML5, développé par Xiph.

ffmpeg -i zsource.mkv -b:v 100k -c:v libtheora z_theora.mkv

H.264 AVC · libx264

Face au toujours immensément populaire H.264, du MPEG-LA ?

ffmpeg -i zsource.mkv -b:v 750k -c:v libx264 z_x264.mkv

VP8 · libvpx

Le second format sans brevets VP8, développé par On2/Google

ffmpeg -i zsource.mkv -b:v 100k -c:v libvpx z_vp8.mkv

VP9 · libvpx-vp9

Son successeur VP9, développé par Google

ffmpeg -i zsource.mkv -b:v 1480k -c:v libvpx-vp9 z_vp9.mkv

AV1 · libaom-av1

Et AV1. J’insiste: l’encodeur est loin d’être optimisé, il a fallu près de 5 minutes de traitement là où les autres codecs ont bouclé en moins d’une seconde.

ffmpeg -i zsource.mkv -c:v libaom-av1 -b:v 1460k -strict experimental -threads 8 z_av1.mkv

Et donc HEVC qui a eu droit au double bitrate parce que réticent à mes paramètres…

ffmpeg -i zsource.mkv -b:v 60k -c:v libx265 z_x265.mkv

VP9 vs AV1

Faut vraiment y aller à la loupe, mais AV1 fait légèrement mieux que VP9 🙂

Espérons que les codecs AV1 seront sensiblement optimisés !

Fichiers encodés

Défilement vers le haut