PowerPoint-prezentációk videóvá alakítása C++-ban

Bevezetés

PowerPoint‑prezentáció videóvá alakításával

  • Növekvő hozzáférhetőség: Minden eszköz (platformtól függetlenül) alapértelmezés szerint videolejátszóval rendelkezik, szemben a prezentáció‑megnyitó alkalmazásokkal, így a felhasználók könnyebben nyitják meg vagy játsszák le a videókat.
  • Nagyobb elérés: Videókkal széles közönséget érhetünk el, és olyan információkat közvetíthetünk, amelyek egy prezentációban unalmasnak tűnhetnek. A legtöbb felmérés és statisztika szerint az emberek a videót többet nézik és fogyasztják, mint más tartalomtípusokat, és általában ezt a formát részesítik előnyben.

Az Aspose.Slides 22.11‑ben bevezettük a prezentáció‑videó konverzió támogatását.

  • Használja az Aspose.Slides‑t a diákból származó képkockák (keretek) előállításához, egy adott FPS‑hez (képkocka másodpercenként)
  • Használjon egy harmadik féltől származó segédprogramot, például a ffmpeg‑et a képkockák alapján videó létrehozásához.

PowerPoint prezentáció konvertálása videóvá

  1. Töltse le az ffmpeg‑et itt.
  2. Adja hozzá a ffmpeg.exe elérési útját a PATH környezeti változóhoz.
  3. Futtassa a PowerPoint‑videó kódot.

Ez a C++ kód bemutatja, hogyan konvertálhat egy prezentációt (egy ábrával és két animációs effektussal) videóvá:

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

    // Hozzáad egy mosoly alakzatot, majd animálja
    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();
}

Videóhatások

Animációkat alkalmazhat a diák objektumaira, valamint átmeneteket a diák között.

Az animációk és átmenetek élvezetesebbé és érdekesebbé teszik a diavetítéseket – és ugyanezt teszik a videókkal is. Adjuk hozzá a kódhoz egy újabb diát és átmenetet a korábbi prezentációhoz:

// Hozzáad egy mosoly alakzatot és animálja

// ...

// Hozzáad egy új diát és animált átmenetet

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

Az Aspose.Slides szövegekre is támogat animációt. Így beállíthatunk bekezdés‑animációkat az objektumokon, amelyek egyesével jelennek meg (az egy másodperces késleltetést beállítva):

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

    // Hozzáad szöveget és animációkat
    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"convert PowerPoint Presentation with text to video"));

    System::SharedPtr<Paragraph> para3 = System::MakeObject<Paragraph>();
    para3->get_Portions()->Add(System::MakeObject<Portion>(u"paragraph by paragraph"));
    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);

    // Átalakítja a képkockákat videóvá
    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();
}

Videókonverziós osztályok

Annak érdekében, hogy PowerPoint‑videó konverziós feladatokat hajthasson végre, az Aspose.Slides a PresentationAnimationsGenerator és a PresentationPlayer osztályokat biztosítja.

A PresentationAnimationsGenerator lehetővé teszi a videó képkockaméretének beállítását (amelyet később létrehoz) a konstruktorán keresztül. Ha egy prezentáció példányát adja át, a Presentation.SlideSize kerül felhasználásra, és olyan animációkat generál, amelyeket a PresentationPlayer használ.

Animációk generálásakor minden egyes további animációhoz egy NewAnimation esemény keletkezik, amely a IPresentationAnimationPlayer paramétert kapja. Az utóbbi egy külön animáció lejátszását megvalósító osztály.

Az IPresentationAnimationPlayer használatához a get_Duration (az animáció teljes időtartama) tulajdonságot és a SetTimePosition metódust használjuk. Minden animáció pozíciója a 0-tól időtartamig tartományban állítható be, és a GetFrame metódus egy Bitmapet ad vissza, amely az adott pillanatban lévő animációs állapotot tükrözi.

void OnNewAnimation(System::SharedPtr<IPresentationAnimationPlayer> animationPlayer)
{
    System::Console::WriteLine(u"Total animation duration: {0}", animationPlayer->get_Duration());

    animationPlayer->SetTimePosition(0);
    // kezdeti animációs állapot
    System::SharedPtr<System::Drawing::Bitmap> bitmap = animationPlayer->GetFrame();
    // kezdeti animációs állapot bitmap

    animationPlayer->SetTimePosition(animationPlayer->get_Duration());
    // animáció végső állapota
    System::SharedPtr<System::Drawing::Bitmap> lastBitmap = animationPlayer->GetFrame();
    // animáció utolsó képkockája
    lastBitmap->Save(u"last.png");
}

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

    // Hozzáad egy mosoly alakzatot és animálja
    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;
}

Az összes animáció egyidejű lejátszásához a PresentationPlayer osztályt használjuk. Ez az osztály egy PresentationAnimationsGenerator példányt és az FPS‑t veszi át a konstruktorában, majd a FrameTick eseményt hívja meg az összes animációra a lejátszáshoz:

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

Ezután a generált képkockákból videó állítható össze. Lásd a Convert PowerPoint to Video szakaszt.

Támogatott animációk és effektusok

Bevezető:

Animáció típusa Aspose.Slides PowerPoint
Megjelenés not supported supported
Halványulás supported supported
Beúszás supported supported
Lebegő beúszás supported supported
Szétválasztás supported supported
Törlés supported supported
Alakzat supported supported
Kerék supported supported
Véletlen sávok supported supported
Növekedés és fordítás not supported supported
Nagyítás supported supported
Forgatás supported supported
Ugrálás supported supported

Kiemelés:

Animáció típusa Aspose.Slides PowerPoint
Impulzus not supported supported
Színimpulzus not supported supported
Bambusz supported supported
Forgás supported supported
Növekedés/Kicsinyítés not supported supported
Telítetlenné tétel not supported supported
Sötétítés not supported supported
Világosítás not supported supported
Átlátszóság not supported supported
Objektum színe not supported supported
Komplementer szín not supported supported
Vonal színe not supported supported
Kitöltés színe not supported supported

Kijáró:

Animáció típusa Aspose.Slides PowerPoint
Eltűnés not supported supported
Halványulás supported supported
Kifutás supported supported
Lebegő kifutás supported supported
Szétválasztás supported supported
Törlés supported supported
Alakzat supported supported
Véletlen sávok supported supported
Kicsinyítés és fordítás not supported supported
Nagyítás supported supported
Forgatás supported supported
Ugrálás supported supported

Mozgásútvonalak:

Animáció típusa Aspose.Slides PowerPoint
Vonalak supported supported
Ívek supported supported
Fordulatok supported supported
Alakzatok supported supported
Hurkok supported supported
Egyéni útvonal supported supported

GYIK

Lehetőség van jelszóval védett prezentációk konvertálására?

Igen, az Aspose.Slides támogatja a jelszóval védett prezentációk kezelését. Ilyen fájlok feldolgozásakor a helyes jelszó megadása szükséges ahhoz, hogy a könyvtár hozzáférhessen a prezentáció tartalmához.

Az Aspose.Slides használható felhőmegoldásokban?

Igen, az Aspose.Slides integrálható felhőalkalmazásokba és szolgáltatásokba. A könyvtár szerver környezetben való futásra lett tervezve, magas teljesítményt és skálázhatóságot biztosítva a kötegelt fájlfeldolgozáshoz.

Van méretkorlátozás a prezentációk konvertálásakor?

Az Aspose.Slides gyakorlatilag bármilyen méretű prezentációt képes kezelni. Nagyon nagy fájlok esetén azonban további rendszererőforrásokra lehet szükség, és gyakran ajánlott a prezentáció optimalizálása a teljesítmény javítása érdekében.