2008-09-30 14 views
26

Estoy buscando implementar una función que recupera un solo fotograma de un video de entrada, por lo que puedo usarlo como una miniatura.¿Cómo obtengo una Miniatura de video en .Net?

algo en este sentido debería funcionar:

// filename examples: "test.avi", "test.dvr-ms" 
// position is from 0 to 100 percent (0.0 to 1.0) 
// returns a bitmap 
byte[] GetVideoThumbnail(string filename, float position) 
{ 
} 

¿Alguien sabe cómo hacer esto en .Net 3.0?

La solución correcta será la "mejor" implementación de esta función. Puntos de bonificación para evitar la selección de marcos en blanco.

+0

cualquier llena agria muestra del código de ce? – Kiquenet

Respuesta

10

Terminé de rodar mi propia clase independiente (con el único método que describí), la fuente puede ser viewed here. Media browser is GPL pero me complace que el código que escribí para ese archivo sea de dominio público. Tenga en cuenta que utiliza la interoperabilidad del proyecto directshow.net, por lo que deberá borrar esa parte del código.

Esta clase no funcionará para archivos DVR-MS, necesita inyectar un filtro de show directo para esos.

+0

Hola, esto es realmente útil gracias, sin embargo, recibo algunos problemas sin ningún error real. Para los archivos WMV (que no son compatibles) obtengo un outputtream de la llamada IMediaDet.get_OutputStreams() pero el IMediaDet.WriteBitmapBits() no hace nada. Sin embargo, para los archivos AVI, la llamada IMediaDet.get_OutputStreams() no devuelve nada, por lo que el método simplemente vuelve sin hacer nada. He descartado los problemas básicos de E/S de archivos y permisos, etc. (la misma aplicación carga el video y, como se mencionó, también obtiene el outputtream para ciertos formatos). ¡Cualquier consejo/sugerencia que pueda tener sería genial! – user369142

+0

Personalmente, me gustaría ver ffdshow ahora, las interfaces ms show show son tan shakey –

+1

@SamSaffron ¿Alguna recomendación para hacer esto en 2015? No puedo encontrar la biblioteca de MediaBrowser en Nuget, así que no puedo probar tu Gist. –

0

Hay algunas bibliotecas de www.mitov.com que pueden ayudar. Es un contenedor genérico para la funcionalidad de Directshow, y creo que una de las demostraciones muestra cómo tomar un fotograma de un archivo de video.

2

1- Obtener la última versión de ffmpeg.exe de: http://ffmpeg.arrozcru.org/builds/

2- Extraer el archivo y copiar ffmpeg.exe a su sitio web

3- utilizar este código:

Process ffmpeg; 

string video; 
string thumb; 

video = Server.MapPath("first.avi"); 
thumb = Server.MapPath("frame.jpg"); 

ffmpeg = new Process(); 

ffmpeg.StartInfo.Arguments = " -i "+video+" -ss 00:00:07 -vframes 1 -f image2 -vcodec mjpeg "+thumb; 
ffmpeg.StartInfo.FileName = Server.MapPath("ffmpeg.exe"); 
ffmpeg.Start(); 
+0

Más fácil de usar en cmd: ffmpeg.exe -i "Nombre de archivo.mp4" -ss 00:00:02 -vframes 1 -f imagen2 -vcodec mjpeg frame.jpg –

Cuestiones relacionadas