~bohwaz/blog/

Avec de vrais morceaux de 2.0 !

Encodage

Faire de l'encodage vidéo sous GNU/Linux c'est simple !

Ré-encoder un trailer haute définition en le redimensionnant et en haute qualité (LAVC 2 pass, 1500kbps+Vorbis Q10)

$ mencoder LandOfTheDead.wmv -o Land1.avi -ovc lavc -oac pcm -lavcopts vpass=1:vbitrate=1500 -vf crop=1290:690:0:14,scale=640:345,harddup -sws 2 -ofps 25
$ mencoder LandOfTheDead.wmv -o Land1.avi -ovc lavc -oac pcm -lavcopts vpass=2:vbitrate=1500 -vf crop=1290:690:0:14,scale=640:345,harddup -sws 2 -ofps 25
$ ogmmerge -o Land1.ogm Land1.avi
$ ogmdemux Land1.ogm
$ oggenc -q 10 Land1.ogm-a1.wav
$ ogmmerge -o Land-final.ogm -A Land1.avi Land1.ogm-a1.ogg
$ rm -f Land1*

Important:

  • les 2 passes de codage, donc deux commandes, une fois avec vpass=1 puis avec vpass=2le redimensionnement: on retaille déjà les bordures noires (crop=..., obtenu avec mplayer -vf cropdetect LandOfTheDead.wmv) puis on redimensionne (scale=...)
  • le harddup est très important, il indique qu'il faut également encoder les "duplicate frames" et évite ainsi tout décalage a/v
  • le -sws indique la méthode de redimensionnement
  • ne pas oublier d'indiquer le fps de la vidéo originale, sinon encodage pourri.

Convertir 2 fichiers WMV en un OGM contenant un codec vidéo libre et audio libre (ici LAVC+Vorbis)

$ mencoder ivg_fev_05_part1.wmv -o 01.avi -ovc lavc -oac pcm -lavcopts vpass=1:vbitrate=200 -ofps 23.976
$ mencoder ivg_fev_05_part2.wmv -o 02.avi -ovc lavc -oac pcm -lavcopts vpass=1:vbitrate=200 -ofps 23.976
$ avimerge -o out.avi -i 01.avi 02.avi
$ ogmmerge -o temp.ogm -D out.avi 
$ ogmdemux temp.ogm 
$ normalize temp.ogm-a1.wav 
$ oggenc -q 0 temp.ogm-a1.wav 
$ ogmmerge -o IVG_Fev_2005.ogm -A out.avi temp.ogm-a1.ogg

Explication:

  • on encode les deux fichiers wmv respectivement en 01.avi et 02.avi, en utilisant le codec lavc avec un bitrate de 200kbps (c'est pour de la diffusion web et les vidéos à la base sont pas de qualité super) et en audio PCM, ce sont les deux premières commandes mencoder. On a rajouté l'option -ofps 23.976 car les vidéos n'étaient pas en 25fps comme mencoder le considère par défaut (et encoder une vidéo de 24fps en 25fps ça merde).
  • Ensuite on met les deux fichiers AVI ensemble avec avimerge.
  • Ensuite on récupère le flux audio en créant un fichier .ogm avec ogmmerge contenant uniquement le flux audio du AVI (option -D de ogmmerge = ne pas prendre la vidéo).
  • On extrait le flux PCM du OGM (c'est un peu bidouille parce que y'a pas d'avidemux sous linux) avec ogmdemux qui crée donc un fichier temp.ogm-a1.wav.
  • Ensuite on met le volume sonore du WAV au bon niveau avec normalize.
  • Puis on encode le wav en Ogg Vorbis avec oggenc (ici qualité 0 sur une échelle de -1 à 9, correspond à une qualité de ~48-64kbps).
  • Et enfin on compile la vidéo avec ogmmerge (mais pas la bande son, option -A de ogmmerge = ne pas prendre le flux audio) et l'audio dans un OGM final qui sera distribué.

Résultat: 11Mo au lieu de 15Mo et avec des codecs libres :)

Autres options utiles

-ss hh:mm:ss
Marque le moment ou débuter l'encodage

-endpos ss
Marque le temps après le début d'encodage ou arreter l'encodage (en secondes)

-aspect format
Force l'aspect d'une vidéo (souvent utile avec les AVI qui ne l'indiquent pas). Exemple: -aspect 4:3, -aspect 1.0...

Filtres utiles (-vf)

pp=lb
désentrelacement (si dans les mouvements de la vidéo des lignes apparaissent vous avez besoin de ça, voir aussi cette doc mplayer)

crop=largeur:hauteur[:xpos:ypos]
Croppe la vidéo (pour enlever les bordures noires)

scale=largeur:hauteur
Redimensionne la vidéo

hqdn3d
Enlève le bruit vidéo (un peu)

Encodage accessible de bonne qualité (lisible freebox etc.)

# Encodage de la vidéo, 1ère passe
# On a un fichier PAL (aspect 1.07, en 720x576)
# on le passe en 4/3 (crop)
# On le désinterlace (pp=lb, ou pp=li)
# On elève du bruit (hqdn3d, et pp=tn:10:20:30)
$ mencoder episode.avi -o 01.avi -oac pcm -ovc xvid -xvidencopts bitrate=1200:pass=1:turbo -vf pp=lb,hqdn3d,pp=rn:10:20:30,crop=710:532:0:16,scale=640:480,pp -aspect 4/3

# Encodage 2ème passe, même ligne que précédemment mais pass=2

# Extraction du flux audio pour retouches
$ mplayer -ao pcm:file=01-sound.wav -vo null 01.avi
# Là on fait des trucs sur le fichier audio ailleurs
# Après on normalise
$ normalize-audio 01-final.wav
# On encode en 160kbps
$ lame --preset hifi 01-final.wav 01-final.mp3

# Extraction flux vidéo
$ mencoder -ovc copy -nosound -o 01-video.avi 01.avi

# Merge vidéo/audio: c'est finit :)
$ avimerge -o 01-final.avi -i 01-video.avi -p 01-final.mp3
Écrire un commentaire
(facultatif)
(facultatif)
(obligatoire)
       __             _           
 _ __ /_/  __ _  __ _| | ___ _ __ 
| '__/ _ \/ _` |/ _` | |/ _ \ '__|
| | |  __/ (_| | (_| | |  __/ |   
|_|  \___|\__, |\__,_|_|\___|_|   
          |___/                   
(obligatoire)

Les adresses internet seront converties automatiquement.
Tags autorisés : <blockquote> <cite> <pre> <code> <var> <strong> <em> <del> <ins> <kbd> <samp> <abbr>