تحويل عروض PowerPoint إلى فيديو في .NET

نظرة عامة

من خلال تحويل عرض PowerPoint أو OpenDocument إلى فيديو، ستحصل على:

تحسين إمكانية الوصول: جميع الأجهزة، بغض النظر عن النظام الأساسي، مزودة بمشغلات فيديو افتراضيًا، مما يجعل من الأسهل للمستخدمين فتح أو تشغيل مقاطع الفيديو مقارنةً بتطبيقات العروض التقديمية التقليدية.

وصول أوسع: تتيح لك مقاطع الفيديو الوصول إلى جمهور أكبر وعرض المعلومات بشكل أكثر جاذبية. تشير الدراسات والإحصاءات إلى أن الأشخاص يفضلون مشاهدة واستهلاك محتوى الفيديو على غيره، مما يجعل رسالتك أكثر تأثيرًا.

في Aspose.Slides for .NET، نفّذنا دعمًا لتحويل العروض التقديمية إلى فيديو.

  • استخدم Aspose.Slides for .NET لتوليد إطارات من شرائح العرض بمعدل إطارات محدد (FPS).
  • ثم استخدم أداة طرف ثالث مثل ffmpeg لتجميع هذه الإطارات في فيديو.

تحويل عرض PowerPoint إلى فيديو

  1. استخدم أمر dotnet add package لإضافة Aspose.Slides ومكتبة FFMpegCore إلى مشروعك:
    • نفّذ dotnet add package Aspose.Slides.NET --version 22.11.0
    • نفّذ dotnet add package FFMpegCore --version 4.8.0
  2. حمّل ffmpeg من here.
  3. يتطلب FFMpegCore تحديد المسار إلى ffmpeg الذي تم تنزيله (مثلاً، المستخرج إلى “C:\tools\ffmpeg”):
    GlobalFFOptions.Configure(new FFOptions { BinaryFolder = @"c:\tools\ffmpeg\bin" });
  1. شغِّل كود تحويل PowerPoint إلى فيديو.

هذا الكود C# يوضح كيفية تحويل عرض تقديمي (يحتوي على شكل وتأثيري حركة) إلى فيديو:

using System.Collections.Generic;
using Aspose.Slides;
using FFMpegCore; // سيستخدم ملفات الفيمبك التي استخرجناها إلى C:\tools\ffmpeg في وقت سابق.
using Aspose.Slides.Animation;

using (Presentation presentation = new Presentation())
{
    ISlide slide = presentation.Slides[0];

    // أضف شكلًا مبتسمًا ثم حركه.
    IAutoShape smile = slide.Shapes.AddAutoShape(ShapeType.SmileyFace, 110, 20, 500, 500);

    IEffect effectIn = slide.Timeline.MainSequence.AddEffect(
        smile, EffectType.Fly, EffectSubtype.TopLeft, EffectTriggerType.AfterPrevious);

    IEffect effectOut = slide.Timeline.MainSequence.AddEffect(
        smile, EffectType.Fly, EffectSubtype.BottomRight, EffectTriggerType.AfterPrevious);

    effectIn.Timing.Duration = 2f;
    effectOut.PresetClassType = EffectPresetClassType.Exit;

    const int Fps = 33;
    List<string> frames = new List<string>();

    using (var animationsGenerator = new PresentationAnimationsGenerator(presentation))
    using (var player = new PresentationPlayer(animationsGenerator, Fps))
    {
        player.FrameTick += (sender, args) =>
        {
            string frame = $"frame_{(sender.FrameIndex):D4}.png";
            args.GetFrame().Save(frame);
            frames.Add(frame);
        };
        animationsGenerator.Run(presentation.Slides);
    }

    // تكوين مجلد ملفات الفيمبك. راجع هذه الصفحة: https://github.com/rosenbjerg/FFMpegCore#installation
    GlobalFFOptions.Configure(new FFOptions { BinaryFolder = @"c:\tools\ffmpeg\bin" });

    // تحويل الإطارات إلى فيديو webm.
    FFMpeg.JoinImageSequence("smile.webm", Fps, frames.Select(frame => ImageInfo.FromPath(frame)).ToArray());
}

تأثيرات الفيديو

عند تحويل عرض PowerPoint إلى فيديو باستخدام Aspose.Slides for .NET، يمكنك تطبيق تأثيرات فيديو مختلفة لتحسين جودة المخرجات البصرية. تسمح لك هذه التأثيرات بالتحكم في مظهر الشرائح في الفيديو النهائي عبر إضافة انتقالات سلسة، وحركات، وعناصر بصرية أخرى. يشرح هذا القسم خيارات تأثيرات الفيديو المتاحة ويظهر كيفية تطبيقها.

تجعل الحركات والانتقالات عروض الشرائح أكثر جذبًا وإثارة — وتؤدي نفس الوظيفة للفيديوهات. لنضف شريحة وانتقالًا آخر إلى الكود للعرض السابق:

 // أضف شكلًا مبتسمًا وقم بتحريكه.
 // ...

 // أضف شريحة جديدة وانتقالًا متحركًا.
 ISlide newSlide = presentation.Slides.AddEmptySlide(presentation.Slides[0].LayoutSlide);
 newSlide.Background.Type = BackgroundType.OwnBackground;
 newSlide.Background.FillFormat.FillType = FillType.Solid;
 newSlide.Background.FillFormat.SolidFillColor.Color = Color.Indigo;
 newSlide.SlideShowTransition.Type = TransitionType.Push;

يدعم Aspose.Slides أيضًا حركات النص. في هذا المثال، نقوم بتحريك الفقرات على الكائنات بحيث تظهر واحدة تلو الأخرى، مع تأخير ثانية واحدة بينها:

using System.Collections.Generic;
using Aspose.Slides.Export;
using Aspose.Slides;
using FFMpegCore;
using Aspose.Slides.Animation;

using (Presentation presentation = new Presentation())
{
    ISlide slide = presentation.Slides[0];

    // إضافة النص والحركات.
    IAutoShape autoShape = slide.Shapes.AddAutoShape(ShapeType.Rectangle, 210, 120, 300, 300);
    Paragraph para1 = new Paragraph();
    para1.Portions.Add(new Portion("Aspose Slides for .NET"));
    Paragraph para2 = new Paragraph();
    para2.Portions.Add(new Portion("Convert a PowerPoint presentation with text to video"));

    Paragraph para3 = new Paragraph();
    para3.Portions.Add(new Portion("paragraph by paragraph"));
    autoShape.TextFrame.Paragraphs.Add(para1);
    autoShape.TextFrame.Paragraphs.Add(para2);
    autoShape.TextFrame.Paragraphs.Add(para3);
    autoShape.TextFrame.Paragraphs.Add(new Paragraph());

    IEffect effect1 = slide.Timeline.MainSequence.AddEffect(
        para1, EffectType.Appear, EffectSubtype.None, EffectTriggerType.AfterPrevious);

    IEffect effect2 = slide.Timeline.MainSequence.AddEffect(
        para2, EffectType.Appear, EffectSubtype.None, EffectTriggerType.AfterPrevious);

    IEffect effect3 = slide.Timeline.MainSequence.AddEffect(
        para3, EffectType.Appear, EffectSubtype.None, EffectTriggerType.AfterPrevious);

    IEffect effect4 = slide.Timeline.MainSequence.AddEffect(
        para3, EffectType.Appear, EffectSubtype.None, EffectTriggerType.AfterPrevious);

    effect1.Timing.TriggerDelayTime = 1f;
    effect2.Timing.TriggerDelayTime = 1f;
    effect3.Timing.TriggerDelayTime = 1f;
    effect4.Timing.TriggerDelayTime = 1f;

    const int Fps = 33;
    List<string> frames = new List<string>();

    using (var animationsGenerator = new PresentationAnimationsGenerator(presentation))
    using (var player = new PresentationPlayer(animationsGenerator, Fps))
    {
        player.FrameTick += (sender, args) =>
        {
            string frame = $"frame_{(sender.FrameIndex):D4}.png";
            args.GetFrame().Save(frame);
            frames.Add(frame);
        };

        animationsGenerator.Run(presentation.Slides);
    }

    // تكوين مجلد ملفات ffmpeg الثنائية. راجع هذه الصفحة: https://github.com/rosenbjerg/FFMpegCore#installation
    GlobalFFOptions.Configure(new FFOptions { BinaryFolder = @"c:\tools\ffmpeg\bin" });

    // تحويل الإطارات إلى فيديو webm.
    FFMpeg.JoinImageSequence("text_animation.webm", Fps, frames.Select(frame => ImageInfo.FromPath(frame)).ToArray());
}

فئات تحويل الفيديو

لتنفيذ مهام تحويل PowerPoint إلى فيديو، توفر Aspose.Slides for .NET الفئتين PresentationAnimationsGenerator وPresentationPlayer.

PresentationAnimationsGenerator يتيح لك تحديد حجم الإطار للفيديو (الذي سيُنشأ لاحقًا) وقيمة FPS (الإطارات في الثانية) عبر المُنشئ الخاص به. إذا مررت كائن عرض تقديمي، سيُستخدم Presentation.SlideSize الخاص به ويُولد حركات يستخدمها PresentationPlayer.

عند توليد الحركات، يُطلق حدث NewAnimation لكل حركة لاحقة، ويتضمن معلمة من نوع IPresentationAnimationPlayer. تمثل هذه الفئة مشغّلًا لحركة فردية.

للعمل مع IPresentationAnimationPlayer، تستخدم الخاصية Duration (التي تعطي المدة الكاملة للحركة) والطريقة SetTimePosition. يتم ضبط كل موضع حركة ضمن النطاق 0 إلى المدة، ثم تُعيد طريقة GetFrame صورة Bitmap تمثّل حالة الحركة في ذلك الوقت.

using (Presentation presentation = new Presentation())
{
    ISlide slide = presentation.Slides[0];

    // أضف شكلًا مبتسمًا وقم بتحريكه.
    IAutoShape smile = slide.Shapes.AddAutoShape(ShapeType.SmileyFace, 110, 20, 500, 500);

    IEffect effectIn = slide.Timeline.MainSequence.AddEffect(
        smile, EffectType.Fly, EffectSubtype.TopLeft, EffectTriggerType.AfterPrevious);

    IEffect effectOut = slide.Timeline.MainSequence.AddEffect(
        smile, EffectType.Fly, EffectSubtype.BottomRight, EffectTriggerType.AfterPrevious);

    effectIn.Timing.Duration = 2f;
    effectOut.PresetClassType = EffectPresetClassType.Exit;

    using (var animationsGenerator = new PresentationAnimationsGenerator(presentation))
    {
        animationsGenerator.NewAnimation += animationPlayer =>
        {
            Console.WriteLine($"Total animation duration: {animationPlayer.Duration}");

            animationPlayer.SetTimePosition(0);          // الحالة الأولية للرسوم المتحركة.
            Bitmap bitmap = animationPlayer.GetFrame();  // صورة الحالة الأولية للرسوم المتحركة.

            animationPlayer.SetTimePosition(animationPlayer.Duration);  // الحالة النهائية للرسوم المتحركة.
            Bitmap lastBitmap = animationPlayer.GetFrame();             // الإطار الأخير للرسوم المتحركة.
            lastBitmap.Save("last.png");
        };
    }
}

لجعل جميع الحركات في عرض تقديمي تُلعب في آنٍ واحد، تُستخدم فئة PresentationPlayer. تأخذ هذه الفئة كائنًا من PresentationAnimationsGenerator وقيمة FPS للEffects في المُنشئ، ثم تُستدعي حدث FrameTick لجميع الحركات لتشغيلها:

using (Presentation presentation = new Presentation("animated.pptx"))
{
    using (var animationsGenerator = new PresentationAnimationsGenerator(presentation))
    using (var player = new PresentationPlayer(animationsGenerator, 33))
    {
        player.FrameTick += (sender, args) =>
        {
            args.GetFrame().Save($"frame_{sender.FrameIndex}.png");
        };
        animationsGenerator.Run(presentation.Slides);
    }
}

بعد ذلك يمكن تجميع الإطارات المُولدة لإنتاج فيديو. راجع قسم Convert a PowerPoint Presentation to Video.

الحركات والتأثيرات المدعومة

عند تحويل عرض PowerPoint إلى فيديو باستخدام Aspose.Slides for .NET، من المهم معرفة أي الحركات والتأثيرات مدعومة في المخرجات. يدعم Aspose.Slides مجموعة واسعة من تأثيرات الدخول، الخروج، والتأكيد مثل التلاشي، الانزلاق، التكبير، والدوران. ومع ذلك، قد لا تُحافظ بعض الحركات المتقدمة أو المخصصة على شكلها الكامل أو قد تظهر بصورة مختلفة في الفيديو النهائي. يوضح هذا القسم الحركات والتأثيرات المدعومة.

دخول:

نوع الرسوم المتحركة Aspose.Slides PowerPoint
Appear not supported supported
Fade supported supported
Fly In supported supported
Float In supported supported
Split supported supported
Wipe supported supported
Shape supported supported
Wheel supported supported
Random Bars supported supported
Grow & Turn not supported supported
Zoom supported supported
Swivel supported supported
Bounce supported supported

تأكيد:

نوع الرسوم المتحركة Aspose.Slides PowerPoint
Pulse not supported supported
Color Pulse not supported supported
Teeter supported supported
Spin supported supported
Grow/Shrink not supported supported
Desaturate not supported supported
Darken not supported supported
Lighten not supported supported
Transparency not supported supported
Object Color not supported supported
Complementary Color not supported supported
Line Color not supported supported
Fill Color not supported supported

خروج:

نوع الرسوم المتحركة Aspose.Slides PowerPoint
Disappear not supported supported
Fade supported supported
Fly Out supported supported
Float Out supported supported
Split supported supported
Wipe supported supported
Shape supported supported
Random Bars supported supported
Shrink & Turn not supported supported
Zoom supported supported
Swivel supported supported
Bounce supported supported

مسارات الحركة:

نوع الرسوم المتحركة Aspose.Slides PowerPoint
Lines supported supported
Arcs supported supported
Turns supported supported
Shapes supported supported
Loops supported supported
Custom Path supported supported

تأثيرات انتقال الشريحة المدعومة

تلعب تأثيرات انتقال الشريحة دورًا مهمًا في إنشاء تغييرات سلسة وجذابة بصريًا بين الشرائح في الفيديو. يدعم Aspose.Slides for .NET مجموعة متنوعة من تأثيرات الانتقال الشائعة للمساعدة في الحفاظ على تدفق وأسلوب العرض الأصلي. يسلط هذا القسم الضوء على التأثيرات المدعومة أثناء عملية التحويل.

خفيفة:

نوع الرسوم المتحركة Aspose.Slides PowerPoint
Morph not supported supported
Fade supported supported
Push supported supported
Pull supported supported
Wipe supported supported
Split supported supported
Reveal not supported supported
Random Bars supported supported
Shape not supported supported
Uncover not supported supported
Cover supported supported
Flash supported supported
Strips supported supported

ممتعة:

نوع الرسوم المتحركة Aspose.Slides PowerPoint
Fall Over not supported supported
Drape not supported supported
Curtains not supported supported
Wind not supported supported
Prestige not supported supported
Fracture not supported supported
Crush not supported supported
Peel Off not supported supported
Page Curl not supported supported
Airplane not supported supported
Origami not supported supported
Dissolve supported supported
Checkerboard not supported supported
Blinds not supported supported
Clock supported supported
Ripple not supported supported
Honeycomb not supported supported
Glitter not supported supported
Vortex not supported supported
Shred not supported supported
Switch not supported supported
Flip not supported supported
Gallery not supported supported
Cube not supported supported
Doors not supported supported
Box not supported supported
Comb not supported supported
Zoom supported supported
Random not supported supported

محتوى ديناميكي:

نوع الرسوم المتحركة Aspose.Slides PowerPoint
Pan not supported supported
Ferris Wheel supported supported
Conveyor not supported supported
Rotate not supported supported
Orbit not supported supported
Fly Through supported supported

الأسئلة المتكررة

هل من الممكن تحويل العروض التقديمية المحمية بكلمة مرور؟

نعم، يتيح Aspose.Slides for .NET العمل مع العروض التقديمية المحمية بكلمة مرور. عند معالجة such files، تحتاج إلى توفير كلمة المرور الصحيحة لكي يتمكن المكتبة من الوصول إلى محتوى العرض.

هل يدعم Aspose.Slides for .NET الاستخدام في الحلول السحابية؟

نعم، يمكن دمج Aspose.Slides for .NET في التطبيقات والخدمات السحابية. تم تصميم المكتبة للعمل في بيئات الخوادم، مما يضمن أداءً عاليًا وقابلية توسيع للمعالجة الدفعية للملفات.

هل هناك أي حدود لحجم العروض التقديمية أثناء التحويل؟

يستطيع Aspose.Slides for .NET معالجة عروض تقديمية بأي حجم عمليًا. ومع ذلك، عند التعامل مع ملفات كبيرة جدًا، قد تكون هناك حاجة لموارد نظام إضافية، وفي بعض الأحيان يُنصح بتحسين العرض لتقليل استهلاك الموارد.