Captura eficiente de pixels do vídeo

Eu estou procurando uma maneira eficaz de pegar dados de imagem de arquivos de vídeo. Eu estou atualmente testandoFilgraphManagerClass.GetCurrentImage() deInterop.QuartzTypeLib biblioteca. Isso faz o que eu preciso, mas é dolorosamente lento. Eu preciso processar todos os quadros de cada vídeo. Quais melhores opções eu tenho?

Requisitos

Deve ser preciso no quadro. <- Muito importante!Me dá acesso ao buffer de pixels decodificados (array deint oubyte[]), idealmente RGB24 ou RGB32.O buffer pode ser capturado em tempo real ou mais rápido. Eu não preciso exibir o vídeo, eu só preciso analisar os pixels.Lidar com arquivos mp4 (h264 / aac). Eu posso voltar a empacotar ou criar frames via AviSynth se necessário, mas nenhuma retranscoding pode estar envolvida.

Qualquer sugestão seria bem vinda.

Algum código conforme 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];

Eu estou passando por cada quadro. Eu tenho algo parecido com isso no loop:

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

questionAnswers(2)

yourAnswerToTheQuestion