PowerPoint in Video umwandeln

Durch das Konvertieren Ihrer PowerPoint-Präsentation in ein Video erhalten Sie

  • Erhöhte Zugänglichkeit: Alle Geräte (unabhängig von der Plattform) sind standardmäßig mit Video-Playern ausgestattet, im Vergleich zu Anwendungen zum Öffnen von Präsentationen, sodass Benutzer es einfacher finden, Videos zu öffnen oder abzuspielen.
  • Größere Reichweite: Durch Videos können Sie ein großes Publikum erreichen und es mit Informationen ansprechen, die in einer Präsentation möglicherweise langweilig erscheinen. Die meisten Umfragen und Statistiken deuten darauf hin, dass Menschen Videos häufiger ansehen und konsumieren als andere Formen von Inhalten und solche Inhalte im Allgemeinen bevorzugen.

PowerPoint-zu-Video-Konvertierung in Aspose.Slides

In Aspose.Slides 22.11 haben wir die Unterstützung für die Konvertierung von Präsentationen in Videos implementiert.

  • Verwenden Sie Aspose.Slides, um eine Reihe von Frames (aus den Präsentationsfolien) zu generieren, die einem bestimmten FPS (Bilder pro Sekunde) entsprechen
  • Verwenden Sie ein Drittanbieter-Tool wie ffmpeg (für Java), um ein Video basierend auf den Frames zu erstellen.

PowerPoint in Video konvertieren

  1. Fügen Sie dies zu Ihrer POM-Datei hinzu:
   <dependency>
     <groupId>net.bramp.ffmpeg</groupId>
     <artifactId>ffmpeg</artifactId>
     <version>0.7.0</version>
   </dependency>
```php

  1. Laden Sie ffmpeg hier herunter.

  2. Führen Sie den PHP-Code zur Konvertierung von PowerPoint in Video aus.

Dieser PHP-Code zeigt Ihnen, wie Sie eine Präsentation (die eine Figur und zwei Animationseffekte enthält) in ein Video umwandeln:

  $presentation = new Presentation();
  try {
    # Fügt eine Smile-Form hinzu und animiert sie
    $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();
      }
    }
    # Konfigurieren Sie den ffmpeg-Binärordner. Siehe diese Seite: 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();
  }

Videoeffekte

Sie können Animationen auf Objekte auf Folien anwenden und Übergänge zwischen Folien verwenden.

Animationen und Übergänge machen Diashows ansprechender und interessanter – und sie tun dasselbe für Videos. Lassen Sie uns eine weitere Folie und einen Übergang zum Code der vorherigen Präsentation hinzufügen:

  # Fügt eine Smile-Form hinzu und animiert sie
  # ...
  # Fügt eine neue Folie und einen animierten Übergang hinzu
  $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 unterstützt auch Animationen für Texte. So animieren wir Absätze auf Objekten, die nacheinander (mit einer Verzögerung von einer Sekunde) erscheinen:

  $presentation = new Presentation();
  try {
    # Fügt Text und Animationen hinzu
    $autoShape = $presentation->getSlides()->get_Item(0)->getShapes()->addAutoShape(ShapeType::Rectangle, 210, 120, 300, 300);
    $para1 = new Paragraph();
    $para1->getPortions()->add(new Portion("Aspose Slides für Java"));
    $para2 = new Paragraph();
    $para2->getPortions()->add(new Portion("PowerPoint-Präsentation mit Text in Video umwandeln"));
    $para3 = new Paragraph();
    $para3->getPortions()->add(new Portion("Absatz für Absatz"));
    $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();
      }
    }
    # Konfigurieren Sie den ffmpeg-Binärordner. Siehe diese Seite: 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();
  }

Videokonvertierungsklassen

Um Ihnen die Durchführung von Aufgaben zur Konvertierung von PowerPoint in Video zu ermöglichen, stellt Aspose.Slides die Klassen PresentationAnimationsGenerator und PresentationPlayer zur Verfügung.

PresentationAnimationsGenerator ermöglicht es Ihnen, die Frame-Größe für das Video (das später erstellt wird) über seinen Konstruktor festzulegen. Wenn Sie eine Instanz der Präsentation übergeben, wird Presentation.SlideSize verwendet und es erzeugt Animationen, die von PresentationPlayer verwendet werden.

Wenn Animationen generiert werden, wird ein NewAnimation-Ereignis für jede nachfolgende Animation generiert, das den Parameter IPresentationAnimationPlayer enthält. Letzteres ist eine Klasse, die einen Spieler für eine separate Animation darstellt.

Um mit IPresentationAnimationPlayer zu arbeiten, werden die Eigenschaften Duration (die Gesamtdauer der Animation) und die Methode SetTimePosition verwendet. Jede Animationsposition wird innerhalb des Bereichs 0 bis Dauer festgelegt, und dann gibt die Methode GetFrame ein BufferedImage zurück, das dem Animationsstatus zu diesem Zeitpunkt entspricht:

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("Animierte Gesamtdauer: %f", $animationPlayer->getDuration()));
        $animationPlayer->setTimePosition(0);// ursprünglicher Animationsstatus
        try {
            # ursprünglicher Animationsstatus Bitmap
            $animationPlayer->getFrame()->save("firstFrame.png", ImageFormat::Png);
        } catch (JavaException $e) {
        }
        $animationPlayer->setTimePosition($animationPlayer->getDuration());// Endstatus der Animation
        try {
            # letztes Frame der Animation
            $animationPlayer->getFrame()->save("lastFrame.png", ImageFormat::Png);
        } catch (JavaException $e) {
        }
    }
}
$presentation = new Presentation();
try {
    # Fügt eine Smile-Form hinzu und animiert sie
    $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();
    }
}

Um alle Animationen in einer Präsentation gleichzeitig abzuspielen, wird die Klasse PresentationPlayer verwendet. Diese Klasse benötigt eine Instanz von PresentationAnimationsGenerator und FPS für Effekte in ihrem Konstruktor und ruft dann das Ereignis FrameTick für alle Animationen auf, um sie abzuspielen:


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

Dann können die generierten Frames zu einem Video kompiliert werden. Siehe den Abschnitt PowerPoint in Video umwandeln.

Unterstützte Animationen und Effekte

Eingang:

Animationsart Aspose.Slides PowerPoint
Erscheinen nicht unterstützt unterstützt
Verblassen unterstützt unterstützt
Hereinfliegen unterstützt unterstützt
Hineinschweben unterstützt unterstützt
Teilen unterstützt unterstützt
Wischen unterstützt unterstützt
Form unterstützt unterstützt
Rad unterstützt unterstützt
Zufällige Balken unterstützt unterstützt
Wachsen & Drehen nicht unterstützt unterstützt
Zoom unterstützt unterstützt
Schwenken unterstützt unterstützt
Hüpfen unterstützt unterstützt

Betonung:

Animationsart Aspose.Slides PowerPoint
Puls nicht unterstützt unterstützt
Farbe pulsieren nicht unterstützt unterstützt
Wippen unterstützt unterstützt
Drehen unterstützt unterstützt
Wachsen/Schrumpfen nicht unterstützt unterstützt
Entsättigen nicht unterstützt unterstützt
Verdunkeln nicht unterstützt unterstützt
Aufhellen nicht unterstützt unterstützt
Transparenz nicht unterstützt unterstützt
Objektfarbe nicht unterstützt unterstützt
Komplementärfarbe nicht unterstützt unterstützt
Linienfarbe nicht unterstützt unterstützt
Füllfarbe nicht unterstützt unterstützt

Ausgang:

Animationsart Aspose.Slides PowerPoint
Verschwinden nicht unterstützt unterstützt
Verblassen unterstützt unterstützt
Hinausfliegen unterstützt unterstützt
Hinausschweben unterstützt unterstützt
Teilen unterstützt unterstützt
Wischen unterstützt unterstützt
Form unterstützt unterstützt
Zufällige Balken unterstützt unterstützt
Schrumpfen & Drehen nicht unterstützt unterstützt
Zoom unterstützt unterstützt
Schwenken unterstützt unterstützt
Hüpfen unterstützt unterstützt

Bewegungspfad:

Animationsart Aspose.Slides PowerPoint
Linien unterstützt unterstützt
Bögen unterstützt unterstützt
Drehungen unterstützt unterstützt
Formen unterstützt unterstützt
Schleifen unterstützt unterstützt
Benutzerdefinierter Pfad unterstützt unterstützt