Riper un DVD avec la ligne de commande

Rédigé le 14 novembre 2010
1204 mots
Tags : Vidéo, Linux, Bash

DVD

Repérer les informations intéressantes

La commande suivante va lire la piste 1 du DVD

$ mplayer dvd://1

On va successivement essayer dvd://2 puis dvd://3… jusqu’à trouver le film à encoder. Maintenant on a besoin de connaitre les pistes audio (aid : audio idenfier) ainsi que les sous-titres (sid : subtitle identifier) disponibles :

$ mplayer dvd://1 -vo null -ao null -frames 0 -v 2>&1 |grep "sid\|aid"
  audio stream: 0 format: ac3 (5.1) language: en aid: 128.
  audio stream: 1 format: ac3 (5.1) language: fr aid: 129.
  subtitle ( sid ): 0 language: en
  subtitle ( sid ): 1 language: fr

On pourra par exemple choisir l’aid : 128 pour la version originale et le sid : 1 pour les sous-titres en français. Enfin on récupère la durée du film (en secondes) afin de calculer le bitrate si on souhaite décider de la taille finale du film :

$ mplayer dvd://1 -vo null -ao null -frames 0 -identify 2>/dev/null |grep ID_LENGTH
  ID_LENGTH=6928.6

Rappelons que 1Mo=8192kb. Pour que le fichier final pèse 700Mo, avec sa piste son encodée en 128kbps, il nous faut donc un bitrate de (700×8192÷6928.6)-128 = 699,6

Lancer la conversion DivX, deux passes

Nous allons maintenant construire le fichier vidéo issu du DVD. Pour obtenir une bonne qualité d’image une conversion en deux passes est recommandée

$ video=1; aid=128; sid=1; bitrate=699; fichier=Monfilm.avi
$ mencoder dvd://$video -aid $aid -sid $sid -ovc lavc -ofps 24000/1001 \
  -lavcopts vcodec=mpeg4:vbitrate=$bitrate:mbd=2:trell:cmp=3:subcmp=3:autoaspect:vpass=1:turbo=1 \
  -oac copy -o /dev/null \
  && mencoder dvd://$video -aid $aid -sid $sid \
  -oac mp3lame -lameopts cbr:br=128:aq=0 \
  -ovc lavc -ofps 24000/1001 \
  -lavcopts vcodec=mpeg4:vbitrate=$bitrate:mbd=2:trell:cmp=3:subcmp=3:autoaspect:vpass=2 \
  -vf pullup,softskip,hqdn3d=2:1:2 -ffourcc DX50 -o $fichier

Résumé des option des lignes de commandes précédentes :

  • Pour lancer l’encodage de la piste vidéo n°1 dans la langue n°128 sous-titré
  • dans la langue n°1 : mencoder dvd://2 -aid 128 -sid 1
  • Pour réencoder l’audio en mp3 que tous les lecteurs (y compris de salon) savent lire : -oac mp3lame -lameopts cbr:br=128:aq=0
  • Pour réencoder la vidéo dans un format classique -ovc lavc -ofps 24000/1001 \ -lavcopts vcodec=mpeg4:vbitrate=2400:v4mv:mbd=2:trell:cmp=3:subcmp=3:autoaspect:vpass=1 \ -vf pullup,softskip,hqdn3d=2:1:2 -ffourcc DX50

Incruster des sous-titres d’une source exterieure (.srt) dans une vidéo .avi

Nous avons dans ce cas un fichier ‘MonFilm.avi et les sous-titres associés dans le fichier ssttr.srt. Le lecteur de salon accepte les clés USB mais ne sait pas lire le fichier de sous-titres. La solution : créer une nouvelle vidéo MonFilm_ssttr.avi’’ avec les sous-titres incrustés. Voici comment le faire en utilisant mencoder :

$ mencoder MonFilm.avi -sub ssttr.srt -fontconfig -font Arial \
-subfont-text-scale 4 -oac mp3lame -lameopts cbr:br=128:aq=0 \
-ovc lavc -lavcopts vcodec=mpeg4:vbitrate=900 -ffourcc DX50 -o MonFilm_ssttr.avi

On a donc :

  • Pour incruster le fichier ssttr.srt de sous-titres en arial taille 4 : -sub ssttr.srt -fontconfig -font Arial -subfont-text-scale 4
  • Pour réencoder l’audio en mp3 que le lecteur de salon lit à coup sûr : -oac mp3lame -lameopts cbr:br=128:aq=0
  • Pour réencoder la vidéo dans un format classique -ovc lavc -lavcopts vcodec=mpeg4:vbitrate=900 -ffourcc DX50

Repérer le crop à appliquer (suppression des bandes noires)

L’option crop est faite pour couper l’image afin de supprimer les zones inutiles du rectangle. Mais combien de pixels ? mplayer est capable de proposer des dimensions

$ mplayer dvd://2 -vf cropdetect

Parmi les sorties on repère (quitte à faire défiler le film avec «→»)

[CROP] Crop area: X: 4..714  Y: 10..559  (-vf crop=704:544:8:14).0 

Dans crop=704:544:8:14, 704:544 donne les dimensions en pixels largeur:hauteur et 8:14 donne décalageHorizontal:DécalageVertical. La hauteur et la largeur doivent etre des multiples de 16 et les décalages doivent etre pairs.

Tester le crop (-vf) et la langue (-aid)

Visualisons notre dvd en lui appliquant les options précédentes afin de vérifier que le son et l’image sont corrects

$ mplayer dvd://2 -vf crop=704:544:8:14 -aid 128

Si tout va bien, on peut passer à la suite.

Lancer la conversion DivX 2 passes haute qualité

Nous allons maintenant construire le fichier vidéo issu du DVD. Pour obtenir une bonne qualité d’image une conversion en deux passes est indispensable

$ mencoder dvd://2 -ovc lavc -ofps 24000/1001 -lavcopts vcodec=mpeg4:vbitrate=2400:v4mv:mbd=2:trell:cmp=3:subcmp=3:autoaspect:vpass=1 -vf pullup,softskip,crop=704:544:8:14,hqdn3d=2:1:2 -aid 130 -oac copy -o MonFilm.avi 
$ mencoder dvd://2 -ovc lavc -ofps 24000/1001 -lavcopts vcodec=mpeg4:vbitrate=2400:v4mv:mbd=2:trell:cmp=3:subcmp=3:autoaspect:vpass=2 -vf pullup,softskip,crop=704:544:8:14,hqdn3d=2:1:2 -aid 130 -oac copy -o MonFilm.avi 

Il arrive que certaines platines DivX de salon ne parviennent pas à lire ce fichier MonFilm.avi, la solution est alors

$ mencoder -oac copy -ovc copy -ffourcc DX50 -o MonFilmBis.avi MonFilm.avi

Les sous-titres

Sous-titres issus d’une source exterieure (.srt)

Nous avons donc un fichier ‘MonFilm.avi et les sous-titres associés dans le fichier ssttr.srt. Le lecteur de salon accepte les clés USB mais ne sait pas lire le fichier de sous-titres. La solution : créer une nouvelle vidéo MonFilm_ssttr.avi’’ avec les sous-titres incrustés. Voici comment le faire en utilisant mencoder :

$ mencoder MonFilm.avi -sub ssttr.srt -fontconfig -font Arial -subfont-text-scale 4 -oac mp3lame -lameopts cbr:br=128:aq=0 -ovc lavc -lavcopts vcodec=mpeg4:vbitrate=900 -ffourcc DX50 -o MonFilm_ssttr.avi

On a donc :

  • Pour incruster le fichier ssttr.srt de sous-titres en arial taille 4 : -sub ssttr.srt -fontconfig -font Arial -subfont-text-scale 4
  • Pour réencoder l’audio en mp3 que le lecteur de salon lit à coup sûr : -oac mp3lame -lameopts cbr:br=128:aq=0
  • Pour réencoder la vidéo dans un format classique -ovc lavc -lavcopts vcodec=mpeg4:vbitrate=900 -ffourcc DX50

Récupérer les sous-titres

Quels sont les sous-titres disponible sur le DVD ?

$ mplayer dvd://2 -vo null -ao null -frames 0 -v 2>&1 |grep sid

La commande précédente renvoie

subtitle ( sid ): 0 language: fr
subtitle ( sid ): 1 language: de

On va donc lancer la commande suivante qui extrait les sous-titres sous la forme de deux fichiers subtitles.idx et subtitles.sub :

$ mencoder dvd://2 -vobsubout subtitles -vobsuboutindex 0 -sid 0 -o frameno.avi -ovc frameno -nosound subrip subtitles 0 script.srt
$ mencoder dvd://1 -vobsubout subtitles -vobsuboutindex 0 -sid 2 -o frameno.avi -ovc frameno -nosound subrip subtitles 0 script.srt

Enfin on incruste les sou-titres dans la piste vidéo :

$ mencoder MonFilm.avi -vobsub subtitles -oac mp3lame -lameopts cbr:br=128:aq=0 -ovc lavc -lavcopts vcodec=mpeg4:vbitrate=900 -ffourcc DX50 -o MonFilm_ssttr.avi

ce qui suit n’est pas clair et n’a pas été testé.

$ sudo apt-get install ogmrip
$ subp2pgm ghostSrt

Il semble que l’option -dumpsrtsub (MPLAYER only) Convert the given subtitle (specified with the -sub option) to the time-based SubViewer (SRT) subtitle format. Creates a dumpsub.srt file in the current directory. http://tivo-mplayer.sourceforge.net/docs/mplayer-man.html#toc6 voir http://www.trustonme.net/didactels/204.html

Dans la même veine : voici de quoi réencoder en basse qualité une petite vidéo issue d’un appareil photo :

$ mencoder video.MOV -forceidx -of lavf  -oac mp3lame -lameopts abr:br=56 -srate 22050 -ovc lavc -lavcopts vcodec=mpeg4:vbitrate=250:mbd=2:mv0:trell:v4mv:cbp:last_pred=3 -vf scale=360:240 -o video.avi

Pour un ipod:

$ mencoder  INPUT.avi -sws 9 -of lavf -lavfopts format=mp4 -sub INPUT.srt -fontconfig -font Arial -subfont-text-scale 4 -vf scale=320:240,dsize=320:240,harddup -ovc x264 -x264encopts bitrate=768:vbv_maxrate=768:vbv_bufsize=1000:nocabac:me=umh:trellis=1:level_idc=30:global_header:threads=2:pass=1:turbo -oac faac -faacopts mpeg=4:object=2:br=160:raw -channels 2 -srate 48000 -o OUTPUT.mp4

https://www.teletuto.fr/story.php?title=Convertir_un_DVD_en_AVI_sous_linux_avec_mplayer_et_mencoder]

Sommaire