PowerPoint-presentaties naar video converteren op Android

Introductie

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

  • Toename in toegankelijkheid: Alle apparaten (onafhankelijk van het platform) zijn standaard uitgerust met videospelers in tegenstelling tot toepassingen voor het openen van presentaties, waardoor gebruikers het gemakkelijker vinden om video’s te openen of af te spelen.
  • Grotere bereik: Met video’s kunt u een groot publiek bereiken en hen informeren met inhoud die anders wellicht saai zou lijken in een presentatie. De meeste enquêtes en statistieken suggereren dat mensen video’s vaker bekijken en consumeren dan andere vormen van content, en ze geven doorgaans de voorkeur aan dergelijke content.

PowerPoint naar video‑conversie in Aspose.Slides

Aspose.Slides ondersteunt conversie van presentatie naar video.

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

PowerPoint naar video converteren

  1. Voeg dit toe aan uw POM‑bestand:
   <dependency>
     <groupId>net.bramp.ffmpeg</groupId>
     <artifactId>ffmpeg</artifactId>
     <version>0.7.0</version>
   </dependency>
  1. Download ffmpeg hier.

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

Deze Java‑code laat zien hoe u een presentatie (met een afbeelding en twee animatie‑effecten) naar een video kunt converteren:

Presentation presentation = new Presentation();
try {
    // Voegt een glimlachvorm toe en animeert deze vervolgens
    IAutoShape smile = presentation.getSlides().get_Item(0).getShapes().addAutoShape(ShapeType.SmileyFace, 110, 20, 500, 500);
    ISequence mainSequence = presentation.getSlides().get_Item(0).getTimeline().getMainSequence();
    IEffect effectIn = mainSequence.addEffect(smile, EffectType.Fly, EffectSubtype.TopLeft, EffectTriggerType.AfterPrevious);
    IEffect effectOut = mainSequence.addEffect(smile, EffectType.Fly, EffectSubtype.BottomRight, EffectTriggerType.AfterPrevious);
    effectIn.getTiming().setDuration(2f);
    effectOut.setPresetClassType(EffectPresetClassType.Exit);

    final int fps = 33;
    ArrayList<String> frames = new ArrayList<String>();

    PresentationAnimationsGenerator animationsGenerator = new PresentationAnimationsGenerator(presentation);
    try
    {
        PresentationPlayer player = new PresentationPlayer(animationsGenerator, fps);
        try {
            player.setFrameTick((sender, arguments) ->
            {
                try {
                    String frame = String.format("frame_%04d.png", sender.getFrameIndex());
                    arguments.getFrame().save(frame, ImageFormat.Png);
                    frames.add(frame);
                } catch (IOException e) {
                    throw new RuntimeException(e);
                }
            });
            animationsGenerator.run(presentation.getSlides());
        } finally {
            if (player != null) player.dispose();
        }
    } finally {
        if (animationsGenerator != null) animationsGenerator.dispose();
    }

    // Configureer ffmpeg-binaries map. Zie deze pagina: https://github.com/rosenbjerg/FFMpegCore#installation
    FFmpeg ffmpeg = new FFmpeg("path/to/ffmpeg");
    FFprobe ffprobe = new FFprobe("path/to/ffprobe");

    FFmpegBuilder builder = new FFmpegBuilder()
            .addExtraArgs("-start_number", "1")
            .setInput("frame_%04d.png")
            .addOutput("output.avi")
            .setVideoFrameRate(FFmpeg.FPS_24)
            .setFormat("avi")
            .done();

    FFmpegExecutor executor = new FFmpegExecutor(ffmpeg, ffprobe);
    executor.createJob(builder).run();
} catch (IOException e) {
    e.printStackTrace();
}

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 hebben hetzelfde effect op video’s. Laten we een extra dia en overgang toevoegen aan de code voor de vorige presentatie:

// Voegt een glimlachvorm toe en animeert deze

// ...

// Voegt een nieuwe dia toe en een geanimeerde overgang

ISlide newSlide = presentation.getSlides().addEmptySlide(presentation.getSlides().get_Item(0).getLayoutSlide());

newSlide.getBackground().setType(BackgroundType.OwnBackground);

newSlide.getBackground().getFillFormat().setFillType(FillType.Solid);

newSlide.getBackground().getFillFormat().getSolidFillColor().setColor(Color.MAGENTA);

newSlide.getSlideShowTransition().setType(TransitionType.Push);

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

Presentation presentation = new Presentation();
try {
    // Voegt tekst en animaties toe
    IAutoShape autoShape = presentation.getSlides().get_Item(0).getShapes().addAutoShape(ShapeType.Rectangle, 210, 120, 300, 300);
    Paragraph para1 = new Paragraph();
    para1.getPortions().add(new Portion("Aspose Slides for Java"));
    Paragraph para2 = new Paragraph();
    para2.getPortions().add(new Portion("convert PowerPoint Presentation with text to video"));

    Paragraph para3 = new Paragraph();
    para3.getPortions().add(new Portion("paragraph by paragraph"));
    IParagraphCollection paragraphCollection = autoShape.getTextFrame().getParagraphs();
    paragraphCollection.add(para1);
    paragraphCollection.add(para2);
    paragraphCollection.add(para3);
    paragraphCollection.add(new Paragraph());

    ISequence mainSequence = presentation.getSlides().get_Item(0).getTimeline().getMainSequence();
    IEffect effect1 = mainSequence.addEffect(para1, EffectType.Appear, EffectSubtype.None, EffectTriggerType.AfterPrevious);
    IEffect effect2 = mainSequence.addEffect(para2, EffectType.Appear, EffectSubtype.None, EffectTriggerType.AfterPrevious);
    IEffect effect3 = mainSequence.addEffect(para3, EffectType.Appear, EffectSubtype.None, EffectTriggerType.AfterPrevious);
    IEffect effect4 = mainSequence.addEffect(para3, EffectType.Appear, EffectSubtype.None, EffectTriggerType.AfterPrevious);

    effect1.getTiming().setTriggerDelayTime(1f);
    effect2.getTiming().setTriggerDelayTime(1f);
    effect3.getTiming().setTriggerDelayTime(1f);
    effect4.getTiming().setTriggerDelayTime(1f);

    final int fps = 33;
    ArrayList<String> frames = new ArrayList<String>();

    PresentationAnimationsGenerator animationsGenerator = new PresentationAnimationsGenerator(presentation);
    try
    {
        PresentationPlayer player = new PresentationPlayer(animationsGenerator, fps);
        try {
            player.setFrameTick((sender, arguments) ->
            {
                try {
                    String frame = String.format("frame_%04d.png", sender.getFrameIndex());
                    arguments.getFrame().save(frame, ImageFormat.Png);
                    frames.add(frame);
                } catch (IOException e) {
                    throw new 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
    FFmpeg ffmpeg = new FFmpeg("path/to/ffmpeg");
    FFprobe ffprobe = new FFprobe("path/to/ffprobe");

    FFmpegBuilder builder = new FFmpegBuilder()
            .addExtraArgs("-start_number", "1")
            .setInput("frame_%04d.png")
            .addOutput("output.avi")
            .setVideoFrameRate(FFmpeg.FPS_24)
            .setFormat("avi")
            .done();

    FFmpegExecutor executor = new FFmpegExecutor(ffmpeg, ffprobe);
    executor.createJob(builder).run();
} catch (IOException e) {
    e.printStackTrace();
}

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 aan.

PresentationAnimationsGenerator stelt u in staat de frame‑grootte voor de video (die later wordt aangemaakt) in te stellen via de constructor. Als u een instantie van de presentatie doorgeeft, wordt Presentation.SlideSize gebruikt en genereert het animaties die PresentationPlayer gebruikt.

Wanneer animaties worden gegenereerd, wordt voor elke opeenvolgende animatie een NewAnimation‑event gegenereerd, met de parameter IPresentationAnimationPlayer. Deze laatste is een klasse die een speler voor een afzonderlijke animatie voorstelt.

Om te werken met IPresentationAnimationPlayer, worden de eigenschap Duration (de volledige duur van de animatie) en de methode 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:

Presentation presentation = new Presentation();
try {
    // Voegt een glimlachvorm toe en animeert deze
    IAutoShape smile = presentation.getSlides().get_Item(0).getShapes().addAutoShape(ShapeType.SmileyFace, 110, 20, 500, 500);
    ISequence mainSequence = presentation.getSlides().get_Item(0).getTimeline().getMainSequence();
    IEffect effectIn = mainSequence.addEffect(smile, EffectType.Fly, EffectSubtype.TopLeft, EffectTriggerType.AfterPrevious);
    IEffect effectOut = mainSequence.addEffect(smile, EffectType.Fly, EffectSubtype.BottomRight, EffectTriggerType.AfterPrevious);
    effectIn.getTiming().setDuration(2f);
    effectOut.setPresetClassType(EffectPresetClassType.Exit);

    PresentationAnimationsGenerator animationsGenerator = new PresentationAnimationsGenerator(presentation);
    try {
        animationsGenerator.setNewAnimation(animationPlayer ->
        {
            System.out.println(String.format("Animation total duration: %f", animationPlayer.getDuration()));
            animationPlayer.setTimePosition(0); // initiële animatiestatus
            try {
                // bitmap van de initiële animatiestatus
                animationPlayer.getFrame().save("firstFrame.png", ImageFormat.Png);
            } catch (IOException e) {
                throw new RuntimeException(e);
            }
            animationPlayer.setTimePosition(animationPlayer.getDuration()); // laatste frame van de animatie
            try {
                // laatste frame van de animatie
                animationPlayer.getFrame().save("lastFrame.png", ImageFormat.Png);
            } catch (IOException e) {
                throw new 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 instantie van PresentationAnimationsGenerator en FPS voor effecten in de constructor en roept vervolgens het FrameTick‑event aan voor alle animaties om ze af te spelen:

Presentation presentation = new Presentation("animated.pptx");
try {
    PresentationAnimationsGenerator animationsGenerator = new PresentationAnimationsGenerator(presentation);
    try {
        PresentationPlayer player = new PresentationPlayer(animationsGenerator, 33);
        try {
            player.setFrameTick((sender, arguments) ->
            {
                try {
                    arguments.getFrame().save("frame_" + sender.getFrameIndex() + ".png", ImageFormat.Png);
                } catch (IOException e) {
                    throw new 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 om een video te maken. 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 om presentaties die met een wachtwoord beschermd zijn te converteren?

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

Ondersteunt Aspose.Slides het gebruik in cloud‑oplossingen?

Ja, Aspose.Slides kan worden geïntegreerd in cloud‑applicaties en -services. De bibliotheek is ontworpen om te werken in serveromgevingen, waardoor hoge prestaties en schaalbaarheid gegarandeerd zijn voor batchverwerking van bestanden.

Zijn er groottebeperkingen voor presentaties tijdens de conversie?

Aspose.Slides kan presentaties van vrijwel elke grootte aan. Echter, bij zeer grote bestanden kunnen extra systeembronnen nodig zijn, en het wordt soms aanbevolen de presentatie te optimaliseren om de prestaties te verbeteren.