Come posso ottenere una miniatura video in .Net?
-
03-07-2019 - |
Domanda
Sto cercando di implementare una funzione che recupera un singolo fotogramma da un video di input, quindi posso usarlo come anteprima.
Qualcosa del genere dovrebbe funzionare:
// 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)
{
}
Qualcuno sa come farlo in .Net 3.0?
La soluzione corretta sarà la "migliore" implementazione di questa funzione. Punti bonus per evitare la selezione di cornici vuote.
Soluzione
Ho finito per lanciare la mia classe autonoma (con il metodo singolo che ho descritto), la fonte può essere visualizzata qui . Il browser multimediale è GPL ma sono contento che il codice che ho scritto per quel file sia di dominio pubblico. Tieni presente che utilizza l'interoperabilità dal progetto directshow.net , quindi dovrai cancellare quella parte del codice con loro.
Questa classe non funzionerà per i file DVR-MS, è necessario iniettare un filtro di show diretto per quelli.
Altri suggerimenti
Questo progetto farà il trucco per gli AVI: http: //www.codeproject .com / KB / audio-video / avifilewrapper.aspx
Qualunque altro formato, potresti consultare directshow. Ci sono alcuni progetti che potrebbero aiutare:
http://sourceforge.net/projects/directshownet/
http://code.google.com/p/slimdx/
1- Scarica l'ultima versione di ffmpeg.exe da: http://ffmpeg.arrozcru.org/builds/
2- Estrai il file e copia ffmpeg.exe sul tuo sito web
3- Usa questo codice:
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();
Ci sono alcune biblioteche su www.mitov.com che possono aiutare. È un wrapper generico per la funzionalità di Directshow e penso che una delle demo mostri come prendere un frame da un file video.
Vale anche la pena vedere:
http://www.codeproject.com/Articles/ 13237 / Extract-frame-da-Video-Files