GoPro 4K Footage unter iOS dekodieren und encodieren

Chrysaor1024

Alkmene
Registriert
15.12.16
Beiträge
31
Hallo alle Zusammen,

ich war lange nur Leser und nach meiner neusten Entdeckung musste ich mal berichten.

Laut der Aussage von GoPro und Apple ist es nicht möglich 4K Videos der GoPro auf einem iPhone oder iPad abzuspielen. Stutzig machte mich die 4K Unterstützung des iPhones. Auflösung ist gleich, Bitrate ist ähnlich, h264 profile ist das Selbe. Warum funktioniert es nicht?

Ich habe daraufhin eine Anwendung geschrieben, die auch 4K Videos der GoPro herunterlädt und an eine AVPlayer Instanz weiterreicht. Der AVPlayer meldet aber, dass das Videoformat nicht unterstützt wird.
Zuallererst habe ich mich dran gesetzt ffmpeg in diese App zu integrieren, aber ich fragte mich weiterhin, warum die 4K Unterstützung über die Hauseigenen APIs nicht möglich ist.

Daraufhin habe ich mich dann doch noch einmal an die Verarbeitung des Videos über die AV API gesetzt und siehe da: 4K Videos können mit 60FPS dekodiert werden und das bei 11% CPU-Last auf einem iPhone 6S.
Mit den jetzt dekodierten Videoframes in Form des Pixelbuffers können jetzt alle weiteren Wünsche bedient werden.

Heute werde ich mir das Enkodieren der Dekodierten 4K Frames in ein iOS kompatibles Format ansehen.

Ich hoffe ich konnte etwas interessantes berichten, erst recht nachdem GoPro nun einen GoPro Account verlangt um die Kamera zu steuern und Fotos und Videos zu transferieren, welche nicht mehr als 1440p haben dürfen.
 
Zuletzt bearbeitet:

Chrysaor1024

Alkmene
Registriert
15.12.16
Beiträge
31
Ich dachte, ich setze mal meine Selbstgespräche weiter fort :),

das Dekodieren und Encodieren in ein iOS kompatibles Format mit Hilfe der AVFoundation läuft jetzt perfekt. Obwohl encodiert wird, werden zwischen 45 und 60fps bei 3840px x 2160px und 50MBit/s Bitrate des Ausgangsmaterials verarbeitet. Weiterhin wird das
AVVideoProfileLevelH264HighAutoLevel verwendet, was qualitativ die wenigsten Einbußen zum Ausgangsmaterial haben sollte.
Um zu überprüfen, ob die Videodatei auch kompatibel ist, schreibe ich sie in die Photos App, was problemlos funktioniert. Der nächste Schritt ist die Nutzung von "compute shadern" um das Colorgrading direkt auf dem iPhone, während der Reenkodierung, zu erledigen. Vor allem in Kombination mit ProTune sollte das Vorteile bringen. Ich denke, dass das auch relativ einfach zu machen sein sollte, da nach dem Dekodieren bereits ein CMSampleBuffervorhanden ist.

Im letzten Schritt muss dann noch ein Remuxing mit der Audiospur geschehen. Jene habe ich zur Zeit ausgeklammert, da sie bisher nicht problematisch war.

Ich denke das "i-Tüpfelchen" ist dann noch eine softwarebasierte Videostabilisierung. In erster Näherung nur ein Verschieben, um die gröbsten Ruckler heraus zu bekommen. Im weiteren Schritt dann eine Stabilisierung auf Basis von Frame-Morphing. Ich denke aber, dass das noch ein Weilchen brauchen wird :).
 
Zuletzt bearbeitet:

duwi2mex

Erdapfel
Registriert
14.02.17
Beiträge
1
Hallo!
Wie ist denn der Stand deiner Selbstgespräche? ;)
Ich find's sehr schade, dass die Übertragung von 4K-Videos "ab Werk" nicht möglich ist. Ich benutze die hochauflösenden Videos aber eigentlich nur, um später daraus Fotos zu extrahieren.
 

Chrysaor1024

Alkmene
Registriert
15.12.16
Beiträge
31
Hi,

die Selbstgespräche sind beendet. Habe eine komplette Verarbeitungspipeline implementiert, die es schafft mit 60FPS 50MBit Gopro 4K Streams zu dekodieren, in eine Metaltextur zu verwandeln und dort das Colorgrading (Protune -> ein wenig Farbe verpassen, Schatten anheben) zu erledigen. Danach folgt die Reenkodierung in eine iOS kompatible MP4 Datei und das Remuxing des Audiostreams. Arbeite zur Zeit an der Stabilisierung der Aufnahmen. Das Exportieren der einzelnen Frames ist nach dem Decoding problemlos möglich.

Ich denke, dass ich den Code in den nächsten Wochen mal auf Github platziere, dann kann jeder damit anfangen was er will ;).
 
  • Like
Reaktionen: Tobias Scholze