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á
- Töltse le az ffmpeg‑et itt.
- Adja hozzá a
ffmpeg.exeelérési útját aPATHkörnyezeti változóhoz. - 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 | ![]() |
![]() |
| Halványulás | ![]() |
![]() |
| Beúszás | ![]() |
![]() |
| Lebegő beúszás | ![]() |
![]() |
| Szétválasztás | ![]() |
![]() |
| Törlés | ![]() |
![]() |
| Alakzat | ![]() |
![]() |
| Kerék | ![]() |
![]() |
| Véletlen sávok | ![]() |
![]() |
| Növekedés és fordítás | ![]() |
![]() |
| Nagyítás | ![]() |
![]() |
| Forgatás | ![]() |
![]() |
| Ugrálás | ![]() |
![]() |
Kiemelés:
| Animáció típusa | Aspose.Slides | PowerPoint |
|---|---|---|
| Impulzus | ![]() |
![]() |
| Színimpulzus | ![]() |
![]() |
| Bambusz | ![]() |
![]() |
| Forgás | ![]() |
![]() |
| Növekedés/Kicsinyítés | ![]() |
![]() |
| Telítetlenné tétel | ![]() |
![]() |
| Sötétítés | ![]() |
![]() |
| Világosítás | ![]() |
![]() |
| Átlátszóság | ![]() |
![]() |
| Objektum színe | ![]() |
![]() |
| Komplementer szín | ![]() |
![]() |
| Vonal színe | ![]() |
![]() |
| Kitöltés színe | ![]() |
![]() |
Kijáró:
| Animáció típusa | Aspose.Slides | PowerPoint |
|---|---|---|
| Eltűnés | ![]() |
![]() |
| Halványulás | ![]() |
![]() |
| Kifutás | ![]() |
![]() |
| Lebegő kifutás | ![]() |
![]() |
| Szétválasztás | ![]() |
![]() |
| Törlés | ![]() |
![]() |
| Alakzat | ![]() |
![]() |
| Véletlen sávok | ![]() |
![]() |
| Kicsinyítés és fordítás | ![]() |
![]() |
| Nagyítás | ![]() |
![]() |
| Forgatás | ![]() |
![]() |
| Ugrálás | ![]() |
![]() |
Mozgásútvonalak:
| Animáció típusa | Aspose.Slides | PowerPoint |
|---|---|---|
| Vonalak | ![]() |
![]() |
| Ívek | ![]() |
![]() |
| Fordulatok | ![]() |
![]() |
| Alakzatok | ![]() |
![]() |
| Hurkok | ![]() |
![]() |
| Egyéni útvonal | ![]() |
![]() |
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.

