VP9 est officiel depuis le 17 juin 2013. Au mois de mai, j'écrivais qu'il serait bien de voir ce qu'il vaut. Au mois de novembre me voilà parti dans l'aventure. Je dis bien aventure, car je pensais innocemment que cela serait simple (ça l'est une fois qu'on a bien tout compris et tout bien fait). En fait, lorsqu'on est un early débutant(comprend par là quelqu'un qui veut tester en premier les choses) on croit qu'il suffit de télécharger l'application, la compiler et tout fonctionne. En fait, il en est rien pour le VP9. Il vaut mieux lire la documentation et la comprendre. Cela fait des mois que j'attends que ce format arrive tout prêt dans mes encodeurs préférés. Peine perdue, il n'arrive pas vraiment. VLC vient tout juste d'implémenter le décodage VP9 !! Pour visionner les vidéos, vous serez presque condamné à utiliser chrome dans ses dernières versions ou VLC en version 2.1.
Tout d'abord, une petite parenthèse. Pourquoi la guerre des codecs est relancée ? Tout d'abord, le défi se situe au niveau des téléviseurs 4K. Après nous avoir fait la TV HD (1280x720), la FULL HD(1920x1080) maintenant arrive la 4K (3840 × 2160, ou 4096 × 2160). Il va bien falloir faire passer 2 fois plus d'informations dans un tuyau qui n'a pas aussi vite grandi que la résolution à afficher (je ne parle même pas de la TNT). Bref, la solution est de compresser encore plus le signal vidéo. La première manche a largement été remportée par le H.264, le consortium est toujours là avec le H.265 (payant) . De l'autre côté on a Google et son codecs plus ou moins libre le VP9.
Je ne m’attendais pas à devoir compiler ffmpeg
Pour ceux qui crois que l'encodeur fourni avec le VP9 (vpxenc) accepte tous les formats de fichiers vidéos en entrée c'est une erreur. Il ne prend que peu de formats en entrée, à savoir le RAW ou le YV. Format que bien entendu, le commun des mortels n'a pas vraiment à sa disposition.
J’ai bien essayé la ligne de commandes suivante :
vpxenc --codec=vp9 --width=1280 --verbose --target-bitrate=4000 --height=720 -o test2ouput.webm big_buck_bunny_720p_surround.avi
Mise à part obtenir de la neige, je n’ai rien obtenu. J’en ai donc conclu que je ne pourrais m’en sortir qu’en compilant un logiciel qui permet le transcodage. J’ai donc choisi FFMPEG, dont la réputation n’est plus à faire. La dernière version de FFMPEG prend en compte et en mode expérimental de VP9.
La marche à suivre du early bourrin pour tester le VP9
1) Télécharger VP9 ici http://www.webmproject.org/vp9/ (je ne suis pas sur que cette étape soit indispensable car il me semble que FFMPEG intègre ces propres codecs)
git clone http://git.chromium.org/webm/libvpx.git cd libvpx git co master ## likely unnecessary ./configure make sudo make Install
2) Télécharger la dernière version de FFMPEG
git clone git://source.ffmpeg.org/ffmpeg.git ffmpeg ./configure --enable-libvpx --enable-libvorbis --enable-gpl make sudo make install
3) Tester
Lorsqu’un codec est expérimental, il faut ajouter l’option -strict -2 à la ligne de commande de FFMPEG. Cette options évitera une erreur qui vous dira ... d’ajouter l’option.
La procédure de test
Pour réaliser ce test je suis partis de la vidéo Big-Buck-Bunny au format 720p - a52 - MP4 (324Mo).
J’encode en plusieurs débits. Ensuite je visionne les vidéos pour contrôler la fluidité, je réalise des captures d’images que je superpose via GIMP (voir le fichier) pour voir le résultat.
Certes la méthode est artisanale, mais elle a le mérite de ne pas balancer des chiffres que le commun des mortels dont je fais parti ne comprenne pas.
Les lignes de commandes
Voici une ligne de commande qui fonctionne pas trop mal pour l’encodage à destination des smartphones
ffmpeg -i big_buck_bunny_720p_surround.avi -codec:v libvpx-vp9 -quality good -cpu-used 0 -b:v 500k -qmin 10 -qmax 42 -maxrate 500k -bufsize 1000k -threads 4 -vf scale=-1:480 -codec:a libvorbis -b:a 128k -strict -2 output.webm
Ligne de commande qui fonctionne pas trop mal pour un test en HD (encodage des 20 premières secondes)
ffmpeg -i big_buck_bunny_720p_surround.avi -t 20 -codec:v libvpx-vp9 -quality good -cpu-used 0 -b:v 2000k -qmin 10 -qmax 42 -maxrate 2500k -bufsize 1000k -threads 4 -vf scale=-1:720 -codec:a libvorbis -b:a 128k -strict -2 output-HD.webm
Vous vous demandez peut-être pourquoi j’ai limité l’encodage à 20 secondes ? La première remarque est que c’est horriblement lent, pour ne pas dire méga hyper lent … Pour encoder 20 secondes, il a fallu en 44 et 53 minutes !! En VP8, il a fallu 64 secondes pour ces mêmes 20 secondes.
Ligne de commande qui fonctionne pas trop mal pour un test en HD et VP8
ffmpeg -i big_buck_bunny_720p_surround.avi -t 20 -codec:v libvpx -quality good -cpu-used 0 -b:v 2000k -qmin 10 -qmax 42 -maxrate 2500k -bufsize 1000k -threads 4 -vf scale=-1:720 -codec:a libvorbis -b:a 128k -strict -2 output-vp8.webm
Tableau de synthèse
Conclusion
L’encodage jusqu’en 500k est de très bonne facture. Pour vous donner une idée en h.264 on compresse en général autour de 10 à 15 Mo / minute de film, ici est on est de l’ordre de 8,5 Mo par minute de film pour une qualité plus acceptable. Mais il y a un prix qui lui est inacceptable. Sur ma machine hypersonique en général pour encoder un film en h.264 d’une minute il m’en faut 3. Ici pour encoder 20 secondes il a fallu 45 minutes en moyenne … Donc oui la qualité est le poids sont acceptables, non le temps d’encodage ne l’est pas. Ce temps n’est pas acceptable d’autant que la qualité entre un encodage VP8 et VP9 en 2000kbits sont très très proches pour ne pas dire identique. Évidemment je n’ai pas encore testé du h.265, je n’ai donc pas de base de comparaison à codecs équivalent. Mais en l’état, si guerre des codecs il y a le VP9 ne peut pas s’imposer, même sur les machines de Youtube. Bref il reste du progrès à faire, où alors je suis complètement passé à côté de la ligne de commande qui va bien.
Les Images
Les vidéos résultats
SI vous ne voyez pas les vidéos ci-dessous c’est peut être que votre navigateur n’est pas compatible VP9
Vidéo VP9 2000K 1280x720
Vidéo VP9 500K 1280x720
Vidéo VP9 100K 1280x720
Vidéo VP9 50K 1280x720
Comments powered by CComment