Video Frame für Frame in OpenCV auf Android verarbeiten

Mein Ziel ist folgendes: Ich muss ein Video einlesen, das auf der SD-Karte gespeichert ist, es Frame für Frame verarbeiten und es dann erneut in einer neuen Datei auf der SD-Karte speichern. Das Problem ist, dassOpenCV4Android kommt nicht mit einem Video-Encoder / Decoder, da es nicht enthalten istffmpeg. Darüber hinaus mitJavaCV für die verarbeitung des bildes ist für mich keine option, da der code schon in native geschrieben istOpenCV und ich greife über das JNI darauf zu. Ich habe hier viel über Stackoverflow und den Rest von Google gelesen. Aber ich habe die Lösung nicht gefunden.

Mit JavaCV kann ich ein Video Frame für Frame lesen und auch Frame für Frame speichern. Ich kann das Video jedoch nicht in einfache OpenCV Mat-Objekte konvertieren, die mit gewöhnlichen OpenCV4Android-Programmen verarbeitet werden können.

Ich habe über JCodec als Bibliothek zum Kodieren / Dekodieren von Videos gelesen. Würde mir JCodec erlauben, meine Aufgabe zu erfüllen? Wenn ja, kennen Sie Beispiele?

Das Kompilieren von FFMPEG für Android wäre ebenfalls eine Option. Allerdings finde ich es etwas übertrieben, FrameGrabber und FrameRecorder selbst zu schreiben. Ich denke, dass es neben JavaCV eine andere Lösung geben muss.

Ab API 18 gibt es den MediaCodec und den MediaMuxer in Android. Vielleicht können sie mir helfen?

Kommen wir also zu meinen Anforderungen. Ich bin derzeit auf Android API 19 ausgerichtet, sodass ich alle Funktionen zur Verfügung habe, die ich benötige. Die wichtigste Voraussetzung für mich ist Folgendes:

Wenn ich ein Video von 10 Sekunden mit 30 FPS bearbeite, sollte das Ergebnis auch ein Video von 10 Sekunden mit 30 FPS sein. Ich möchte also eine exakte Kopie des Videos, aber mit einigen Zeichnungen, die jedem Frame von hinzugefügt werdenOpenCV. VerwendenOpenCV via Python kann man diese Aufgabe zum Beispiel mit demVideoWriter Klasse undVideo Eingang Klasse. Ich brauche die gleiche Funktionalität für Android.

Ich wundere mich, dass bis jetzt niemand dieses Problem hatte (oder ich es nicht fand).

Hoffentlich habe ich alles erklärt.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage