Pour plus de simplicité je fais une copie iso du DVD sur mon disque dure.
Cette étape n’est pas nécessaire, on peut trés bien travailler directement sur /dev/sr0
.
Sélection de la piste
Un DVD contient plusieurs titres, nous devons choisir le bon (le film).
Pour lire le titre n°1 d’un DVD
max@laptop % mpv dvd://1 --dvd-device DVD.iso
max@laptop % mpv dvdread://1 --dvd-device DVD.iso
dvd
(anciennement appelé dvdnav
) et dvdread
sont deux implémentations différentes.
dvd
peut passer automatiquement d’un titre à l’autre.
Le support de dvd://menu
a été supprimé des version récente de mpv.
Il est possible de connaitre le titre actuellement joué via dvd
en observant la sortie standard.
DVDNAV, switched to title: 23
indique que je suis en train de lire le titre 23.
Pour lister les titres d’un DVD on peut utiliser lsdvd
:
max@laptop % lsdvd DVD.iso
libdvdread: Encrypted DVD support unavailable.
Disc Title: …
Title: 01, Length: 00:00:37.080 Chapters: 01, Cells: 01, Audio streams: 01, Subpictures: 00
Title: 02, Length: 00:24:34.760 Chapters: 06, Cells: 06, Audio streams: 05, Subpictures: 02
…
Longest track: 09
max@laptop % lsdvd -t 02 -x DVD.iso
libdvdread: Encrypted DVD support unavailable.
Disc Title: …
Title: 02, Length: 00:24:34.760 Chapters: 06, Cells: 06, Audio streams: 05, Subpictures: 02
VTS: 02, TTN: 01, FPS: 25.00, Format: PAL, Aspect ratio: 16/9, Width: 720, Height: 576, DF: Letterbox
Palette: 108080 2b8080 eb8080 51ef5a 7d8080 b48080 a910a5 6addca d29210 1c76b8 50505a 30b86d 5d4792 3dafa5 718947 eb8080
Number of Angles: 1
Audio: 1, Language: fr - Francais, Format: ac3, Frequency: 48000, Quantization: drc, Channels: 6,AP: 0, Content: Undefined, Stream id: 0x80
…
Audio: 5, Language: en - English, Format: ac3, Frequency: 48000, Quantization: drc, Channels: 2, AP: 0, Content: Undefined, Stream id: 0x84
Chapter: 01, Length: 00:01:40.320, Start Cell: 01
…
Chapter: 06, Length: 00:00:00.480, Start Cell: 06
Cell: 01, Length: 00:01:40.320
…
Cell: 06, Length: 00:00:00.480
Subtitle: 01, Language: fr - Francais, Content: Undefined, Stream id: 0x20,
Subtitle: 02, Language: xx - Unknown, Content: Undefined, Stream id: 0x21,
Attention : j’ai eu des surprise avec certains DVD, j’indiquais à mpv
de lire un certain titre et il en prenait un autre.
Dans ce cas j’y vais à taton, je testes les titres jusqu’à trouver le bon.
ISO → VOB
Une fois qu’on déterminé le bon titre (ici 02) on l’extrait sous forme de VOB.
max@laptop % mpv dvdread://02 --dvd-device DVD.iso --stream-dump=titre01.vob
Playing: dvdread://02
libdvdread: Encrypted DVD support unavailable.
[dvd] There are 20 titles on this DVD.
[dvd] There are 1 angles in this DVD title.
[dvd] audio stream: 0 format: ac3 (5.1) language: fr aid: 128.
[dvd] audio stream: 1 format: ac3 (5.1) language: ja aid: 129.
[dvd] audio stream: 2 format: ac3 (stereo) language: fr aid: 130.
[dvd] audio stream: 3 format: ac3 (stereo) language: ja aid: 131.
[dvd] audio stream: 4 format: ac3 (stereo) language: en aid: 132.
[dvd] number of audio channels on disk: 5.
[dvd] subtitle ( sid ): 0 language: fr
[dvd] subtitle ( sid ): 1 language: unknown
[dvd] number of subtitles on disk: 2
[dvd] CHAPTERS: 00:00:00.000,00:01:40.320,00:09:55.040,00:22:17.360,00:23:44.120,
…
Les méta données seront perdues c’est pourquoi je les affiches ici (il faut les conserver).
On peut aussi utiliser dvd
mais je le déconseille car plusieurs titres peuvent s’enchainer.
max@laptop % mpv dvd://02 --dvd-device DVD.iso --stream-dump titre01.vob
…
libdvdnav: DVD disk reports itself with Region mask 0x00000000. Regions: 1 2 3 4 5 6 7 8
[dvdnav] DVDNAV, switched to title: 23
Dumping 1409284096/0...
[dvdnav] DVDNAV, switched to title: 1
Dumping 1465001984/0...
…
VOB → MKV
ffmpeg
Avantage : permet d’extraire les sous-titre en même temps que la vidéo.
Désavange : ne permet pas de set les couleurs de sous-titre.
max@laptop % ffprobe titre01.vob
ffprobe version 3.2.4 Copyright (c) 2007-2017 the FFmpeg developers
…
Input #0, mpeg, from 'titre01.vob':
Duration: 00:24:34.76, start: 0.280000, bitrate: 6990 kb/s
Stream #0:0[0x1e0]: Video: mpeg2video (Main), yuv420p(tv, top first), 720x576 [SAR 16:15 DAR 4:3], 25 fps, 25 tbr, 90k tbn, 50 tbc
Stream #0:1[0x80]: Audio: ac3, 48000 Hz, 5.1(side), fltp, 384 kb/s
Stream #0:2[0x81]: Audio: ac3, 48000 Hz, 5.1(side), fltp, 384 kb/s
Stream #0:3[0x82]: Audio: ac3, 48000 Hz, stereo, fltp, 192 kb/s
Stream #0:4[0x83]: Audio: ac3, 48000 Hz, stereo, fltp, 192 kb/s
Stream #0:5[0x84]: Audio: ac3, 48000 Hz, stereo, fltp, 192 kb/s
max@laptop % ffmpeg -fflags +genpts -probesize 1G -analyzeduration 1G -i titre01.vob -map 0:0 -aspect:0:0 16:9 -map 0:1 -metadata:s:a:0 language=fre -map 0:6 -metadata:s:s:0 language=fre -codec copy titre01.mkv
ffmpeg version 3.2.4 Copyright (c) 2000-2017 the FFmpeg developers
…
Output #0, matroska, to 'titre01.mkv':
Metadata:
encoder : Lavf57.56.101
Stream #0:0: Video: mpeg2video (Main) (mpg2 / 0x3267706D), yuv420p(tv, top first), 720x576 [SAR 64:45 DAR 16:9], q=2-31, 25 fps, 25 tbr, 1k tbn, 90k tbc
Stream #0:1(fre): Audio: ac3 ([0] [0][0] / 0x2000), 48000 Hz, 5.1(side), 384 kb/s
Stream #0:2(fre): Subtitle: dvd_subtitle
Stream mapping:
Stream #0:0 -> #0:0 (copy)
Stream #0:1 -> #0:1 (copy)
Stream #0:6 -> #0:2 (copy)
Press [q] to stop, [?] for help
…
max@laptop % ffprobe titre01.mkv
…
Input #0, matroska,webm, from 'titre01.mkv':
Metadata:
ENCODER : Lavf57.56.101
Duration: 00:24:34.76, start: 0.000000, bitrate: 5929 kb/s
Stream #0:0: Video: mpeg2video (Main), yuv420p(tv, top first), 720x576 [SAR 16:15 DAR 4:3], SAR 64:45 DAR 16:9, 25 fps, 25 tbr, 1k tbn, 50 tbc (default)
Metadata:
DURATION : 00:24:34.760000000
Stream #0:1(fre): Audio: ac3, 48000 Hz, 5.1(side), fltp, 384 kb/s (default)
Metadata:
DURATION : 00:24:34.304000000
Stream #0:2(fre): Subtitle: dvd_subtitle (default)
Metadata:
DURATION : 00:24:29.560000000
Options :
-fflags +genpts
workaround Can’t write packet with unknown timestamp-probesize 1G -analyzeduration 1G
permet de détecté certaines piste de sous-titres-map 0:0 -aspect:0:0 16:9
selection de la piste vidéo et application du format 16:9-map 0:1 -metadata:s:a:0 language=fre
selection de la piste audio et indication de sa langue-map 0:6 -metadata:s:s:0 language=fre
selection de la piste de sous-titre et indication de sa langue-codec copy
pas de transcodage
Il semble possible de gérer les chapitre avec ffmpeg via ffmetadata mais je n’ai jamais essayé. Je n’ai pas trouvé d’outil qui me permet de facilement extraire/converir les chapitre d’un dvd au format ffmetadata.
Sources :
mkvmerge
Avantage: outils matroska, on est sur que le mkv sera correcte,
Désavange: ne permet apparemment pas d’extraire les sous-titre en même temps que la vidéo.
mkvmerge -o output --option(s) <fichier sur lequel s'appliques les options> --option(s) <fich…> …
--disable-track-statistics-tags : désactive l'ajout de tag que je ne trouve pas necessaire (peut être mis n'importe ou dans la ligne de commande)
Extraction des chapitres de la piste :
max@laptop % dvdxchap -t 2 DVD.iso | tee titre01.chap
libdvdread: Encrypted DVD support unavailable.
CHAPTER01=00:00:00.000
CHAPTER01NAME=Chapter 01
CHAPTER02=00:01:40.320
CHAPTER02NAME=Chapter 02
CHAPTER03=00:09:55.040
CHAPTER03NAME=Chapter 03
CHAPTER04=00:22:17.360
CHAPTER04NAME=Chapter 04
CHAPTER05=00:23:44.120
CHAPTER05NAME=Chapter 05
CHAPTER06=00:24:34.280
CHAPTER06NAME=Chapter 06
Extraction de la vidéo, de l’audio :
max@laptop % mkvmerge -i titre01.vob
Fichier « titre01.vob » : conteneur : Flux de programme MPEG
Identifiant de piste 0 : video (MPEG-1/2)
Identifiant de piste 1 : audio (AC-3/E-AC-3)
Identifiant de piste 2 : audio (AC-3/E-AC-3)
Identifiant de piste 3 : audio (AC-3/E-AC-3)
Identifiant de piste 4 : audio (AC-3/E-AC-3)
Identifiant de piste 5 : audio (AC-3/E-AC-3)
max@laptop % mkvmerge --disable-track-statistics-tags -o titre01.mkv --aspect-ratio 0:16/9 --audio-tracks 1 --language 1:fre titre01.vob --chapter-language eng --chapters titre01.chap
mkvmerge v10.0.0 ('To Drown In You') 64bit
« titre01.vob » : Utilisation du démultiplexeur pour le format « Flux de programme MPEG ».
« titre01.vob » piste 0 : Utilisation du module de sortie pour le format « MPEG-1/2 ».
« titre01.vob » piste 1 : Utilisation du module de sortie pour le format « AC-3 ».
Le fichier « titre01.mkv » est ouvert en écriture.
…
max@laptop % ffprobe titre01.mkv
ffprobe version 3.2.4 Copyright (c) 2007-2017 the FFmpeg developers
…
Input #0, matroska,webm, from 'titre01.mkv':
Metadata:
encoder : libebml v1.3.4 + libmatroska v1.4.7
creation_time : 2017-04-09T16:15:46.000000Z
Duration: 00:24:34.76, start: 0.000000, bitrate: 4139 kb/s
Chapter #0:0: start 0.000000, end 100.320000
Metadata:
title : Chapter 01
Chapter #0:1: start 100.320000, end 595.040000
Metadata:
title : Chapter 02
Chapter #0:2: start 595.040000, end 1337.360000
Metadata:
title : Chapter 03
Chapter #0:3: start 1337.360000, end 1424.120000
Metadata:
title : Chapter 04
Chapter #0:4: start 1424.120000, end 1474.280000
Metadata:
title : Chapter 05
Chapter #0:5: start 1474.280000, end 1474.760000
Metadata:
title : Chapter 06
Stream #0:0: Video: mpeg2video (Main), yuv420p(tv, top first), 720x576 [SAR 16:15 DAR 4:3], SAR 64:45 DAR 16:9, 50 fps, 50 tbr, 1k tbn, 50 tbc (default)
Stream #0:1(fre): Audio: ac3, 48000 Hz, 5.1(side), fltp, 384 kb/s (default)
Pour récupérer les sous-titre vous pouvez suivre Extraction de sous-titre d’un DVD.
Intégration des sous-titre dans titre01.mkv
:
max@laptop % mv {titre01,tmp}.mkv
max@laptop % mkvmerge --disable-track-statistics-tags -o titre01.mkv tmp.mkv --language 0:fre titre01_subtitle_fr.idx
mkvmerge v10.0.0 ('To Drown In You') 64bit
« tmp.mkv » : Utilisation du démultiplexeur pour le format « Matroska ».
« titre01_subtitle_fr.idx » : Utilisation du démultiplexeur pour le format « VobSub ».
« tmp.mkv » piste 0 : Utilisation du module de sortie pour le format « MPEG-1/2 ».
« tmp.mkv » piste 1 : Utilisation du module de sortie pour le format « AC-3 ».
« titre01_subtitle_fr.idx » piste 0 : Utilisation du module de sortie pour le format « VobSub ».
…
max@laptop % ffprobe titre01.mkv
ffprobe version 3.2.4 Copyright (c) 2007-2017 the FFmpeg developers
…
Input #0, matroska,webm, from 'titre01.mkv':
Metadata:
encoder : libebml v1.3.4 + libmatroska v1.4.7
creation_time : 2017-04-09T16:16:17.000000Z
Duration: 00:24:34.76, start: 0.000000, bitrate: 4142 kb/s
Chapter #0:0: start 0.000000, end 100.320000
Metadata:
title : Chapter 01
Chapter #0:1: start 100.320000, end 595.040000
Metadata:
title : Chapter 02
Chapter #0:2: start 595.040000, end 1337.360000
Metadata:
title : Chapter 03
Chapter #0:3: start 1337.360000, end 1424.120000
Metadata:
title : Chapter 04
Chapter #0:4: start 1424.120000, end 1474.280000
Metadata:
title : Chapter 05
Chapter #0:5: start 1474.280000, end 1474.760000
Metadata:
title : Chapter 06
Stream #0:0: Video: mpeg2video (Main), yuv420p(tv, top first), 720x576 [SAR 16:15 DAR 4:3], SAR 64:45 DAR 16:9, 50 fps, 50 tbr, 1k tbn, 50 tbc (default)
Stream #0:1(fre): Audio: ac3, 48000 Hz, 5.1(side), fltp, 384 kb/s (default)
Stream #0:2(fre): Subtitle: dvd_subtitle, 720x576 (default)
Extraction d’un mkv
Pour extraire un élément d’un mkv, ici un sous-titre au format vobsub :
max@laptop % mkvmerge -i titre01.mkv
Fichier « titre01.mkv » : conteneur : Matroska
Identifiant de piste 0 : video (MPEG-1/2)
Identifiant de piste 1 : audio (AC-3/E-AC-3)
Identifiant de piste 2 : subtitles (VobSub)
Chapitres : 6 entrées
max@laptop % mkvextract tracks titre01.mkv 2:titre01_subtitle.idx
Extraction de la piste 2 avec le codec « S_VOBSUB » dans le fichier « titre01_subtitle.sub ». Format de conteneur : VobSubs
Écriture du fichier d'index VobSub « titre01_subtitle.idx ».
Progression : 100%
max@laptop % l
total 730M
-rw-r--r-- 1 max users 729M 9 avril 18:16 titre01.mkv
-rw-r--r-- 1 max users 15K 9 avril 18:27 titre01_subtitle.idx
-rw-r--r-- 1 max users 1,3M 9 avril 18:27 titre01_subtitle.sub