PowerPointを動画に変換

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

  • アクセシビリティの向上: プレゼンテーションを開くアプリケーションと比較して、すべてのデバイス(プラットフォームに関係なく)がデフォルトで動画プレーヤーを備えているため、ユーザーは動画を開いたり再生したりするのが簡単です。
  • より多くのリーチ: 動画を通じて、大規模なオーディエンスに情報を提供でき、プレゼンテーションでは退屈に感じるかもしれない情報を伝えることができます。ほとんどの調査や統計は、人々がその他の形式のコンテンツよりも動画を視聴し消費することを示唆しており、一般的にそのようなコンテンツを好む傾向があります。

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

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

  • Aspose.Slidesを使用して、特定のFPS(1秒あたりのフレーム数)に対応するフレームのセットを生成します。
  • ffmpegなどのサードパーティユーティリティを使用して、フレームに基づいて動画を作成します。

PowerPointを動画に変換する

  1. ffmpegをこちらからダウンロードします。
  2. ffmpeg.exeのパスを環境変数PATHに追加します。
  3. PowerPointから動画へのコードを実行します。

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

void OnFrameTick(System::SharedPtr<PresentationPlayer> sender, System::SharedPtr<FrameTickEventArgs> args)
{
    System::String fileName = System::String::Format(u"frame_{0}.png", sender->get_FrameIndex());
    args->GetFrame()->Save(fileName);
}

void Run()
{
    auto presentation = System::MakeObject<Presentation>();
    auto slide = presentation->get_Slide(0);

    // 笑顔の図形を追加し、その後アニメーションを適用
    System::SharedPtr<IAutoShape> smile = slide->get_Shapes()->AddAutoShape(ShapeType::SmileyFace, 110.0f, 20.0f, 500.0f, 500.0f);
    auto sequence = slide->get_Timeline()->get_MainSequence();
    System::SharedPtr<IEffect> effectIn = sequence->AddEffect(smile, EffectType::Fly, EffectSubtype::TopLeft, EffectTriggerType::AfterPrevious);
    System::SharedPtr<IEffect> effectOut = sequence->AddEffect(smile, EffectType::Fly, EffectSubtype::BottomRight, EffectTriggerType::AfterPrevious);
    effectIn->get_Timing()->set_Duration(2.0f);
    effectOut->set_PresetClassType(EffectPresetClassType::Exit);

    const int32_t fps = 33;

    auto animationsGenerator = System::MakeObject<PresentationAnimationsGenerator>(presentation);
    auto player = System::MakeObject<PresentationPlayer>(animationsGenerator, fps);
    player->FrameTick += OnFrameTick;
    animationsGenerator->Run(presentation->get_Slides());

    const System::String ffmpegParameters = System::String::Format(
        u"-loglevel {0} -framerate {1} -i {2} -y -c:v {3} -pix_fmt {4} {5}",
        u"warning", m_fps, "frame_%d.png", u"libx264", u"yuv420p", "video.mp4");
    auto ffmpegProcess = System::Diagnostics::Process::Start(u"ffmpeg", ffmpegParameters);
    ffmpegProcess->WaitForExit();
}

動画効果

スライド上のオブジェクトにアニメーションを適用し、スライド間のトランジションを使用できます。

アニメーションやトランジションにより、スライドショーや動画はより魅力的で興味深くなります。前回のプレゼンテーションのコードにもう1つのスライドとトランジションを追加しましょう。

// 笑顔の図形を追加し、その後アニメーションを適用

// ...

// 新しいスライドを追加し、アニメーショントランジションを適用

System::SharedPtr<ISlide> newSlide = presentation->get_Slides()->AddEmptySlide(presentation->get_Slide(0)->get_LayoutSlide());

System::SharedPtr<IBackground> slideBackground = newSlide->get_Background();

slideBackground->set_Type(BackgroundType::OwnBackground);

auto fillFormat = slideBackground->get_FillFormat();

fillFormat->set_FillType(FillType::Solid);

fillFormat->get_SolidFillColor()->set_Color(System::Drawing::Color::get_Indigo());

newSlide->get_SlideShowTransition()->set_Type(TransitionType::Push);

Aspose.Slidesは、テキストのアニメーションもサポートしています。したがって、オブジェクト上の段落が1つずつ表示されるようにアニメーションを適用します(遅延は1秒に設定されています)。

void OnFrameTick(System::SharedPtr<PresentationPlayer> sender, System::SharedPtr<FrameTickEventArgs> args)
{
    System::String fileName = System::String::Format(u"frame_{0}.png", sender->get_FrameIndex());
    args->GetFrame()->Save(fileName);
}

void Run()
{
    auto presentation = System::MakeObject<Presentation>();
    auto slide = presentation->get_Slide(0);

    // テキストとアニメーションを追加
    System::SharedPtr<IAutoShape> autoShape = slide->get_Shapes()->AddAutoShape(ShapeType::Rectangle, 210.0f, 120.0f, 300.0f, 300.0f);
    System::SharedPtr<Paragraph> para1 = System::MakeObject<Paragraph>();
    para1->get_Portions()->Add(System::MakeObject<Portion>(u"Aspose Slides for C++"));
    System::SharedPtr<Paragraph> para2 = System::MakeObject<Paragraph>();
    para2->get_Portions()->Add(System::MakeObject<Portion>(u"テキストを含むPowerPointプレゼンテーションを動画に変換"));

    System::SharedPtr<Paragraph> para3 = System::MakeObject<Paragraph>();
    para3->get_Portions()->Add(System::MakeObject<Portion>(u"段落ごとに"));
    auto paragraphs = autoShape->get_TextFrame()->get_Paragraphs();
    paragraphs->Add(para1);
    paragraphs->Add(para2);
    paragraphs->Add(para3);
    paragraphs->Add(System::MakeObject<Paragraph>());

    auto sequence = slide->get_Timeline()->get_MainSequence();
    System::SharedPtr<IEffect> effect = sequence->AddEffect(para1, EffectType::Appear, EffectSubtype::None, EffectTriggerType::AfterPrevious);

    System::SharedPtr<IEffect> effect2 = sequence->AddEffect(para2, EffectType::Appear, EffectSubtype::None, EffectTriggerType::AfterPrevious);

    System::SharedPtr<IEffect> effect3 = sequence->AddEffect(para3, EffectType::Appear, EffectSubtype::None, EffectTriggerType::AfterPrevious);

    System::SharedPtr<IEffect> effect4 = sequence->AddEffect(para3, EffectType::Appear, EffectSubtype::None, EffectTriggerType::AfterPrevious);

    effect->get_Timing()->set_TriggerDelayTime(1.0f);
    effect2->get_Timing()->set_TriggerDelayTime(1.0f);
    effect3->get_Timing()->set_TriggerDelayTime(1.0f);
    effect4->get_Timing()->set_TriggerDelayTime(1.0f);

    // フレームを動画に変換
    const int32_t fps = 33;

    auto animationsGenerator = System::MakeObject<PresentationAnimationsGenerator>(presentation);
    auto player = System::MakeObject<PresentationPlayer>(animationsGenerator, fps);
    
    player->FrameTick += OnFrameTick;
    animationsGenerator->Run(presentation->get_Slides());

    const System::String ffmpegParameters = System::String::Format(
        u"-loglevel {0} -framerate {1} -i {2} -y -c:v {3} -pix_fmt {4} {5}",
        u"warning", m_fps, "frame_%d.png", u"libx264", u"yuv420p", "video.mp4");
    auto ffmpegProcess = System::Diagnostics::Process::Start(u"ffmpeg", ffmpegParameters);
    ffmpegProcess->WaitForExit();
}

動画変換クラス

PowerPointから動画への変換タスクを実行できるように、Aspose.SlidesはPresentationAnimationsGeneratorPresentationPlayerクラスを提供します。

PresentationAnimationsGeneratorは、動画のためにフレームサイズを設定することを可能にし、そのコンストラクターを通じてそれを行います。プレゼンテーションのインスタンスを渡すと、Presentation.SlideSizeが使用され、PresentationPlayerが使用するアニメーションが生成されます。

アニメーションが生成されると、各後続のアニメーションのためにNewAnimationイベントが生成され、これがIPresentationAnimationPlayerパラメーターを持ちます。後者は、個別のアニメーションのプレーヤーを表すクラスです。

IPresentationAnimationPlayerを使用するには、get_Duration(アニメーションの全体の持続時間)プロパティとSetTimePositionメソッドが使用されます。各アニメーション位置は0から持続時間の範囲内で設定され、GetFrameメソッドはその瞬間のアニメーション状態に対応するBitmapを返します。

void OnNewAnimation(System::SharedPtr<IPresentationAnimationPlayer> animationPlayer)
{
    System::Console::WriteLine(u"アニメーションの総持続時間: {0}", animationPlayer->get_Duration());

    animationPlayer->SetTimePosition(0);
    // 初期アニメーション状態
    System::SharedPtr<System::Drawing::Bitmap> bitmap = animationPlayer->GetFrame();
    // 初期アニメーション状態のビットマップ

    animationPlayer->SetTimePosition(animationPlayer->get_Duration());
    // アニメーションの最終状態
    System::SharedPtr<System::Drawing::Bitmap> lastBitmap = animationPlayer->GetFrame();
    // アニメーションの最後のフレーム
    lastBitmap->Save(u"last.png");
}

void Run()
{
    auto presentation = System::MakeObject<Presentation>();
    auto slide = presentation->get_Slide(0);

    // 笑顔の図形を追加し、その後アニメーションを適用
    System::SharedPtr<IAutoShape> smile = slide->get_Shapes()->AddAutoShape(ShapeType::SmileyFace, 110.0f, 20.0f, 500.0f, 500.0f);
    auto sequence = slide->get_Timeline()->get_MainSequence();
    System::SharedPtr<IEffect> effectIn = sequence->AddEffect(smile, EffectType::Fly, EffectSubtype::TopLeft, EffectTriggerType::AfterPrevious);
    System::SharedPtr<IEffect> effectOut = sequence->AddEffect(smile, EffectType::Fly, EffectSubtype::BottomRight, EffectTriggerType::AfterPrevious);
    effectIn->get_Timing()->set_Duration(2.0f);
    effectOut->set_PresetClassType(EffectPresetClassType::Exit);

    auto animationsGenerator = System::MakeObject<PresentationAnimationsGenerator>(presentation);
    animationsGenerator->NewAnimation += OnNewAnimation;
}

プレゼンテーション内のすべてのアニメーションを一度に再生するには、PresentationPlayerクラスが使用されます。このクラスは、PresentationAnimationsGeneratorインスタンスとエフェクトのFPSをコンストラクターに取り入れ、すべてのアニメーションを再生するためにFrameTickイベントを呼び出します。

void OnFrameTick(System::SharedPtr<PresentationPlayer> sender, System::SharedPtr<FrameTickEventArgs> args)
{
    System::String fileName = System::String::Format(u"frame_{0}.png", sender->get_FrameIndex());
    args->GetFrame()->Save(fileName);
}

void Run()
{
    auto presentation = System::MakeObject<Presentation>(u"animated.pptx");
    auto animationsGenerator = System::MakeObject<PresentationAnimationsGenerator>(presentation);
    auto player = System::MakeObject<PresentationPlayer>(animationsGenerator, 33);

    player->FrameTick += OnFrameTick;
    animationsGenerator->Run(presentation->get_Slides());
}

生成されたフレームはまとめて動画としてコンパイルされます。PowerPointを動画に変換するセクションを参照してください。

サポートされるアニメーションと効果

登場:

アニメーションタイプ Aspose.Slides PowerPoint
出現 サポートされていません サポートされています
フェード サポートされています サポートされています
フライイン サポートされています サポートされています
フロートイン サポートされています サポートされています
スプリット サポートされています サポートされています
ワイプ サポートされています サポートされています
シェイプ サポートされています サポートされています
ホイール サポートされています サポートされています
ランダムバー サポートされています サポートされています
成長と回転 サポートされていません サポートされています
ズーム サポートされています サポートされています
スイベル サポートされています サポートされています
バウンド サポートされています サポートされています

強調:

アニメーションタイプ Aspose.Slides PowerPoint
パルス サポートされていません サポートされています
カラーパルス サポートされていません サポートされています
ティーター サポートされています サポートされています
スピン サポートされています サポートされています
成長/縮小 サポートされていません サポートされています
デサチュレート サポートされていません サポートされています
ダークン サポートされていません サポートされています
ライトン サポートされていません サポートされています
透明度 サポートされていません サポートされています
オブジェクトカラー サポートされていません サポートされています
補完色 サポートされていません サポートされています
ラインカラー サポートされていません サポートされています
フィルカラー サポートされていません サポートされています

退出:

アニメーションタイプ Aspose.Slides PowerPoint
消失 サポートされていません サポートされています
フェード サポートされています サポートされています
フライアウト サポートされています サポートされています
フロートアウト サポートされています サポートされています
スプリット サポートされています サポートされています
ワイプ サポートされています サポートされています
シェイプ サポートされています サポートされています
ランダムバー サポートされています サポートされています
縮小と回転 サポートされていません サポートされています
ズーム サポートされています サポートされています
スイベル サポートされています サポートされています
バウンド サポートされています サポートされています

モーションパス:

アニメーションタイプ Aspose.Slides PowerPoint
ライン サポートされています サポートされています
アーク サポートされています サポートされています
ターン サポートされています サポートされています
シェイプ サポートされています サポートされています
ループ サポートされています サポートされています
カスタムパス サポートされています サポートされています