7.4. Encodage avec le codec `Xvid`
Précédent | Chapitre 7. L'encodage avec MEncoder | Suivant

## 7.4. Encodage avec le codec `Xvid`

`Xvid` est une bibliothèque libre pour encoder les flux vidéo MPEG-4 ASP. Avant de commencer à encoder, vous avez besoin de paramétrer MEncoder pour qu'il la supporte..

Ce guide a pour principal objectif de fournir le même genre d'information que le guide d'encodage avec x264. Par conséquent, commencez par lire la première partie de ce guide.

### 7.4.1. Quelles options devrais-je utiliser pour avoir les meilleurs résultats ?

Commencez par passer en revue la section `Xvid` de la page man de MPlayer. Cette section est prévue pour être un supplément de la page man.

Les paramètrages par défaut de Xvid donnent déjà un bon compromis entre vitesse et qualité, vous pouvez donc sans risque vous en contenter si la section suivante vous laisse perplexe.

### 7.4.2. Options d'encodage de `Xvid`

- vhq Ce paramètre affecte l'algorithme de choix de macrobloc, plus la valeur du paramètre est élevée, meilleure sera la décision. Le paramètrage par défaut peut être utilisé de façon sûre pour tous les encodages, alors que des valeurs plus élevées améliorent toujours le PSNR mais rendent l'encodage significativement plus lent. Veuillez noter qu'un meilleur PSNR ne veut pas forcément dire que l'image sera meilleure, mais vous informe qu'elle est plus proche de l'originale. Désactiver l'option accélére de façon notable l'encodage; si la vitesse est un point critique pour vous, cela peut valoir le coup.

- bvhq Cela a le même effet que vhq, mais agit sur les images B. L'impact sur la vitesse est négligeable et la qualité est légèrement améliorée (environ +0.1dB PSNR).

- max_bframes Permettre un plus grand nombre d'images B consécutives améliore habituellement la compressibilité bien que cela puisse également entraîner plus d'artefacts de blocs. Le paramétrage par défaut est un bon compromis entre compressibilité et qualité, mais vous pouvez l'augmenter jusqu'à 3 si vous êtes obnubilé par le débit. Vous pouvez aussi le réduire à 1 ou 0 si vous aspirez à la perfection, même si dans ce cas vous deviez vous assurer que le débit cible est suffisament élevé pour que l'encodeur n'ait pas à augmenter les quantificateurs pour l'atteindre.

- bf_threshold Ceci contrôle la sensibilité de l'encodeur pour les images B, où une plus haute valeur amène à ce que plus d'images B soient utilisées (et vice versa). Ce paramètre est fait pour être utilisé avec `max_bframes`; si vous êtes obnubilé par le débit, vous devez augmenter à la fois `max_bframes` et `bf_threshold`, tandis que vous pouvez augmenter `max_bframes` et baisser `bf_threshold` de façon à ce que l'encodeur puisse utiliser plus d'images B uniquement aux endroits qui en ont vraiment besoin. Un faible nombre de `max_bframes` et une valeur élevée de `bf_threshold` n'est probablement pas un choix avisé vu qu'il obligera l'encodeur à mettre des images B en des endroits qui n'en tireront pas de bénéfice et donc réduiront la qualité visuelle. Cependant, si vous avez besoin d'être compatible avec des lecteurs qui supportent seulement de vieilles versions DivX (qui ne supportent pas plusieurs images B consécutives), ce serait votre seul possibilité pour augmenter la compressibilité en utilisant les images B.

- trellis Optimise la procédure de quantification pour obtenir un compromis optimal entre le PSNR et le débit, ce qui permet une économie significative de bits. Ces bits seront en retour utilisés autre part dans la vidéo, augmentant la qualité visuelle globale. Vous devriez toujours l'utiliser étant donné son énorme impact sur la qualité. Même si vous recherchez de la vitesse, ne le désactivez pas avant d'avoir réduit `vhq` et toutes les autres options plus gourmandes en ressource à leur minimum.

- hq_ac Active une meilleure méthode d'estimation des coefficients AC, ce qui réduit légèrement la taille de fichier d'environ 0.15 à 0.19% (ce qui correspond à moins de 0.01dB PSNR d'augmentation), tandis qu'elle a un impact négligeable sur la vitesse. Il est donc recommandé de toujours la laisser activée.

- cartoon Faite pour un meilleur encodage des dessins animés, n'a pas d'impact sur la vitesse étant donné qu'elle règle juste les heuristiques de décision pour ce type de contenu.

- me_quality Ce paramètre contrôle la précision de l'estimation de mouvement. Plus `me_quality` est élevé, plus l'estimation du mouvement d'origine est précise et donc mieux l'encodage final rendra le mouvement d'origine.

  Le paramètrage par défaut est le meilleur dans tous les cas; ainsi il est recommandé de ne pas le désactiver à moins que vous ne recherchiez vraiment la rapidité, vu que tout les bits économisés par une bonne estimation du mouvement seraient dépensés autre part, augmentant la qualité générale. Donc, n'allez pas plus bas que 5, et encore, seulement en dernier recours.

- chroma_me Améliore l'estimation de mouvement en prenant aussi en compte l'information de la chrominance (couleur), alors que `me_quality` seule utilise uniquement la luminance (niveaux de gris). Cela ralentit l'encodage de 5-10% mais améliore sensiblement la qualité visuelle en réduisant les effets de bloc et cela réduit aussi la taille des fichiers d'environ 1.3%. Si vous cherchez de la vitesse, vous devriez désactiver cette option avant de penser à la réduction de `me_quality`.

- chroma_opt A pour objectif d'améliorer la qualité de la chrominance de l'image à proximité des bords totalement blancs ou noirs, plutôt que d'améliorer la compression. Ceci peut aider à réduire l'effet "d'escalier rouge".

- lumi_mask Tente de donner moins de débit à une partie de l'image que l'oeil humain ne peut pas très bien voir, ce qui devrait permettre à l'encodeur de dépenser les bits économisés sur des parties plus importantes de l'image. La qualité de l'encodage liée à cette option dépend grandement des préférences personnelles et du type de moniteur ainsi que de son réglage (typiquement, cela ne semblera pas si bien si le réglage est lumineux ou si c'est un moniteur TFT).

- qpel Augmente le nombre de vecteurs de mouvement candidats en augmentant la précision de l'estimation de mouvement de halfpel (demi-pixel) à quarterpel (quart de pixel). L'idée est de trouver de meilleurs vecteurs de mouvement pour réduire le débit (donc augmenter la qualité à débit constant). Cependant, les vecteurs de mouvement avec une précision quarterpel requièrent quelques bits en plus à coder et les vecteurs candidats ne donnent pas toujours de résultats (vraiment) meilleurs. Assez souvent, le codec dépense des bits pour une plus grande précision, mais en retour il n'y a que peu ou pas d'amélioration de la qualité. Malheureusement, il n'y a aucun moyen de prédire les possibles avantages de `qpel`, donc en fait, vous devez l'encoder avec et sans pour en être sûr.

  `qpel` peut quasiment doubler la durée d'encodage, et nécessiter jusqu'à 25% de puissance processeur en plus pour le décodage. Il n'est pas supporté par tous les lecteurs.

- gmc Essaye d'économiser des bits sur des scènes panoramiques en employant un unique vecteur de mouvement pour l'image entière. Cela augmente presque toujours le PSNR, mais ralentit l'encodage significativement (ainsi que le décodage). Par conséquent, vous devriez seulement l'employer si vous avez réglé `vhq` au maximum. Le GMC de `Xvid` est plus sophistiqué que celui de DivX, mais il est seulement supporté par quelques lecteurs.

### 7.4.3. Profils d'encodage

Xvid supporte des profils d'encodage via l'option `profile`, ce qui est utilisé pour imposer des restrictions sur les propriétés du flux vidéo Xvid pour qu'il puisse être relu sur tout ce qui supporte le profil choisi. Les restrictions sont en rapport avec les résolutions, les débits et certaines fonctionnalités MPEG-4. La table suivante montre ce que chaque profil supporte.

| Simple | Simple avancé | DivX
Nom de profil | 0 | 1 | 2 | 3 | 0 | 1 | 2 | 3 | 4 | 5 | De poche | NTSC Portable | PAL Portable | NTSC Home Cinéma | PAL Home Cinéma | TV Haute Définition
Largeur [pixels] | 176 | 176 | 352 | 352 | 176 | 176 | 352 | 352 | 352 | 720 | 176 | 352 | 352 | 720 | 720 | 1280
Hauteur [pixels] | 144 | 144 | 288 | 288 | 144 | 144 | 288 | 288 | 576 | 576 | 144 | 240 | 288 | 480 | 576 | 720
Images par seconde | 15 | 15 | 15 | 15 | 30 | 30 | 15 | 30 | 30 | 30 | 15 | 30 | 25 | 30 | 25 | 30
Débit moyen max [kbit/s] | 64 | 64 | 128 | 384 | 128 | 128 | 384 | 768 | 3000 | 8000 | 537.6 | 4854 | 4854 | 4854 | 4854 | 9708.4
Débit moyen maximal au delà de 3 secs [kbit/s] |  |  |  |  |  |  |  |  |  |  | 800 | 8000 | 8000 | 8000 | 8000 | 16000
Images B maxi | 0 | 0 | 0 | 0 |  |  |  |  |  |  | 0 | 1 | 1 | 1 | 1 | 2
Quantification MPEG |  |  |  |  | X | X | X | X | X | X |  |  |  |  |  |
Quantification adaptative |  |  |  |  | X | X | X | X | X | X | X | X | X | X | X | X
Encodage entrelacé |  |  |  |  | X | X | X | X | X | X |  |  |  | X | X | X
Quaterpixel |  |  |  |  | X | X | X | X | X | X |  |  |  |  |  |
Compensation globale du mouvement |  |  |  |  | X | X | X | X | X | X |  |  |  |  |  |

### 7.4.4. Exemples de paramètres d'encodage

Les paramètres suivant sont des exemples de différentes combinaisons d'option d'encodage qui affectent le compromis entre la vitesse et la qualité pour le même débit cible.

Tous les paramètrages d'encodage ont été testés sur un échantillon vidéo en 720x448 à 30000/1001 images par seconde, le débit cible était de 900kbit/s, et la machine était un AMD-64 3400+ à 2400 MHz en mode 64 bits. Chaque exemple d'encodage est donné avec la vitesse d'encodage mesurée (en images par seconde) et la perte en PSNR (en dB) par rapport au réglage de "très haute qualité". Sachez que selon votre video source, votre machine et les derniers développements, vous pourrez obtenir des résultats très différents.

Description | Options d'encodage | vitesse (en images par secondes) | Perte PSNR relative (en dB)
--- | --- | --- | ---
Très haute qualité | `chroma_opt:vhq=4:bvhq=1:quant_type=mpeg` | 16 | 0dB
Haute qualité | `vhq=2:bvhq=1:chroma_opt:quant_type=mpeg` | 18 | -0.1dB
Rapide | `turbo:vhq=0` | 28 | -0.69dB
Temps réel | `turbo:nochroma_me:notrellis:max_bframes=0:vhq=0` | 38 | -1.48dB

Précédent | Niveau supérieur | Suivant
7.3. Encodage avec la famille de codec `libavcodec` | Sommaire | 7.5. Encodage avec le codec `x264`