PowerPoint prezentációk videóvá konvertálása Java-ban
Bevezetés
PowerPoint vagy OpenDocument prezentáció videóvá konvertálásával a következő előnyöket érheti el:
Megnövelt hozzáférhetőség: Minden eszköz, platformtól függetlenül, alapértelmezés szerint videólejátszóval rendelkezik, így a felhasználók számára egyszerűbb a videók megnyitása vagy lejátszása a hagyományos prezentációs alkalmazásokhoz képest.
Szélesebb elérés: A videók lehetővé teszik, hogy nagyobb közönséget érjen el, és információt vonzóbb formátumban mutasson be. Kérdőívek és statisztikák azt mutatják, hogy az emberek szívesebben néznek és fogyasztanak videótartalmat más formákhoz képest, ezáltal üzenete hatásosabb lesz.
PowerPoint videó konvertálása az Aspose.Slides-ben
Az Aspose.Slides 22.11 verzióban bevezettük a prezentáció videóvá konvertálásának támogatását.
- Használja a Aspose.Slides‑t, hogy a prezentáció diái alapján olyan képkockákat állítson elő, amelyek egy adott FPS‑nek (képkocka/másodperc) felelnek meg
- Használjon egy harmadik féltől származó eszközt, például a ffmpeg‑et (java‑hoz), hogy a képkockákból videót készítsen.
PowerPoint videóvá konvertálása
- Adja hozzá ezt a POM‑fájljához:
<dependency>
<groupId>net.bramp.ffmpeg</groupId>
<artifactId>ffmpeg</artifactId>
<version>0.7.0</version>
</dependency>
-
Töltse le a ffmpeg‑et itt.
-
Futtassa a PowerPoint videó Java kódot.
Ez a Java kód bemutatja, hogyan konvertálhat egy prezentációt (amely egy ábrát és két animációs hatást tartalmaz) videóvá:
Presentation presentation = new Presentation();
try {
// Hozzáad egy mosoly alakzatot, majd animálja azt
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();
}
// Állítsa be az ffmpeg binárisok mappáját. Lásd ezt az oldalt: 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();
}
Videóeffektek
Animációkat alkalmazhat a diákon lévő objektumokra, valamint átmeneteket használhat a diák között.
Az animációk és átmenetek élőbbé és érdekesebbé teszik a diavetítéseket – ugyanígy hatnak a videókra is. Adjunk hozzá egy új diát és átmenetet a korábbi prezentáció kódjához:
// Hozzáad egy mosoly alakzatot és animálja azt
// ...
// Hozzáad egy új diát és animált átmenetet
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);
Az Aspose.Slides szövegekre is támogat animációt. Így animálhatunk bekezdéseket objektumokon, amelyek egyesével, egy másodperces késleltetéssel jelennek meg:
Presentation presentation = new Presentation();
try {
// Szöveget és animációkat ad hozzá
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();
}
// Állítsa be az ffmpeg binárisok mappáját. Lásd ezt az oldalt: 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();
}
Videókonvertálási osztályok
Az Aspose.Slides a PresentationAnimationsGenerator és a PresentationPlayer osztályokkal teszi lehetővé a PowerPoint videóvá konvertálási feladatok elvégzését.
A PresentationAnimationsGenerator segítségével a videó (később létrehozandó) képkockaméretét a konstruktorában adhatja meg. Ha a prezentáció egy példányát adja át, a Presentation.SlideSize lesz használva, és olyan animációkat generál, amelyeket a PresentationPlayer felhasznál.
Az animációk generálásakor minden egyes további animációhoz egy NewAnimation eseményt hoz létre, amely a IPresentationAnimationPlayer paraméterrel rendelkezik. Az utóbbi egy olyan osztály, amely egy különálló animáció lejátszóját képviseli.
Az IPresentationAnimationPlayer használatához a Duration (az animáció teljes időtartama) tulajdonság és a SetTimePosition metódus szolgál. Minden animáció pozíciója a 0 és az időtartam közötti tartományban állítható, majd a GetFrame metódus egy BufferedImage‑et ad vissza, amely az adott pillanatban az animáció állapotát tükrözi:
Presentation presentation = new Presentation();
try {
// Hozzáad egy mosoly alakzatot és animálja azt
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); // kezdeti animációs állapot
try {
// kezdeti animációs állapot bitmap
animationPlayer.getFrame().save("firstFrame.png", ImageFormat.Png);
} catch (IOException e) {
throw new RuntimeException(e);
}
animationPlayer.setTimePosition(animationPlayer.getDuration()); // animáció végső állapota
try {
// animáció utolsó képkockája
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();
}
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 FPS‑t veszi fel a konstruktorában, majd minden animációhoz meghívja a FrameTick eseményt, hogy azok lejátszásra kerüljenek:
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();
}
Ezután a generált képkockákat össze lehet vonni egy videó készítéséhez. Lásd a PowerPoint videóvá konvertálása szakaszt.
Támogatott animációk és hatások
Belépés:
| Animáció Típusa | Aspose.Slides | PowerPoint |
|---|---|---|
| Appear | ![]() |
![]() |
| Fade | ![]() |
![]() |
| Fly In | ![]() |
![]() |
| Float In | ![]() |
![]() |
| Split | ![]() |
![]() |
| Wipe | ![]() |
![]() |
| Shape | ![]() |
![]() |
| Wheel | ![]() |
![]() |
| Random Bars | ![]() |
![]() |
| Grow & Turn | ![]() |
![]() |
| Zoom | ![]() |
![]() |
| Swivel | ![]() |
![]() |
| Bounce | ![]() |
![]() |
Kiemelés:
| Animáció Típusa | Aspose.Slides | PowerPoint |
|---|---|---|
| Pulse | ![]() |
![]() |
| Color Pulse | ![]() |
![]() |
| Teeter | ![]() |
![]() |
| Spin | ![]() |
![]() |
| Grow/Shrink | ![]() |
![]() |
| Desaturate | ![]() |
![]() |
| Darken | ![]() |
![]() |
| Lighten | ![]() |
![]() |
| Transparency | ![]() |
![]() |
| Object Color | ![]() |
![]() |
| Complementary Color | ![]() |
![]() |
| Line Color | ![]() |
![]() |
| Fill Color | ![]() |
![]() |
Kilépés:
| Animáció Típusa | Aspose.Slides | PowerPoint |
|---|---|---|
| Disappear | ![]() |
![]() |
| Fade | ![]() |
![]() |
| Fly Out | ![]() |
![]() |
| Float Out | ![]() |
![]() |
| Split | ![]() |
![]() |
| Wipe | ![]() |
![]() |
| Shape | ![]() |
![]() |
| Random Bars | ![]() |
![]() |
| Shrink & Turn | ![]() |
![]() |
| Zoom | ![]() |
![]() |
| Swivel | ![]() |
![]() |
| Bounce | ![]() |
![]() |
Mozgás útvonalak:
| Animáció Típusa | Aspose.Slides | PowerPoint |
|---|---|---|
| Lines | ![]() |
![]() |
| Arcs | ![]() |
![]() |
| Turns | ![]() |
![]() |
| Shapes | ![]() |
![]() |
| Loops | ![]() |
![]() |
| Custom Path | ![]() |
![]() |
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. Az ilyen fájlok feldolgozásához meg kell adnia a megfelelő jelszót, hogy a könyvtár hozzáférhessen a prezentáció 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 úgy lett tervezve, hogy szerverkörnyezetben működjön, magas teljesítményt és méretezhetőséget biztosítva a fájlok kötegelt feldolgozásához.
Vannak-e méretkorlátozások a prezentációk konvertálása során?
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.

