2008-10-30 16 views
14

मेरे पास बिटमैप्स की निर्देशिका है जो सभी समान आयाम हैं। मैं इन बिटमैप्स को एक वीडियो फ़ाइल में कनवर्ट करना चाहता हूं। मुझे परवाह नहीं है कि वीडियो फ़ाइल (कोडेक) wmv या avi है या नहीं। मेरी एकमात्र आवश्यकता यह है कि मैं फ्रेम दर निर्दिष्ट करता हूं। इसे केवल क्रॉस प्लेटफॉर्म, विंडोज (विस्टा और एक्सपी) होने की आवश्यकता नहीं है। मैंने विंडोज मीडिया एसडीके या डायरेक्टशो का उपयोग करने के बारे में कुछ चीजें पढ़ी हैं, लेकिन उनमें से कोई भी कोड नमूने प्रदान करने के बारे में स्पष्ट नहीं है।मैं सी # में छवियों की निर्देशिका से एक वीडियो कैसे बना सकता हूं?

कोई भी कुछ अंतर्दृष्टि प्रदान कर सकता है, या कुछ मूल्यवान संसाधन जो मुझे सी # में ऐसा करने में मदद कर सकता है?
http://www.adp-gmbh.ch/csharp/mandelbrot/index.html

यह आप के लिए ब्याज की हो सकती है::
http://bytescout.com/swfslideshowscout_example_c_sharp.html
(JPG से फ्लैश स्लाइड शो बनाने के

उत्तर

11

वोट देने के जोखिम पर, मैं एक संभावित वैकल्पिक विकल्प प्रदान करूंगा - एक बफर्ड बिटमैप एनीमेशन।

double framesPerSecond; 
Bitmap[] imagesToDisplay;  // add the desired bitmaps to this array 
Timer playbackTimer; 

int currentImageIndex; 
PictureBox displayArea; 

(...) 

currentImageIndex = 0; 
playbackTimer.Interval = 1000/framesPerSecond; 
playbackTimer.AutoReset = true; 
playbackTimer.Elapsed += new ElapsedEventHandler(playbackNextFrame); 
playbackTimer.Start(); 

(...) 

void playbackNextFrame(object sender, ElapsedEventArgs e) 
{ 
    if (currentImageIndex + 1 >= imagesToDisplay.Length) 
    { 
      playbackTimer.Stop(); 

      return; 
    } 

    displayArea.Image = imagesToDisplay[currentImageIndex++]; 
} 

इस जैसे एक दृष्टिकोण अच्छी तरह से काम को देखने के उपयोगकर्ता छवियों, पर्याप्त संसाधनों स्मृति में छवियों रखने के लिए के लिए एक्सेस है, तो एक वीडियो एन्कोड करने के लिए के लिए इंतजार नहीं करना चाहता है, और वहाँ मौजूद हो सकता है एक विभिन्न प्लेबैक गति की आवश्यकता है।

... बस इसे वहां फेंक रहा है।

3

आप avifil32 पुस्तकालय से AVI * उपयोग कर सकते हैं, वहाँ एक उदाहरण यहाँ (करने की कोशिश की नहीं है) सी #)

1

मैंने कोशिश नहीं की है, लेकिन Windows Movie Maker में एक एपीआई है, और एक्सएमएल फ़ाइल प्रारूप जिसका आप उपयोग कर सकते हैं।

2

एक आदर्श प्रौद्योगिकी प्राप्त करने के लिए आप क्या चाहते हैं DirectShow Editing Services है। हालांकि, अगर यह एक बंद परियोजना है तो मैं परेशान नहीं होगा - सीखने की अवस्था काफी खड़ी हो सकती है।

डीईएस नमूना कोड उपलब्ध होने के तरीके में बहुत कुछ नहीं है, हालांकि एमएसडीएन के अंदर और बाहर दोनों में सामान्य डायरेक्टशो नमूने हैं। आपके उद्देश्यों के लिए मैं वीडियो स्रोत के रूप में अभी भी छवियों का उपयोग करने के मूल स्पष्टीकरण के लिए here शुरू करने की अनुशंसा करता हूं।

5

आप ऐसा करने के लिए Splicer का उपयोग कर सकते हैं।

कृपया http://www.codeplex.com/splicer/Wiki/View.aspx?title=News%20Feeds&referringTitle=Home

संपादित करें उदाहरण के लिए 3 देखें:

using (ITimeline timeline = new DefaultTimeline(25)) 
{ 
    IGroup group = timeline.AddVideoGroup(32, 160, 100); 

    ITrack videoTrack = group.AddTrack(); 
    IClip clip1 = videoTrack.AddImage("image1.jpg", 0, 2); 
    IClip clip2 = videoTrack.AddImage("image2.jpg", 0, 2); 
    IClip clip3 = videoTrack.AddImage("image3.jpg", 0, 2); 
    IClip clip4 = videoTrack.AddImage("image4.jpg", 0, 2); 

    double halfDuration = 0.5; 

    group.AddTransition(clip2.Offset - halfDuration, halfDuration, StandardTransitions.CreateFade(), true); 
    group.AddTransition(clip2.Offset, halfDuration, StandardTransitions.CreateFade(), false); 

    group.AddTransition(clip3.Offset - halfDuration, halfDuration, StandardTransitions.CreateFade(), true); 
    group.AddTransition(clip3.Offset, halfDuration, StandardTransitions.CreateFade(), false); 

    group.AddTransition(clip4.Offset - halfDuration, halfDuration, StandardTransitions.CreateFade(), true); 
    group.AddTransition(clip4.Offset, halfDuration, StandardTransitions.CreateFade(), false); 

    ITrack audioTrack = timeline.AddAudioGroup().AddTrack(); 

    IClip audio = 
     audioTrack.AddAudio("soundtrack.wav", 0, videoTrack.Duration); 

    audioTrack.AddEffect(0, audio.Duration, 
         StandardEffects.CreateAudioEnvelope(1.0, 1.0, 1.0, audio.Duration)); 

    using (
     WindowsMediaRenderer renderer = 
      new WindowsMediaRenderer(timeline, "output.wmv", WindowsMediaProfiles.HighQualityVideo)) 
    { 
     renderer.Render(); 
    } 
} 
संबंधित मुद्दे

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