Stereoskopie

Crystal Clear app error.png
Stereoskopie

Status: unstable

Bckspc 3d.png
Beschreibung Backspace in 3D
Autor: xoquox krisha
Flattr Flattr Stereoskopie
PayPal Spenden für Stereoskopie

Der backspace in 3D

Als Hardware kommen zwei GoPro Hero 3 Black zum Einsatz. Die GoPros werden gleichzeitig per WiFi Remote Fernbedienung gestartet. Leider sind die Videos trotzdem manchmal nicht auf den Frame genau synchron, aber dazu später mehr...

Tools

GoPro Studio

Das GoPro Studio wird in einer kostenlosen Version angeboten. Mit dieser lassen sich 3D Videos aus GoPro Material erstellen. Als Ausgabe kann man aus mehreren 3D Einstellungen wählen. Wir verwenden Side-by-Side für die Oculus Rift und RedCyanAnaglyph für einfache farbige 3D Brillen.

Der Vorteil des GoPro Studios ist, dass es automatisch die Videos passend skaliert und so wie es aussieht auch verschiebt, wenn die Kameras einen leichten Offset haben.

Vorgehensweise (ist bei der ersten Verwendung nicht sonderlich intuitiv ):

  1. GoPro Studio installieren, QuickTime wird nicht benötigt
  2. Im 1. Schritt IMPORT NEW FILES klicken und das linke Video laden
  3. Rechtsklick auf das Video und Find Pair klicken, um das Video für das rechte Auge zu laden
  4. Das blaue Feld Add clip to conversion list anklicken
  5. Convert all anklicken
  6. Nach Abschluss Proceed to step 2 klicken
  7. Bei der Template auswahl kann man getrost auf Cancel klicken
  8. Jetzt den Clip in die Zeitliste in der Mitte unten ziehen
  9. Auf der rechten Seite unter 3D View die gewünschte Anzeigeart auswählen. Es müssen normalerweise keine weiteren Einstellungen verändert werden. Ausgabe überprüfen.
  10. Abschließend auf Export klicken und das Ausgabeformat einstellen. Sollte RedCyan gewählt worden sein, das 3D Format auf Current 3D Display Mode setzen.

Sync

Da die GoPros nicht immer gleichzeitig starten, muss man gelegentlich ein paar Frams zu Beginn eines Videos abschneiden. Leider macht dies das GoPro Studio nicht von alleine, so dass man hier auf Software von Drittanbietern zurück greifen muss. Man kann sich dabei relativ leicht am Audiotrack orientieren. Es kann aber durchaus sein, dass die Videos trotzdem nach einer Zeit auseinander laufen, da der Takt der Kameras nicht gesynced wird.

Mit kdenlive lässt sich das Video gut alignen und schneiden. Allerdings verliert es beim Rendern in H.264 Farbe/Kontrast und durch das Reencoding muss man mit Qualitätseinbußen rechnen.

Problem: This is not a GoPro source file
Project loaded into JustDecompile with Reflexil

Leider weigert sich das GoPro Studio nachbearbeitete Dateien (für Sync) als 3D anzunehmen. Um das zu ändern muss man die Gopro Studio.exe im Programme/Tools Verzeichnis modifizieren. GoPro Studio ist eine .net Applikation und basiert daher auf CIL. Man kann sie also relativ leicht dekompilieren - idealerweise macht man das mit einem Decompiler der auch die CIL Opcodes in Hex ausgibt, so dass man danach mit einem Hexeditor suchen und die Stelle modifizieren kann. Wenn man nach This is not a GoPro source file sucht, findet man schnell die Funktionen OpenLeftFile() und OpenRightFile(). Innerhalb der Funktionen wird eine Funktion ImportItem.IsGoProSource() aufgerufen. Wenn man den Branch brtrue.s danach zu brfalse.s umschreibt, kann man jedes andere Video laden aber nicht mehr originale GoPro Dateien. Idealerweise müsste man also diesen Branch duch einen unkonditionellen br.s austauschen. Hierbei wird die Applikation aber crashen, da br.s im Gegensatz zu brfalse.s und brtrue.s keinen Wert aus dem Stack entfernt.

Entweder entfernt man den Wert manuell vom Stack oder man modifiziert gleich die Funktion IsGoProSource(). Hier kann man einfach eine 1 statt einen memberabhängigen Wert zurück geben und hebt damit alle Einschränkungen auf, d.h. man kann jedes x-beliebige File laden und ein passendes 3D Pair zuordnen.

Originaldatei:

.method IsGoProSource()
{
02                ldarg.0    //arg0 ist eine Instanz der aktuellen Klasse
7B 0F 00 00 04    ldfld bool ImportItem::bIsGoPro    //ruft den Member bIsGoPro ab und legt den Wert auf den Stack
2A                ret
}

Modifikation:

.method IsGoProSource()
{
17    ldc.i4.1    //legt Wert 1 auf den Stack
2A    ret
0F 00 00 04 2A    //Rest; wird nicht mehr ausgeführt
}

Am einfachsten sucht man also mit einem Hexeditor nach 027B0F0000042A und ersetzt es durch 172A0F0000042A. Bei einer anderen GoPro Studio Version kann dieser Hexstring natürlich anders aussehen und man muss sich selbst die Arbeit machen, die passende Stelle zu finden :)

Im Rahmen dieser Modifikation wurde auch JustDecompile in Verbindung mit Reflexil getestet. Funktioniert gut, allerdings werden immer wesentlich mehr Bytes verändert als eigentlich benötigt und man sollte den Prozess öfter mal neustarten, da Reflexil gelegentlich geänderte Werte speichert (bei mir hat auch ein Reflexil Reload im Kontextmenü nicht geholfen). Auch sollte man gegebenfalls darauf achten, dass die ersetzten Opcodes nicht immer gleich lang sind. Die Erklärungen zu den Opcodes sind sehr praktisch.

Die andere, eigentlich sauberere, Methode wäre das Inputfile so zu modifizieren, dass ein entsprechendes vom GoPro Studio erkanntes Flag gesetzt ist. Dieses Flag befindet sich höchstwahrscheinlich in den ersten 512 Bytes eines Videos. Allerdings wird dieses Flag über eine weitere unmanaged .net dll abgerufen und das Dekompilieren gestaltet sich hierfür nicht so einfach. Falls sich jemand die Mühe macht, würden wir uns über eine kurze Nachricht freuen ;)

Kdenlive

Sync Kabel

Für den Bau eines eigenen Sync Kabels wurden 4 GoPro Bus Connectors bestellt.

Hero 3 3D Frame

Es wurde simpler Rahmen, um die beiden Hero 3 Kameras aufzunehmen, entwickelt. Er bestizt eine Aufnahme für GoPro Zubehör, wie sie auch an den Originalgehäusen zu finden sind.

Fly Cam

Da bei 3D Filmen ein ruckeln des Bildes sehr viel Unangenehmer ist als bei 2D haben wir eine einfache Fly Cam mit 2 Achsen entworfen. Die Bauteile wurden mit Autodesk Inventor entworfen und mit unserem 3D Drucker ausgedruckt.

Bilder