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.
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.
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/
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();
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.
Cela vaut également la peine de voir:
http://www.codeproject.com/Articles/13237/Extract-Frames-from-Video-Files