C++ C++ Bibliothek Lesen/Schreiben von Videodateien (Frames)

convexus

Ensign
Registriert
Juli 2007
Beiträge
195
Hallo,

suche für die Bearbeitung in C++ eine Bibiliothek/Framework, welche(s) die verschiedene Formate (H.264, H.265, ...) und Container (AVI, MKV, ..) unterstützt. Die Audio-Daten sollten zumindest unverändert übernommen werden können.

Ich beabsichtige die Entwicklung einer Software zur Bildverbesserung (Entrauschen, Rekonstruktion).
Ich habe bereits mit OpenCV Erfahrungen gesammelt und finde die Bibliothek insgesamt gut aber bzgl. des geplanten Einsatzes nicht befriedigend. Habe mit OpenCV insbesondere Probleme mit den verschiedenen Formaten/ Containern und Audio-Spuren.

Welche Bibliotheken sind empfehlenswert? Da ich in Python ausreichend fit bin, sind auch Python - Libraries für mich interessant (zum Ausprobieren der Algorithmen)

Danke
 
Ich würde mir die Mühe sparen ein vollständiges Programm dafür zu schreiben. Mit Avisynth bzw. Vapoursynth gibt es Frameserver, die dir einen großen Teil der Arbeit abnehmen. Dadurch kannst du dich ganz auf die Filter konzentrieren, die du entwickeln willst. Avisynth-Plugins werden für gewöhnlich in C/C++ geschrieben, Vapoursynth unterstützt sowohl C/C++ als auch Python.

Da es bereits jede Menge Plugins für die beiden Frameserver gibt, kann man allein durch Kombinieren dieser Filter sehr mächtige neue Filter erzeugen, z.B. kombiniert man einen normalen temporalen Rauschfilter mit einem Filter für Bewegungskompensation und erhält einen viel robusteren und effizienteren Rauschfilter und muss dafür nur ein paar Zeilen Code schreiben.
 
Zuletzt bearbeitet:
@Limit: Das sind gute Anregungen, vielen Dank. (Vapoursynth bereits installiert)
Ich möchte ggf. die entstandene Anwendung in App-Stores anbieten. Dafür es ist imo einfacher eine "monolithtische" App zu haben. Wegen der Performanz ist C++ und OpenCL geplant.


Gibt es denn keine empfehlendswerte C++ Library mit zumindest diesen Kernfunktionalitäten?
 
Das DirectShow Framework ist nicht besonders geeignet für Videobearbeitung. Es hat seinen Fokus eher im linearen abspielen. Bereits Frame-genaues Seeking kann je nach verwendetem Codec Probleme machen. Da ist ffmpeg für gewöhnlich besser, wenn auch sicherlich weniger schön um damit zu arbeiten.

Ich würde mich am Anfang aber erst überhaupt nicht auf ein Input-Filter festlegen. Wenn du keinen Frameserver verwenden willst, würde ich einfach die Filter kapseln und sie einfach nur Raw-Streams oder yuv4mpeg per stdin entgegennehmen lassen. Das machen z.B. einige Video-Codecs so. Außerdem bleibst du damit portabel. Füttern kannst du deinen Filter dann z.B. mit ffmpeg, dass eine dekodierten Stream per stdout ausgeben kann.
 
Vielen Dank für die Antworten! Die Situation ist zumindest für die Erstellung einer eigenständigen plattformunabhängigen App suboptimal. Etwas analoges zur Boost-Bibliothek für Bild-/Videobearbeitung wäre super (u.a. wegen der Rechte-Situation), gibt es aber leider nicht.
 
Zurück
Oben