سؤال

لدي دليل من الصور النقطية التي لها نفس البعد.أرغب في تحويل هذه الصور النقطية إلى ملف فيديو.لا يهمني إذا كان ملف الفيديو (برنامج الترميز) هو wmv أو avi.شرطي الوحيد هو أن أحدد معدل الإطارات.لا يلزم أن يكون هذا عبر الأنظمة الأساسية، فقط Windows (Vista وXP).لقد قرأت بعض الأشياء حول استخدام Windows Media SDK أو DirectShow، ولكن لم يكن أي منها واضحًا بشأن تقديم نماذج التعليمات البرمجية.

هل يمكن لأي شخص تقديم بعض الأفكار أو بعض الموارد القيمة التي قد تساعدني في القيام بذلك في C#؟

هل كانت مفيدة؟

المحلول

ومع احتمال التصويت ضده، سأقدم خيارًا بديلاً محتملاً - رسم متحرك للصور النقطية المخزنة مؤقتًا.

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 في http://www.codeplex.com/splicer/Wiki/View.aspx?title=News%20Feeds&referringTitle=Home

يحرر:

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();
    }
}

يمكنك استخدام AVI* من مكتبة avifil32، يوجد مثال هنا (لم يتم تجربته):
http://www.adp-gmbh.ch/csharp/mandelbrot/index.html

قد يكون هذا مفيدًا لك:
http://bytescout.com/swfslideshowscout_example_c_sharp.html
(إنشاء عرض شرائح فلاش من صور JPG باستخدام C#)

التكنولوجيا المثالية لتحقيق ما تريد هي خدمات التحرير DirectShow.ومع ذلك، إذا كان هذا مشروعًا لمرة واحدة، فلن أزعج نفسي - فقد يكون منحنى التعلم حادًا للغاية.

لا يتوفر الكثير من نماذج التعليمات البرمجية لـ DES، على الرغم من وجود الكثير من نماذج DirectShow العامة داخل MSDN وخارجها.لأغراضك أوصي بالبدء هنا للحصول على شرح أساسي لاستخدام الصور الثابتة كمصدر للفيديو.

لم أحاول ذلك، ولكن ويندوز موفي ميكر يحتوي على واجهة برمجة التطبيقات (API) وتنسيق ملف XML الذي يمكنك استخدامه.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top