7.11. Créer un rip MPEG-4 ("DivX") de haute qualité à partir d'un DVD

Une question fréquemment posée est "Comment faire le meilleur rip DVD possible ? Peut importe la taille du fichier, je veux simplement la meilleure qualité."

Cette question est peut être un peu mal posée. Après tout, si vous ne vous souciez pas de la taille du fichier, pourquoi ne pas simplement copier le flux MPEG-2 du DVD entier ? Bien sûr, votre AVI finira par faire 5Go, mais si vous voulez la meilleure qualité et ne vous souciez pas de la taille, ceci est probablement votre meilleure option.

En fait, la raison pour laquelle vous voulez convertir un DVD en MPEG-4 est que vous tenez réellement compte de la taille du fichier.

Il est difficile de proposer une recette sur la façon de créer des rips DVD de très haute qualité. Il y a de nombreux facteurs à prendre en compte, et vous devriez comprendre ces détails, ou vous serez déçus par les résultats. Ci-dessous nous allons examiner quelques-uns de ces problèmes, et voir un exemple. Nous supposerons que vous utilisez libavcodec pour encoder la vidéo, bien que cette exemple théorique s'applique également à d'autres codecs.

L'hypothèse principale de ce guide est que vous n'avez pas de contraintes de taille particulière et que perdre des octets en échange d'une meilleure qualitée ne vous dérange pas. Bien que la plupart des informations présentées ici soient utiles dans la plupart des cas, une partie peut vous poser problème si vous prévoyez une certaine taille, pour faire tenir une vidéo sur un CD par exemple.

7.11.1. Quantiseur constant contre deux passes

Il y a trois approches possibles pour encoder une vidéo: débit constant (CBR), quantiseur constant, et deux-passes (ABR, ou débit moyen).

Dans chacun de ces modes, libavcodec sépare les trames vidéos en macroblocs de 16x16 pixels et applique ensuite un quantiseur sur chaque macrobloc. Plus le quantiseur est bas, plus la qualité est bonne et le débit est gros. La méthode utilisée par libavcodec pour déterminer quel quantiseur utiliser varie et est très réglable (ceci est une simplification à l'extrème du processus, mais il est utile de comprendre le principe de base).

Lorsque vous spécifiez un débit constant, libavcodec encodera la vidéo en éliminant juste assez de détails pour rester en dessous du débit demandé. Si vous ne vous souciez pas de la taille de fichier, vous pouvez utiliser le CBR et spécifier un débit infini (en pratique, cela signifie une valeur suffisamment grande pour ne pas avoir de limite, comme 10000Kbit). Sans réelle restriction de débit, en définitive libavcodec utilisera le plus bas quantiseur possible pour chaque macrobloc (tel que spécifié par vqmin, qui vaut 2 par défaut). Si vous spécifiez un débit si bas que libavcodec soit forcé d'utiliser un quantiseur plus haut, alors vous êtes certainement en train de massacrer la qualité de votre vidéo. En général, vous devriez éviter le CBR si vous vous souciez de la qualité.

Avec un quantiseur constant libavcodec utilise le même quantiseur, spécifié par l'option vqscale, sur chaque macrobloc. Si vous voulez un rip de la meilleure qualité possible, là encore en ignorant le débit, vous pouvez utiliser vqscale=2. Cela donnera le même débit et le même PSNR (Peak Signal-to-Noise Ratio, rapport signal sur bruit de crête) que le CBR avec vbitrate=infini et la valeur de vqmin par défaut (2).

Le problème de la quantification constante est qu'elle utilise le quantiseur demandé même si le macrobloc n'en a pas besoin. En fait, il doit être possible d'utiliser un quantiseur plus haut sur un macrobloc sans sacrifier de la qualité visuelle. Pourquoi gaspiller des bits avec un quantiseur inutilement bas ?

Avec l'encodage deux-passes, la première passe va ripper le film comme en CBR, mais va garder un log des propriétés de chaque trame. Ces données sont ensuites utilisées pendant la seconde passe de façon à choisir intelligemment quels quantiseurs utiliser. Lors des scènes d'action rapide ou celles ayant peu de détails, des quantiseurs plus haut seront utilisés, et durant les scènes avec peu de mouvements ou avec beaucoup de détails, des quantiseurs plus bas seront utilisés.

Si vous utilisez vqscale=2, alors vous gaspillerez des bits. Si vous utilisez vqscale=3, vous n'aurez pas la meilleur qualité de rip. Supposez que vous rippez un DVD avec vqscale=3, et que le résultat soit 1800Kbit. Si vous faites un encodage deux passes avec vbitrate=1800, la vidéo produite aura une meilleur qualité pour le même débit.

Maintenant que vous êtes convaincu que l'encodage deux passes est la bonne méthode, la vraie question est maintenant de savoir quel débit utiliser. La réponse est qu'il n'y a pas de réponse unique. Idéalement, vous devriez choisir un débit offrant un compromis entre qualité et taille de fichier. Cela varie suivant la source vidéo.

Un bon point de départ pour un rip de très haute qualité est environ 2000Kbit, plus ou moins 200Kbit. Pour les vidéos comportant beaucoup d'actions ou de détails, ou si vous avez de très bon yeux, vous pouvez choisir 2400 ou 2600. Pour certains DVDs, vous pourriez voir une différence à 1400Kbit. C'est une bonne idée que d'essayer sur des scènes à différents débits pour s'en rendre compte.

7.11.2. Découpage et Redimensionnement

La résolution native des DVDs est de 720x480 pour NTSC, et 720x576 pour PAL, mais il y a un drapeau d'aspect qui spécifie si il s'agit de plein-écran (4:3) ou d'écran large (16:9). La plupart (si ce n'est tous) des DVDs écran large ne sont pas tout à fait 16:9, ils peuvent être soit en 1.85:1, soit en 2.35:1 (cinémascope). Cela signifie qu'il va y avoir des bandes noires qu'il va falloir découper.

MPlayer fournit un filtre de détection de bandes noires qui détermine la zone à découper (-vf cropdetect). Puisque MPEG-4 utilise des macroblocs de 16x16, vous devez vous assurer que la vidéo que vous encodez est un multiple de 16, sinon la qualité sera dégradée, surtout en bas débit. Vous pouvez faire ceci en arrondissant la longueur et la largeur du rectangle de découpage au multiple de 16 le plus proche. Pour le découpage, vous pouvez augmenter l'offset y de la moitié de la différence entre l'ancienne et la nouvelle hauteur de façon à ce que la vidéo obtenue soit prise à partir du centre de la trame. Et à cause de la façon dont est faite la vidéo des DVDs, assurez-vous que l'offset soit un nombre pair (en fait, en règle générale, n'utilisez jamais de nombres impairs lorsque vous découpez et redimensionnez une vidéo). Si perdre quelques pixels vous incommode, vous pouvez préférer redimensionner la vidéo. Nous allons voir cela dans l'exemple plus bas.

De plus, faites attention aux pixels "à moitié noirs" sur les bords. Assurez-vous de les découper également, ou sinon vous gaspillerez des bits qui seraient mieux dépensés ailleurs.

Une fois tout ceci fait, vous obtiendrez probablement une vidéo dont les pixels n'ont pas vraiment un rapport de 1.85:1 ou 2.35:1, mais quelque chose d'approchant. Vous pouvez calculer le nouvel ratio d'aspect manuellement, mais MEncoder offre une option pour libavcodec appelée autoaspect qui le fera pour vous. Ne redimmensionnez pas la vidéo pour obtenir des pixels carrés, à moins que vous n'aimiez gaspiller votre espace disque. Le redimensionnement devrait être appliqué lors de la lecture, et le lecteur utilisera l'aspect stocké dans le fichier AVI pour déterminer la résolution appropriée.

7.11.3. Audio

L'audio est un problème bien plus simple à résoudre: laissez-le juste tel-quel. Même les flux AC3 5.1 sont au plus en 448Kbit/s, dont chaque bit est utile. Vous pouvez être tenté de convertir l'audio en Ogg Vorbis de haute qualité, mais ne pas avoir de décodeur AC3 aujourd'hui ne veut pas dire que vous n'en aurez pas demain. Préparez le futur de vos rips DVDs en gardant le flux AC3.

7.11.4. Interlacing and Telecine

La plupart des films sont tournés en 24 fps. Puisque NTSC est en 29.97 fps, certains traitements doivent être appliqués pour l'adapter au débit NTSC. Ce procédé est appelé 3:2 pulldown, plus communément appelé téléciné (car le pulldown est souvent appliqué durant la phase de conversion en téléciné), et de façon simpliste, il fonctionne en ralentissant le film à 23.976 fps, et en répétant chaque quatrième trame.

Aucun traitement spécifique, n'est cependant appliqué pour la vidéo des DVDs PAL, qui tournent à 25 fps (techniquement, PAL peut être téléciné, ce qui est appelé 2:2 pulldown, mais ceci n'est pas un problème en pratique). Le film 24 fps est simplement lu en 25 fps. Le résultat est que la vidéo tourne légèrement plus vite, mais à moins d'être un alien, vous ne verrez pas la différence. La plupart des DVDs ont de l'audio dont le ton a été corrigé, donc quand elle est joué à 25 fps cela sonne correctement, même si la piste audio (et donc le film entier) a une durée 4% plus courte que les DVDs NTSC.

Puisque la vidéo d'un DVD PAL n'a pas été altérée, vous n'avez pas à vous soucier du débit. La source est en 25 fps, et votre rip sera en 25 fps. Par contre, si vous rippez un film d'un DVD NTSC, vous pourriez avoir besoin d'appliquer du téléciné inverse.

Pour les films tournés en 24fps, la vidéo du DVD NTSC est soit en 29.97 fps téléciné, soit en 24 fps progressif et prévu pour être téléciné à la volée par le lecteur DVD. D'un autre coté, les séries TV sont généralement seulement entrelaçées, pas télécinées. Ce n'est pas une règle absolue: certaines séries TV sont entrelaçées (comme Buffy contre les vampires) alors que d'autres sont un mélange de progressif et d'entrelaçé (comme Dark Angel, ou 24 heures chrono).

Il est fortement recommandé de lire la section Comment gérer le téléciné et le désentrelacement avec les DVDs NTSC pour apprendre à gérer les différentes possibilités.

De toute façon, si vous rippez surtout des films, vous rencontrerez soit de la vidéo 24 fps progressive, soit télécinée, et dans ce cas vous pouvez utiliser le filtre pullup -vf pullup,softskip.

7.11.5. Filtrage

En général, vous devriez appliquer le moins de filtres possible de façon à rester proche de la source DVD originale. Le découpage des bandes noires est souvent nécessaire (comme décrit ci-dessus), mais pas le redimensionnement. Bien réduire la résolution soit parfois préférée à l'usage de quantiseurs plus élévés, nous voulons éviter ces deux choses: rappelez-vous qu'au début nous avions décidé de privilégier la qualité sur l'encombrement disque.

De plus, n'ajustez pas le gamma, le contraste, la luminosité, etc. Ce qui s'affiche correctement sur votre matériel ne sera pas forcément pareil sur d'autres. Ces ajustements ne devraient être appliqués que lors de la lecture.

Une chose que vous pouvez faire, cependant, est de passer la vidéo au travers d'un très léger filtre anti-bruit, tel que -vf hqdn3d=2:1:2. De nouveau, il s'agit d'utiliser ces bits de la meilleur façon: pourquoi les gaspiller à encoder du bruit alors que vous pouvez en rajouter durant la lecture ? Augmenter les paramètres de hqdn3d améliorera la compressibilité, mais si vous augmentez trop, vous risquez de dégrader l'image. Les valeurs suggérées ci-dessus (2:1:2) sont très conservatrices; vous êtes libre d'expérimenter des valeurs plus grandes et d'observer les résultats par vous-même.

7.11.6. Exemple

Donc, vous venez d'acheter votre tout nouvel exemplaire de Harry Potter et la Chambre des Secrets (édition panoramique, bien sûr), et vous voulez ripper ce DVD pour pouvoir l'ajouter à votre PC Home Cinema. C'est un DVD zone 1, donc en NTSC. L'exemple ci-dessous s'applique également au PAL, à part l'option -ofps 23.976 qui devient inutile (car le débit sortant est le même que le débit entrant), et bien sûr les dimensions de découpe seront différentes.

Après avoir lançé mplayer dvd://1, nous suivons la méthode décrite dans la section Comment gérer le téléciné et le désentrelacement avec les DVDs NTSC et découvrons que la vidéo est en 24 fps progressif, ce qui signifie que nous n'aurons pas besoin d'utiliser un filtre de téléciné inverse, tel que pullup ou filmdint.

Ensuite, il faut déterminer le rectangle de découpage approprié, nous utilisons donc le filtre cropdetect:

mplayer dvd://1 -vf cropdetect

Assurez-vous de vous placer dans une trame parfaitement remplie (tel qu'une scène claire), et vous verrez sur la console de sortie de MPlayer:

crop area: X: 0..719  Y: 57..419  (-vf crop=720:362:0:58)

Nous relisons ensuite le film avec ce filtre pour tester sa justesse:

mplayer dvd://1 -vf crop=720:362:0:58

Et nous voyons que c'est parfait. Ensuite, nous nous assurons que la largeur et la hauteur sont des multiples de 16. La largeur est correcte, par contre la hauteur ne l'est pas. Comme nous sommes bon en maths, nous savons que le multiple de 16 le plus proche de 362 est 352.

Nous pourrions simplement utiliser crop=720:352:0:58, mais il serait plus sympatique de retirer un peu du haut et du bas pour aligner au centre. Nous rabotons la hauteur de 10 pixels, mais nous ne voulons pas augmenter le y-offset de 5 pixels car c'est un nombre impair et cela pourrait affecter la qualité. À la place, nous allons augmenter le y-offset de 4 pixels:

mplayer dvd://1 -vf crop=720:352:0:62

Une autre raison de raser les pixels du haut et du bas est de nous assurer que nous avons éliminé les éventuels pixels à moitié noirs. Notez que si votre vidéo est télécinée, assurez-vous que le filtre pullup (ou tout autre filtre de téléciné inverse que vous décidez d'utiliser) apparaisse bien au début de la chaine de filtres, avant le découpage. Si la vidéo est entrelaçée, désentrelacez-la avant le découpage (si vous voulez garder la vidéo entrelaçée, alors assurez-vous que votre offset de découpage soit un multiple de 4).

Si perdre ces 10 pixels vous gène vraiment, vous pouvez diminuer les dimensions au plus proche multiple de 16. La chaine de filtre ressemblera alors à:

-vf crop=720:362:0:58,scale=720:352

La réduction de résolution implique qu'un certain nombre de détails sera perdu, bien que cela sera probablement imperceptible. Augmenter les dimensions donnera une moins bonne qualité (à moins que vous n'augmentiez le débit). Le découpage supprime ces pixels. C'est un compromis à faire à chaque fois. Par exemple, si le DVD a été fait pour la télévision, vous devriez éviter de redimensionner verticalement, puisque l'échantillonnage de lignes correspond à la façon dont a été enregistré le contenu.

Après inspection, nous voyons que le film comporte pas mal d'action et un haut niveau de détail, nous choisissons donc un débit de 2400Kbit.

Nous sommes maintenant prêts pour l'encodage 2 passes. Première passe:

mencoder dvd://1 -ofps 23.976 -oac copy -vf crop=720:352:0:62,hqdn3d=2:1:2 -ovc lavc \
-lavcopts vcodec=mpeg4:vbitrate=2400:v4mv:mbd=2:trell:cmp=3:subcmp=3:mbcmp=3:autoaspect:vpass=1 \
-o Harry_Potter_2.avi

La deuxième passe est identique, sauf que nous spécifions vpass=2:

mencoder dvd://1 -ofps 23.976 -oac copy -vf crop=720:352:0:62,hqdn3d=2:1:2 -ovc lavc \
-lavcopts vcodec=mpeg4:vbitrate=2400:v4mv:mbd=2:trell:cmp=3:subcmp=3:mbcmp=3:autoaspect:vpass=2 \
-o Harry_Potter_2.avi

Les options v4mv:mbd=2:trell vont énormément augmenter la qualité au détriment du temps d'encodage. Il y a peu de raisons d'enlever ces options quand notre but principal est la qualité. Les options cmp=3:subcmp=3:mbcmp=3 selectionnent une fonction de comparaison qui donne une meilleure qualité que les paramètres par défaut. Vous pouvez faire des expérimentations avec ce paramètre (référez-vous à la page de manuel pour les valeurs possibles) car les différentes fonctions peuvent avoir un impact important sur la qualité suivant la source. Par exemple, si vous trouvez que libavcodec produit trop d'artefacts de type "blocs", vous pouvez essayer de sélectionner le NSSE expérimental en tant que fonction de comparaison via *cmp=10.

Pour ce film, le fichier AVI final fera 138 minutes et environ 3Go. Comme la taille n'est pas importante, c'est tout à fait acceptable. En revanche, si vous voulez un fichier plus petit, vous pouvez essayer un débit plus faible. Augmenter le débit ne sert pas à grand chose, donc même si on peut obtenir une nette amélioration de 1800Kbit à 2000Kbit, l'amélioration ne sera peut être pas visible au dessus de 2000Kbit. Vous êtes libre d'expérimenter jusqu'à ce que vous soyez satisfait du résultat.

Puisque la vidéo d'origine est passée par un filtre anti-bruit, vous pouvez en rajouter pendant la lecture. Ceci, en conjonction avec le filtre de post-processing spp, augmente énormément la qualité perçue et permet l'élimination d'artefacts de la vidéo. Avec l'option autoq de MPlayer, vous pouvez faire varier la quantité de post-traitement faite par le filtre spp suivant la quantité de temps processeur disponible. De plus, à ce moment, vous pouvez ajouter une correction gamma et/ou de couleur pour l'adapter à votre affichage. Par exemple:

mplayer Harry_Potter_2.avi -vf spp,noise=9ah:5ah,eq2=1.2 -autoq 3