PowerPointを動画に変換

PowerPointプレゼンテーションを動画に変換することで、次の利点があります。

  • アクセシビリティの向上: プレゼンテーションを開くアプリケーションと比べて、すべてのデバイス(プラットフォームに関係なく)はデフォルトで動画プレーヤーを搭載しているため、ユーザーは動画を開いたり再生したりするのが容易になります。
  • リーチの拡大: 動画を通じて、多くの視聴者に情報を届けることができ、プレゼンテーションで退屈に思える情報をターゲットにすることができます。多くの調査や統計によると、人々は他の形式のコンテンツよりも動画を視聴し消費することが多く、通常はそのようなコンテンツを好みます。

Aspose.SlidesにおけるPowerPointから動画への変換

Aspose.Slides 22.11では、プレゼンテーションを動画に変換する機能を実装しました。

  • Aspose.Slidesを使用して、特定のFPS(フレーム毎秒)に対応するプレゼンテーションスライドからフレームのセットを生成します。
  • ffmpegのようなサードパーティユーティリティを使用して、フレームに基づいて動画を作成します。

PowerPointを動画に変換

  1. POMファイルに次の内容を追加してください:
   <dependency>
     <groupId>net.bramp.ffmpeg</groupId>
     <artifactId>ffmpeg</artifactId>
     <version>0.7.0</version>
   </dependency>
```php

  1. ffmpegをこちらからダウンロードします。

  2. PowerPointを動画に変換するPHPコードを実行します。

このPHPコードは、図と2つのアニメーション効果を含むプレゼンテーションを動画に変換する方法を示しています:

  $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はテキスト用のアニメーションもサポートしています。つまり、オブジェクト上の段落をアニメーションさせ、次々と表示させることができます(遅延は1秒に設定されています):

  $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からdurationの範囲内に設定され、その後GetFrameメソッドは、その時点でのアニメーションの状態に対応するBufferedImageを返します:

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
ライン サポートされています サポートされています
アーク サポートされています サポートされています
ターン サポートされています サポートされています
形状 サポートされています サポートされています
ループ サポートされています サポートされています
カスタムパス サポートされています サポートされています