Retrouvez cet article dans : Linux Pratique 40
L'encodage de DVD est un terrain vaste et controversé, aussi bien d'un point de vue légal (cf. la loi sur la copie privée) que d'un point de vue purement technique. Sur les listes de diffusion et dans les forums consacrés à cette question, les experts les plus pointus côtoient les novices les plus perdus. En effet, le débutant de l'encodage vidéo sous Linux a vite fait de baisser les bras devant une multitude de choix : logiciels, conteneurs, codecs, options d'encodage, etc.
L'article suivant vous proposera une approche avant tout pratique et pragmatique de l'encodage. Il ne présupposera aucune connaissance en la matière et s'adressera donc également aux débutants. Il vous suffira de suivre les instructions pas à pas.
Si vous êtes un tantinet frileux dans l'utilisation de la ligne de commande, le moment est venu de changer vos habitudes. Le choix d'un logiciel en ligne de commande peut paraître surprenant dans un article s'adressant à des débutants, mais dites-vous que l'habit ne fait pas toujours le moine. Mencoder présente certes une myriade d'options de configuration détaillées, mais une fois que vous aurez appris à maîtriser la poignée d'options vitales et courantes, vous conclurez probablement que l'utilisation d'un logiciel graphique n'est pas forcément le choix le plus simple à faire.

La boîte à outils
Notre approche concorde avec la « tools philosophy » ou « philosophie des outils » du monde Linux. Dans un premier temps, nous définissons la série de tâches à accomplir pour notre travail. Ensuite, nous cherchons l'outil le plus approprié pour chaque tâche. Pour finir, il ne nous reste qu'à combiner les outils en question pour obtenir le résultat voulu.
Concrètement, nous souhaitons :
- afficher le contenu (la table des matières, l'index) du DVD ;
- copier l'ensemble du DVD sur le disque dur ;
- visionner les pistes du DVD ;
- encoder les pistes audio et vidéo sélectionnées ;
- éventuellement, couper le fichier encodé résultant en deux, afin qu'il tienne sur deux CD.
Voici la liste des outils qu'il vous faudra installer pour accomplir les tâches en question :
lsdvd ;vobcopy ;Mplayer ;mencoder ;avisplit(contenu dans la suitetranscode).
Pour installer tout ceci sur une Ubuntu 6.06 par exemple, il vous suffira de taper :
$ sudo apt-get install lsdvd vobcopy mplayer-686 mencoder-686 transcode
Première remarque : dans l'exemple donné, il vous faudra opter pour la version de MPlayer et de Mencoder qui correspond à votre processeur.
Deuxième remarque : activez les archives PLF (ou similaires) pour Dapper, sinon vous aurez du mal !
L'embarras du choix
À présent que votre boîte à outils contient tout ce qu'il vous faut, vous pouvez vous mettre au travail. Commencez par afficher le contenu du DVD, c'est-à-dire sa table des matières. Insérez le DVD dans le lecteur et tapez ceci :
$ lsdvd
Selon le nombre de titres du DVD, lsdvd vous retournera quelque chose qui ressemble à cela :
libdvdread: Using libdvdcss version 1.2.9 for DVD access Disc Title: HIGH_FIDELITY Title: 01, Length: 01:49:02.250 Chapters: 30, Cells: 32, Audio streams: 03, Subpictures: 07 Title: 02, Length: 00:00:00.090 Chapters: 02, Cells: 01, Audio streams: 03, Subpictures: 07 (...) Title: 27, Length: 00:00:00.090 Chapters: 08, Cells: 01, Audio streams: 03, Subpictures: 07 Longest track: 01
Notez que la dernière indication nous affiche le titre le plus long. Ce n'est pas forcément le plat de résistance, mais il y a de grandes chances. Dans le cas présent, vérifions si la piste 01 correspond bien au film et non à l'interview « bonus » du réalisateur, voire la version commentée en voix off :
$ mplayer dvd://1
Vous aurez remarqué que votre vidéo s'ouvre dans une fenêtre par-dessus le terminal de commandes, totalement dépourvue de boutons d'action. Pour vous éviter de vous perdre dans les informations données par man mplayer, voici une poignée de commandes pour survivre avec MPlayer :

Le stade du miroir
Il est tout à fait possible d'encoder votre DVD directement à partir du lecteur. En revanche, sachez que l'opération dure un certain temps : comptez une bonne matinée sur une machine raisonnablement récente ; environ 4h sur un PIV 2.4 GHz avec 512 Mo de RAM. Il est donc préférable, dans un premier temps, de transférer le contenu intégral du DVD sur votre disque dur, afin de ne pas trop solliciter le lecteur DVD.
Remarque : à partir d'ici, il faut prendre en compte la dimension légale de notre entreprise...Créez un répertoire de travail dans votre répertoire utilisateur. Peu importe le nom que vous lui donnez (ici, je l'appellerai rip/), mais assurez-vous qu'il dispose d'au moins une bonne dizaine de giga-octets de place.
Montez le DVD (mount /dev/dvd, mount /dev/hdc, selon le point de montage du lecteur... ou alors attendez que cela se fasse automatiquement si vous utilisez une distribution un peu plus « léchée »), puis :
$ vobcopy -m
Cette commande effectue une copie conforme du contenu de votre DVD dans le répertoire courant. L'option -m signifie « mirror », c'est-à-dire « miroir ». Il se peut que vobcopy refuse d'obtempérer. Dans ce cas, il faut lui indiquer explicitement le périphérique correspondant au lecteur du DVD, moyennant l'option -i (comme « input »). Donc, par exemple :
Astuce :
Si vous n'avez pas l'habitude de la ligne de commande, sachez que la touche [FlècheHaut] répète la dernière commande saisie. Faites donc, et remplacez « aid » par « sid », ça vous évitera d'avoir à retaper le tout...
$ vobcopy -i /dev/hdc -m
ou encore :
$ vobcopy -i /media/cdrom0 -m
L'opération prend plusieurs minutes. Au final, vobcopy a créé un nouveau répertoire dans notre répertoire
~/rip. Dans mon cas, c'est le répertoire HIGH_FIDELITY. Par curiosité, je m'intéresse à la taille de ce répertoire
$ du -sh HIGH_FIDELITY 7,9G HIGH_FIDELITY/
Rien ne vous empêche de laisser le répertoire en l'état. Vous pouvez ainsi vous contenter de votre copie conforme non encodée. Retirez le DVD et invoquez la commande suivante pour le visionner à partir du disque dur :
$ mplayer -dvd-device HIGH_FIDELITY dvd://1
L'option -dvd-device prend comme argument le répertoire « racine » de votre sauvegarde de DVD. L'indication du chemin peut être absolue (/home/gerard/RAMBO_2) ou relative (comme ici).
Le choix des langues
La prochaine étape consiste à choisir les langues : celle de la piste audio et celle des sous-titres. Chaque DVD propose un certain nombre de langues au choix, il nous faut donc commencer par vérifier ce qui est effectivement disponible. MPlayer est capable de nous renseigner sur tout cela, à condition de le lancer en mode « verbeux ».
Pour cibler notre recherche, nous allons d'abord demander à MPlayer d'afficher uniquement les pistes audio disponibles moyennant l'astuce suivante :
$ mplayer -dvd-device HIGH_FIDELITY/ dvd://1 -vo null -frames 0 2>&1 -v | grep aid [open] audio stream: 0 audio format: ac3 (5.1) language: en aid: 128 [open] audio stream: 1 audio format: ac3 (5.1) language: es aid: 129 [open] audio stream: 2 audio format: ac3 (5.1) language: fr aid: 130
Ceci signifie que nous avons le choix entre trois langues : l'anglais, l'espagnol et le français. Chaque langue est suivie de son « AID » (Audio IDentifier) respectif, en l'occurrence 128 pour l'anglais, 129 pour l'espagnol et 130 pour le français.
Pour les sous-titres, nous allons procéder de manière analogue, à la différence près que nous recherchons le SID ou « Subtitle IDentifier » :
$ mplayer -dvd-device HIGH_FIDELITY/ dvd://1 -vo null -frames 0 2>&1 -v | grep sid [open] subtitle ( sid ): 0 language: en [open] subtitle ( sid ): 1 language: es [open] subtitle ( sid ): 2 language: fr [open] subtitle ( sid ): 3 language: pt [open] subtitle ( sid ): 4 language: nl [open] subtitle ( sid ): 5 language: pl [open] subtitle ( sid ): 6 language: bg
Nous remarquons ici qu'outre les trois langues de l'audio, nous disposons d'un choix de langues supplémentaires pour les sous-titres. Chaque langue est ici précédée de son SID respectif, le choix allant de 0 à 6.
La première chose à faire est de tester ces valeurs. Admettons que je souhaite voir le film en version originale anglaise avec des sous-titres en français, je dois lancer MPlayer avec les options suivantes :
$ mplayer -dvd-device HIGH_FIDELITY dvd://1 -aid 128 -sid 2
Vous avez saisi le principe. Si, pour des raisons qui vous appartiennent, vous préférez voir le film en espagnol sous-titré bulgare, il vous suffira de faire ceci :
$ mplayer -dvd-device HIGH_FIDELITY dvd://1 -aid 129 -sid 6
Remarque : je vous conseille de ne pas oublier cette étape. En effet, les codes AID et SID des films ne correspondent pas toujours à ce qu'il y a effectivement sur la piste !
Un peu de découpe
La prochaine étape nécessitera de sortir les ciseaux. En effet, la majeure partie des films sur DVD est dotée d'une bordure noire plus ou moins importante. Cette bordure ne nous gêne peut-être pas pour visionner le film, mais il faut savoir que chacun des pixels noirs de cette bordure sera encodé. Nous prendrons donc soin de nous en débarrasser pour gagner de la place.
Avant de découper, il faut savoir où placer les ciseaux. Lancez MPlayer avec l'option de détection
de bordures :
$ mplayer -dvd-device HIGH_FIDELITY dvd://1 -vf cropdetect
Le film se lance au ralenti avec une pléthore d'informations qui s'affichent en arrière-plan dans votre terminal. Avancez un peu dans le film, jusqu'à ce que les informations affichées se stabilisent, c'est-à-dire soient identiques entre elles, comme ceci :
crop area: X: 9..709 Y: 11..554 (-vf crop=688:528:16:20)2.3% 106 0 crop area: X: 9..709 Y: 11..554 (-vf crop=688:528:16:20)2.3% 107 0 crop area: X: 9..709 Y: 11..554 (-vf crop=688:528:16:20)2.3% 108 0
L'option -vf cropdetect se charge non seulement d'identifier les zones correspondant à une bordure noire, mais elle vous fournit également la commande nécessaire pour éliminer les bordures. Ici, en l'occurrence :
-vf crop=688:528:16:20.
Testons cette option :
$ mplayer -dvd-device HIGH_FIDELITY dvd://1 -aid 128 -sid 2 -vf crop=688:528:16:20
En effet, les bordures noires ont disparu, et ça fait tout de suite plus propre.
Jamais deux sans trois
Il ne nous reste qu'à nous occuper de l'encodage proprement dit, que nous effectuerons en trois passes : une pour l'audio, deux pour la vidéo. Nous pourrions certes procéder plus rapidement, mais puisque nous disposons de temps et de cycles CPU à souhait, autant en profiter et viser la meilleure qualité d'encodage possible.
Commençons par encoder l'audio :
$ mencoder -dvd-device HIGH_FIDELITY/ dvd://1 -aid 128 -sid 2 -oac mp3lame -lameopts mode=2:cbr:br=128:vol=0 -ovc frameno -o frameno.avi
L'option -oac mp3lame -lameopts mode=2:cbr:br=128:vol=0 signifie « encodage en mp3 » (mp3lame), « avec un taux d'encodage constant de 128 kbps » (cbr ou « Constant BitRate », br=128) et « sans gain de volume » (vol=0).
MEncoder se met alors à mouliner allègrement.
Pos: 0.9s 22f ( 0%) 0.00fps Trem: 0min 0mb A-V:0.084 [0:127] Skipping frame! Pos: 1.2s 32f ( 0%) 0.00fps Trem: 0min 0mb A-V:0.083 [0:128] Skipping frame! Pos: 2.0s 51f ( 0%) 0.00fps Trem: 0min 0mb A-V:0.081 [0:128] Skipping frame! Pos:4253.5s 106340f (65%) 189.32fps Trem: 4min 103mb A-V:0.045 [0:128]]
La dernière ligne nous informe de la progression totale de l'opération, traduite en secondes. Sachant qu'1h compte 3600s., nous jetons un coup d’œil à la pochette de notre DVD et nous calculons que 109 minutes, c'est un peu moins de 7000s (6542 très exactement). Et voici ce que cela donne :
Writing index... Writing header... ODML: Aspect information not (yet?) available or unspecified, not writing vprp header. Recommended video bitrate for 650MB CD: 691 Recommended video bitrate for 700MB CD: 755 Recommended video bitrate for 800MB CD: 884 Recommended video bitrate for 2 x 650MB CD: 1525 Recommended video bitrate for 2 x 700MB CD: 1653 Recommended video bitrate for 2 x 800MB CD: 1910 Video stream: 0.800 kbit/s (100 B/s) size: 654208 bytes 6542.080 secs 163555 frames Audio stream: 128.000 kbit/s (16000 B/s) size: 104673408 bytes 6542.088 secs
Les lignes « Recommended video bitrate » contiennent une série de suggestions de taux d'encodage pour autant de tailles de fichier visées.
Notez que ces suggestions s'avèrent souvent très approximatives. Le site de MPlayer propose, certes, une série de formules et de scripts Perl qui permettraient de calculer le taux d'encodage exact pour une taille de fichier donné. Non content de cela, les membres de la liste de diffusion mencoder-users@mplayerhq.hu ne rechignent pas à vous expliquer les détails peu ragoûtants de ce calcul (!). Au bout de quelques échanges concernant la question, j'en ai conclu que tout cela était sans doute bien vrai, mais qu'il fallait cultiver mon jardin. J'ai donc décidé de m'en tenir aux bonnes vieilles recettes de grand-mère qui fonctionnent toujours : tentative, échec, expérience et pifomètre.
Lorsque l'encodage audio se termine, notre répertoire de travail contient un fichier frameno.avi, qu'il ne faut surtout pas effacer.
Lançons la première passe de l'encodage vidéo, avec un taux d'encodage de 1400, comme ceci :
$ mencoder -dvd-device HIGH_FIDELITY/ dvd://1 -aid 128 -sid 2 -vf crop=688:528:16:20 -oac copy -o /dev/null -ovc lavc -lavcopts vcodec=mpeg4:vbitrate=1400:vhq:autoaspect:vpass=1
Certaines options vous sont déjà familières. L'option -oac copy signifie « copier l'audio (de l'encodage précédent) ». Cette première passe d'encodage vidéo effectue un balayage, une sorte de premier repérage, d'où l'option -o /dev/null : pas la peine de nous fournir une première version « brouillon » du film, car tout ce qui nous intéresse pour l'instant, ce sont les informations contenues dans le fichier divx2pass.log nouvellement créé.
Quant aux autres options, elles seront tout de suite plus compréhensibles si l'on sait que -ovc signifie « Output Video Codec », lavc désigne les « libavcodecs » et tout ce qui reste (c'est-à-dire tout ce qui suit -lavcopts que l'on traduira par « options lavc »), ce sont les détails de configuration du codec. Notez que nous avons choisi vhq (« very high quality »), ce qui améliore grandement la qualité de l'encodage aux dépens de la vitesse.
Là encore, n'effacez pas le fichier divx2pass.log. Au bout de l'opération, lancez la deuxième passe de l'encodage vidéo, comme ceci :
$ mencoder -dvd-device HIGH_FIDELITY/ dvd://1 -aid 128 -sid 2 -vf crop=688:528:16:20 -oac copy -o High_Fidelity.avi -ovc lavc -lavcopts vcodec=mpeg4:vbitrate=1400:vhq:autoaspect:vpass=2
Vous aurez peut-être remarqué que la commande invoquée pour cette deuxième passe est identique à la première, à deux détails près. D'une part,
-o High_Fidelity.avi remplace -o /dev/null, pour la simple raison que nous souhaitons effectivement obtenir un film. Ensuite, l'option vpass=2 indique tout simplement qu'il s'agit de la deuxième passe d'encodage.
Couper la poire en deux
Nous avons enfin obtenu un fichier High_Fidelity.avi, que nous sommes loisibles de visionner ainsi :
$ mplayer High_Fidelity.avi
Si nous souhaitons graver le résultat sur CD, nous ne sommes pas encore tout à fait au bout de nos peines !
$ ls -lh High_Fidelity.avi -rw-r--r-- 1 kikinovak kikinovak 1,4G 2006-10-01 13:06 High_Fidelity.avi
Pour couper ce fichier en deux, utilisons avisplit comme ceci :
$ avisplit -i High_Fidelity.avi -o High_Fidelity -s 699 [avilib] V: 25.000 fps, codec=FMP4, frames=163552, width=688, height=528 [avilib] A: 48000 Hz, format=0x2000, bits=16, channels=2, bitrate=384 kbps, [avilib] 13085 chunks, 314021376 bytes, CBR [High_Fidelity-0000.avi] (000000-080912), size 698.2 MB. (V/A) (3236520/3237000)ms [High_Fidelity-0001.avi] (080914-163551), size 697.2 MB. vid=6542080.00 ms aud=6542112.00 ms
Vous l'aurez deviné : l'option -i (« input ») indique le fichier à scinder, -o définit le titre des fichiers résultants (auquel avisplit prendra soin d'ajouter un suffixe numérique incrémental), et -s (« size ») configure la taille résultante maximale. J'ai préféré être prudent et choisir 699 au lieu de 700, pour éviter
d'éventuels débordements.
Voyons ce que nous obtenons au final
$ ls -lh High_Fidelity* -rw-r--r-- 1 kikinovak kikinovak 699M 2006-10-01 13:39 High_Fidelity-0000.avi -rw-r--r-- 1 kikinovak kikinovak 698M 2006-10-01 13:40 High_Fidelity-0001.avi -rw-r--r-- 1 kikinovak kikinovak 1,4G 2006-10-01 13:06 High_Fidelity.avi
Il ne reste plus qu'à graver les deux fichiers .avi résultants.
Et maintenant ?
La méthode d'encodage présentée dans cet article est une méthode possible parmi une ribambelle d'autres. Certains la trouveront inutilement compliquée, d'autres reculeront avec horreur devant les simplifications que je me suis permises. Considérez-la comme une tentative de trouver un juste milieu, une entrée en matière utilisable au quotidien.
À ceux qui souhaitent approfondir la question, je conseille de lire :
- la page de manuel la plus longue de la planète (à ce que je sache) :
man mplayer ; - le manuel de Mencoder (pas mal non plus) :
man mencoder ; - la documentation tout aussi détaillée sur le site : http://www.mplayerhq.hu/DOCS/HTML/en/index.html (la documentation en version anglaise est la plus actuelle).
Retrouvez cet article dans : Linux Pratique 40

