Popular Categories

NoMoKeTo

Meinung, Technik, Erlebnisse

3D-Blu-rays rippen / Multiview-Video-Coding (MVC) auf Linux

Veröffentlicht am

In diesem Beitrag zeige ich, wie man auf Linux aus einer 3D-Blu-ray oder einer MVC-kodierten Datei beide Bilder extrahiert – in zwei eigene Videospuren oder SBS, je nach Wahl.

Hintergrund: 

Ein 3D-Film besteht aus zwei Videospuren – einem für das linke und einem für das rechte Auge. Es gibt verschiedene Wege, diese beiden Spuren zu speichern – der verbreitetste dürfte sein, beide Bilder auf halber Breite nebeneinander in einen einzige Videospur zu packen. Dieses Verfahren nennt man Side-By-Side (SBS) oder auch Half-Side-By-Side (HSBS) und es bringt den Vorteil, dass normale Videodecoder nicht mit der doppelten Anzahl an Pixeln konfrontiert werden.

3D Blu-rays funktionieren anders. Eine Blu-ray möchte beide Videospuren in voller Auflösung liefern – damit aber möglichst keine Player überfordern die 3D nicht unterstützen. Daher wird auf Blu-rays das Bild in zwei Videospuren geliefert. Die erste Videospur wird dabei wie eine 2D-Spur auf der Blu-ray hinterlegt (Videocodec h264), die zweite in SSIF-Dateien. (Wobei offenbar intern auf die Sektoren der ersten Spur doppelt angesprochen werden, sodass die SSIF Datei quasi die 2D-Videospur in Kombination mit einer weiteren wiedergibt.) Entscheidend ist: Die Daten der zweiten Spur sind keine übliche Videospur – es handelt sich dabei um Multiview Video Coding (MVC). Dieses Verfahren speichert von der zweiten Spur nur die Unterschiede zur Ersten und braucht dadurch offenbar bis zu 50% weniger Platz.

Auch wenn das cool ist: Für uns bringt es den Nachteil, dass wir einen Player brauchen der das unterstützt – und das trifft auf kaum einen zu, schon gar nicht auf Linux. Auch ffmpeg oder ähnliches unterstützt bisher kein MVC (es gibt einen Versuch, aber genutzt hat das bis auf den Autor vermutlich noch niemand – bei mir funktioniert es nicht). Aber auch wenn der Konsens im Netz zu sein scheint, es ginge nicht – doch, es geht.

Installation der benötigten Software:

Benötigt dafür wird:

  • Eine 3D-Bluray ohne Kopierschutz als Dateistruktur oder Image
  • mkvtoolnix zum Analysieren und Muxen von MKV-Dateien (GUI mitinstallieren, falls das ein eigenes Paket in deiner Distribution ist)
  • MakeMKV zum extrahieren des gewünschten Titels aus der Blu-ray
  • Wine (es tut mir so leid)
  • ffdshow (unter Wine) für Videodecoding
  • FRIMDecode (unter wine), der eigentliche Decoder (alle .dll und .exe in ~/.wine/drive_c/windows/system32 entpacken)
  • ffmpeg oder ein anderer Videoencoder nach Wahl
  • Ein anständiger Videoplayer – ich empfehle uneingeschränkt: MPV

1. Extrahieren des gewünschten Titels aus der Blu-ray

Zunächst muss der gewünschte Titel als MKV aus der Blu-ray extrahiert werden. Dafür öffnet man die Verzeichnisstruktur oder das Image in MakeMKV.

Nachdem die Blu-ray geladen wurde, müssen wir uns entscheiden, welchen Titel wir haben möchten. (Beachte, dass üblicherweise nicht alle Titel auf einer 3D-Blu-ray auch 3D sind.) Es kann bei der Entscheidung hilfreich sein, durch Klick auf das Streaming-Icon ein Streamingserver zu starten. Auf http://localhost:51000/ kann man dann mit dem Browser durch die Struktur der Blu-ray navigieren. Sobald man eine Ebene erreicht, auf der Links wie „/stream/title0.ts“ angeboten werden, kann man die Adresse kopieren und sich per „mpv http://127.0.0.1:51000/stream/title0.ts“ den Titel angucken.

Nachdem wir den Titel (ausklappen und Mpeg4-MVC-3D auswählen!) und die Audiospuren ausgewählt haben, die wir haben möchten, können wir durch „Ausgewählte Titel speichern“ den Titel als MKV speichern. Das ist im wesentlichen ausschließlich ein Kopiervorgang, daher dauert es nicht sehr lange.

Die resultierende mkv-Datei (bzw. Dateien, wenn Du mehrere Titel ausgewählt hast) könnte man jetzt auf Windows bereits mit dem „Stereoscopic Player“ abspielen. Dieser kostet Geld und läuft nicht auf Linux, auch nicht mit Wine. Einige wenige Hardware-Player unterstützen dieses Format scheinbar auch.

2. Demuxen der Videospur

Jetzt müssen wir die Videospur demuxen. Dazu erstmal mkvinfo datei.mkv ausführen, in der Ausgabe findet sich bei der Videospur etwas wie (Spur-ID für Mkvmerge & Mkvextract: 0). Um die Videospur zu demuxen, führe einfach folgenden Befehl aus (wobei die richtige Spur-ID eingesetzt werden muss):

mkvextract tracks datei.mkv 0:datei.264

Das kann eine Weile dauern.

3. Rendern der Videospur

Jetzt können wir endlich die Videospur rendern. Dies ist ein relativ rechenaufwändiger und langsamer Prozess. Der Befehl dafür lautet:

wine FRIMDecode -i:mvc Inside_Out_t00.mkv.264 -o - -sbs | ffmpeg -y -f rawvideo -s:v 3840x1080 -r 25 -i - -c:v libx264 -preset slow sbs-output.mkv

Achte darauf, ob die Parameter für dich stimmen: 3840×1080 ist der Wert, wenn der Film eine Auflösung von 1920×1080 hat – doppelte Breite wegen zwei Bildern nebeneinander (wenn du Half-SBS haben möchtest, änder hier nicht einfach die Auflösung sondern skaliere das Video mit ffmpeg). Auch die Frame-Rate 25 musst du vermutlich anpassen – bei Englischen Blurays ist sie meist 24000/1001.

An dieser Stelle können und sollten auch andere Encoding-Parameter oder Encoder verwendet werden. Mehr Infos zu H.264-Encoding mit ffmpeg gibt es bei ffmpeg selbst.

4. Zusammensetzen der fertigen Datei

Was wir jetzt haben ist die gerenderte neue Spur und die originale erste Videospur. Was bleibt, ist, die Spuren in eine Datei zusammenzuführen.

Dafür öffnen wir „MKVToolNix GUI“. Dort ist es nun möglich, alle Spuren und Dateien zu importieren (auch die im 1. Schritt generierte MKV-Datei, in der sich alle Audio- und Untertitelspuren und Kapitelinfos befinden), die gewünschen Spuren auszuwählen, zu ordnen und Metadaten und Namen für die Spuren nach Belieben zu setzen (unter „Formatspezifische Optionen“ gibt es übrigens die Möglichkeit, das 3D-Format anzugeben). Zum Schluss nur noch den Ausgabedateinamen auswählen und auf „Muxen starten“ klicken. Fertig! 🙂


Fragen, Anmerkungen, Feedback und Verbesserungsvorschläge bitte gerne an nomoketo@nomoketo.de!