C# Lectura de cuadros aleatorios de un video

Necesito una biblioteca de C# que permita leer fotogramas de video que no comiencen desde el comienzo de un video.

Por ejemplo, quiero obtener el fotograma 400. Me gustaría algo que proporcione una forma clara de hacer esto, como:

grabber.GetFrameByNumber(400);

¿Alguna sugerencia?

Gracias por adelantado :)

¿Quieres redistribuir tu programa? En caso afirmativo, ¿con qué licencia?

Respuestas (2)

Si está buscando una biblioteca comercial para usar con esto, le recomiendo consultar LEADTOOLS Multimedia SDK . LEADTOOLS Multimedia SDK se desarrolla en torno a las bibliotecas Microsoft DirectShow o Media Foundation.

Puede usar LEADTOOLS PlayCtrl para cargar el video, navegar hasta el cuadro del que desea obtener la imagen y luego darle la imagen en esa ubicación de cuadro en particular. Esto se puede hacer en unas pocas líneas de código:

PlayCtrl playCtrl = new PlayCtrl();
playCtrl.SourceFile = @"Path the video file";
playCtrl.Run();
playCtrl.CurrentFramePosition += 399;
Image image = playCtrl.GetStillImage(0);
image.Save(@"Path to save image location", ImageFormat.Bmp);

Tenga en cuenta que soy un empleado de este producto.

Sugiero Libvlc.Net

Código de ejemplo:

string filePath = GetTemporaryFilePath();
PlayerOutput output = new PlayerOutput();
output.Files.Add(new OutFile(filePath));
player = (Player)factory.CreatePlayer (output);
player.SetMediaInput(new MediaInput (MediaInputType.File, "/Users/rz/Movies/SampleMovie.mp4"));
player.Play();

Puede implementar el suyo propio PlayerOutputque solo mantiene el marco que desea.

Para ahorrar tiempo de procesamiento, puede hacer que el jugador salte a una posición determinada antes de obtener los fotogramas. Tenga cuidado con la conversión de tiempo a fotogramas.

Licencia: GNU GPL, igual que el reproductor VLC.