Tag Archives: mplayer

mplayer/mencoder: Convertir un fichier .mkv (Matroska) en .avi (divx)

Il est de plus en plus courant d’avoir à faire à des fichiers mkv (Matroska). L’avantage de ces fichiers, c’est qu’il peuvent être composés de plusieurs pistes videos/audios/sous titres, et donc de permettre des vidéos multilingues. Le point négatif, est que les lecteurs de divx de salon ou bien encore la freebox ne les gèrent pas complètement (certains codecs manquant). Il est donc indispensable de convertir ces videos en divx/xvid avec en plus un bon codec sonore.

Pour cela, je vais faire appel aux packages mkvtoolnix, mplayer et mencoder sous gnu/linux.

Description des fichiers mkv

Les mkv sont capables d’être composés de flux vidéos et sonores encodés par différents types de codecs. Une première étape est de déterminer à quels codecs l’on a à faire. La commande mkvinfo permet cela:

$ mkvinfo "Morning Musume - Pepper Keibu.mkv" | grep -E "Codec ID: (V_|A_)"
|  + Codec ID: V_MPEG4/ISO/AVC
|  + Codec ID: A_AAC

Ce fichier, par exemple, contient une vidéo en mpeg4 et la piste audio est de l’AAC.

$ mkvinfo MyMovie.mkv | grep -E "(Codec ID: (V_|A_|S_)|Language)"
|  + Codec ID: V_MS/VFW/FOURCC
|  + Language: und
|  + Codec ID: A_AAC/MPEG2/LC/SBR
|  + Language: jpn
|  + Codec ID: A_AAC/MPEG2/LC/SBR
|  + Language: eng
|  + Codec ID: S_TEXT/ASS
|  + Language: eng

Ce fichier ci, par contre, contient une piste vidéo (le codec est préfixé par V_), deux pistes audios (une japonaise et une anglais), et une piste de sous titres anglaise. La liste complète des codecs supportés par Matroska est disponible sur cette page.

Lecture d’un mkv avec mplayer

Il est facilement possible de lire avec mplayer un tel fichier, en utilisant les bonnes options pour avoir la bonne piste audio/vidéo/sous-titres.

Par exemple, si l’on reprend le fichier précédent et que l’on veuille lire la version originale japonaise sous titrée anglais:

mplayer -alang jpn -slang 0 MyMovie.mkv

(ou encore: « mplayer -vid 0 -aid 0 -sid 0 MyMovie.mkv » pour sélectionner manuellement les pistes.)

mplayer donne de toutes façons plus d’informations au démarrage de la lecture sur les pistes:

Playing MyMovie.mkv.
[mkv] Track ID 1: video (V_MS/VFW/FOURCC) "MyMovie", -vid 0
[mkv] Track ID 2: audio (A_AAC/MPEG2/LC/SBR) "Dolby 5.1 Japanese", -aid 0, -alang jpn
[mkv] Track ID 3: audio (A_AAC/MPEG2/LC/SBR) "Dolby 5.1 English", -aid 1, -alang eng
[mkv] Track ID 4: subtitles (S_TEXT/ASS), -sid 0, -slang eng
[mkv] Will play video track 1.

Conversion d’un fichier mkv en fichier avi

Quand on a de la chance, le fichier mkv contient un flux vidéo xvid. Dans ce cas là, on peut facilement faire un fichier AVI en utilisant le flux vidéo existant. Pour la piste audio, on opte pour une simple conversion en PCM (passe partout).

La commande est:

mencoder nom_du_fichier.mkv -ovc copy -oac pcm -o nom_du_fichier.avi

Le paramètre -ovc donne le codec avec lequel on va encoder le flux video. Ici, `copy’ signifie qu’on ne réencode pas, on copie juste le flux. Le paramètre -oac permet de donner le codec audio utilisé. Ici, pcm.

Quand on n’a pas de chance, il faut réencoder le flux vidéo en xvid et le flux sonore en mp3. Et en prime, on veut vouloir sélectionner la piste audio (jpn), et inclure les sous titres.

Alons-y:

mencoder -vid 0 -alang jpn -slang eng \
    -oac mp3lame -lameopts cbr=128 \
    -ovc xvid -xvidencopts bitrate=900 \
    nom_du_fichier.mkv -o nom_du_fichier_final.avi

Et voilà !
On jouera avec les options d’encodage selon nos besoins (man mencoder est votre ami à partir de maintenant) pour avoir des fichiers plus petits ou une meilleure qualité.

Recréer un une image ISO en image UDF (pour les DVDs)

J’ai téléchargé récemment une image ISO contenant des clips et un menu DVD. Celle ci n’était pas lisible par mplayer:

$ mplayer -dvd-device image.iso dvd://
libdvdnav:DVDOpenFileUDF:UDFFindFile /VIDEO_TS/VIDEO_TS.IFO failed
libdvdnav:DVDOpenFileUDF:UDFFindFile /VIDEO_TS/VIDEO_TS.BUP failed
libdvdread: Can't open file VIDEO_TS.IFO.
Can'
t open VMG info!
No stream found to handle url dvd://

En montant l’image, on peut quand même bien vérifier la présence des fichiers prétendus « manquants »:

# mkdir image ; mount -o loop image.iso image/
# ls -l image/VIDEO_TS/VIDEO_TS.{BUP,IFO}
-r-xr-xr-x 1 root root 12288 Apr  8 00:36 image/VIDEO_TS/VIDEO_TS.BUP
-r-xr-xr-x 1 root root 12288 Apr  8 00:36 image/VIDEO_TS/VIDEO_TS.IFO

D’où venait le problème ? Il vient du fait que l’image soit une image ISO 9660 et non une image UDF.

# file image.iso
image.iso: ISO 9660 CD-ROM filesystem data 'blabla'

Solution: Reconstruire une image UDF. Pour cela, rien de plus facile qu’un coup de mkisofs (http://freshmeat.net/projects/mkisofs/):

# mkisofs -r -udf -o image.udf image/
[...]
# file image.udf
image.udf: UDF filesystem data (version 1.5) 'CDROM'

(Note: image/ a été monté juste avant. Ce répertoire contient un répertoire VIDEO_TS et un AUDIO_TS)

Il ne reste plus qu’à profiter de son image dvd toute fraiche:

$ mplayer -dvd-device image.udf dvdnav://
[...]
Playing dvdnav://.
libdvdnav: Using dvdnav version 4.1.4
libdvdread: Using libdvdcss version 1.2.10 for DVD access
libdvdnav: DVD Title: CDROM
libdvdnav: DVD Serial Number: 4C05646C00000000
libdvdnav: DVD Title (Alternative):
libdvdnav: Unable to find map file '/root/.dvdnav/CDROM.map'
[...]

[Fedora] Installer libdvdcss quand on utilise rpmfusion

Ce matin, j’ai voulu lire un DVD avec mplayer, et je me suis heurté à l’erreur suivante:

libdvdread: Encrypted DVD support unavailable.

Quand on utilise rpmfusion, l’une des contraintes est le choix des mainteneurs du projet
à ne pas distribuer libdvdcss. Le seul choix possible est donc d’utiliser un dépot tierce
pour cela. Il y a plusieurs solutions à cela, et mon choix a été porté par l’utilisation
du dépot livna:

# rpm -ivh http://rpm.livna.org/livna-release.rpm
Récupération de http://rpm.livna.org/livna-release.rpm
attention: /var/tmp/rpm-tmp.5Oqkd9: Entête V4 DSA/SHA1 Signature, key ID a109b1ec: NOKEY
Préparation...              ########################################### [100%]
   1:livna-release          ########################################### [100%]

Puis, on met à jour le cache et on installe la libdvdcss:

# yum clean all && yum update
[...]

# yum search libdvdcss
libdvdcss.x86_64 : Library for transparent DVD device access with on-the-fly CSS decryption

# yum install libdvdcss
[...]

Et voilà, le dvd pourra etre lu. Ouf.

Une autre solution aurait été d’utiliser atrpms au lieu de rpmfusion/livna. Chacun y trouvera son compte. Pour ma part, utilisant rpmfusion et n’ayant pas le temps de tout mettre à jour, je suis resté sur cette solution.