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

Introduction

A PowerPoint bemutató videóvá konvertálásával a következő előnyöket érheti el:

  • Az elérhetőség növelése: Minden eszköz (platformtól függetlenül) alapértelmezés szerint videólejátszóval van felszerelve a prezentációk megnyitásához szükséges alkalmazásokkal szemben, így a felhasználók könnyebben nyitják meg vagy játszák le a videókat.
  • Nagyobb elérés: A videók segítségével széles közönséghez juthat el, és információkat célozhat meg, amelyek egyébként unalmasnak tűnhetnek egy prezentációban. A legtöbb felmérés és statisztika azt mutatja, hogy az emberek a videókat gyakrabban nézik és fogyasztják, mint egyéb tartalmakat, és általában előnyben részesítik ezeket.

PowerPoint videó konvertálás az Aspose.Slides-ban

Az Aspose.Slides támogatja a prezentáció videóvá alakítását.

  • Használja az Aspose.Slides-t, hogy a prezentáció diákjaiból egy adott FPS-nek (képkocka per másodperc) megfelelő képkockasort generáljon.
  • Használjon harmadik féltől származó segédprogramot, például a ffmpeg-et (java számára), a képkockák alapján videó létrehozásához.

PowerPoint videóvá konvertálása

  1. Töltse le az ffmpeg-et itt.
  2. Futtassa a PowerPoint videó konvertáló JavaScript kódot.

Ez a JavaScript kód megmutatja, hogyan konvertáljon egy bemutatót (amely egy ábrát és két animációs hatást tartalmaz) videóvá:

var presentation = new aspose.slides.Presentation();
try {
    // Hozzáad egy mosolys alakzatot, majd animálja
    var smile = presentation.getSlides().get_Item(0).getShapes().addAutoShape(aspose.slides.ShapeType.SmileyFace, 110, 20, 500, 500);
    var mainSequence = presentation.getSlides().get_Item(0).getTimeline().getMainSequence();
    var effectIn = mainSequence.addEffect(smile, aspose.slides.EffectType.Fly, aspose.slides.EffectSubtype.TopLeft, aspose.slides.EffectTriggerType.AfterPrevious);
    var effectOut = mainSequence.addEffect(smile, aspose.slides.EffectType.Fly, aspose.slides.EffectSubtype.BottomRight, aspose.slides.EffectTriggerType.AfterPrevious);
    effectIn.getTiming().setDuration(2.0);
    effectOut.setPresetClassType(aspose.slides.EffectPresetClassType.Exit);
    final var fps = 33;
    var frames = java.newInstanceSync("java.util.ArrayList");
    var animationsGenerator = new aspose.slides.PresentationAnimationsGenerator(presentation);
    try {
        var player = new aspose.slides.PresentationPlayer(animationsGenerator, fps);
        try {
            player.setFrameTick((sender, arguments) -> {
                try {
                    var frame = java.callStaticMethodSync("java.lang.String", "format", "frame_%04d.png", sender.getFrameIndex());
                    arguments.getFrame().save(frame, aspose.slides.ImageFormat.Png);
                    frames.add(frame);
                } catch (e) {console.log(e);
                    throw java.newInstanceSync("java.lang.RuntimeException", e);
                }
            });
            animationsGenerator.run(presentation.getSlides());
        } finally {
            if (player != null) {
                player.dispose();
            }
        }
    } finally {
        if (animationsGenerator != null) {
            animationsGenerator.dispose();
        }
    }
    // Állítsa be az ffmpeg binárisok mappáját. Lásd ezt az oldalt: https://github.com/rosenbjerg/FFMpegCore#installation
    var ffmpeg = java.newInstanceSync("FFmpeg", "path/to/ffmpeg");
    var ffprobe = java.newInstanceSync("FFprobe", "path/to/ffprobe");
    var builder = java.newInstanceSync("FFmpegBuilder").addExtraArgs("-start_number", "1").setInput("frame_%04d.png").addOutput("output.avi").setVideoFrameRate(java.getStaticFieldValue("FFmpeg", "FPS_24")).setFormat("avi").done();
    var executor = java.newInstanceSync("FFmpegExecutor", ffmpeg, ffprobe);
    executor.createJob(builder).run();
} catch (e) {console.log(e);
    console.log(e);
}

Videóhatások

Animációkat alkalmazhat a diák objektumaira, és átmeneteket használhat a diák között.

Az animációk és átmenetek vonzóbbá és érdekesebbé teszik a diavetítéseket – és ugyanezt teszik a videók esetén is. Adjunk egy újabb diát és átmenetet a korábbi bemutató kódjához:

// Hozzáad egy mosolys alakzatot és animálja
// ...
// Hozzáad egy új diát és animált átmenetet
var newSlide = presentation.getSlides().addEmptySlide(presentation.getSlides().get_Item(0).getLayoutSlide());
newSlide.getBackground().setType(aspose.slides.BackgroundType.OwnBackground);
newSlide.getBackground().getFillFormat().setFillType(java.newByte(aspose.slides.FillType.Solid));
newSlide.getBackground().getFillFormat().getSolidFillColor().setColor(java.getStaticFieldValue("java.awt.Color", "MAGENTA"));
newSlide.getSlideShowTransition().setType(aspose.slides.TransitionType.Push);

Az Aspose.Slides szövegek animációját is támogatja. Így a objektumok bekezdéseit animáljuk, amelyek egyesével (egy másodperces késleltetéssel) jelennek meg:

var presentation = new aspose.slides.Presentation();
try {
    // Hozzáad szöveget és animációkat
    var autoShape = presentation.getSlides().get_Item(0).getShapes().addAutoShape(aspose.slides.ShapeType.Rectangle, 210, 120, 300, 300);
    var para1 = new aspose.slides.Paragraph();
    para1.getPortions().add(new aspose.slides.Portion("Aspose Slides for Node.js via Java"));
    var para2 = new aspose.slides.Paragraph();
    para2.getPortions().add(new aspose.slides.Portion("convert PowerPoint Presentation with text to video"));
    var para3 = new aspose.slides.Paragraph();
    para3.getPortions().add(new aspose.slides.Portion("paragraph by paragraph"));
    var paragraphCollection = autoShape.getTextFrame().getParagraphs();
    paragraphCollection.add(para1);
    paragraphCollection.add(para2);
    paragraphCollection.add(para3);
    paragraphCollection.add(new aspose.slides.Paragraph());
    var mainSequence = presentation.getSlides().get_Item(0).getTimeline().getMainSequence();
    var effect1 = mainSequence.addEffect(para1, aspose.slides.EffectType.Appear, aspose.slides.EffectSubtype.None, aspose.slides.EffectTriggerType.AfterPrevious);
    var effect2 = mainSequence.addEffect(para2, aspose.slides.EffectType.Appear, aspose.slides.EffectSubtype.None, aspose.slides.EffectTriggerType.AfterPrevious);
    var effect3 = mainSequence.addEffect(para3, aspose.slides.EffectType.Appear, aspose.slides.EffectSubtype.None, aspose.slides.EffectTriggerType.AfterPrevious);
    var effect4 = mainSequence.addEffect(para3, aspose.slides.EffectType.Appear, aspose.slides.EffectSubtype.None, aspose.slides.EffectTriggerType.AfterPrevious);
    effect1.getTiming().setTriggerDelayTime(1.0);
    effect2.getTiming().setTriggerDelayTime(1.0);
    effect3.getTiming().setTriggerDelayTime(1.0);
    effect4.getTiming().setTriggerDelayTime(1.0);
    final var fps = 33;
    var frames = java.newInstanceSync("java.util.ArrayList");
    var animationsGenerator = new aspose.slides.PresentationAnimationsGenerator(presentation);
    try {
        var player = new aspose.slides.PresentationPlayer(animationsGenerator, fps);
        try {
            player.setFrameTick((sender, arguments) -> {
                try {
                    var frame = java.callStaticMethodSync("java.lang.String", "format", "frame_%04d.png", sender.getFrameIndex());
                    arguments.getFrame().save(frame, aspose.slides.ImageFormat.Png);
                    frames.add(frame);
                } catch (e) {console.log(e);
                    throw java.newInstanceSync("java.lang.RuntimeException", e);
                }
            });
            animationsGenerator.run(presentation.getSlides());
        } finally {
            if (player != null) {
                player.dispose();
            }
        }
    } finally {
        if (animationsGenerator != null) {
            animationsGenerator.dispose();
        }
    }
    // Állítsa be az ffmpeg binárisok mappáját. Lásd ezt az oldalt: https://github.com/rosenbjerg/FFMpegCore#installation
    var ffmpeg = java.newInstanceSync("FFmpeg", "path/to/ffmpeg");
    var ffprobe = java.newInstanceSync("FFprobe", "path/to/ffprobe");
    var builder = java.newInstanceSync("FFmpegBuilder").addExtraArgs("-start_number", "1").setInput("frame_%04d.png").addOutput("output.avi").setVideoFrameRate(java.getStaticFieldValue("FFmpeg", "FPS_24")).setFormat("avi").done();
    var executor = java.newInstanceSync("FFmpegExecutor", ffmpeg, ffprobe);
    executor.createJob(builder).run();
} catch (e) {console.log(e);
    console.log(e);
}

Videókonvertálási osztályok

A PowerPoint videó konvertálási feladatok elvégzéséhez az Aspose.Slides a PresentationAnimationsGenerator és a PresentationPlayer osztályokat biztosítja.

A PresentationAnimationsGenerator lehetővé teszi a videó (később létrehozandó) keretméretének beállítását a konstruktorában. Ha a prezentáció egy példányát adja át, a Presentation.getSlideSize 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 következő animációhoz egy NewAnimation esemény jön létre, amely a prezentáció animációs lejátszó paraméterét tartalmazza. Az utóbbi egy osztály, amely egy külön animáció lejátszóját képviseli.

A prezentáció animációs lejátszójával a getDuration (az animáció teljes időtartama) és a setTimePosition metódusokat használjuk. Minden animáció pozíciója a 0-tól a duration-ig terjedő tartományban állítható be, majd a getFrame metódus egy BufferedImage‑et ad vissza, amely az adott pillanatban az animáció állapotát tükrözi:

var presentation = new aspose.slides.Presentation();
try {
    // Hozzáad egy mosolys alakzatot és animálja
    var smile = presentation.getSlides().get_Item(0).getShapes().addAutoShape(aspose.slides.ShapeType.SmileyFace, 110, 20, 500, 500);
    var mainSequence = presentation.getSlides().get_Item(0).getTimeline().getMainSequence();
    var effectIn = mainSequence.addEffect(smile, aspose.slides.EffectType.Fly, aspose.slides.EffectSubtype.TopLeft, aspose.slides.EffectTriggerType.AfterPrevious);
    var effectOut = mainSequence.addEffect(smile, aspose.slides.EffectType.Fly, aspose.slides.EffectSubtype.BottomRight, aspose.slides.EffectTriggerType.AfterPrevious);
    effectIn.getTiming().setDuration(2.0);
    effectOut.setPresetClassType(aspose.slides.EffectPresetClassType.Exit);
    var animationsGenerator = new aspose.slides.PresentationAnimationsGenerator(presentation);
    try {
        animationsGenerator.setNewAnimation(animationPlayer -> {
            console.log(java.callStaticMethodSync("java.lang.String", "format", "Animation total duration: %f", animationPlayer.getDuration()));
            animationPlayer.setTimePosition(0);// kezdeti animáció állapota
            try {
                // kezdeti animáció állapot bitmap
                animationPlayer.getFrame().save("firstFrame.png", aspose.slides.ImageFormat.Png);
            } catch (e) {console.log(e);
                throw java.newInstanceSync("java.lang.RuntimeException", e);
            }
            animationPlayer.setTimePosition(animationPlayer.getDuration());// animáció végső állapota
            try {
                // animáció utolsó képkockája
                animationPlayer.getFrame().save("lastFrame.png", aspose.slides.ImageFormat.Png);
            } catch (e) {console.log(e);
                throw java.newInstanceSync("java.lang.RuntimeException", e);
            }
        });
    } finally {
        if (animationsGenerator != null) {
            animationsGenerator.dispose();
        }
    }
} finally {
    if (presentation != null) {
        presentation.dispose();
    }
}

Az összes animáció egyszerre történő lejátszásához a PresentationPlayer osztályt használjuk. Ez az osztály egy PresentationAnimationsGenerator példányt és az effektusok FPS-ét veszi át a konstruktorában, majd minden animációhoz meghívja a FrameTick eseményt, hogy azok lejátszásra kerüljenek:

var presentation = new aspose.slides.Presentation("animated.pptx");
try {
    var animationsGenerator = new aspose.slides.PresentationAnimationsGenerator(presentation);
    try {
        var player = new aspose.slides.PresentationPlayer(animationsGenerator, 33);
        try {
            player.setFrameTick((sender, arguments) -> {
                try {
                    arguments.getFrame().save(("frame_" + sender.getFrameIndex()) + ".png", aspose.slides.ImageFormat.Png);
                } catch (e) {console.log(e);
                    throw java.newInstanceSync("java.lang.RuntimeException", e);
                }
            });
            animationsGenerator.run(presentation.getSlides());
        } finally {
            if (player != null) {
                player.dispose();
            }
        }
    } finally {
        if (animationsGenerator != null) {
            animationsGenerator.dispose();
        }
    }
} finally {
    if (presentation != null) {
        presentation.dispose();
    }
}

Ezután az előállított képkockákat össze lehet állítani, hogy videót kapjunk. Lásd a Convert PowerPoint to Video szakaszt.

Támogatott animációk és hatások

Entrance:

Animáció típusa Aspose.Slides PowerPoint
Megjelenés not supported supported
Halványulás supported supported
Beköltözés supported supported
Lebegő belépés supported supported
Felosztá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 fordulás not supported supported
Nagyítás supported supported
Forgatás supported supported
Ugrás supported supported

Emphasis:

Animáció típusa Aspose.Slides PowerPoint
Pulzálás not supported supported
Színpulzálás not supported supported
Röpködés supported supported
Forgás supported supported
Növekedés/Kicsinyítés not supported supported
Színtelítettség csökkentése 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

Exit:

Animáció típusa Aspose.Slides PowerPoint
Eltűnés not supported supported
Halványulás supported supported
Kifelégzés supported supported
Lebegő kilépés supported supported
Felosztás supported supported
Törlés supported supported
Alakzat supported supported
Véletlen sávok supported supported
Kicsinyítés és fordulás not supported supported
Nagyítás supported supported
Forgatás supported supported
Ugrás supported supported

Motion Paths:

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

GYIK

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

Igen, az Aspose.Slides lehetővé teszi a jelszóval védett bemutatók kezelését. Az ilyen fájlok feldolgozásakor a megfelelő jelszót kell megadni, hogy a könyvtár hozzáférhessen a bemutató tartalmához.

Támogatja az Aspose.Slides a felhőalapú megoldásokat?

Igen, az Aspose.Slides integrálható felhőalkalmazásokba és szolgáltatásokba. A könyvtár szerver környezetekben való működésre van tervezve, biztosítva a magas teljesítményt és a skálázhatóságot a fájlok kötegelt feldolgozásához.

Vannak méretkorlátok a bemutatók konvertálása során?

Az Aspose.Slides gyakorlatilag bármilyen méretű bemutató kezelésére képes. Nagy fájlok esetén azonban további rendszererőforrásokra lehet szükség, és néha ajánlott a bemutatót optimalizálni a teljesítmény javítása érdekében.