تحويل باوربوينت إلى فيديو

من خلال تحويل عرض باوربوينت الخاص بك إلى فيديو، ستحصل على

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

تحويل باوربوينت إلى فيديو باستخدام Aspose.Slides

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

  • استخدم Aspose.Slides لإنشاء مجموعة من الإطارات (من شرايح العرض التقديمي) تت corresponde لمعدل إطارات معين (الإطارات في الثانية).
  • استخدم أداة طرف ثالث مثل FFMpegCore (ffmpeg) لإنشاء فيديو استنادًا إلى الإطارات.

تحويل باوربوينت إلى فيديو

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

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

using System.Collections.Generic;
using Aspose.Slides;
using FFMpegCore; // سنستخدم ملفات FFmpeg التي استخرجناها إلى "c:\tools\ffmpeg" سابقًا
using Aspose.Slides.Animation;
using (Presentation presentation = new Presentation())

{
    // يضيف شكل ابتسامة ثم يتحرك به
    IAutoShape smile = presentation.Slides[0].Shapes.AddAutoShape(ShapeType.SmileyFace, 110, 20, 500, 500);
    IEffect effectIn = presentation.Slides[0].Timeline.MainSequence.AddEffect(smile, EffectType.Fly, EffectSubtype.TopLeft, EffectTriggerType.AfterPrevious);
    IEffect effectOut = presentation.Slides[0].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);
    }

    // تكوين مجلد ملفات ffmpeg. انظر هذه الصفحة: 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());

}

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

يمكنك تطبيق الرسوم المتحركة على العناصر الموجودة على الشرائح واستخدام الانتقالات بين الشرائح.

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

// يضيف شكل ابتسامة ويتحرك به

// ...

// يضيف شريحة جديدة وانتقال متحرك

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())
{
    // يضيف نصوص ورسوم متحركة
    IAutoShape autoShape = presentation.Slides[0].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("تحويل عرض باوربوينت مع نص إلى فيديو"));

    Paragraph para3 = new Paragraph();
    para3.Portions.Add(new Portion("فقرة تلو الأخرى"));
    autoShape.TextFrame.Paragraphs.Add(para1);
    autoShape.TextFrame.Paragraphs.Add(para2);
    autoShape.TextFrame.Paragraphs.Add(para3);
    autoShape.TextFrame.Paragraphs.Add(new Paragraph());

    IEffect effect = presentation.Slides[0].Timeline.MainSequence.AddEffect(para1, EffectType.Appear, EffectSubtype.None, EffectTriggerType.AfterPrevious);

    IEffect effect2 = presentation.Slides[0].Timeline.MainSequence.AddEffect(para2, EffectType.Appear, EffectSubtype.None, EffectTriggerType.AfterPrevious);

    IEffect effect3 = presentation.Slides[0].Timeline.MainSequence.AddEffect(para3, EffectType.Appear, EffectSubtype.None, EffectTriggerType.AfterPrevious);

    IEffect effect4 = presentation.Slides[0].Timeline.MainSequence.AddEffect(para3, EffectType.Appear, EffectSubtype.None, EffectTriggerType.AfterPrevious);

    effect.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());

}

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

للسماح لك بتنفيذ مهام تحويل باوربوينت إلى فيديو، يوفر Aspose.Slides PresentationAnimationsGenerator وPresentationPlayer الكلاسات.

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

عندما يتم إنشاء الرسوم المتحركة، يتم إنشاء حدث NewAnimation لكل رسم متحرك لاحق، وهو يحمل المعامل IPresentationAnimationPlayer. الأخير هو فئة تمثل مشغلًا لرسم متحرك منفصل.

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

using (Presentation presentation = new Presentation())
{
    // يضيف شكل ابتسامة ويتحرك به
    IAutoShape smile = presentation.Slides[0].Shapes.AddAutoShape(ShapeType.SmileyFace, 110, 20, 500, 500);
    IEffect effectIn = presentation.Slides[0].Timeline.MainSequence.AddEffect(smile, EffectType.Fly, EffectSubtype.TopLeft, EffectTriggerType.AfterPrevious);
    IEffect effectOut = presentation.Slides[0].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($"مدة الرسوم المتحركة الإجمالية: {animationPlayer.Duration}");
            
            animationPlayer.SetTimePosition(0); // حالة الرسوم المتحركة الأولية
            Bitmap bitmap = animationPlayer.GetFrame(); // صورة حالة الرسوم المتحركة الأولية

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

لجعل جميع الرسوم المتحركة في عرض تقديمي تلعب مرة واحدة، يتم استخدام PresentationPlayer الفئة. تأخذ هذه الفئة مثيلًا من PresentationAnimationsGenerator وFPS للتأثيرات في مُنشئها ثم تستدعي حدث 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);
    }
}

ثم يمكن تجميع الإطارات المولدة لإنتاج فيديو. انظر قسم تحويل باوربوينت إلى فيديو.

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

دخول:

نوع الرسوم المتحركة Aspose.Slides باوربوينت
ظهور غير مدعوم مدعوم
تلاشي مدعوم مدعوم
دخول مدعوم مدعوم
طفو مدعوم مدعوم
انقسام مدعوم مدعوم
مسح مدعوم مدعوم
شكل مدعوم مدعوم
عجلة مدعوم مدعوم
أشرطة عشوائية مدعوم مدعوم
نمو دوران غير مدعوم مدعوم
تكبير مدعوم مدعوم
تدوير مدعوم مدعوم
ارتداد مدعوم مدعوم

تأكيد:

نوع الرسوم المتحركة Aspose.Slides باوربوينت
نبض غير مدعوم مدعوم
نبض اللون غير مدعوم مدعوم
توازن مدعوم مدعوم
دوران مدعوم مدعوم
نمو/انكماش غير مدعوم مدعوم
تخفيف غير مدعوم مدعوم
تعتيم غير مدعوم مدعوم
إنارة غير مدعوم مدعوم
شفافية غير مدعوم مدعوم
لون العنصر غير مدعوم مدعوم
لون تكميلي غير مدعوم مدعوم
لون الخط غير مدعوم مدعوم
لون التعبئة غير مدعوم مدعوم

خروج:

نوع الرسوم المتحركة Aspose.Slides باوربوينت
اختفاء غير مدعوم مدعوم
تلاشي مدعوم مدعوم
خرج مدعوم مدعوم
طفو مدعوم مدعوم
انقسام مدعوم مدعوم
مسح مدعوم مدعوم
شكل مدعوم مدعوم
أشرطة عشوائية مدعوم مدعوم
انكماش دوران غير مدعوم مدعوم
تكبير مدعوم مدعوم
تدوير مدعوم مدعوم
ارتداد مدعوم مدعوم

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

نوع الرسوم المتحركة Aspose.Slides باوربوينت
خطوط مدعوم مدعوم
أقواس مدعوم مدعوم
تدويرات مدعوم مدعوم
أشكال مدعوم مدعوم
دوائر مدعوم مدعوم
مسار مخصص مدعوم مدعوم

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

خفيفة:

نوع الرسوم المتحركة Aspose.Slides باوربوينت
تحول غير مدعوم مدعوم
تلاشي مدعوم مدعوم
دفع مدعوم مدعوم
سحب مدعوم مدعوم
مسح مدعوم مدعوم
انقسام مدعوم مدعوم
كشف غير مدعوم مدعوم
أشرطة عشوائية مدعوم مدعوم
شكل غير مدعوم مدعوم
كشف غير مدعوم مدعوم
تغطية مدعوم مدعوم
فلاش مدعوم مدعوم
شرائط مدعوم مدعوم

مثيرة:

نوع الرسوم المتحركة Aspose.Slides باوربوينت
سقوط غير مدعوم مدعوم
ستارة غير مدعوم مدعوم
ستائر غير مدعوم مدعوم
رياح غير مدعوم مدعوم
هيبة غير مدعوم مدعوم
تشقق غير مدعوم مدعوم
سحق غير مدعوم مدعوم
تقشر غير مدعوم مدعوم
حافة الصفحة غير مدعوم مدعوم
طائرة غير مدعوم مدعوم
أوريغامي غير مدعوم مدعوم
تلاشي مدعوم مدعوم
لوحة شطرنج غير مدعوم مدعوم
ستائر غير مدعوم مدعوم
ساعة مدعوم مدعوم
تموج غير مدعوم مدعوم
شخللة غير مدعوم مدعوم
تألق غير مدعوم مدعوم
دوامة غير مدعوم مدعوم
تمزيق غير مدعوم مدعوم
تبديل غير مدعوم مدعوم
تقلب غير مدعوم مدعوم
معرض غير مدعوم مدعوم
مكعب غير مدعوم مدعوم
أبواب غير مدعوم مدعوم
صندوق غير مدعوم مدعوم
مشط غير مدعوم مدعوم
تكبير مدعوم مدعوم
عشوائي غير مدعوم مدعوم

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

نوع الرسوم المتحركة Aspose.Slides باوربوينت
تدوير غير مدعوم مدعوم
عجلة فيريس مدعوم مدعوم
حزام ناقل غير مدعوم مدعوم
تدوير غير مدعوم مدعوم
مدار غير مدعوم مدعوم
التحليق من خلال مدعوم مدعوم