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.
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. –