{{tag>brouillon multimédia encodage}}
----
====== Encodage DVD → MKV ======
Ce tutoriel est destiné à ceux qui veulent faire des rips de leurs DVD, tout en gardant la meilleure qualité possible, aussi bien audio que vidéo, en gardant les différentes pistes audio et les différentes pistes de sous-titres ---ce qui permet d'obtenir un rip multilangue---, ainsi que le système de chapitrage. Et tout ça, dans un fichier de la taille d'un CD : 700 Mio.
Toutes les étapes, de l'installation à la création du fichier final, sont expliquées dans ce tutoriel. Vous allez utiliser uniquement des formats open-source, pour la vidéo, l'audio, le chapitrage et le conteneur. Ils ont l'avantage d'être multi-plates-formes (lisibles sous Windows, Linux, Mac...), gratuits, et surtout plus performants que leurs homologues propriétaires...
Le rip se fera également grâce à des logiciels open-source, sous GNU/Linux.
Voici les caractéristiques du fichier final que vous allez obtenir en suivant ce tutoriel :
* **Conteneur :** Matroska Video
* **Codec vidéo :** x264
* **Codec audio :** OGG Vorbis aoTuV
* **Sous-titrage :** SUB
* **Chapitrage :** OGG Chapters / XML
Vous pouvez cependant n'utiliser que certaines parties du tutoriel : par exemple, si vous voulez transcoder une vidéo **ogg theora** en **x264**, vous n'avez pas besoin de la partie rip de dvd.
===== Solutions alternatives à ce tutoriel avec interface graphique =====
* [[:handbrake]]
* [[:dvdrip]]
* [[:ogmrip]]
* [[:acidrip]] (ne permet pas d'encoder le son au format AAC)
* [[:vlc]]
===== Logiciels nécessaires =====
Nous aurons besoin d'[[:tutoriel:comment_installer_un_paquet|installer ces paquets]] :
* **[[apt>mplayer]]**
* **[[apt>mencoder]]** (aussi possible avec **[[apt>ffmpeg]]**)
* **[[apt>ogmtools]]** (pour dvdxchap)
* **[[apt>vorbis-tools]]**
* **[[apt>x264]]** (pour plus d'informations: [[:x264|x264]]) (ou peut-etre **[[apt>libx264-85]]** ?)
ATTENTION: Si vous avez des problèmes de lecture de votre dvd, c'est peut-être qu'il est protégé par CSS : [[lire_un_dvd|Lire un DVD protégé par CSS]].
=== OGG Vorbis aoTuV ===
Vous pouvez utiliser le OGG Vorbis présent par défaut dans Ubuntu.
Cependant, une version "améliorée" donne apparemment de meilleurs résultats ; c'est cet encodeur qui est recommandé sur [[https://wiki.hydrogenaudio.org/index.php?title=Recommended_Ogg_Vorbis|hydrogenaudio]].
Nous aurons besoin d'[[:tutoriel:comment_installer_un_paquet|installer de nouveaux paquets]] pour rendre la compilation possible :
* **[[apt>build-essential]]**
* **[[apt>libogg-dev]]**
Cette installation remplacera votre fichier **usr/bin/oggenc**, faites-en une copie auparavant.
sudo cp /usr/bin/oggenc /usr/bin/oggenc-default
Pour télécharger et installer OGG Vorbis aoTuV :
wget http://www.geocities.jp/aoyoume/aotuv/source_code/libvorbis-aotuv_b5.tar.bz2
tar xvfj libvorbis-aotuv_b5.tar.bz2
cd aotuv-b5_20061024
CFLAGS=-fno-strict-aliasing sh ./configure
make
sudo make install
===== Rip du DVD =====
==== Sélectionner le bon titre ====
Pour lire un titre du dvd, il suffit de passer en paramètre de **mplayer** le numéro du titre :
mplayer dvd://1
Si vous avez plusieurs lecteurs de DVD, vous pouvez sélectionner le bon avec l'option ''-dvd-device chemin_du_lecteur''.
Par tatonnement, vous trouverez ainsi le bon numéro, correspondant à la vidéo que vous souhaitez encoder.
== méthodes alternatives ==
Vous pouvez utiliser **dvdnav** et observer la sortie de mplayer pour déterminer le numéro du titre.
mplayer -nocache dvdnav://
==== Extraire les chapitres ====
Pour cela nous allons utiliser **dvdxchap** avec l'argument **t** pour préciser le titre à extraire (ici on a besoin du point de montage du lecteur DVD):
dvdxchap -t 4 /dev/dvd > chapters.txt
==== Extraire en vob ====
Une fois que vous avez trouvé le bon numéro, par exemple ici 4, tapez la commande suivante pour ripper le titre dans un fichier **vob** :
mplayer -dumpstream dvd://4 -dumpfile video.vob
Les méta-données (langues des pistes audios et des chapitres) seront perdues.
Il est donc conseillé de les noter dans un fichier texte ou autre ; elles sont affichées par ''mplayer'' via des lignes comme :
Flux audio : 0 format : ac3 (5.1) langue : ja aide : 128.
Flux audio : 1 format : ac3 (5.1) langue : en aide : 129.
et
Sous-titre ( sid ) : 0 langue : en
Sous-titre ( sid ) : 1 langue : fr
Sous-titre ( sid ) : 2 langue : es
Avant de retirer le DVD de votre lecteur, et si vous souhaitez extraire les sous-titres du dvd, il est conseillé de sauvegarder les fichiers IFO qu'il contient.
**À partir de maintenant, vous pouvez retirer le DVD.**
=== méthodes alternatives ===
Si vous avez des problèmes pour récupérer le fichier vob avec la méthode ci-dessus, vous pouvez essayer avec la commande :
mplayer -nocache -dumpstream dvdnav://4 -dumpfile video.vob
=== méthodes plus simples ===
Avec l'outil **vobcopy** qui choisit directement le titre contenant le plus de chapitres pour le copier sur le disque dur.
vobcopy -l
Il existe aussi d'autres logiciels capables de décoder et copier les dvds sur disque dur ; vous pouvez essayer :
* [[https://transcoding.org/|transcode]] (complexe à utiliser)
* dvdbackup
===== Encoder les pistes audio =====
Dans cette section nous allons extraire et encoder certaines pistes audios du vob.
Cela est utile pour bien comprendre le processus d'extraction, encodage et empaquetage dans le mkv.
Cependant, il est aussi possible d'encoder l'audio et la vidéo en même temps, voir d'empaqueter le tout dans un mkv en une seule commande.
L'encodage simultané a aussi l'avantage d'éviter les désynchronisations audio/vidéo.
La section [[encodage_dvd_mkv#encoder_l_audio_et_la_video_simultanement|encoder l'audio et la vidéo simultanément]] donne les bases de cette procédure.
==== Méthode utilisant mplayer et oggenc ====
Vous avez normalement déjà déterminé le numéro des pistes audios à extraire dans la section [[encodage_dvd_mkv#extraire_en_vob|Extraire en vob]].
Par exemple, si vous voulez sauvegarder la piste japonaise sachant que :
Flux audio : 0 format : ac3 (5.1) langue : ja aide : 128.
Vous devrez extraire la piste audio numéro 128.
Pour lire le fichier **vob** en utilisant une piste audio particulière (ici la numéro 128), histoire d'être sûr :
mplayer video.vob -aid 128
Pour l'extraire en **wav**, tapez la commande suivante :
mplayer video.vob -aid 128 -ao pcm:file=audio128.wav -vc null -vo null
Vous pouvez ajouter l'option "fast" pour obtenir une extraction plus rapide (l'erreur "Your system is too SLOW to play this!" devient alors normal) :
mplayer video.vob -aid 128 -ao pcm:fast:file=audio128.wav -vc null -vo null
Pour l'encoder en **OGG Vorbis**, il faut choisir un débit nominal ou une valeur de qualité.
Voici la relation entre le //preset// de qualité **q** et le débit nominal **b** en **Kibits/s** :
**b =**
* 16×q + 64 si qϵ[0;4] ;
* 32×q si qϵ[4;8] ;
* 64×q - 256 si qϵ[8;9] ;
* 180×q - 1300 si qϵ[9;10].
Pour encoder en donnant en paramètre un débit nominal, ici 112 :
oggenc audio128.wav -b 112
Attention, ce n'est qu'un débit //nominal//, le débit réel sera sûrement inférieur pour un film.
Pour encoder en utilisant une valeur de qualité :
oggenc audio128.wav -q 3
Ces 2 commandes fournissent des fichiers de même taille à l'octet près (car **q3** et **112 Kibits/s** sont équivalents).
Pour vous donner un ordre d'idée, pour un film, on choisit généralement un //preset// entre **3** et **4,5**, selon la durée du film.
==== Méthode utilisant ffmpeg ====
D'abord on détermine la liste des pistes (video/audio/sous-tire/...) :
ffmpeg -i video.vob
Normalement l'ordre des pistes est la même que celle déterminée dans la section [[encodage_dvd_mkv#extraire_en_vob|Extraire en vob]] ; cependant les numéros sont différents (ils sont sous la forme "0:x").
Une fois qu'on a repéré la piste audio voulue (ici la numéro 2) on l'extrait :
ffmpeg -i video.vob -map 0:2 -vn -sn -acodec libvorbis -aq 3 -ac 2 audio.ogg
* **-map 0:2** permet de choisir la piste à encoder.
* **-vn** on extrait aucune piste vidéo (on ne conserve que la piste audio)
* **-sn** on extrait aucune piste de sous-titre (on ne conserve que la piste audio)
* **-aq 3** permet de choisir la qualité du son, plus la valeur est grande, meilleur est la qualité. Ce paramètre va de 1 à 10.
* **-ac 2** permet de spécifier le nombre de canaux voulu (2 pour du stéréo, 6 pour du 5.1, etc.), cette option n'est pas obligatoire.
==== Méthode utilisant ffmpeg2theora ====
On peut utiliser **[[apt>ffmpeg2theora]]** dont la sortie par défaut utilise le codec audio ''vorbis'' :
ffmpeg2theora video.vob -a 3 --novideo -o audio.oga
Pour changer le numéro de la piste (qui s'affiche lors de l'encodage avec ffmpeg2theora) :
ffmpeg2theora video.vob -a 3 --audiostream 2 --novideo -o audio.oga
* **-a 3** permet de choisir la qualité du son.
* **%%--%%audiostream 2** permet de choisir la piste son à extraire. Pour avoir la bonne langue, choisissez la piste qui vous concerne.
===== Encoder la vidéo =====
Cette section est la suite logique de la précédente ; nous allons maintenant extraire et encoder la piste vidéo du fichier vob.
==== Déterminer si votre vidéo est entrelacée ====
Si, lors des mouvements, des [[http://fr.wikipedia.org/wiki/Entrelacement_(vidéo)|lignes horizontales]] apparaissent sur l'image, il faut utiliser un filtre de désentrelacement.
Si vous n'êtes pas sûr, jouez une scène d'action image par image (la touche "." avec ''mplayer''), ça se voit très bien.
Attention, ne pas utiliser de filtre de désentrelacement sur une source **Telecine**.
En effet, le **Telecine** peut être inversé de manière //lossless// (sans pertes), contrairement à l'entrelacement.
Si vous voulez encoder la vidéo avec **mencoder**, vous avez le choix entre plusieurs désentrelaceurs :
* **lavcdeint :** ?
* **kerndeint :** Kernel deinterlace
* **filmdint :** ?
* **pp=lb :** Linear Blend Deinterlace
* **pp=li :** Linear Interpolating Deinterlace
* **pp=ci :** Cubic Interpolating Deinterlace
* **pp=md :** Median Deinterlace
* **pp=fd :** FFMpeg Deinterlace
Pour lire votre vidéo avec un filtre de désentrelacement, tapez la commande suivante (si vous voulez utiliser le désentrelaceur cubique) :
mplayer video.vob -vf pp=ci
Si vous voulez encoder la vidéo avec **ffmpeg**, pas besoin de vous creuser la tête… vous utiliserez l'option **-deinterlace** (équivalent de pp=fd).
Surtout, si votre vidéo n'est pas entrelacée, n'appliquez aucun filtre de désentrelacement, vous perdriez en qualité!
==== Déterminer le crop ====
Les vidéos provenant des DVD contiennent souvent des bandes noires, il faut les détourer.
Pour détecter la bonne valeur de crop à utiliser, il suffit de lancer la vidéo avec cette commande :
mplayer video.vob -nosound -vf cropdetect
Placez vous sur une scène où les bandes noires apparaissent clairement et où le contraste film/bande est fort.
Il est aussi conseillé d'avancer un peu après le début du film, lorsque la taille des bandes est stable (utilisez l'argument -ss).
En effet, parfois les bandes des séquences d'introduction du film sont différentes de celles utilisées pendant le film.
**mplayer** devrait afficher la meilleure valeur de crop à utiliser, en respectant la taille des blocs (les valeurs sont des multiples de 16).
Vous pouvez fermez la vidéo.
Récupérez, par copier-coller, le paramètre **-vf crop** ainsi trouvé, puis lisez la vidéo en indiquant le découpage :
mplayer video.vob -vf crop=720:576:0:0
Vous pouvez également visualiser l'effet du crop en faisant apparaître un rectangle simulant le découpage sur la vidéo originale :
mplayer video.vob -vf rectangle=656:576:34:0 -nocache -nosound
Si cela ne convient pas vous pouvez modifier les valeurs manuellement.
Cependant, veuillez à ce que les tailles de l'image soit des multiples de 16 (largeur = premier nombre du crop ; hauteur = deuxième nombre du crop).
Pour une meilleur efficacité du codec il est préférable de ne laisser aucune bande noir, si petite soit-elle.
==== Déterminer le débit vidéo ====
Ce calcul n'est utile que si vous souhaitez fixer la taille du fichier final (pour le faire tenir sur un CD par exemple).
Si la qualité de l'image importe plus, passez directement à la section [[encodage_dvd_mkv#encodage_visant_une_qualite|encodage visant une qualité]].
Certaines notations utilisées, pourtant normalisées, sont très peu connues ; consultez les articles de wikipédia sur les [[http://fr.wikipedia.org/wiki/Préfixe_binaire|préfixes binaires]] et sur l'unité [[http://fr.wikipedia.org/wiki/Octet|octet]].
Pour calculer le débit moyen d'encodage de la vidéo, vous avez besoin de connaître:
* **cd :** la taille finale du fichier que vous voulez obtenir (en Mio) (par exemple 700 Mio) ;
* **aud :** la somme des tailles des pistes audio que vous avez encodées (en Mio) ;
* **st :** la taille des pistes de sous-titres (comptez 1 Mio à 2 Mio par piste) ;
* **d :** la durée de la vidéo (en secondes).
Le débit **bitrate** à utiliser en paramètre du **x264** est calculé de la manière suivante :
**bitrate =** (cd - aud - st) × 2^23 × 10^-3 / d
Pour vous faciliter le calcul, 2^23 × 10^-3 = 8388,608.
Pour ceux qui veulent comprendre cette formule, //cd - aud - st// correspond à la taille en Mio réservée à la vidéo.
Pour convertir de Mio en Kio, il faut multiplier par //2^10//.
On divise ce résultat par la durée pour obtenir la taille à utiliser en moyenne pour chaque seconde de vidéo, on obtient donc un résultat en Kio/s.
On le multiplie par //8 = 2^3// pour obtenir le résultat en Kibits/s.
Comme le débit à passer en paramètre de l'encodeur **x264** doit être exprimé en Kbits/s, et non en Kibits/s, il faut multiplier par //2^10 × 10^-3//
==== Encodage ====
Pour l'encodage vous avez le choix d'utiliser **mencoder** (qui utilise lui même x264), ou **ffmpeg** (qui peut utiliser libx264, ce dernier ayant la réputation de fournir des images de meilleur qualité).
=== mencoder ===
== encodage visant une taille de fichier (complexe) ==
Avec un encodage à 800 Kbit/s, en 2 passes, sans désentrelacement, tapez la commande suivante :
__Pour la 1ère passe :__
mencoder video.vob -o video.avi -vf pp=ci,crop=720:576:0:0 -ovc x264 -x264encopts bitrate=800:frameref=8:mixed_refs:bframes=3:b_adapt:b_pyramid=strict:weight_b:partitions=all:8x8dct:me=umh:subq=7:trellis=2:threads=auto:pass=1 -nosound -nosub
__Pour la 2nde passe :__
mencoder video.vob -o video.avi -vf pp=ci,crop=720:576:0:0 -ovc x264 -x264encopts bitrate=800:frameref=8:mixed_refs:bframes=3:b_adapt:b_pyramid=strict:weight_b:partitions=all:8x8dct:me=umh:subq=7:trellis=2:threads=auto:pass=2 -nosound -nosub
Ces paramètres donnent une extrêmement haute qualité (on peut encore augmenter certains paramètres, mais ça serait de l'abus), mais demandent beaucoup de temps d'encodage : environ 12 h pour un film de 2h à 1Mbit/s sur un core 2 duo 1,6 GHz (ordinateur portable).
Cependant la première passe ne sert qu'à créer un fichier statistique, on peut donc choisir des paramètres moins élevés pour qu'elle se déroule plus rapidement, la perte n'est pas perceptible en général. Il est ainsi possible de diviser la durée de la première passe par 4 et arriver à 7h30 pour l'exemple précédent.
Exemple 1ère passe plus rapide :
mencoder video.vob -o video.avi -vf pp=ci,crop=720:576:0:0 -ovc x264 -x264encopts bitrate=800:frameref=8:mixed_refs:bframes=3:subq=3:b_pyramid:weight_b:threads=auto:pass=1 -nosound
Vous pouvez alors changer les paramètres en vous documentant sur le [[http://www.mplayerhq.hu/DOCS/HTML/fr/menc-feat-x264.html|site de mplayer]].
Bien sûr, adaptez le crop, l'éventuel filtre de désentrelacement et le débit selon votre vidéo.
Pour mettre les deux étapes en file, par exemple si vous n'avez pas le temps de passer à la fin de la première passe mettre la commande de la deuxième passe, copiez les commandes dans un fichier texte chacune sur une ligne.
Enregistrer le fichier dans le répertoire sous le nom "encodage" et lancer depuis le terminal la commande "sh encodage".
== encodage visant une taille de fichier (simple) ==
Si vous ne comprenez pas grand chose aux paramètres de "-x264encopts" cités plus haut, il existe une alternative plus simple mais qui n'est pas dans le man de ''mencoder''.
Celui-ci utilise le programme ''x264'' pour encoder le flux et ne fait que lui relayer les options passées avec "-x264encopts".
x264 possède des liste d'options prédéfinie regroupé en //profile//, //preset// et //tune//.
On peut les lister avec la commande :
x264 --help
Par exemple pour un anime on peut utiliser :
mencoder video.vob -o video.avi -vf crop=720:576:0:0 -ovc x264 -x264encopts bitrate=800:preset=slow:tune=animation:threads=auto:pass=1 -nosound -nosub
mencoder video.vob -o video.avi -vf crop=720:576:0:0 -ovc x264 -x264encopts bitrate=800:preset=slow:tune=animation:threads=auto:pass=2 -nosound -nosub
Plus le //preset// est lent, meilleur sera la qualité.
L'option "threads=auto" est à conserver, elle permet d'utiliser tous les CPU de la machine.
== encodage visant une qualité ==
Généralement le fichier final est destiné à être gravé (sur un CD par exemple), d'où le calcule du bitrate effectué au chapitre : [[encodage_dvd_mkv#determiner_le_debit_video|Déterminer le débit vidéo]]
Lorsque le fichier n'est pas destiné à être gravé et que la qualité de l'image importe plus que la taille du fichier, il est possible d'encoder la vidéo en utilisant un paramètre de **crf** (constant rate factor).
Avec ce paramètre, on ne vise pas une taille de fichier mais une qualité d'image ; le débit varie alors suivant les scènes pour garantir cette qualité tout au long du film.
Cette méthode ne nécessite qu'une seul passe :
mencoder video.vob -o video.avi -vf crop=720:576:0:0 -ovc x264 -x264encopts crf=20:preset=slow:tune=animation:threads=auto -nosound -nosub
Dans certains cas, l'ajout des options "harddup et scale" seront nécessaires.
Ce qui donnera :
mencoder video.vob -o video.avi-ovc x264 -x264encopts crf=20:preset=slow:tune=film -nosound -vf crop=720:416:0:80,scale,harddup
Le paramètre "crf" peut varier de 0 à 51, plus il est petit, meilleur est la qualité (0 correspondant à un encodage sans perte).
=== ffmpeg ===
''ffmpeg'' permet d'utiliser ''libx264'' qui semble donner de meilleurs résultats.
Il ne possède pas de //tune// comme ''x264'', il dispose en revanche de ces propre //preset// et //profile//.
Ceux-ci sont disponibles sous forme de fichier, un simple "locate ffpreset" permet de les trouver.
Cette partie du tutoriel est fortement inspirée de [[http://rob.opendot.cl/index.php/useful-stuff/ffmpeg-x264-encoding-guide|ce billet]] du blog de Robert Swain.
== encodage visant une taille de fichier ==
Chaque //preset// possède son équivalent spécifique à la première passe (on ajoute "_firstpass" au nom du //preset//), ils permettent d'augmenter la vitesse de celle-ci sans altérer la qualité :
ffmpeg -i video.vob -an -sn -pass 1 -vcodec libx264 -vpre slow_firstpass -b 800k -threads 0 -vf crop=720:576:0:0 video.mkv
puis la second passe :
ffmpeg -i video.vob -an -sn -pass 2 -vcodec libx264 -vpre slow -b 800k -threads 0 -vf crop=720:576:0:0 video.mkv
* **-an** : on extrait aucune piste audio (on ne conserve que la piste vidéo)
* **-sn** : on extrait aucune piste de sous-titre (on ne conserve que la piste vidéo)
* **-vpre** : spécifie le //preset// (on peut spécifier plusieurs fois cette option)
* **-threads 0** : permet d'utiliser tous les CPU
* **-deinterlace** : si la vidéo est entrelacée
Pour les appareils et lecteurs ne supportant pas les fonctionnalités les plus avancées de h264, il est conseillé d'utiliser le //preset// "main" (voir "baseline") en plus du //preset// de rapidité.
== encodage visant une qualité ==
ffmpeg -i video.vob -an -vcodec libx264 -vpre slow -crf 20 -threads 0 -vf crop=720:576:0:0 video.avi
===== Encoder l'audio et la vidéo simultanément =====
Cette section n'est pas la suite logique de la section précédente !
Ici nous considérerons que vous avez déjà lu le reste du tutoriel et que vous comprenez les notions qu'il contient.
Nous ne traiterons qu'un exemple utilisant une passe **crf**.
Pour encoder simultanément l'audio et la vidéo vous pouvez vous inspirer de la commande :
ffmpeg -i video.vob -threads 0 -map 0.0 -map 0.1 -sn -vcodec libx264 -vpre veryslow -crf 20 -acodec libvorbis -ac 2 -aq 4 final.mkv
La première **-map** doit être celle désignant la piste vidéo et la seconde l'audio.
L'option "-sn" est importante car la sortie mkv de ''ffmpeg'' cherche par défaut une piste vidéo, une audio et une de sous-titre.
Or le fait de spécifier au moins une de ces pistes avec l'option "-map" oblige l'utilisateur à spécifier les autres ou à indiquer qu'il n'en veut pas, via les options "-vn", "-an" ou "-sn".
Concrètement, si vous ne spécifiez pas "-sn" ''ffmpeg'' retournera une erreur en vous indiquant que vous n'avez pas le bon nombre d'options "-map".
== plusieurs piste audio ==
Pour cela vous pouvez utiliser l'option **-newaudio**, avec la syntaxe suivante :
ffmpeg -i video.vob -threads 0 -map 0.0 -map 0.1 -sn -vcodec libx264 -vpre veryslow -crf 20 -acodec libvorbis -alang fre -ac 2 -aq 4 final.mkv -map 0.2 -acodec libvorbis -alang eng -ac 2 -aq 4 -newaudio
L'option "-alang" n'est pas obligatoire, elle permet d'ajouter l'information de langage de la piste audio dans le mkv final.
**/!\ "-lang" n'est pas reconnue par FFMPEG. Il s'agit d'un paramètre reconnu par MEncoder par contre, à corriger.**
=== synchronisation audio/vidéo ===
Lors de l'encodage simultané audio/vidéo ''ffmpeg'' ne prend pas en compte le décalage initial qui peut exister entre ces deux pistes dans le fichier vob.
Cela peut entraîner une désynchronisation des pistes dans le mkv final.
Pour éviter ce problème, nous pouvons utiliser l'utilitaire **tcprobe** fourni par **transcode** :
tcprobe -i video.vob
Les valeurs intéressantes sont les "PTS" qui déterminent le temps de démarrage des pistes dans le vob.
Si par exemple le PTS de la vidéo est de 0,1 et celui de l'audio est de 1,1 ; comme ffmpeg ne prend pas en compte ces valeurs, l'audio sera avancé d'une seconde dans le mkv final (le son arrivera 1s avant l'image correspondante).
Pour rectifier ce décalage, on peut utiliser l'option "-itsoffset" avec la syntaxe suivante :
ffmpeg -i video.vob -itsoffset -1 -i video.vob -map 1.0 -map 0.1 -sn -vcodec libx264 -vpre veryslow -crf 20 -acodec libvorbis -ac 2 -aq 4 final.mkv
L'option "-itsoffset" applique un délai à tous les fichiers d'entrés ("-i") qui sont spécifiés après elle.
"-map 1.0" permet de spécifier que nous prenons la piste vidéo dans l'entrée décalée (deuxième "-i"), et "-map 0.1" l'audio dans la première entrée (premier "-i").
Ici nous appliquons donc un délai négatif à la vidéo pour la resynchroniser avec l'audio.
Attention, pour une raison quelconque (bug ou //feature// ?) seul la vidéo peut être décalée !
C'est à dire que la première option "-map" (qui spécifie forcément la piste vidéo) doit toujours être "1.x".
En effet, la commande suivante ne fonctionne pas (mais ne crash pas non plus), bien qu'elle soit théoriquement équivalente à la précédente :
ffmpeg -i video.vob -itsoffset 1 -i video.vob -map 0.0 -map 1.1 -sn -vcodec libx264 -vpre veryslow -crf 20 -acodec libvorbis -ac 2 -aq 4 final.mkv
===== Extraire les sous-titres =====
Si votre DVD contient des sous-titres, il est possible de les intégrer au fichier final.
Dans la section [[encodage_dvd_mkv#extraire_en_vob|extraire en vob]] nous avons sauvegardé les identifiants des pistes de sous-titres ; mais pour plus de précision vous pouvez les tester avec la commande :
mplayer -sid 2 video.vob
où "-sid" spécifie l'identifiant de la piste de sous-titre.
Une fois que vous connaissez les numéros sid qui vous intéresse, il suffit de faire :
mencoder video.vob -vobsubout subtitles -vobsuboutindex 0 -sid 2 -o /dev/null -nosound -ovc frameno
Les fichiers subtitles.idx et subtitles.sub seront alors créés dans le répertoire courant.
Répétez cette opération pour chacune des pistes de sous-titres que vous souhaitez extraire, en changeant le numéro de l'option "vobsuboutindex" (incrémentez-le pour chaque nouveau sous-titre).
Il existe des méthodes permettant de transformer ces sous-titre "vobsub" en "srt".
Nous ne les détaillerons pas ici cependant, voici deux liens qui sont particulièrement utile pour comprendre la méthode (en anglais) :
* [[http://lists.mplayerhq.hu/pipermail/mplayer-users/2006-August/062168.html]]
* [[http://www.bunkus.org/dvdripping4linux/en/separate/subtitles.html]]
== méthode alternative ==
tcextract -i video.vob -t vob -x ps1 -a 0x21 > francais.ps1
ou à partir d'un DVD
tccat -i /dev/dvd -T1 | tcextract -t vob -x ps1 -a 0x21 > francais.ps1
Vous pouvez alors transformer le fichier français.ps1 en vobsub (ou en image via subtitle2pgm, pour ensuite les passer à l'OCR et faire un srt) :
subtitle2vobsub -p francais.ps1 -i /media/dvd/VIDEO_TS/VTS_01_0.IFO -a 0,fr -o francais
Cela crée les fichiers "francais.idx" et "francais.sub"
Ces options ne sont pas obligatoires :
* **-i** : spécifie le fichier déterminant la taille et la palette de couleurs des sous-titres
* **-a** : spécifie le vobsuboutindex et la langue
===== Multiplexer en mkv =====
Nous aurons besoin de :
* **[[apt>mkvtoolnix]]**
* **[[apt>mkvtoolnix-gui]]**
Démarrez la **M**kv**M**erge**G**UI :
mmg
=== Input ===
Dans le premier onglet − //input// − ajoutez la vidéo, les pistes audio et les pistes de sous-titres, de préférence dans l'ordre que vous souhaitez établir par défaut.
Sélectionnez ensuite chacune des pistes audio dans la liste //Tracks// et définissez en la langue. Donnez leur éventuellement un titre.
Il se peut que les pistes audio et vidéo n'aient pas la même durée... Cela risque d'introduire un gros décalage entre la bande vidéo et la bande son.
Vous pouvez heureusement décaler la bande son dans le "sous onglet" //Format Specific Options// en indiquant ce décalage dans le champ //Delay// (en millisecondes).
Sélectionnez les pistes de sous-titres, définissez en la langue et choisissez le format de compression zlib.
Redirigez éventuellement la sortie avec le champ //Output filename//.
=== Attachments ===
Dans cet onglet, vous pouvez ajoutez l'affiche du film, la couverture du boitier DVD, le synopsis du film dans un fichier texte, etc.
Tout ce qui se trouve dans cet onglet est optionnel.
N'oubliez pas de bien préciser le type mime de chacun des fichiers joints.
=== Global ===
Dans le champ //File/segment title//, renseignez le titre du film.
Dans le champ //Chapter file//, parcourez l'arborescence pour y ajouter votre fichier de chapitrage du DVD.
Précisez en juste en dessous la langue.
Si votre fichier est en XML, précisez l'encodage utilisé (généralement utf-8 pour le XML).
=== Start Muxing ===
Appuyez sur le bouton //Start Muxing//...
Quelques dizaines de secondes plus tard, votre fichier mkv est prêt : il contient un film avec une image qualité DVD, plusieurs bandes sons, plusieurs pistes de sous-titres et un chapitrage complet du film.