DVD-Titel inklusive Untertitel archivieren

Ein kleiner Memo-Eintrag, in erster Linie für mich selbst. Logisch, dass dies in Deutschland so nur mit selbst erstellten DVDs oder mit gekauften DVDs ohne Kopierschutz gemacht werden darf (und die archivierte Kopie natürlich auch nicht weitergegeben werden darf, aber das ist wohl selbstverständlich)...

Komplette DVD-Kopie anlegen:

$ dvdbackup -M

Einen einzelnen Titel N auslesen:

$ mplayer dvdnav://N -nocache -dumpstream -dumpfile dvdtitel-N.vob

Den Titel in ordentlicher Qualität ins H.264-Format umwandeln. Dazu zunächst mit ffmpeg die Tonspuren identifizieren:

$ ffmpeg -i dvdtitel-N.vob
...
    Stream #0.0[0x1e0]: Video: mpeg2video
    Stream #0.1[0x80]: Audio: ac3, 48000 Hz, 5.1, s16, 448 kb/s
    Stream #0.2[0x81]: Audio: ac3, 48000 Hz, 5.1, s16, 448 kb/s

Die Zuordnung der Indexes zu den Sprachen kann zum Beispiel mit mplayer geprüft werden. Allerdings verwendet mplayer die dezimale Schreibweise: 0x80 = 128, 0x81 = 129, usw. Mit dem Wissen um die Zuordnung kann die Umwandlung gestartet werden. Hier im Beispiel werden die zwei Tonspuren 0x80 (eng) und 0x81 (ger) getauscht. Weitere können am Ende des Befehls angefügt werden. Soll die Reihenfolge der Spuren nicht geändert werden, dann sind die -map-Parameter optional.

ffmpeg -i dvdtitel-N.vob -threads 0 \
    -map 0 -map 0.2 -map 0.1 \
    -vcodec libx264 -vpre normal -level 51 -crf 23 \
    -acodec copy -alang ger \
    dvdtitel-N.mkv \
    -acodec copy -alang eng -newaudio

Bei Filmen im Interlaced-Format sollte man hinter "-vpre normal" außerdem noch "-flags +ilme+ildct" einfügen. Ob es sich um Interlacing-Material handelt, kann man zum Beispiel mit transcode schnell herausfinden:

$ transcode -i dvdtitel-N.vob -c 0-500 -J 32detect=verbose=1 2>&1 \
    | grep "interlaced = yes"

Den Untertitel mit der ID 1 und der Sprache deutsch im vobsub-Format in die Dateien "dvdtitel-N.idx" und "dvdtitel-N.sub" speichern:

$ mencoder dvdnav://N -nocache -nosound -ovc frameno -o /dev/null \
    -slang de -sid 1 -vobsuboutindex 0 -vobsuboutid de -vobsubout dvdtitel-N

Den vobsub-Untertitel mithilfe von Texterkennung in das SRT-Format umwandeln:

  1. Avidemux starten
  2. Tools >OCR (VobSub -> srt)...
  3. IDX-Datei auswählen, die dazugehörige .SUB wird automatisch gefunden
  4. Ausgabe SRT-Datei
  5. Falls bereits vorhanden kann ein bestehender Zeichensatz für die Texterkennung ("Glyphs") ausgewählt werden.
  6. Dem OCR-Programm bei der Erkennung der Buchstaben helfen.
    Avidemux scheint Probleme mit Umlauten zu haben. Stößt das Programm auf ein "ö,ä,ü,ß", so empfehlt es sich, statt dessen eben "oe,ae,ue,ss" einzugeben.
  7. Gegebenenfalls den so erstellen Zeichensatz für eine zukünftige Verwendung speichern.
  8. Die erzeugte SRT-Datei falls nötig ins UTF8-Format umwandeln:
    $ recode latin1..utf8 dvdtitel-N.srt

Falls Avidemux die Zeichen nicht erkennt, fehlt in der .IDX-Datei vermutlich die Farbpalette. In diesem Fall die Datei einfach in einem Texteditor öffnen und die folgende Zeile einfügen (ohne den Zeilenumbruch):

palette: 000000, ffffff, 000000, faff1a, ffffff, bebebe, 14bef3, ea12eb,  
faff1a, 000070, 067506, 731f03, 095f78, 750975, 7c950b, ffffff

Die Untertitel in die .mkv-Datei einfügen (hier mit einer deutschen und einer englischen Spur):

$ mkvmerge -o dvdtitel-N-with-subtitles.mkv dvdtitel-N.mkv \
    --language 0:ger dvdtitel-N-de.srt \
    --language 0:eng dvdtitel-N-eng.srt