C# Lesen zufälliger Frames aus einem Video

Ich brauche eine C#-Bibliothek, die es ermöglicht, Videoframes zu lesen, die nicht am Anfang eines Videos beginnen.

Zum Beispiel möchte ich den 400. Rahmen erhalten. Ich hätte gerne etwas, das eine klare Möglichkeit bietet, dies zu tun, wie:

grabber.GetFrameByNumber(400);

Irgendwelche Vorschläge?

Danke im Voraus :)

Möchten Sie Ihr Programm weitergeben? Wenn ja, mit welcher Lizenz?

Antworten (2)

Wenn Sie nach einer kommerziellen Bibliothek suchen, die Sie dafür verwenden können, empfehle ich Ihnen, sich das LEADTOOLS Multimedia SDK anzusehen . Das LEADTOOLS Multimedia SDK wurde um die Microsoft DirectShow- oder Media Foundation-Bibliotheken herum entwickelt.

Sie können das LEADTOOLS PlayCtrl verwenden , um das Video zu laden, zu dem Frame navigieren, von dem Sie das Bild erhalten möchten, und Ihnen dann das Bild an dieser bestimmten Frame-Position anzeigen. Dies ist in nur wenigen Codezeilen möglich:

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);

Bitte beachten Sie, dass ich ein Mitarbeiter dieses Produkts bin.

Ich schlage Libvlc.Net vor

Beispielcode:

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();

Sie können Ihre eigenen implementieren PlayerOutput, die nur den gewünschten Rahmen beibehalten.

Um Verarbeitungszeit zu sparen, können Sie den Player zu einer bestimmten Position springen lassen, bevor er die Frames erhält. Seien Sie vorsichtig mit der Time-to-Frames-Konvertierung.

Lizenz: GNU GPL, wie der VLC-Player.