Stereoskopie: Unterschied zwischen den Versionen
Krisha (Diskussion | Beiträge) |
Krisha (Diskussion | Beiträge) |
||
(9 dazwischenliegende Versionen von 3 Benutzern werden nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
{{Infobox Projekt | {{Infobox Projekt | ||
− | |name = | + | |name = Stereoskopie |
|status = unstable | |status = unstable | ||
|autor = [[Benutzer:xoquox|xoquox]] [[Benutzer:krisha|krisha]] | |autor = [[Benutzer:xoquox|xoquox]] [[Benutzer:krisha|krisha]] | ||
Zeile 32: | Zeile 32: | ||
==== Sync ==== | ==== 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. | 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 ===== | ===== Problem: This is not a GoPro source file ===== | ||
+ | [[Datei:justDecompileAndReflexilUsage.png|thumb|200px|right|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 [https://en.wikipedia.org/wiki/Common_Intermediate_Language CIL]. Man kann sie also relativ leicht dekompilieren - idealerweise macht man das mit einem Decompiler der auch die [https://en.wikipedia.org/wiki/List_of_CIL_instructions 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. | 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 [https://en.wikipedia.org/wiki/Common_Intermediate_Language CIL]. Man kann sie also relativ leicht dekompilieren - idealerweise macht man das mit einem Decompiler der auch die [https://en.wikipedia.org/wiki/List_of_CIL_instructions 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 Pair zuordnen. | + | 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: | Originaldatei: | ||
Zeile 42: | Zeile 45: | ||
.method IsGoProSource() | .method IsGoProSource() | ||
{ | { | ||
− | 02 ldarg.0 //arg0 ist | + | 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 | 7B 0F 00 00 04 ldfld bool ImportItem::bIsGoPro //ruft den Member bIsGoPro ab und legt den Wert auf den Stack | ||
2A ret | 2A ret | ||
Zeile 61: | Zeile 64: | ||
Im Rahmen dieser Modifikation wurde auch [http://www.telerik.com/products/decompiler.aspx JustDecompile] in Verbindung mit [http://reflexil.net/ 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. | Im Rahmen dieser Modifikation wurde auch [http://www.telerik.com/products/decompiler.aspx JustDecompile] in Verbindung mit [http://reflexil.net/ 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 === | === Kdenlive === | ||
+ | |||
+ | === Sync Kabel === | ||
+ | Für den Bau eines eigenen Sync Kabels wurden 4 [http://cam-do.com/GoProConnectors.html 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 === | === Fly Cam === |
Aktuelle Version vom 24. März 2014, 01:59 Uhr
Stereoskopie Status: unstable | |
---|---|
Beschreibung | Backspace in 3D |
Autor: | xoquox krisha |
PayPal |
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 ):
- GoPro Studio installieren, QuickTime wird nicht benötigt
- Im 1. Schritt IMPORT NEW FILES klicken und das linke Video laden
- Rechtsklick auf das Video und Find Pair klicken, um das Video für das rechte Auge zu laden
- Das blaue Feld Add clip to conversion list anklicken
- Convert all anklicken
- Nach Abschluss Proceed to step 2 klicken
- Bei der Template auswahl kann man getrost auf Cancel klicken
- Jetzt den Clip in die Zeitliste in der Mitte unten ziehen
- 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.
- 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
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.