7. Encodage avec MEncoder

Pour avoir la liste complète des options disponibles de MEncoder et des exemples, voir la page de man. Pour une série d'exemples pratiques et de guides détaillés sur l'utilisation des nombreux paramètres d'encodage, lisez les encoding-tips (en anglais) qui ont été collectés sur de nombreuses threads de la liste de diffusion mplayer-users. Cherchez dans les archives pour trouver les discussions à propos de tous les aspects et problèmes relatif à l'encodage avec MEncoder.

7.1 Encodage MPEG-4 ("DivX") 2 ou 3-passes

Encodage 2-passes: le nom vient du fait que cette méthode encode le fichier deux fois. Le premier encodage (passe doublée) créé quelques fichiers temporaires (*.log) avec une taille de quelques méga-octets, ne les détruisez pas tout de suite (vous pouvez effacer l'AVI). Dans la seconde passe, la fichier de sortie 2-passes est créé, en utilisant les données bitrate des fichiers temporaires. Le fichier résultant aura une image de bien meilleur qualité. Si c'est la première fois que vous entendez parler de ça, vous devriez consulter les guides disponibles sur le Net.

Cet exemple montre comment encoder un DVD en AVI MPEG-4 ("DIVX") AVI 2-passes. Seules deux commandes sont requises:
    rm frameno.avi - enlevez ce fichier, qui peut provenir d'un encodage 3-passes précédent (il interfère avec l'actuel)
    mencoder dvd://2 -ovc lavc -lavcopts vcodec=mpeg4:vpass=1 -oac copy -o film.avi
    mencoder dvd://2 -ovc lavc -lavcopts vcodec=mpeg4:vpass=2 -oac copy -o film.avi

Encodage 3-passes: c'est une extension de l'encodage 2-passes, où l'encodage audio prends place dans une passe séparée. Cette méthode permet l'estimation du bitrate vidéo recommandé de façon à tenir sur un CD. De plus, l'audio n'est encodé qu'une fois, au contraire du mode 2-passes. Le principe:

  1. Supprimez les fichiers temporaires conflictuels:

    rm frameno.avi

  2. Première passe:

    mencoder <fichier/DVD> -ovc frameno -oac mp3lame -lameopts vbr=3:more_options -o frameno.avi

    Un fichier avi en lecture seule sera créé, contenant uniquement le flux audio demandé. N'oubliez pas -lameopts, si vous en avez besoin. Si vous encodez un long film, MEncoder affiche le bitrate recommandé pour les tailles 650Mo, 700Mo, et 800Mo, après la fin de cette passe.

  3. Seconde passe:

    mencoder <fichier/DVD> -oac copy -ovc lavc -lavcopts vcodec=mpeg4:vpass=1:vbitrate=<bitrate>

    Ceci est la première passe de l'encodage vidéo. Éventuellement spécifiez le bitrate vidéo que MEncoder à affiché à la fin de la passe précédente.

  4. Troisième passe:

    mencoder <fichier/DVD> -oac copy -ovc lavc -lavcopts vcodec=mpeg4:vpass=2:vbitrate=<bitrate>

    Ceci est la seconde passe de l'encodage vidéo. Spécifiez le même bitrate vidéo que celui de la passe précédente à moins que vous ne sachiez réellement ce que vous faites. Dans cette passe, l'audio de frameno.avi sera inséré dans le fichier de destination.. et c'est tout prêt!

Exemple d'encodage 3-passes:

    rm frameno.avi - enlevez ce fichier, qui peut provenir d'un encodage 3-passes précédent (il interfère avec l'actuel)
    mencoder dvd://2 -ovc frameno -o frameno.avi -oac mp3lame -lameopts vbr=3
    mencoder dvd://2 -ovc lavc -lavcopts vcodec=mpeg4:vpass=1 -oac copy -o film.avi
    mencoder dvd://2 -ovc lavc -lavcopts vcodec=mpeg4:vpass=2 -oac copy -o film.avi

7.2 Encodage au format MPEG

MEncoder peut créer des fichier au format MPEG (MPEG-PS). Ceci n'est probablement utile qu'avec le codec mpeg1video de libavcodec, car les lecteurs - excepté MPlayer - attendent de la vidéo MPEG1, et de l'audio MPEG1 layer 2 (MP2) dans les fichiers MPEG.

Cette fonction n'est pas vraiment utile actuellement, car elle a probablement de nombreux bogues, mais plus important encore parce qu'actuellement MEncoder ne peut pas encoder l'audio MPEG1 layer 2 (MP2), qui est attendu par tous les autres lecteurs dans les fichiers MPEG.

Pour changer le format de sortie de MEncoder, utilisez l'option -of mpeg.

Exemple:
  mencoder -of mpeg -ovc lavc -lavcopts vcodec=mpeg1video -oac copy <other options> media.avi -o sortie.mpg

7.3 Redimensionnement des films

Souvent le besoin de redimensionner les images d'un film se fait sentir. Les raisons peuvent être multiples: diminuer la taille du fichier, la bande passante du réseau, etc. La plupart des gens redimensionnement même en convertissant des DVDs ou SVCDs en AVI DivX. C'est mauvais. Plutôt que faire ça, lisez la section Préserver l'aspect ratio.

Le processus de zoom est géré par le filtre vidéo 'scale': -vf scale=largeur:hauteur. Sa qualité peut être réglée avec l'option -sws. Si elle n'est pas spécifiée, MEncoder utilisera 0: fast bilinear.

Utilisation:

    mencoder entree.mpg -ovc lavc -lavcopts vcodec=mpeg4 -vf scale=640:480 -oac copy -o sortie.avi

7.4 Copie de flux

MEncoder peut gérer les flux entrant de deux façons: les encoder ou les copier. Cette section parle de la copie.

7.5 Réparer les fichiers AVIs ayant un index défectueux

Facile. Nous copions simplement les flux vidéo et audio, et MEncoder génère l'index. Bien sûr cela ne peut pas réparer les bogues possibles dans les flux vidéo et/ou audio. Il répare également les fichiers avec un entrelacement endommagé, ainsi l'option -ni ne sera plus requise.

Commande: mencoder -idx entree.avi -ovc copy -oac copy -o sortie.avi

7.5.1 Assembler plusieurs fichiers AVI

Un effet secondaire de la fonction de réparation d'AVI permet à MEncoder d'assembler 2 (ou plus) fichiers AVI:

Command: cat 1.avi 2.avi | mencoder -noidx -ovc copy -oac copy -o sortie.avi -

Note: Cela suppose que 1.avi et 2.avi utilisent les même codecs, résolution, débit, etc et qu'au moins 1.avi ne soit pas endommagé. Vous pouvez avoir besoin de réparer vos fichiers AVI d'entrée d'abord, comme décrit ci-dessus.

7.6 Encodage avec la famille de codecs libavcodec

libavcodec permet un encodage simple dans plein formats audio et vidéo intéressants (actuellement ses codecs audio ne sont pas supportés). Vous pouvez encoder avec les codecs suivants:

La première colonne contient le nom du codec qui devrait être passé après la config vcodec, comme: -lavcopts vcodec=msmpeg4

Un exemple, avec compression MJPEG:
    mencoder dvd://2 -o titre2.avi -ovc lavc -lavcopts vcodec=mjpeg -oac copy

7.7 Encodage à partir de multiples fichiers image (JPEGs, PNGs ou TGAs)

MEncoder est capable de créer des fichiers à partir de un ou plusieurs fichiers JPEG, PNG ou TGA. Avec une simple copie de trame il peut créer des fichiers MJPEG (Motion JPEG), MPNG (Motion PNG) ou MTGA (Motion TGA).

Explication du processus:
  1. MEncoder décode le(s) image(s) d'origine avec libjpeg (pour encoder des PNGs, il utilisera libpng).
  2. Mencoder envoie alors l'image décodée au compresseur vidéo choisi (DivX4, XviD, ffmpeg msmpeg4, etc...).

Exemples

Une explication de l'option -mf peut être trouvée plus bas dans la section des options globales et dans la page de man.

Créer un fichier DivX4 à partir de tous les fichiers JPEG du rép courant:
  mencoder -mf on:w=800:h=600:fps=25 -ovc divx4 -o sortie.avi \*.jpg

Créer un fichier DivX4 à partir de quelques fichiers JPEG du rép courant:
  mencoder -mf on:w=800:h=600:fps=25 -ovc divx4 -o sortie.avi trame001.jpg,trame002.jpg

Créer un fichier Motion JPEG (MJPEG) à partir de tous les fichiers JPEG du rép courant:
  mencoder -mf on:w=800:h=600:fps=25 -ovc copy -o sortie.avi \*.jpg

Créer un fichier non-compressé à partir de tous les fichiers PNG du rép courant:
  mencoder -mf on:w=800:h=600:fps=25:type=png -ovc rawrgb -o sortie.avi \*.png

Note: La largeur doit être un entier multiple de 4, c'est une limitation du format AVI RGB brut.

Créer un fichier Motion PNG (MPNG) à partir de tous les fichiers PNG du rép courant:
  mencoder -mf on:w=800:h=600:fps=25:type=png -ovc copy -oac copy -o sortie.avi \*.png

Créer un fichier Motion TGA (MTGA) à partir de tous les fichiers TGA du rép courant:
  mencoder -mf on:w=800:h=600:fps=25:type=tga -ovc copy -o sortie.avi \*.tga

7.8 Extraction des sous-titres DVD dans un fichier Vobsub

MEncoder est capable d'extraire les sous-titres d'un DVD dans des fichiers au format VobSub. Ils consistent en une paire de fichiers terminant par .idx et .sub et sont généralement compressés dans une seule archive .rar. MPlayer peut les lire avec les options -vobsub et -vobsubid.

Vous spécifiez le nom de base (c-a-d sans l'extension .idx ou .sub) des fichiers de sortie avec -vobsubout et l'index pour ces sous-titres dans le fichier final avec -vobsuboutindex.

Si l'entrée n'est pas un DVD vous pouvez utiliser -ifo pour indiquer le fichier .ifo requis pour construire le fichier .idx final.

Si l'entrée n'est pas un DVD et que vous n'avez pas de fichier .ifo vous aurez besoin d'utiliser l'option -vobsubid pour lui permettre de savoir quel id langue placer dans le fichier .idx.

Chaque étape ajoutera les sous-titres actifs dans les fichiers .idx et .sub dans les fichiers déjà existants. Vous devrez donc les enlever avant de commencer.

Exemples

Copier deux sous-titres d'un DVD pendant l'encodage 3-passes
  rm soustitres.idx soustitres.sub
  mencoder dvd://1 -vobsubout soustitres -vobsuboutindex 0 -sid 2 -o frameno.avi -ovc frameno -oac mp3lame -lameopts vbr=3
  mencoder dvd://1 -oac copy -ovc divx4 -divx4opts pass=1
  mencoder dvd://1 -oac copy -ovc divx4 -divx4opts pass=2 -vobsubout sous-titres -vobsuboutindex 1 -sid 5

Copier les sous-titres français depuis un fichier MPEG
  rm soustitres.idx soustitres.sub
  mencoder film.mpg -ifo film.ifo -vobsubout soustitres -vobsuboutindex 0 -vobsuboutid fr -sid 1

7.9 Préserver l'aspect ratio

Les fichiers des DVDs et des SVCDs (c-a-d MPEG1/2) contiennent une valeur d'aspect ratio, qui décrit comment le lecteur devrait dimensionner le flux vidéo, pour que les humains n'aient pas des "têtes d'oeuf" (ex. 480x480 + 4:3 = 640x480). De toute façon, quand vous encodez un fichier AVI (DivX), vous devez être conscients que les entêtes AVI ne stockent pas cette valeur. Redimensionner le film est dégouttant et coûteux en temps, il doit y avoir une meilleur solution !

Il y en a une.

MPEG4 a une fonction unique: le flux vidéo peut contenir l'aspect ratio requis. Oui, tout comme les fichiers MPEG1/2 (DVD, SVCD). Malheureusement, il n'y a pas de lecteurs vidéo au dehors qui supportent cet attribut. Excepté MPlayer.

Cette fonction ne peut être utilisé qu'avec le codec mpeg4 de libavcodec. Gardez à l'esprit: bien que MPlayer lise correctement le fichier créé, les autres lecteurs utiliseront un mauvais aspect ratio.

Vous devriez sérieusement couper les bandes noires au dessus et en dessous de l'image. Voir la page de man pour l'utilisation des filtres cropdetect et crop.

Utilisation:

$ mencoder sample-svcd.mpg -ovc lavc -lavcopts vcodec=mpeg4:autoaspect -vf crop=714:548:0:14 -oac copy -o sortie.avi