2008-09-30 16 views
26

मैं एक ऐसे फ़ंक्शन को कार्यान्वित करना चाहता हूं जो एक इनपुट वीडियो से एक फ्रेम को पुनर्प्राप्त करता है, इसलिए मैं इसे थंबनेल के रूप में उपयोग कर सकता हूं।मैं नेट में एक वीडियो थंबनेल कैसे प्राप्त करूं?

इन पंक्तियों के साथ कुछ काम करना चाहिए:

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

किसी को भी कैसे नेट 3.0 में यह करने के लिए पता है?

सही समाधान इस फ़ंक्शन का "सर्वोत्तम" कार्यान्वयन होगा। रिक्त फ्रेम के चयन से बचने के लिए बोनस अंक।

+0

किसी भी पूर्ण खट्टा: यह भी देखने के लिए लायक है सीई कोड नमूना? – Kiquenet

उत्तर

10

मैंने अपना खुद का स्टैंड अकेला वर्ग (मैंने वर्णित एक विधि के साथ) रोलिंग समाप्त कर दिया, स्रोत viewed here हो सकता है। Media browser is जीपीएल लेकिन मैं उस फ़ाइल के लिए सार्वजनिक कोड होने के लिए लिखे गए कोड के लिए खुश हूं। ध्यान रखें कि यह directshow.net प्रोजेक्ट से इंटरऑप का उपयोग करता है ताकि आपको उनके साथ कोड के उस भाग को साफ़ करना होगा।

यह कक्षा DVR-MS फ़ाइलों के लिए काम नहीं करेगी, आपको उन लोगों के लिए प्रत्यक्ष शो फ़िल्टर इंजेक्ट करने की आवश्यकता है।

+0

हाय - यह वास्तव में उपयोगी धन्यवाद है, हालांकि मुझे कुछ वास्तविक त्रुटियों के बिना कुछ समस्याएं मिलती हैं। डब्लूएमवी फाइलों के लिए (जो समर्थित नहीं हैं) मुझे IMediaDet.get_OutputStreams() कॉल से आउटपुटस्ट्रीम मिलता है - लेकिन IMediaDet.WriteBitmapBits() तब कुछ भी नहीं करता है। हालांकि एवीआई फ़ाइलों के लिए, IMediaDet.get_OutputStreams() कॉल कुछ भी नहीं देता है, और इसलिए विधि कुछ भी किए बिना बस लौटती है। मैंने मूलभूत फ़ाइल I/O मुद्दों और अनुमतियों आदि से इंकार कर दिया है (वही ऐप वीडियो अपलोड करता है, और जैसा कि उल्लेख किया गया है कुछ प्रारूपों के लिए आउटपुटस्ट्रीम भी प्राप्त करता है)। आपके पास जो भी पॉइंटर्स/सुझाव हो सकते हैं वह बहुत अच्छा होगा! – user369142

+0

व्यक्तिगत रूप से मैं अब एफएफडीशो को देखूंगा, एमएस सीधा शो इंटरफेस इतने कमजोर हैं –

+1

@ सैमसाफ्रॉन 2015 में ऐसा करने पर कोई सिफारिशें? मैं न्यूजेट पर मीडियाब्रोसर लाइब्रेरी नहीं ढूंढ सकता, इसलिए मैं आपकी जिस्ट का परीक्षण नहीं कर सकता। –

7

इस परियोजना वस्तु के लिए चाल करना होगा: http://www.codeproject.com/KB/audio-video/avifilewrapper.aspx

कुछ अन्य प्रारूपों, आप डायरेक्टशो में लग सकता है। कुछ परियोजनाओं है कि मदद कर सकता है कर रहे हैं:
http://sourceforge.net/projects/directshownet/
http://code.google.com/p/slimdx/

0

www.mitov.com पर कुछ पुस्तकालयों में मदद मिल सकती है कि कर रहे हैं। यह डायरेक्टशो कार्यक्षमता के लिए एक सामान्य रैपर है, और मुझे लगता है कि एक डेमो दिखाता है कि वीडियो फ़ाइल से फ्रेम कैसे लेना है।

2

1- प्राप्त से ffmpeg.exe के नवीनतम संस्करण: http://ffmpeg.arrozcru.org/builds/

2- फ़ाइल निकालें और अपनी वेबसाइट

3 इस कोड का उपयोग करने के लिए ffmpeg.exe कॉपी:

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

cmd में उपयोग करने के लिए आसान: ffmpeg.exe -i "फ़ाइल name.mp4" -ss 00:00:02 -vframes 1 -f image2 -vcodec mjpeg frame.jpg –

संबंधित मुद्दे