Wydajne pobieranie pikseli z wideo

Szukam skutecznego sposobu pobierania danych obrazu z plików wideo. Obecnie testujęFilgraphManagerClass.GetCurrentImage() zInterop.QuartzTypeLib biblioteka. To robi to, czego potrzebuję, ale jest boleśnie powolne. Muszę przetworzyć wszystkie klatki każdego filmu. Jakie mam lepsze opcje?

Wymagania

Musi być dokładna ramka. <- Bardzo ważne!Daje mi dostęp do zdekodowanego bufora pikseli (tablicaint lubbyte[]), najlepiej RGB24 lub RGB32.Bufor można złapać w czasie rzeczywistym lub szybciej. Nie muszę wyświetlać wideo, muszę tylko przeanalizować piksele.Obsługa plików mp4 (h264 / aac). W razie potrzeby mogę przewinąć lub obsłużyć ramkę za pomocą AviSynth, ale nie można brać udziału w retranscoding.

Wszelkie sugestie będą mile widziane.

Wymagany kod:

FilgraphManagerClass graphClass = new FilgraphManagerClass();
graphClass.RenderFile(@"C:\tmp\tmp.avs");

int sz = (graphClass.Width * graphClass.Height + 10) * 4;    
int[] buffer = new int[sz - 1];

Następnie przechodzę przez każdą klatkę. Mam coś takiego w pętli:

graphClass.GetCurrentImage(ref sz, out buffer[0]);
//DoStuff(buffer);
graphClass.CurrentPosition += graphClass.AvgTimePerFrame;

questionAnswers(2)

yourAnswerToTheQuestion