تحويل PowerPoint إلى فيديو

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

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

تحويل PowerPoint إلى فيديو في Aspose.Slides

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

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

تحويل PowerPoint إلى فيديو

  1. أضف هذا إلى ملف POM الخاص بك:
   <dependency>
     <groupId>net.bramp.ffmpeg</groupId>
     <artifactId>ffmpeg</artifactId>
     <version>0.7.0</version>
   </dependency>
```php

  1. قم بتنزيل ffmpeg هنا.

  2. قم بتشغيل كود PHP لتحويل PowerPoint إلى فيديو.

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

  $presentation = new Presentation();
  try {
    # إضافة شكل ابتسامة ثم تحريكه
    $smile = $presentation->getSlides()->get_Item(0)->getShapes()->addAutoShape(ShapeType::SmileyFace, 110, 20, 500, 500);
    $mainSequence = $presentation->getSlides()->get_Item(0)->getTimeline()->getMainSequence();
    $effectIn = $mainSequence->addEffect($smile, EffectType::Fly, EffectSubType::TopLeft, EffectTriggerType::AfterPrevious);
    $effectOut = $mainSequence->addEffect($smile, EffectType::Fly, EffectSubType::BottomRight, EffectTriggerType::AfterPrevious);
    $effectIn->getTiming()->setDuration(2.0);
    $effectOut->setPresetClassType(EffectPresetClassType::Exit);
    $fps = 33;

    class FrameTick {
      function invoke($sender, $arg) {
            try {
                $frame = sprintf("frame_%04d.png", $sender->getFrameIndex());
                $arguments->getFrame()->save($frame, ImageFormat::Png);
                $frames->add($frame);
                } catch (JavaException $e) {
                  }
             }
    }

    $frames = new Java("java.util.ArrayList");
    $animationsGenerator = new PresentationAnimationsGenerator($presentation);
    try {
      $player = new PresentationPlayer($animationsGenerator, $fps);
      try {
        $frameTick = java_closure(new FrameTick(), null, java("com.aspose.slides.PresentationPlayerFrameTick"));
        $player->setFrameTick($frameTick);
        $animationsGenerator->run($presentation->getSlides());
      } finally {
        if (!java_is_null($player)) {
          $player->dispose();
        }
      }
    } finally {
      if (!java_is_null($animationsGenerator)) {
        $animationsGenerator->dispose();
      }
    }
    # تهيئة مجلد ثنائيات ffmpeg. راجع هذه الصفحة: https://github.com/rosenbjerg/FFMpegCore#installation
    $ffmpeg = new Java("net.bramp.ffmpeg.builder.FFmpeg", "path/to/ffmpeg");
    $ffprobe = new Java("net.bramp.ffmpeg.builder.FFprobe", "path/to/ffprobe");
    $builder = (new Java("net.bramp.ffmpeg.builder.FFmpegBuilder"))->addExtraArgs("-start_number", "1")->setInput("frame_%04d.png")->addOutput("output.avi")->setVideoFrameRate(FFmpeg->FPS_24)->setFormat("avi")->done();
    $executor = new Java("net.bramp.ffmpeg.builder.FFmpegExecutor", $ffmpeg, $ffprobe);
    $executor->createJob($builder)->run();
  } catch (JavaException $e) {
    $e->printStackTrace();
  }

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

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

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

  # إضافة شكل ابتسامة وتحريكه
  # ...
  # إضافة شريحة جديدة وانتقال متحرك
  $newSlide = $presentation->getSlides()->addEmptySlide($presentation->getSlides()->get_Item(0)->getLayoutSlide());
  $newSlide->getBackground()->setType(BackgroundType::OwnBackground);
  $newSlide->getBackground()->getFillFormat()->setFillType(FillType::Solid);
  $newSlide->getBackground()->getFillFormat()->getSolidFillColor()->setColor(java("java.awt.Color")->MAGENTA);
  $newSlide->getSlideShowTransition()->setType(TransitionType::Push);

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

  $presentation = new Presentation();
  try {
    # إضافة نصوص ورسوم متحركة
    $autoShape = $presentation->getSlides()->get_Item(0)->getShapes()->addAutoShape(ShapeType::Rectangle, 210, 120, 300, 300);
    $para1 = new Paragraph();
    $para1->getPortions()->add(new Portion("Aspose Slides for Java"));
    $para2 = new Paragraph();
    $para2->getPortions()->add(new Portion("تحويل عرض PowerPoint مع نص إلى فيديو"));
    $para3 = new Paragraph();
    $para3->getPortions()->add(new Portion("فقرة تلو الأخرى"));
    $paragraphCollection = $autoShape->getTextFrame()->getParagraphs();
    $paragraphCollection->add($para1);
    $paragraphCollection->add($para2);
    $paragraphCollection->add($para3);
    $paragraphCollection->add(new Paragraph());
    $mainSequence = $presentation->getSlides()->get_Item(0)->getTimeline()->getMainSequence();
    $effect1 = $mainSequence->addEffect($para1, EffectType::Appear, EffectSubType::None, EffectTriggerType::AfterPrevious);
    $effect2 = $mainSequence->addEffect($para2, EffectType::Appear, EffectSubType::None, EffectTriggerType::AfterPrevious);
    $effect3 = $mainSequence->addEffect($para3, EffectType::Appear, EffectSubType::None, EffectTriggerType::AfterPrevious);
    $effect4 = $mainSequence->addEffect($para3, EffectType::Appear, EffectSubType::None, EffectTriggerType::AfterPrevious);
    $effect1->getTiming()->setTriggerDelayTime(1.0);
    $effect2->getTiming()->setTriggerDelayTime(1.0);
    $effect3->getTiming()->setTriggerDelayTime(1.0);
    $effect4->getTiming()->setTriggerDelayTime(1.0);
    $fps = 33;

    class FrameTick {
      function invoke($sender, $arg) {
            try {
                $frame = sprintf("frame_%04d.png", $sender->getFrameIndex());
                $arguments->getFrame()->save($frame, ImageFormat::Png);
                $frames->add($frame);
                } catch (JavaException $e) {
                  }
             }
    }

    $frames = new Java("java.util.ArrayList");
    $animationsGenerator = new PresentationAnimationsGenerator($presentation);
    try {
      $player = new PresentationPlayer($animationsGenerator, $fps);
      try {
        $frameTick = java_closure(new FrameTick(), null, java("com.aspose.slides.PresentationPlayerFrameTick"));
        $player->setFrameTick($frameTick);
        $animationsGenerator->run($presentation->getSlides());
      } finally {
        if (!java_is_null($player)) {
          $player->dispose();
        }
      }
    } finally {
      if (!java_is_null($animationsGenerator)) {
        $animationsGenerator->dispose();
      }
    }
    # تهيئة مجلد ثنائيات ffmpeg. راجع هذه الصفحة: https://github.com/rosenbjerg/FFMpegCore#installation
    $ffmpeg = new Java("net.bramp.ffmpeg.builder.FFmpeg", "path/to/ffmpeg");
    $ffprobe = new Java("net.bramp.ffmpeg.builder.FFprobe", "path/to/ffprobe");
    $builder = (new Java("net.bramp.ffmpeg.builder.FFmpegBuilder"))->addExtraArgs("-start_number", "1")->setInput("frame_%04d.png")->addOutput("output.avi")->setVideoFrameRate(FFmpeg->FPS_24)->setFormat("avi")->done();
    $executor = new Java("net.bramp.ffmpeg.builder.FFmpegExecutor", $ffmpeg, $ffprobe);
    $executor->createJob($builder)->run();
  } catch (JavaException $e) {
    $e->printStackTrace();
  }

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

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

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

عندما يتم توليد الرسوم المتحركة، يتم توليد حدث NewAnimation لكل رسوم متحركة لاحقة، والذي يحتوي على بارامتر IPresentationAnimationPlayer. والأخير هو فئة تمثل لاعبًا لرسوم متحركة منفصلة.

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

use aspose\slides\Presentation;
use aspose\slides\PresentationPlayer;
use aspose\slides\PresentationAnimationsGenerator;
use aspose\slides\ImageFormat;
use aspose\slides\ShapeType;
use aspose\slides\EffectType;
use aspose\slides\EffectSubtype;
use aspose\slides\EffectTriggerType;
use aspose\slides\EffectPresetClassType;

class PresentationAnimationPlayer {
    function invoke($animationPlayer) {
        echo(sprintf("المدة الكلية للرسوم المتحركة: %f", $animationPlayer->getDuration()));
        $animationPlayer->setTimePosition(0);// الحالة الأولية للرسوم المتحركة
        try {
            # الحالة الأولية للرسوم المتحركة
            $animationPlayer->getFrame()->save("firstFrame.png", ImageFormat::Png);
        } catch (JavaException $e) {
        }
        $animationPlayer->setTimePosition($animationPlayer->getDuration());// الحالة النهائية للرسوم المتحركة
        try {
            # الإطار الأخير للرسوم المتحركة
            $animationPlayer->getFrame()->save("lastFrame.png", ImageFormat::Png);
        } catch (JavaException $e) {
        }
    }
}
$presentation = new Presentation();
try {
    # إضافة شكل ابتسامة وتحريكه
    $smile = $presentation->getSlides()->get_Item(0)->getShapes()->addAutoShape(ShapeType::SmileyFace, 110, 20, 500, 500);
    $mainSequence = $presentation->getSlides()->get_Item(0)->getTimeline()->getMainSequence();
    $effectIn = $mainSequence->addEffect($smile, EffectType::Fly, EffectSubtype::TopLeft, EffectTriggerType::AfterPrevious);
    $effectOut = $mainSequence->addEffect($smile, EffectType::Fly, EffectSubtype::BottomRight, EffectTriggerType::AfterPrevious);
    $effectIn->getTiming()->setDuration(2.0);
    $effectOut->setPresetClassType(EffectPresetClassType::Exit);
    $animationsGenerator = new PresentationAnimationsGenerator($presentation);
    $presentationAnimation=java_closure(new PresentationAnimationPlayer(), null, java("com.aspose.slides.PresentationAnimationsGeneratorNewAnimation"));
    try {
        $animationsGenerator->setNewAnimation($presentationAnimation);
    } finally {
        if (!java_is_null($animationsGenerator)) {
            $animationsGenerator->dispose();
        }
    }
} finally {
    if (!java_is_null($presentation)) {
        $presentation->dispose();
    }
}

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


class FrameTick {
      function invoke($sender, $arg) {
            try {
                $arguments->getFrame()->save("frame_" . $sender->getFrameIndex() . ".png", ImageFormat::Png);
                } catch (JavaException $e) {
                  }
             }
    }

  $presentation = new Presentation("animated.pptx");
  try {
    $animationsGenerator = new PresentationAnimationsGenerator($presentation);
    try {
      $player = new PresentationPlayer($animationsGenerator, 33);
      try {
        $frameTick = java_closure(new FrameTick(), null, java("com.aspose.slides.PresentationPlayerFrameTick"));
        $player->setFrameTick($frameTick);
        $animationsGenerator->run($presentation->getSlides());
      } finally {
        if (!java_is_null($player)) {
          $player->dispose();
        }
      }
    } finally {
      if (!java_is_null($animationsGenerator)) {
        $animationsGenerator->dispose();
      }
    }
  } finally {
    if (!java_is_null($presentation)) {
      $presentation->dispose();
    }
  }

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

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

الدخول:

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

التأكيد:

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

الخروج:

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

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

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