Agarrar eficientemente los píxeles del video

Estoy buscando una forma efectiva de capturar datos de imágenes de archivos de video. Actualmente estoy probandoFilgraphManagerClass.GetCurrentImage() desde elInterop.QuartzTypeLib biblioteca. Esto hace lo que necesito pero es dolorosamente lento. Necesito procesar todos los cuadros de cada video. ¿Qué mejores opciones tengo?

Requerimientos

Debe ser el cuadro exacto. <- ¡Muy importante!Me da acceso al búfer de píxeles decodificado (matriz deint obyte[]), idealmente RGB24 o RGB32.El búfer se puede agarrar en tiempo real o más rápido. No necesito mostrar el video, solo necesito analizar los píxeles.Manejar archivos mp4 (h264 / aac). Puedo volver a envolver o servir de marco a través de AviSynth si es necesario, pero no puede implicar una retranscodificación.

Cualquier sugerencia será bienvenida.

Algún código según lo solicitado:

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

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

Entonces paso a través de cada cuadro. Tengo algo como esto en el bucle:

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

Respuestas a la pregunta(2)

Su respuesta a la pregunta