2010-08-26 16 views
9

Quiero extraer el primer fotograma del video cargado y guardarlo como archivo de imagen.
Los posibles formatos de video son mpeg, avi y wmv.¿Cómo puedo guardar el primer fotograma de un video como imagen?

Una cosa más a considerar es que estamos creando un sitio web ASP.NET.

+2

El primer fotograma de cualquier video suele ser negro. Haría mejor en examinar varios cuadros y elegir el más grande (tamaño de byte). Esto, lo creas o no, es una buena aproximación al "más interesante" especialmente en cualquier situación de desvanecimiento de negro. –

Respuesta

6

Puede usar FFMPEG como un proceso separado (la forma más sencilla) y dejar que decodifique la primera IDR por usted. Aquí tienes un FFMPEG clase que tiene el método GetThumbnail(), al que se pasa la dirección del archivo de vídeo, la dirección de la imagen JPEG que se hizo, y la resolución que desea que la imagen aparezca:

using System.Diagnostics; 
using System.Threading; 

public class FFMPEG 
{ 
    Process ffmpeg; 

    public void exec(string input, string output, string parametri) 
    { 
     ffmpeg = new Process(); 

     ffmpeg.StartInfo.Arguments = " -i " + input+ (parametri != null? " "+parametri:"")+" "+output; 
     ffmpeg.StartInfo.FileName = "utils/ffmpeg.exe"; 
     ffmpeg.StartInfo.UseShellExecute = false; 
     ffmpeg.StartInfo.RedirectStandardOutput = true; 
     ffmpeg.StartInfo.RedirectStandardError = true; 
     ffmpeg.StartInfo.CreateNoWindow = true; 

     ffmpeg.Start(); 
     ffmpeg.WaitForExit(); 
     ffmpeg.Close();  
    } 


    public void GetThumbnail(string video, string jpg, string velicina) 
    { 
     if (velicina == null) velicina = "640x480"; 
     exec(video, jpg, "-s "+velicina); 
    } 
} 

uso como esto:

FFMPEG f = new FFMPEG(); 
f.GetThumbnail("videos/myvid.wmv", "images/thumb.jpg", "1200x223"); 

para que esto funcione, debe tener ffmpeg.exe en la carpeta/utils, o cambiar el código para localizar ffmpeg.exe.

Hay otras formas de usar FFMPEG en .NET, como .NET wrappers, puedes buscarlas en google. Básicamente hacen lo mismo aquí, solo que mejor. Entonces, si FFMPEG hace su trabajo, le recomiendo usar .NET wrapper.

+0

gracias ... déjame revisar .net wrapper – CoderHawk

+0

¿Cómo se obtendría un marco de algún lugar en el medio del archivo? – Entity

+1

parámetro como -ss 00: 00: 01.00 – rogerdpack

0

Probablemente la mejor herramienta para trabajar con videos programaticamente es FFMpeg. Tiene soporte para muchos formatos, incluso wmv. Sospecho que incluso hay un .net wrapper para eso.

3

Tratar de hacer formato de cadena de argumentos como:

ffmpeg.StartInfo.Arguments =" -i c:\MyPath\MyVideo -vframes 1 c:\MyOutputPath\MyImage%d.jpg" 

En lugar de

ffmpeg.StartInfo.Arguments = " -i " + input+ (parametri != null? " "+parametri:"")+" "+output; 

en el código de respuesta proporcionada anteriormente.

No sé cuál fue el motivo, pero la segunda línea de argumento mencionada no funciona en mi máquina, mientras que cuando cambié de argumento como el primer comando funciona bien.

Cuestiones relacionadas