PowerPoint-presentaties naar video converteren in JavaScript

Introductie

Door uw PowerPoint‑presentatie naar video te converteren, krijgt u

  • Toename van toegankelijkheid: Alle apparaten (ongeacht platform) hebben standaard videospelers, in tegenstelling tot applicaties die presentaties openen, waardoor gebruikers video’s makkelijker kunnen openen of afspelen.
  • Groter bereik: Met video’s kunt u een groot publiek bereiken en hen informatie aanbieden die in een presentatie anders misschien als saai wordt ervaren. De meeste onderzoeken en statistieken geven aan dat mensen meer video’s bekijken en consumeren dan andere vormen van content, en ze geven over het algemeen de voorkeur aan dit type content.

PowerPoint‑naar‑Video‑conversie in Aspose.Slides

Aspose.Slides ondersteunt conversie van presentaties naar video.

  • Gebruik Aspose.Slides om een reeks frames (van de presentatieslides) te genereren die overeenkomen met een bepaald FPS (frames per seconde)
  • Gebruik een hulpprogramma van derden zoals ffmpeg (for java) om op basis van die frames een video te maken.

PowerPoint naar video converteren

  1. Download ffmpeg here.

  2. Voer de PowerPoint‑naar‑video JavaScript‑code uit.

Deze JavaScript‑code laat zien hoe u een presentatie (met een figuur en twee animatie‑effecten) naar video converteert:

var presentation = new aspose.slides.Presentation();
try {
    // Voegt een smiley-vorm toe en animeert deze daarna
    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();
        }
    }
    // Configureer de map met ffmpeg-binaries. Zie deze pagina: 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);
}

Video‑effecten

U kunt animaties toepassen op objecten op dia’s en overgangen tussen dia’s gebruiken.

Animaties en overgangen maken diavoorstellingen boeiender en interessanter — en ze doen hetzelfde voor video’s. Laten we een extra dia en overgang toevoegen aan de code van de vorige presentatie:

// Voegt een smile-vorm toe en animeert deze
// ...
// Voegt een nieuwe dia toe en een geanimeerde overgang
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);

Aspose.Slides ondersteunt ook animatie voor tekst. We animeren alinea’s op objecten, die één voor één verschijnen (met een vertraging van een seconde):

var presentation = new aspose.slides.Presentation();
try {
    // Voegt tekst en animaties toe
    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();
        }
    }
    // Configureer de map met ffmpeg-binaries. Zie deze pagina: 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);
}

Klassen voor video‑conversie

Om u in staat te stellen PowerPoint‑naar‑video‑conversietaken uit te voeren, biedt Aspose.Slides de klassen PresentationAnimationsGenerator en PresentationPlayer.

PresentationAnimationsGenerator stelt u in staat de framgrootte voor de later te maken video in te stellen via de constructor. Als u een instantie van de presentatie doorgeeft, wordt Presentation.getSlideSize gebruikt en genereert het animaties die PresentationPlayer gebruikt.

Wanneer animaties worden gegenereerd, wordt een NewAnimation‑event gegenereerd voor elke volgende animatie, met de presentatie‑animatie‑player‑parameter. Deze laatste is een klasse die een speler voor een afzonderlijke animatie vertegenwoordigt.

Om met de presentatie‑animatie‑player te werken, worden de methoden getDuration (de totale duur van de animatie) en setTimePosition gebruikt. Elke animatie‑positie wordt ingesteld binnen het bereik 0 tot duur, waarna de getFrame‑methode een BufferedImage retourneert die overeenkomt met de animatiestatus op dat moment:

var presentation = new aspose.slides.Presentation();
try {
    // Voegt een smile-vorm toe en animeert deze
    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);// initiële animatiestatus
            try {
                // bitmap van initiële animatiestatus
                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());// finale animatiestatus
            try {
                // laatste frame van de animatie
                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();
    }
}

Om alle animaties in een presentatie tegelijk af te spelen, wordt de klasse PresentationPlayer gebruikt. Deze klasse neemt een instance van PresentationAnimationsGenerator en een FPS‑waarde voor effecten in de constructor en roept daarna het FrameTick‑event voor alle animaties aan om ze af te spelen:

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

Vervolgens kunnen de gegenereerde frames worden samengevoegd tot een video. Zie de sectie Convert PowerPoint to Video.

Ondersteunde animaties en effecten

Ingang:

Animatietype Aspose.Slides PowerPoint
Appear not supported supported
Fade supported supported
Fly In supported supported
Float In supported supported
Split supported supported
Wipe supported supported
Shape supported supported
Wheel supported supported
Random Bars supported supported
Grow & Turn not supported supported
Zoom supported supported
Swivel supported supported
Bounce supported supported

Nadruk:

Animatietype Aspose.Slides PowerPoint
Pulse not supported supported
Color Pulse not supported supported
Teeter supported supported
Spin supported supported
Grow/Shrink not supported supported
Desaturate not supported supported
Darken not supported supported
Lighten not supported supported
Transparency not supported supported
Object Color not supported supported
Complementary Color not supported supported
Line Color not supported supported
Fill Color not supported supported

Uitgang:

Animatietype Aspose.Slides PowerPoint
Disappear not supported supported
Fade supported supported
Fly Out supported supported
Float Out supported supported
Split supported supported
Wipe supported supported
Shape supported supported
Random Bars supported supported
Shrink & Turn not supported supported
Zoom supported supported
Swivel supported supported
Bounce supported supported

Bewegingspaden:

Animatietype Aspose.Slides PowerPoint
Lines supported supported
Arcs supported supported
Turns supported supported
Shapes supported supported
Loops supported supported
Custom Path supported supported

FAQ

Is het mogelijk presentaties te converteren die met een wachtwoord beschermd zijn?

Ja, Aspose.Slides maakt het werken met wachtwoord‑beveiligde presentaties mogelijk. Bij het verwerken van zulke bestanden moet u het juiste wachtwoord opgeven zodat de bibliotheek toegang krijgt tot de inhoud van de presentatie.

Ondersteunt Aspose.Slides gebruik in cloud‑oplossingen?

Ja, Aspose.Slides kan worden geïntegreerd in cloud‑applicaties en -diensten. De bibliotheek is ontworpen om in serveromgevingen te draaien, met hoge prestaties en schaalbaarheid voor batchverwerking van bestanden.

Zijn er limieten qua grootte voor presentaties tijdens conversie?

Aspose.Slides kan praktisch elke grootte aan. Bij zeer grote bestanden kunnen extra systeemresources nodig zijn, en het wordt soms aangeraden de presentatie te optimaliseren om de prestaties te verbeteren.