Convertir PowerPoint en Vidéo
En convertissant votre présentation PowerPoint en vidéo, vous obtenez
- Augmentation de l’accessibilité : Tous les appareils (quel que soit le système d’exploitation) sont équipés par défaut de lecteurs vidéo par rapport aux applications d’ouverture de présentation, ce qui permet aux utilisateurs d’ouvrir ou de lire des vidéos plus facilement.
- Plus de portée : Grâce aux vidéos, vous pouvez atteindre un large public et lui fournir des informations qui pourraient autrement sembler ennuyeuses dans une présentation. La plupart des enquêtes et des statistiques suggèrent que les gens regardent et consomment plus de vidéos que d’autres formes de contenu, et ils préfèrent généralement ce type de contenu.
Conversion de PowerPoint en Vidéo dans Aspose.Slides
Dans Aspose.Slides 22.11, nous avons mis en œuvre la prise en charge de la conversion de présentation en vidéo.
- Utilisez Aspose.Slides pour générer un ensemble d’images (à partir des diapositives de présentation) qui correspondent à un certain FPS (images par seconde).
- Utilisez un utilitaire tiers comme ffmpeg (pour java) pour créer une vidéo basée sur les images.
Convertir PowerPoint en Vidéo
- Ajoutez ceci à votre fichier POM :
<dependency>
<groupId>net.bramp.ffmpeg</groupId>
<artifactId>ffmpeg</artifactId>
<version>0.7.0</version>
</dependency>
```php
-
Téléchargez ffmpeg ici.
-
Exécutez le code PHP pour convertir PowerPoint en vidéo.
Ce code PHP vous montre comment convertir une présentation (contenant une figure et deux effets d’animation) en vidéo :
$presentation = new Presentation();
try {
# Ajoute une forme de sourire et anime ensuite
$smile = $presentation->getSlides()->get_Item(0)->getShapes()->addAutoShape(ShapeType::SmileyFace, 110, 20, 500, 500);
$mainSequence = $presentation->getSlides()->get_Item(0)->getTimeline()->getMainSequence();
$effectIn = $mainSequence->addEffect($smile, EffectType::Fly, EffectSubType::TopLeft, EffectTriggerType::AfterPrevious);
$effectOut = $mainSequence->addEffect($smile, EffectType::Fly, EffectSubType::BottomRight, EffectTriggerType::AfterPrevious);
$effectIn->getTiming()->setDuration(2.0);
$effectOut->setPresetClassType(EffectPresetClassType::Exit);
$fps = 33;
class FrameTick {
function invoke($sender, $arg) {
try {
$frame = sprintf("frame_%04d.png", $sender->getFrameIndex());
$arguments->getFrame()->save($frame, ImageFormat::Png);
$frames->add($frame);
} catch (JavaException $e) {
}
}
}
$frames = new Java("java.util.ArrayList");
$animationsGenerator = new PresentationAnimationsGenerator($presentation);
try {
$player = new PresentationPlayer($animationsGenerator, $fps);
try {
$frameTick = java_closure(new FrameTick(), null, java("com.aspose.slides.PresentationPlayerFrameTick"));
$player->setFrameTick($frameTick);
$animationsGenerator->run($presentation->getSlides());
} finally {
if (!java_is_null($player)) {
$player->dispose();
}
}
} finally {
if (!java_is_null($animationsGenerator)) {
$animationsGenerator->dispose();
}
}
# Configurez le dossier des fichiers binaires ffmpeg. Consultez cette page : https://github.com/rosenbjerg/FFMpegCore#installation
$ffmpeg = new Java("net.bramp.ffmpeg.builder.FFmpeg", "path/to/ffmpeg");
$ffprobe = new Java("net.bramp.ffmpeg.builder.FFprobe", "path/to/ffprobe");
$builder = (new Java("net.bramp.ffmpeg.builder.FFmpegBuilder"))->addExtraArgs("-start_number", "1")->setInput("frame_%04d.png")->addOutput("output.avi")->setVideoFrameRate(FFmpeg->FPS_24)->setFormat("avi")->done();
$executor = new Java("net.bramp.ffmpeg.builder.FFmpegExecutor", $ffmpeg, $ffprobe);
$executor->createJob($builder)->run();
} catch (JavaException $e) {
$e->printStackTrace();
}
Effets Vidéo
Vous pouvez appliquer des animations aux objets sur les diapositives et utiliser des transitions entre les diapositives.
Les animations et les transitions rendent les diaporamas plus engageants et intéressants – et elles font la même chose pour les vidéos. Ajoutons une autre diapositive et une transition au code de la présentation précédente :
# Ajoute une forme de sourire et l'anime
# ...
# Ajoute une nouvelle diapositive et une transition animée
$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(java("java.awt.Color")->MAGENTA);
$newSlide->getSlideShowTransition()->setType(TransitionType::Push);
Aspose.Slides prend également en charge l’animation des textes. Ainsi, nous animons des paragraphes sur des objets, qui apparaîtront les uns après les autres (avec un délai d’une seconde) :
$presentation = new Presentation();
try {
# Ajoute du texte et des animations
$autoShape = $presentation->getSlides()->get_Item(0)->getShapes()->addAutoShape(ShapeType::Rectangle, 210, 120, 300, 300);
$para1 = new Paragraph();
$para1->getPortions()->add(new Portion("Aspose Slides pour Java"));
$para2 = new Paragraph();
$para2->getPortions()->add(new Portion("convertir la présentation PowerPoint avec texte en vidéo"));
$para3 = new Paragraph();
$para3->getPortions()->add(new Portion("paragraphe par paragraphe"));
$paragraphCollection = $autoShape->getTextFrame()->getParagraphs();
$paragraphCollection->add($para1);
$paragraphCollection->add($para2);
$paragraphCollection->add($para3);
$paragraphCollection->add(new Paragraph());
$mainSequence = $presentation->getSlides()->get_Item(0)->getTimeline()->getMainSequence();
$effect1 = $mainSequence->addEffect($para1, EffectType::Appear, EffectSubType::None, EffectTriggerType::AfterPrevious);
$effect2 = $mainSequence->addEffect($para2, EffectType::Appear, EffectSubType::None, EffectTriggerType::AfterPrevious);
$effect3 = $mainSequence->addEffect($para3, EffectType::Appear, EffectSubType::None, EffectTriggerType::AfterPrevious);
$effect4 = $mainSequence->addEffect($para3, EffectType::Appear, EffectSubType::None, EffectTriggerType::AfterPrevious);
$effect1->getTiming()->setTriggerDelayTime(1.0);
$effect2->getTiming()->setTriggerDelayTime(1.0);
$effect3->getTiming()->setTriggerDelayTime(1.0);
$effect4->getTiming()->setTriggerDelayTime(1.0);
$fps = 33;
class FrameTick {
function invoke($sender, $arg) {
try {
$frame = sprintf("frame_%04d.png", $sender->getFrameIndex());
$arguments->getFrame()->save($frame, ImageFormat::Png);
$frames->add($frame);
} catch (JavaException $e) {
}
}
}
$frames = new Java("java.util.ArrayList");
$animationsGenerator = new PresentationAnimationsGenerator($presentation);
try {
$player = new PresentationPlayer($animationsGenerator, $fps);
try {
$frameTick = java_closure(new FrameTick(), null, java("com.aspose.slides.PresentationPlayerFrameTick"));
$player->setFrameTick($frameTick);
$animationsGenerator->run($presentation->getSlides());
} finally {
if (!java_is_null($player)) {
$player->dispose();
}
}
} finally {
if (!java_is_null($animationsGenerator)) {
$animationsGenerator->dispose();
}
}
# Configurez le dossier des fichiers binaires ffmpeg. Consultez cette page : https://github.com/rosenbjerg/FFMpegCore#installation
$ffmpeg = new Java("net.bramp.ffmpeg.builder.FFmpeg", "path/to/ffmpeg");
$ffprobe = new Java("net.bramp.ffmpeg.builder.FFprobe", "path/to/ffprobe");
$builder = (new Java("net.bramp.ffmpeg.builder.FFmpegBuilder"))->addExtraArgs("-start_number", "1")->setInput("frame_%04d.png")->addOutput("output.avi")->setVideoFrameRate(FFmpeg->FPS_24)->setFormat("avi")->done();
$executor = new Java("net.bramp.ffmpeg.builder.FFmpegExecutor", $ffmpeg, $ffprobe);
$executor->createJob($builder)->run();
} catch (JavaException $e) {
$e->printStackTrace();
}
Classes de Conversion Vidéo
Pour vous permettre d’effectuer des tâches de conversion PowerPoint en vidéo, Aspose.Slides fournit les classes PresentationAnimationsGenerator et PresentationPlayer.
PresentationAnimationsGenerator vous permet de définir la taille de l’image pour la vidéo (qui sera créée plus tard) via son constructeur. Si vous passez une instance de la présentation, Presentation.SlideSize
sera utilisée et elle génère des animations que PresentationPlayer utilise.
Lorsque les animations sont générées, un événement NewAnimation
est généré pour chaque animation suivante, qui a le paramètre IPresentationAnimationPlayer. Ce dernier est une classe qui représente un lecteur pour une animation séparée.
Pour travailler avec IPresentationAnimationPlayer, les propriétés Duration (la durée totale de l’animation) et la méthode SetTimePosition sont utilisées. Chaque position d’animation est définie dans la plage 0 à duration, puis la méthode GetFrame
renverra un BufferedImage qui correspond à l’état de l’animation à ce moment :
use aspose\slides\Presentation;
use aspose\slides\PresentationPlayer;
use aspose\slides\PresentationAnimationsGenerator;
use aspose\slides\ImageFormat;
use aspose\slides\ShapeType;
use aspose\slides\EffectType;
use aspose\slides\EffectSubtype;
use aspose\slides\EffectTriggerType;
use aspose\slides\EffectPresetClassType;
class PresentationAnimationPlayer {
function invoke($animationPlayer) {
echo(sprintf("Durée totale de l'animation : %f", $animationPlayer->getDuration()));
$animationPlayer->setTimePosition(0);// état initial de l'animation
try {
# bitmap de l'état initial de l'animation
$animationPlayer->getFrame()->save("firstFrame.png", ImageFormat::Png);
} catch (JavaException $e) {
}
$animationPlayer->setTimePosition($animationPlayer->getDuration());// état final de l'animation
try {
# dernière image de l'animation
$animationPlayer->getFrame()->save("lastFrame.png", ImageFormat::Png);
} catch (JavaException $e) {
}
}
}
$presentation = new Presentation();
try {
# Ajoute une forme de sourire et l'anime
$smile = $presentation->getSlides()->get_Item(0)->getShapes()->addAutoShape(ShapeType::SmileyFace, 110, 20, 500, 500);
$mainSequence = $presentation->getSlides()->get_Item(0)->getTimeline()->getMainSequence();
$effectIn = $mainSequence->addEffect($smile, EffectType::Fly, EffectSubtype::TopLeft, EffectTriggerType::AfterPrevious);
$effectOut = $mainSequence->addEffect($smile, EffectType::Fly, EffectSubtype::BottomRight, EffectTriggerType::AfterPrevious);
$effectIn->getTiming()->setDuration(2.0);
$effectOut->setPresetClassType(EffectPresetClassType::Exit);
$animationsGenerator = new PresentationAnimationsGenerator($presentation);
$presentationAnimation=java_closure(new PresentationAnimationPlayer(), null, java("com.aspose.slides.PresentationAnimationsGeneratorNewAnimation"));
try {
$animationsGenerator->setNewAnimation($presentationAnimation);
} finally {
if (!java_is_null($animationsGenerator)) {
$animationsGenerator->dispose();
}
}
} finally {
if (!java_is_null($presentation)) {
$presentation->dispose();
}
}
Pour faire jouer toutes les animations d’une présentation en même temps, la classe PresentationPlayer est utilisée. Cette classe prend une instance de PresentationAnimationsGenerator et des FPS pour les effets dans son constructeur, puis appelle l’événement FrameTick
pour toutes les animations afin de les lire :
class FrameTick {
function invoke($sender, $arg) {
try {
$arguments->getFrame()->save("frame_" . $sender->getFrameIndex() . ".png", ImageFormat::Png);
} catch (JavaException $e) {
}
}
}
$presentation = new Presentation("animated.pptx");
try {
$animationsGenerator = new PresentationAnimationsGenerator($presentation);
try {
$player = new PresentationPlayer($animationsGenerator, 33);
try {
$frameTick = java_closure(new FrameTick(), null, java("com.aspose.slides.PresentationPlayerFrameTick"));
$player->setFrameTick($frameTick);
$animationsGenerator->run($presentation->getSlides());
} finally {
if (!java_is_null($player)) {
$player->dispose();
}
}
} finally {
if (!java_is_null($animationsGenerator)) {
$animationsGenerator->dispose();
}
}
} finally {
if (!java_is_null($presentation)) {
$presentation->dispose();
}
}
Ensuite, les images générées peuvent être compilées pour produire une vidéo. Voir la section Convertir PowerPoint en Vidéo.
Animations et Effets Pris en Charge
Entrée :
Type d’Animation | Aspose.Slides | PowerPoint |
---|---|---|
Apparaître | ||
Estomper | ||
Voler | ||
Flotter | ||
Diviser | ||
Balayer | ||
Forme | ||
Roue | ||
Barres Aléatoires | ||
Grandir & Tourner | ||
Zoom | ||
Tournoyer | ||
Rebondir |
Accentuation :
Type d’Animation | Aspose.Slides | PowerPoint |
---|---|---|
Pulser | ||
Pulse de Couleur | ||
Se Balancer | ||
Tourner | ||
Grandir/Rétrécir | ||
Désaturer | ||
Assombrir | ||
Éclaircir | ||
Transparence | ||
Couleur d’Objet | ||
Couleur Complémentaire | ||
Couleur de Ligne | ||
Couleur de Remplissage |
Sortie :
Type d’Animation | Aspose.Slides | PowerPoint |
---|---|---|
Disparaître | ||
Estomper | ||
Voler Hors | ||
Flotter Hors | ||
Diviser | ||
Balayer | ||
Forme | ||
Barres Aléatoires | ||
Réduire & Tourner | ||
Zoom | ||
Tournoyer | ||
Rebondir |
Trajets de Mouvement :
Type d’Animation | Aspose.Slides | PowerPoint |
---|---|---|
Lignes | ||
Arcs | ||
Virages | ||
Formes | ||
Boucles | ||
Chemin Personnalisé |