Cet article vous résumera une façon de faire pour sauvegarder le contenu d’un DVD sur son disque dur. Il existe bien sûr maintes manières de le faire. La mienne se fait à partir d’une version standard d’Ubuntu sans nécessiter de grandes compétences.
Ma source d’inspiration est très fortement tirée du très bon article de moritz sur son blog bunkus.org, bien que datant un peu (2002), on s’y retrouve encore très bien.
Prérequis
Comme l’explique le blog, certains logiciels sont nécessaires pour mener à bien notre projet :
- mplayer (lecteur multimédia en lignes de commandes)
- mencoder (encodeur en lignes de commandes)
- lame (codecs mp3)
- vobcopy (extraction des données et informations du dvd)
- libdvdread2
Normalement, vous devriez déjà tout avoir. S’il arrive qu’il vous manque quelque chose pendant la procédure, un simple apt-get install XXX devrait faire l’affaire. Ah oui je précise, on va tout faire en lignes de commandes, cela nous permettra de comprendre ce qu’il se passe, et pourquoi pas de scripter certaines parties pour nous faciliter la tâche.
En ce qui concerne le choix du codec, nous nous porterons sur lavc pour la vidéo en mpeg4, et mp3 pour le son.
Extraction des VOB
apt-get install vobcopy mount /dev/sr0 vobcopy -i /media/cdrom1 -m
Si la ligne de commandes vous rebute, l’utilitaire dvdrip
devrait faire l’affaire. Chez moi il a planté, mais peut-être que vous aurez plus de chance.
VOB → AVI
Deux choix sont possibles : mencoder, ou transcode. Je vous renvoie au blog Bunkus pour en connaître les détails (chap. 4).
Dans un premier temps, on va coder l’audio. Ensuite on va créer une prévisualisation avant de faire une première passe sur la vidéo, puis une deuxième passe qu’on va incruster à l’audio :
- Codage de l’audio :
cat *.VOB | mencoder -ovc frameno -o frameno.avi -oac mp3lame -lameopts abr:br=128 -alang fr
On ne code pas la vidéo, on utilise le codec mp3 en 128Kbps variable, et on utilise la piste française. Noter que mencoder proposer des bitrates pour la vidéo à la fin de son traitement. Pour une qualité normale, on évitera de descende en deçà de 900Kbps. Avec 1300 on est à l’aise.
- Prévisualisation de la vidéo :
Cette étape est assez importante. Elle permet de peaufiner les options que l’on va mettre à mencoder pour le codage global qui dure assez longtemps. Donc pour éviter de mauvaises surprises après 1h d’encodage, une prévisualisation s’avère fort utile.
Première passe :
mencoder -oac copy -o /dev/null -ovc lavc -lavcopts \ vcodec=mpeg4:vbitrate=1300:vhq:vpass=1 -vf scale=640:480 -ss 00:20 -endpos 0:30 FIRST.VOB
Deuxième passe :
mencoder -oac copy -o preview.avi -ovc lavc -lavcopts \ vcodec=mpeg4:vbitrate=1300:vhq:vpass=2 -vf scale=640x480 -ss 00:20 -endpos 0:30 FIRST.VOB
FIRST.VOB est le nom de votre premier fichier VOB du dossier sur lequel vous faites la preview.
Les options disent de conserver l’audio, de coder la vidéo en 1300Kbps en haute qualité (vhq), avec un ratio de 640:480. Cette prévisualisation se fait entre 20 et 30 secondes du fichier donné.
Il est important de préciser le rapport hauteur/largeur, soit en 4/3 (640×480), soit en 16/9 (640×360 par exemple). Ne rien mettre ne veut pas dire qu’on aura le même résultat sur l’AVI que celui qu’on a en regardant le DVD directement. D’où l’importance de la prévisualisation.
Attention, il est parlé des options-vop
et-npp
dans le blog Bunkus : ces options n’existent plus.
- Générer le fichier AVI final :
cat *.VOB | mencoder -oac copy -o /dev/null -ovc lavc -lavcopts \ vcodec=mpeg4:vbitrate=1300:vhq:vpass=1 -vf 640:480 cat *.VOB | mencoder -oac copy -o film.avi -ovc lavc -lavcopts \ vcodec=mpeg4:vbitrate=1300:vhq:vpass=2 -vf 640:480
Gestion des sous-titres
Si vous avez une vidéo en VO et que vous désirez inclure les sous-titres, alors ce n’est pas fini ; il reste cette dernière étape.
On va commencer par extraire les sous-titres des informations du DVD, convertir le flux en données images à incruster, passer l’OCD sur ces fichiers pour en générer des fichiers texte. On obtiendra alors à la fin un fichier SRT contenant les sous-titres de votre DVD. On pourra également incruster ces sous-titres directement dans la vidéo en démarrant une dernière compression à l’aide de mencoder.
- Extraction des sous-titres du DVD.
Il faut d’abord savoir quelle est la piste à extraire, et dans quel titre. mplayer fournit la correspondance entre les piste et la description de leur contenu :
mplayer -dvd-device . dvd://1 -vo null -ao null -frames 0 -v 2>&1 | grep sid
Si rien ne sort, supprimez le grep, il doit y avoir une erreur quelque part. Sinon, vous devriez voir quelque chose comme :
...[open] subtitle ( sid ): 4 language: fr...
Attention, vous pouvez avoir plusieurs titres sur un DVD. si c’est la piste Bonus que vous voulez, il faudra peut-être remplacer dvd://1
par dvd://2
.
Enfin, la commande pour extraire le flux des sous-titres :
tccat -i . -T 1 -L | tcextract -x ps1 -t vob -a 0x24 > subs-fr
On extrait le titre 1 (-T 1), et on envoie le flux à txextract
qui va récupérer les sous-titres (-x ps1) à partir des VOB, dans la piste no 4 (0x20 + le sid trouvé ci-dessus). Les sous-titres sont envoyés dans le fichier subs-fr.
- Conversion en fichiers images
subtitle2pgm -o french -c 255,255,0,255 < subs-fr
Ecrit dans des fichiers french-0000.pgm (-o french) à l’aide d’un filtre de conversion (-c 255,255,0,255) les sous-titres présents dans subs-fr. Si le résultat n’est pas correct, essayez de déplacer le 0 dans le paramètre c. Vous devriez avoir quelques dizaines ou centaines de fichiers pgm maintenant.
Petite vérification :
eog french-0001.pgm
Ok, ça marche 🙂
Conversion des PGM en Texte, passons les pgm à l’OCD :
pgm2txt french
Il se peut que l’outil vous demande de reconnaître pour lui certaines parties de texte qu’il n’arrive pas à lire. Vous pouvez répondre, ou laisser en appuyant seulement sur Entrée. Notez quand même les fichiers qui posent problème. Il ne doit pas y en avoir beaucoup.
Une fois le travail terminé, éditez les fichiers .txt générés pour vérifier leur contenu.
Vous pouvez essayer de passer ispell, le correcteur orthographique, mais il nécessite d’être installé :
ispell -d french french*.txt
Personnellement, je préfère encore les lire moi-même :
cat french*.txt | more
Notez alors les erreurs, et faites des grep dessus :
grep Err3ur french*.txt
Et puis corrigez.
- Etape presque finale : générez le SRT
Rien de bien compliqué :
srttool -s -w < french.srtx > french.srt
- Etape finale
Si le fichier SRT ne vous suffit pas, mais que vous voulez incorporer directement les sous-titre sur votre vidéo, une dernière compression s’impose :
mencoder -sub french.srt -utf8 -fontconfig -font Arial -subfont-text-scale 3 \ -oac copy -ovc lavc -lavcopts vcodec=mpeg4:vbitrate=1300:vhq:vpass=2 filmSource.avi -o filmDest.avi
On fourni à mencoder le fichier de sous-titres, on configure la manière de les afficher (voir prochain chapitre pour les détails), on copie la piste audio, et on réencode la partie vidéo avec les sous-titres. On peut faire une première passe, mais personnellement, la 2e passe directement est bien passée.
Etape finale
La plus facile : lancer le film 🙂
mplayer film.avi
Petite précision quand même, si vous avez généré des sous-titres dans un fichier à part (voir chapitre précédent), vous pouvez configurer leur affichage. L’affichage par défaut prend une grosse partie de l’écran…
mplayer -sub french.srt -utf8 -fontconfig -font Arial -subfont-text-scale 3 film.avi
- -sub : fichier de sous-titres
- -utf8 : permet de lire les accents correctement, vos fichiers étant théoriquement en UTF-8. Supprimez cette option si vous avez des problèmes.
- -font : Police à utiliser pour les sous-titres.
- -subfont-text-scale : Taille des sous-titres. 3 est une taille raisonnable.