Stereoskopie Status: unstable | |
---|---|
![]() | |
Beschreibung | Backspace in 3D |
Autor: | xoquox krisha |
PayPal | ![]() |
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...
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 ):
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.
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 ;)
Für den Bau eines eigenen Sync Kabels wurden 4 GoPro Bus Connectors bestellt.
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.
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.