Sie könnten FFMPEG als separaten Prozess (einfachste Art und Weise) verwenden und lassen Sie es für Sie ersten IDR dekodieren. Hier finden Sie eine Klasse FFMPEG, die GetThumbnail() Methode hat, um es Ihnen Adresse der Videodatei übergeben, die Adresse des JPEG-Bildes vorgenommen werden, und die Auflösung, die Sie das Bild sein wollen:
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);
}
}
Verwendung wie dies:
FFMPEG f = new FFMPEG();
f.GetThumbnail("videos/myvid.wmv", "images/thumb.jpg", "1200x223");
Damit dies funktioniert, Sie ffmpeg.exe in Ordner/utils haben müssen, oder den Code ändern ffmpeg.exe zu lokalisieren.
Es gibt andere Möglichkeiten FFMPEG in .NET, wie .NET-Wrapper zu verwenden, können Sie für sie googeln. Sie machen das gleiche hier, nur besser. Also, wenn FFMPEG Ihre Arbeit erledigt, würde ich empfehlen, .NET Wrapper zu verwenden.
Der erste Frame von jedem Video ist oft schwarz. Sie sollten besser mehrere Frames untersuchen und die größte auswählen (Byte-Größe). Dies, ob Sie es glauben oder nicht, ist eine gute Annäherung an das "Interessanteste", besonders in Situationen, in denen Schwarz nicht mehr vorhanden ist. –