Accès rapide


Derniers ajouts (19/01):
Chibi Devi! 10

Suggestions

Vote pour printemps 2012:
Sora no otoshimono
Asobi ni iku yo
Tantei opera Milky Holmes

Flash ≠ Web

Flash ce n'est pas du web

Comparatif des codecs vidéo (2)

Aujourd’hui, je vous propose un comparatif entre ces différents codecs.

Encodeurs testés:

  • ffmpeg2theora: 0.26
  • VP7: VfW 7.0.10.0
  • x264: revision 1538
  • DivX: VfW 6.9.2_00026
  • Xvid: VfW 1.2.2

Vidéos:

  • Dartmoor (par James Watson) – film à couleurs réelles
    • h.264 1600 kb/s, 12 Mo, 1280×544, 25 FPS, 0,09 Qf
  • Fragrance – AMV très rapide et coloré
    • h.264 2530 kb/s, 83 Mo, 848×480, 30 FPS, 0,207 Qf
  • Shingetsutan Tsukihime: Prologue – anime représentatif à sous-titres
    • Xvid 800 kb/s, 20 Mo, 704×396, 25 FPS, 0,114 Qf

Objectif poids:

  • Dartmoor: 2 Mo (~250 kb/s)
  • Fragrance: 22 Mo (~655 kb/s)
  • Prologue: 4 Mo (~150 kb/s)

Spécifications techniques machine:

  • Chipset Intel P35 (ASUS P5KC)
  • Intel Core2Quad Q6600 (OC @ 3 GHz)
  • 4 Go Corsair Dominator CM2X1024-8500C5D
  • Disque dur Western Digital WDC WD5000AAKS-07YGA0 (465 Go)
  • Windows 7 Ultimate x64

Paramètres d’encodage:

  • Dartmoor
    • x264:  –crf 37 –me tesa
    • Xvid: -disqualifié: 3,53 Mo minimum-
    • DivX: -disqualifié: 3,5 Mo minimum-
    • ffmpeg2theora: -v 1 –optimize
    • VP7: 35 kb/s, speed 5, sharpness 0, VBR progressive
  • Fragrance
    • x264: –crf 35 –me tesa
    • Xvid: -disqualifié: 30 Mo minimum-
    • DivX: -disqualifié: 33 Mo minimum-
    • ffmpeg2theora: -v 0 –optimize
    • VP7: -pénalisé: 25,7 Mo minimum
  • Prologue
    • x264: –crf 29 –me tesa
    • Xvid: quantizer 18, quarter pixel
    • DivX: quantizer 18, quarter pixel, « qualité folle » , amélioration sur forme, optimisation I-blocks
    • ffmpeg2theora: -v 3 –optimize
    • VP7: 150 kb/s, speed 5, sharpness 0, VBR progressive

Temps d’encodage:

  • Dartmoor
    • x264: 41 x4 = 164 secondes
    • Xvid: 40 x 2 = 80 secondes -disqualifié: 3,53 Mo minimum-
    • DivX: 84 x 4 = 336 secondes -disqualifié: 3,5 Mo minimum-
    • ffmpeg2theora: 123 secondes
    • VP7: 155 secondes
  • Fragrance
    • x264: 198 x 4 = 792 secondes
    • Xvid: 160 x 2 = 320 secondes -disqualifié: 30 Mo minimum-
    • DivX: 375 x 4 = 1500 secondes -disqualifié: 33 Mo minimum-
    • ffmpeg2theora: 356 secondes
    • VP7: 270 secondes -pénalisé: 25,7 Mo minimum
  • Prologue
    • x264: 35 x 4 = 140 secondes
    • Xvid: 87 x 2 = 174 secondes
    • DivX: 99 x 4 = 396 secondes
    • ffmpeg2theora: 125 secondes
    • VP7: 81 secondes

Résultats provisoires:

  1. x264
  2. VP7
  3. ffmpeg2theora
  4. Xvid
  5. DivX

Extraits

Dartmoor

Frame 50

Frame 485

Frame 650

Frame 892

Frame 1300

Fragrance

Frame 168 (171 VP7)

Frame 741 (744 VP7)

Frame 3157 (3160 VP7)

Frame 5574 (5577 VP7)

Frame 6936 (6939 VP7)

Prologue

Frame 500 (489 Theora)

Frame 805

Frame 2100

Frame 3650

Frame 4916

Tableau récapitulatif

Facilité d’usage
ffmpeg2theora
x264
DivX
Xvid
VP7
Qualité vidéo
x264
VP7
ffmpeg2theora
Xvid
DivX
Vitesse d’encodage
VP7
Xvid
ffmpeg2theora
x264
DivX
Pénalités objectif de poids non atteignable
VP7
Xvid
DivX
Résultat final (facilité*1 + qualité*5 + vitesse*3 – pénalités)
x264
VP7
ffmpeg2theora
Xvid
DivX

Détails de la procédure

Il aura bien fallu une après-midi et soirée entière pour pondre cela, alors je vais me prendre quelques minutes de plus pour bien expliquer comment j’en suis arrivé là :)

Après un premier comparatif pas très poussé entre différents formats de vidéo pour le streaming, il y a eu plusieurs critiques, notamment à propos de l’encodeur (j’avais utilisé SUPER, qui se base sur ffmpeg et mencoder) et du mode décisionnel du débit (constant).

Donc pour faire ça bien cette fois, j’ai récupéré les plus récents binaires stables des encodeurs x264 et ffmpeg2theora. Les encodeurs VfW (Video for Windows) pour Xvid et DivX étaient aussi les plus récents, le VP7 a un successeur (le VP8) mais je ne dispose pas de ce dernier. Pour les VfW, j’ai utilisé le logiciel VirtualDubMOD, pour les autres la bonne vieille ligne de commande.

Le premier désastre c’était les vidéos source: x264 refusait d’encoder des vidéos à 29,97 et 24,97 FPS. J’ai donc converti respectivement en 30 et 25 FPS. Le second imprévu concernait ffmpeg2dirac, que je voulais tester par la même occasion. Il s’avère qu’il mettait plus d’une heure pour encoder 1 minute de vidéo, et que le résultat n’est pas même lisible par VLC….

Les vidéos source sont « Dartmoor » , « Fragrance » et « Prologue » . Dartmoor est un court métrage réalisé par James Watson (que je remercie pour son superbe travail). Vous aurez peut-être déjà vu cette vidéo si vous connaissez la page SublimeVideo. J’ai choisi cette vidéo car elle est belle (c’est plus marquant si un encodeur la gâche) et qu’elle a une gamme de couleurs réelle (24 bits), filmée par une caméra HD. Certains plans sont truffés de détails, voir frame 650. Ce test est le plus parlant pour les cinéphiles qui veulent conserver des vidéos.

Fragrance, j’avais déjà annoncé que je voulais tester les encodeurs sur celle-là. Elle est atrocement rapide, couleurs saturées et mouvements imprévisibles. Là les détails comptent moins, ce qui compte c’est la prédiction de mouvement et l’optimisation par forme.

Prologue, enfin, c’est le prologue de l’anime Shingetsutan Tsukihime. L’intérêt de cette vidéo c’est de pouvoir tester « en situation réelle » un encodeur qui voudrait s’imposer pour les streams de Fansub Streaming. Lisibilité des sous-titres c’est le point crucial, comptent aussi les détails et la prédiction de mouvement. Et il ne doit surtout pas y avoir de macroblocks, qui donne l’air d’un Youtube première version !

Conformément aux conseils de Benpro, ça s’est passé en quantizer chaque fois que c’était possible. En gros: les encodeurs peuvent « décider » de la force de l’encodage selon la nécessité. Donc dans un premier temps, j’ai dû bidouiller les encodeurs plusieurs fois jusqu’à trouver le ratio qui donne un fichier proche du poids recherché. Si VP7 utilise exclusivement un bitrate constant (en plus très peu fiable), Xvid et DivX ont énormément souffert: ni en VBR, ni en CBR, ni en Ratio ils n’arrivaient au poids recherché. J’ai donc dû pénaliser les encodeurs avec lesquels il n’était pas possible de réduire le poids au delà d’une certaine limite pour atteindre l’objectif.

Cas du multithreading: même si x264 et DivX exploitent si bien les 4 cœurs de mon processeur, fallait qu’ils jouent à jeu égal avec les encodeurs monothreadés. Du coup x264 est bien moins brillant, tandis que VP7 et Xvid sont impressionnants. DivX, lui, met du temps pour faire du mauvais. Erf… En gardant le multithreading, le x264 se classe parmi les premiers, et c’est oublier que grâce au GPGPU, il est possible de faire encoder à une vitesse hallucinante avec la carte graphique (Nvidia CUDA principalement, l’encodeur pour ATi Stream est très instable et donne de piètres résultats).

Système 64 bits: et oui, j’ai un système capable de traiter des opérations sur 64 bits :) Seul x264 est explicitement optimisé 64 bits. Concrètement, la différence entre x264 32 bits et x264 64 bits, c’est une différence de 2 secondes pour Dartmoor, en faveur du 64 bits.

Interprétation des résultats

En tout et pour tout, le gagnant est x264, talonné par VP7. ffmpeg2theora se trouve distancé, tandis qu’Xvid démontre sa vétusté et DivX… son incapacité à faire du low bitrate ? C’est tout de même étonnant, la société DivX ayant mis à jour son produit phare il y a quelques jours encore et qu’elle permet le streaming avec le DivX Web Player. Dans le concret, un stream DivX nécessite au moins le double des taux pratiqués pour ce test. Maintenant le problème c’est qu’à moyen et haut bitrate, les codecs sont difficilement différentiables…

Sur un point le DivX fait bien plus fort que tous les autres: il est maintenant pleinement multithreadé et heureusement car sa vitesse d’encodage est extrêmement lente, comparée aux autres !

ffmpeg2theora, ne profitant plus de son avantage au bitrate variable, fait grise mine. En particulier pour Dartmoor, il ne tient pas la route face au bulldozer x264. Ce même x264 qui parvient à une frame 650 tellement détaillée que j’ai crû halluciner, quasi impression d’inaltéré: la vidéo fait 2 Mo quand même, une frame peut à peine prendre 2 ko ! ffmpeg2theora tranche mieux pour Fragrance et Prologue, sans pour autant dépasser VP7.

Justement, parlons-en, de VP7. Avant le test, je pensais que le VP7 allait se comparer au Xvid, et voilà qu’il vient chatouiller le x264 ! J’ai essayé le VP6, pour vérifier. Le VP6 ressemble beaucoup au format Theora 1.0, tandis que VP7 surpasse le format Theora 1.1. Si j’ai voulu tester le VP7, c’est pour avoir une idée à quel point le VP8 peut être meilleur, savoir si c’est pour des raisons commerciales si On2 a annoncé que VP8 est meilleur que x264 ou si c’est vrai. A présent, je suis quasi-certain de la seconde option: VP8 a toutes les chances de laisser le x264 derrière lui. VP7 est et demeure un format propriétaire, il n’aurait pas attiré mon attention si VP8 ne pourrait pas être rendu open-source par Google (j’y reviendrai dans un article très prochainement).

x264, le présente t-on encore ? Il a une foultitude d’options plus ou moins utiles, je me suis limité aux 2 options ayant le plus d’impact sur l’encodage: le ratio et le mode d’estimation de mouvement. Multithreadé par défaut, je ne lui reproche que cette sensibilité à propos du framerate, et accessoirement son manque d’initiative à propos du container de sortie (il pourrait sortir en .mp4 par défaut, comme fait ffmpeg2theora avec .ogv). x264, je pense ne pas me tromper en disant que c’est le meilleur encodeur h.264 sur le marché.

Les vidéos

Envie de voir les résultats, tester par vous-même avec les vidéos source ?

Télécharger via Miroriii

2 commentaires sur Comparatif des codecs vidéo (2)

  • Salut,
    encore une fois, c’est un bon test que tu nous a pondu ^^ .
    Je suis étonné des résultat de VP7, surtout que tu annonce qu’il utilise un débit constat, c’est assez étonnant ! Je me demande ce que vas donner VP8, sachant qu’en plus google va libérer le code. (Du coup toute la communauté va s’y mettre).

    Cependant comme toujours, je rajoute mon petit grain de sel :p (Pas taper :paf: )
    Pour x264, tu n’as joué sur pratiquement aucun paramètre, comme tu l’indique d’ailleurs, grâce à sa multitude d’options.

    Par défaut x264 encode en preset « medium ». (Ils ont classé les preset par vitesse d’encodage). Passe celui-ci en « veryslow » et tu gagnera encore énormément en bitrate, ce qui te permettra de baisser ton crf (au moins de 10 – car 35 c’est énorme :s) et d’augmenter ta qualité ! Au détriment de la vitesse d’encodage…

    Second point, tu n’as pas spécifié la nature de la source, x264 intègre pour cela, une option « tune », qui permet d’optimiser l’encodage pour une source particulière, à savoir les films et les dessins animés par exemple.

    Ensuite pour ton problème de fps pour la source de la vidéo, 29.970 est tout à fait standard, il s’agit généralement d’une source NTSC entrelacé ou télécined.
    Peut-être qu’il te faut forcer x264 à sortir du constant ? C’est l’option –force-cfr – Car maintenant il fait du VFR par défaut (Ce qui te permet aussi encore de gagner en taille.)

    Voilà, donc si tu veut t’amuser tu peut réaliser qqch du genre:
    x264 –preset veryslow –tune animation –force-cfr –crf xx –output sortie.mp4|mkv|264 entree.xxx (Pour un dessin animé)
    x264 –preset veryslow –tune film –force-cfr –crf xx –output sortie.mp4|mkv|264 entree.xxx (Pour un film)
    x264 –fullhelp pour tout les renseignements ;)

    Cela pourrait grandement améliorer la qualité tout en offrant un débit encore plus faible au détriment de la vitesse d’encodage. (Tu peut garder un motion estimation en umh (valeur par défaut), tesa n’apporte de très bon résultats que sur des haut bitrate, et fait perdre énormément de vitesse d’enco.)

    Sur ce, à bientôt.

  • Les preset slow et veryslow + le tune améliore en effet un peu la qualité d’image (avec quelques macroblocs visibles pour la frame 1300 de Dartmoor), mais le temps d’encodage a presque doublé :hihi:

    Concernant le VP7, il y a une option pour fichiers locaux qui semble interpréter le bitrate comme ABR (le cas ici). Mais oui, ça laisse présager des choses intéressantes avec VP8 :p
    Par contre niveau accessibilité, VP7 est atroce: j’ai dû tester et retester notamment avec le sharpness, c’est en 0 que c’est le mieux en général.

    Comme précisé dans le futur article, « la balle est dans le camp de Google ».

Laisser un commentaire


Vous pouvez utiliser ces tags HTML (exemple: <b>votre texte en gras</b>)

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

:) :( ;) :x :roll: :rouge: :pff: :p :mrgreen: :jap: :-?