Converter apresentações PowerPoint para vídeo em JavaScript
Introdução
Ao converter sua apresentação PowerPoint em vídeo, você obtém
- Aumento da acessibilidade: Todos os dispositivos (independentemente da plataforma) vêm equipados com reprodutores de vídeo por padrão, ao contrário dos aplicativos de abertura de apresentações, portanto os usuários acham mais fácil abrir ou reproduzir vídeos.
- Maior alcance: Por meio de vídeos, você pode alcançar um grande público e direcioná‑lo com informações que, de outra forma, pareceriam tediosas em uma apresentação. A maioria das pesquisas e estatísticas indica que as pessoas assistem e consomem vídeos mais do que outros tipos de conteúdo, e geralmente preferem esse tipo de conteúdo.
Conversão de PowerPoint para Vídeo no Aspose.Slides
Aspose.Slides oferece suporte à conversão de apresentações em vídeo.
- Use Aspose.Slides para gerar um conjunto de quadros (a partir dos slides da apresentação) que correspondam a uma certa taxa de FPS (quadros por segundo)
- Use uma ferramenta de terceiros como ffmpeg (para java) para criar um vídeo com base nos quadros.
Converter PowerPoint para Vídeo
-
Baixe o ffmpeg aqui.
-
Execute o código JavaScript de PowerPoint para vídeo.
Este código JavaScript mostra como converter uma apresentação (contendo uma figura e dois efeitos de animação) em um vídeo:
var presentation = new aspose.slides.Presentation();
try {
// Adiciona uma forma de sorriso e então a anima
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();
}
}
// Configura a pasta de binários do ffmpeg. Veja esta página: 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);
}
Efeitos de Vídeo
Você pode aplicar animações a objetos nos slides e usar transições entre os slides.
Animações e transições tornam apresentações de slides mais envolventes e interessantes—e fazem o mesmo por vídeos. Vamos adicionar outro slide e transição ao código da apresentação anterior:
// Adiciona uma forma de sorriso e a anima
// ...
// Adiciona um novo slide e transição animada
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 também oferece suporte à animação de textos. Assim, animamos parágrafos em objetos, que aparecerão um após o outro (com o atraso definido para um segundo):
var presentation = new aspose.slides.Presentation();
try {
// Adiciona texto e animações
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();
}
}
// Configura a pasta de binários do ffmpeg. Veja esta página: 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);
}
Classes de Conversão de Vídeo
Para permitir que você execute tarefas de conversão de PowerPoint para vídeo, Aspose.Slides fornece as classes PresentationAnimationsGenerator e PresentationPlayer.
PresentationAnimationsGenerator permite definir o tamanho do quadro para o vídeo (que será criado posteriormente) por meio de seu construtor. Se você passar uma instância da apresentação, Presentation.getSlideSize será usado e ele gera animações que PresentationPlayer utiliza.
Quando as animações são geradas, um evento NewAnimation é disparado para cada animação subsequente, que possui o parâmetro de player de animação da apresentação. Este último é uma classe que representa um player para uma animação separada.
Para trabalhar com o player de animação da apresentação, são usados os métodos getDuration (a duração total da animação) e setTimePosition. Cada posição de animação é definida dentro do intervalo 0 a duração, e então o método getFrame retornará um BufferedImage que corresponde ao estado da animação naquele momento:
var presentation = new aspose.slides.Presentation();
try {
// Adiciona uma forma de sorriso e a anima
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);// estado inicial da animação
try {
// bitmap do estado inicial da animação
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());// estado final da animação
try {
// último quadro da animação
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();
}
}
Para fazer com que todas as animações de uma apresentação sejam reproduzidas simultaneamente, usa‑se a classe PresentationPlayer. Essa classe recebe uma instância de PresentationAnimationsGenerator e FPS para os efeitos em seu construtor e, em seguida, chama o evento FrameTick para todas as animações a fim de reproduzi‑las:
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();
}
}
Em seguida, os quadros gerados podem ser compilados para produzir um vídeo. Consulte a seção Converter PowerPoint para Vídeo.
Animações e Efeitos Compatíveis
Entrada:
| Tipo de Animação | Aspose.Slides | PowerPoint |
|---|---|---|
| Aparecer | ![]() |
![]() |
| Desvanecer | ![]() |
![]() |
| Entrar Voando | ![]() |
![]() |
| Flutuar Para Dentro | ![]() |
![]() |
| Dividir | ![]() |
![]() |
| Limpar | ![]() |
![]() |
| Forma | ![]() |
![]() |
| Roda | ![]() |
![]() |
| Barras Aleatórias | ![]() |
![]() |
| Crescer e Girar | ![]() |
![]() |
| Zoom | ![]() |
![]() |
| Girar | ![]() |
![]() |
| Quicar | ![]() |
![]() |
Ênfase:
| Tipo de Animação | Aspose.Slides | PowerPoint |
|---|---|---|
| Pulsar | ![]() |
![]() |
| Pulsar de Cor | ![]() |
![]() |
| Oscilar | ![]() |
![]() |
| Girar | ![]() |
![]() |
| Crescer/Encolher | ![]() |
![]() |
| Dessaturar | ![]() |
![]() |
| Escurecer | ![]() |
![]() |
| Clarear | ![]() |
![]() |
| Transparência | ![]() |
![]() |
| Cor do Objeto | ![]() |
![]() |
| Cor Complementar | ![]() |
![]() |
| Cor da Linha | ![]() |
![]() |
| Cor de Preenchimento | ![]() |
![]() |
Saída:
| Tipo de Animação | Aspose.Slides | PowerPoint |
|---|---|---|
| Desaparecer | ![]() |
![]() |
| Desvanecer | ![]() |
![]() |
| Voar para Fora | ![]() |
![]() |
| Flutuar para Fora | ![]() |
![]() |
| Dividir | ![]() |
![]() |
| Limpar | ![]() |
![]() |
| Forma | ![]() |
![]() |
| Barras Aleatórias | ![]() |
![]() |
| Encolher e Girar | ![]() |
![]() |
| Zoom | ![]() |
![]() |
| Girar | ![]() |
![]() |
| Quicar | ![]() |
![]() |
Caminhos de Movimento:
| Tipo de Animação | Aspose.Slides | PowerPoint |
|---|---|---|
| Linhas | ![]() |
![]() |
| Arcos | ![]() |
![]() |
| Curvas | ![]() |
![]() |
| Formas | ![]() |
![]() |
| Laços | ![]() |
![]() |
| Caminho Personalizado | ![]() |
![]() |
Perguntas Frequentes
É possível converter apresentações protegidas por senha?
Sim, o Aspose.Slides permite trabalhar com apresentações protegidas por senha. Ao processar esses arquivos, você precisa fornecer a senha correta para que a biblioteca possa acessar o conteúdo da apresentação.
O Aspose.Slides oferece suporte ao uso em soluções de nuvem?
Sim, o Aspose.Slides pode ser integrado a aplicativos e serviços em nuvem. A biblioteca foi projetada para operar em ambientes de servidor, garantindo alto desempenho e escalabilidade para o processamento em lote de arquivos.
Existem limitações de tamanho para apresentações durante a conversão?
O Aspose.Slides é capaz de lidar com apresentações de praticamente qualquer tamanho. Contudo, ao trabalhar com arquivos muito grandes, podem ser necessários recursos de sistema adicionais, e às vezes recomenda‑se otimizar a apresentação para melhorar o desempenho.

