web-dev-qa-db-fra.com

Comment puis-je obtenir une miniature vidéo en .Net?

Je cherche à implémenter une fonction qui récupère une seule image d'une vidéo d'entrée afin de pouvoir l'utiliser comme une vignette.

Quelque chose dans ce sens devrait marcher:

// 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)
{
}

Est-ce que quelqu'un sait comment faire cela dans .Net 3.0?

La solution correcte sera la "meilleure" implémentation de cette fonction. Points bonus pour éviter la sélection d'images vierges.

26
Sam Saffron

J'ai fini par rouler ma propre classe autonome (avec la méthode unique que j'ai décrite), la source peut être vue ici . Le navigateur de média est GPL mais je suis heureux que le code que j'ai écrit pour ce fichier soit du domaine public. N'oubliez pas qu'il utilise interop du projet directshow.net , vous devrez donc effacer cette partie du code avec eux.

Cette classe ne fonctionnera pas pour les fichiers DVR-MS, vous devez injecter un filtre d’affichage direct pour ceux-ci.

10
Sam Saffron

Ce projet fera l'affaire pour les AVI: http://www.codeproject.com/KB/audio-video/avifilewrapper.aspx

Tout autre format, vous pouvez regarder dans directshow. Quelques projets pourraient vous aider:
http://sourceforge.net/projects/directshownet/
http://code.google.com/p/slimdx/

7
Joel Martinez

1- Téléchargez la dernière version de ffmpeg.exe sur: http://ffmpeg.arrozcru.org/builds/

2- Extrayez le fichier et copiez ffmpeg.exe sur votre site web

3- Utilisez ce code:

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();
4
Ahmad Behjati

Certaines bibliothèques sur www.mitov.com pourraient vous aider. C'est un wrapper générique pour la fonctionnalité Directshow, et je pense qu'une des démos montre comment prendre une image d'un fichier vidéo.

0
GuyWithDogs
0
Maciej