EXTRACTION ET LECTURE DES SOUS TITRES
AVEC MENCODER ET MPLAYER
Préambule :
FFmpegX permet maintenant d'extraire les sous-titres dans un fichier au format
VOBsub. Quand vous demandez à
FFmpegX de créer un fichier pour les sous-titres via le menu
file, une fois le traitement terminé, vous vous apercevez en fait qu'il n'y a pas un mais deux fichiers. Le premier porte l'extension
.idx et le second
.sub .
Mais saviez-vous que ce format de fichier peut contenir plusieurs langues pour les sous-titres.
Imaginez seulement un instant, vous avez la possibilité d'avoir dans le même fichier les sous-titres en anglais et en allemand par exemple. A la lecture, il n'y a plus qu'à choisir la version désirée.
Hélas, vous avez tous remarqué que
Mplayer OS X ne nous donnait pas la possibilité d'ouvrir ce fichier. La version 2 béta 4 ne corrige toujours pas cette lacune.
Je vais donc vous donner la solution. Tout ce passe directement en formatant la ligne de commande dans un éditeur de texte par exemple, puis par copier/coller dans le
Terminal.
1) Extraction des sous-titres : méthode simple
C'est la méthode utilisé par
FFmpegX. Vous sélectionnez la langue des sous-titres,
file dans le petit menu déroulant et vous cliquez sur
Extract. Vous obtenez deux fichiers contenant l'un les timecodes (
.idx) et l'autre les images des sous-titres (
.sub). C'est la méthode simple. Si vous ne changez pas le nom dans le champ
save as et que vous sélectionner une autre langue, vous écraserez systématiquement vos précédents fichiers si vous relancez un traitement.
Mais pour mieux comprendre la suite, je vais vous expliquer comment
FFmpegX fonctionne. Quand vous cliquez sur
Extract, la ligne de commande n'est composée que d'une seule option. Cette option est
-vobsubout.
La page de MAN nous indique :
-vobsubout <nomdebase>. Spécifie le nomdebase pour les fichiers
.idx et
.sub de destination. Cela désactive le rendu des sous-titres dans le film encodé et le redirige vers les fichiers de sous-titre
VOBsub.
Donc pour extraire uniquement les sous-titres d'un DVD, il suffit d'envoyer au
Terminal cette ligne de commande

list]
/usr/bin/mencoder -dvd 1 -dvd-device /Users/thiery/Desktop/Film/ -ovc frameno -nosound -o /dev/null -sid 2 -vobsubout /Users/thiery/Desktop/testst -ifo /Users/thiery/Desktop/Film/VTS_01_0.IFO[/list]Petite explication :
Comme d'habitude je pars d'un DVD rippé avec
DVD Backup. Le rip se trouve donc dans le dossier
Film qui se trouve sur le
Bureau.
-dvd <id titre> : Indication du titre à encoder.
-dvd-device : C'est un DVD que l'on encode ou à partir d'un rip identique à la structure du DVD.
/Users/thiery/Desktop/Film/ : Localisation du rip du DVD. Si vous encodez directement à parti du DVD, il faut remplacer la localisation par /dev/rdiskx ou x prend la valeur donnée par la commande mount dans le Terminal.
-ovc frameno : la source vidéo n'est pas encodée.
-nosound : la source audio n'est pas encodée.
-o /dev/null : aucun fichier .avi n'est créé en sortie.
-sid <id> : spécifie la langue pour les sous-titres. -sid commence à 0. Voir le tutoriel de Donald pour l'explication
-vobsubout : décrit ci-dessus.
-ifo <chemin> : localisation du fichier .ifo. Indique le fichier à utiliser pour charger la palette et la taille des trames des sous-titres VOBSUB.
Si vous lancez cette ligne de commande depuis le
Terminal,
mencoder crée un fichier
testst.idx et un fichier
testst.sub sur votre
bureau. Le traitement est plus ou moins long. Tout dépend de votre configuration et de la durée du film. De toute façon, vous voyez l'avancement en temps réel.
2) Extraction des sous-titres : méthode avancéeNous avons vu la méthode simple. Celle-ci est largement suffisante la plupart du temps. Mais il existe une option qui permet d'insérer plusieurs langues de sous-titres dans le même fichier de sortie. Cette option est :
-vobsuboutindex . Explication : spécifie l'index des sous-titres dans les fichiers de sortie. (par défaut : 0).
La théorie par la pratique. Reprennons notre ligne de commande et ajoutons cette option. La ligne de commande devient

list]
/usr/bin/mencoder -dvd 1 -dvd-device /Users/thiery/Desktop/Film/ -ovc frameno -nosound -o /dev/null -sid 2 -vobsubout testst /Users/thiery/Desktop/ -vobsuboutindex 0 -ifo /Users/thiery/Desktop/Film/VTS_01_0.IFO[/list]Et voilà, vous venez d'extraire vos sous-titres dans la première couche. Celle-ci est à l'index 0.
Admettons maintenant, comme je le disais au début, qu'en plus des sous-titres anglais vous vouliez les sous-titres allemand. La manipulation est toute simple. D'abord, il faut localiser son numéro d'ordre, et l'extraire toujours dans le même fichier. Par contre vous devez lui donner un autre index. Puisque précédemment l'index était 0 , maintenant il faut mettre 1.
Ce qui donne :
/usr/bin/mencoder -dvd 1 -dvd-device /Users/thiery/Desktop/Film/ -ovc frameno -nosound -o /dev/null -sid 3 -vobsubout /Users/thiery/Desktop/testst -vobsuboutindex 1 -ifo /Users/thiery/Desktop/Film/VTS_01_0.IFO
C'est pas sorcier, et vous pouvez extraire autant de langue que vous voulez. A chaque fois, il faut préciser la langue désirée avec
-sid, et changer l'index pour
-vobsouboutindex.
Admettons, que dès le début vous savez ce que vous voulez faire, et que vous voulez les sous-titres en anglais et en allemand. Pas de problème. Combiner directement les deux lignes en les séparant par un point-virgule "
;".
Ce qui donne

list]
/usr/bin/mencoder -dvd 1 -dvd-device /Users/thiery/Desktop/Film/ -ovc frameno -nosound -o /dev/null -sid 2 -vobsubout /Users/thiery/Desktop/testst -vobsuboutindex 0 -ifo /Users/thiery/Desktop/Film/VTS_01_0.IFO;/usr/bin/mencoder -dvd 1 -dvd-device /Users/thiery/Desktop/Film/ -ovc frameno -nosound -o /dev/null -sid 3 -vobsubout /Users/thiery/Desktop/testst -vobsuboutindex 1 -ifo /Users/thiery/Desktop/Film/VTS_01_0.IFO[/list]Mais attention, le fichier
.sub va augmenter de taille en fonction du nombre de langues. Donc, il faut faire très attention à cette information avant d'encoder votre film pour le mettre sur un CD. La place que vont prendre les deux fichiers, est autant de place de perdu pour le film lui-même. Et par conséquence, il faudra diminuer le bitrate vidéo, pour que les film et les sous-titres rentrent sur un CD.
3) Extraction des sous-titres pour plusieurs CDMaintenant je suis sûr que vous vous demandez : mais comment faire pour spliter mes sous-titres puisque je veux faire deux CD?
Là la seule solution qui me vient à l'esprit et qui est réalisable est : l'encodage avec une coupure à un chapitre donné.
Admettons que votre DVD comporte 14 chapitres. Sensiblement la moitié en temps se situe à la fin du septième chapitre. La manipulation est simple. Il faut ajouter dans la ligne l'information concernant les chapitres à prendre en compte. La ligne de commande devient donc

list]
/usr/bin/mencoder -dvd 1 -dvd-device /Users/thiery/Desktop/Film/ -chapter 1-7 -ovc frameno -nosound -o /dev/null -sid 2 -vobsubout /Users/thiery/Desktop/testst1 -vobsuboutindex 0 -ifo /Users/thiery/Desktop/Film/VTS_01_0.IFO[/list]Pour le second CD, vous devez juste changer le nom du fichier de sortie. Pour le premier CD, c'est
testst1 , le second peut être
testst2 . Un deuxième fichier de sous-titres va être créé. Par contre pour celui-ci, les sous-titres commencent à partir du chapitre 8. La ligne de commande pour le deuxième fichier devient donc

list]
/usr/bin/mencoder -dvd 1 -dvd-device /Users/thiery/Desktop/Film/ -chapter 1-7 -ovc frameno -nosound -o /dev/null -sid 2 -vobsubout /Users/thiery/Desktop/testst2 -vobsuboutindex 0 -ifo /Users/thiery/Desktop/Film/VTS_01_0.IFO[/list]Et pareil, rien ne vous empêche de rajouter autant de sous-titres que vous le désirez. Il suffit de reprendre les deux étapes en changeant juste l'index.
4) Détermination du bitrate vidéoMaintenant, voyons comment faire pour déterminer le bitrate vidéo pour un seul CD de 700Mo. L'essai que j'ai fait montre que mon fichier
.sub fait 7,5Mo et le
.idx fait 92Ko. N'oubliez pas aussi d'inclure le fichier
.ifo pour conserver la palette de couleur. Je désire graver mon DivX sur un seul CD. Rien de plus simple. Il suffit d'enlever 8Mo à la valeur de 700, et calculer le bitrate pour 692Mo. Vous ouvrez
FFmpegX. Vous sélectionner 1 CD de 80mn en mode-1. Vous rentrez manuellement la durée de votre film et la place restante sur votre CD soit 792Mo. Reste plus qu'à cliquer sur
Calc rate, et le tour est joué.
Pour deux CD, et bien il faut faire comme au-dessus. Evidemment l'encodage doit être fait pour les mêmes chapitres. Pas question d'encoder le film en un seul morceau et spliter l'avi final en deux à la fin. Par contre sur chaque CD, il faut copier le fichier
.ifo .
5) Lecture avec MplayerMaintenant que nous avons vu comment extraire les sous-titres, il ne reste plus qu'à regarder notre film en plein écran et avec les sous-titres que l'on désire.
Oui mais voilà,
Mplayer OS X 2 est incapable d'ouvrir ce fichu de fichier
.sub . Normal, il faut ouvrir le
.idx . Tient d'ailleurs, que contient-il ce fichier. Il contient tout simplement le timecode et les références aux images du fichier
.sub .
Exemple :
# VobSub index file, v7 (do not modify this line!)
#
# Generated by MPlayer CVS-030128-17:21-3.1
# See <URL:http://www.mplayerhq.hu/> for more information about MPlayer
# See <URL:http://vobsub.edensrising.com/> for more information about Vobsub
#
size: 720x576
palette: 0d00ee, ee450d, 101010, eaeaea, 0ce60b, ec14ed, ebff0b, 0d617a, b15528, b7d41f, 7b2a0e, 0aaae6, 2911b5, b15528, cfa80c, daff0a
# Language index in use
langidx: 0
id: de, index: 0
timestamp: 00:02:02:239, filepos: 000000000
timestamp: 00:02:04:519, filepos: 000000800
timestamp: 00:02:07:079, filepos: 000001800
timestamp: 00:02:34:800, filepos: 000002800
timestamp: 00:02:36:680, filepos: 000003000
Donc comment faire pour lire un DivX avec des sous tritres en format VOBsub?
Encore une fois, il faut utiliser la ligne de commande, et la plus simple est :
/usr/bin/mplayer /Users/thiery/Film/film.avi
Cette ligne permet de lancer le film
film.avi et ouvre juste la fenêtre de
viewer mplayer. Maintenant il faut lui dire de lire les sous-titres. Le
view qui est disponible avec
FFmpegX envoie cette ligne de commande :
/usr/bin/mplayer -vobsub /Users/thiery/film/film /Users/thiery/Film/film.avi
Si vous avez stipuler la localisation du fichier
.ifo, ce dernier est précisé aussi. Ce qui donne :
/usr/bin/mplayer -vobsub /Users/thiery/Film/film -ifo /Users/thiery/Desktop/Film/VTS_01_0.IFO /Users/thiery/Film/film.avi
Je rappel, ceci est la ligne de commande de
FFmpegX. Donc si vous avez créé un fichier de sous-titre à partir de
FFmpegX, seul cette ligne de commande suffit. Maintenant, si vous avez extrait plusieurs versions de sous-titres grâce à la technique décrite ci-dessus, seule celle qui est en index 0 sera prise en compte. Pour pouvoir lire la version que l'on désire, il faut rajouter une commande à cette ligne.
En effet, nous avons placés différents index. Il faut donc déterminer quel index nous voulons. La commande associée est :
-vobsubid <valeur> .
Donc pour lire l'index 0, la ligne citée plus haute fonctionne, mais on peut tout de même mettre cette commande. Ce qui donne :
/usr/bin/mplayer -vobsub /Users/thiery/Film/film -vobsubid 0 -ifo /Users/thiery/Desktop/Film/VTS_01_0.IFO /Users/thiery/Film/film.avi
Si vous voulez la deuxième langue, il suffit de mettre 1 à la place de 0 après
-vobsubid .
C'est aussi simple que cela.
Des questions, des remarques, n'hésitez pas. Je me ferai un plaisir de vous répondre.
Thiery