Convertir PowerPoint a Video
Al convertir tu presentación de PowerPoint a video, obtienes
- Aumento en accesibilidad: Todos los dispositivos (independientemente de la plataforma) están equipados con reproductores de video por defecto en comparación con aplicaciones para abrir presentaciones, por lo que a los usuarios les resulta más fácil abrir o reproducir videos.
- Mayor alcance: A través de videos, puedes alcanzar a una gran audiencia y dirigirles información que de otro modo podría parecer tediosa en una presentación. La mayoría de las encuestas y estadísticas sugieren que las personas ven y consumen videos más que otras formas de contenido, y generalmente prefieren ese tipo de contenido.
Conversión de PowerPoint a Video en Aspose.Slides
En Aspose.Slides 22.11, implementamos soporte para la conversión de presentaciones a video.
- Usa Aspose.Slides para generar un conjunto de fotogramas (de las diapositivas de la presentación) que correspondan a una cierta FPS (fotogramas por segundo)
- Usa una utilidad de terceros como
ffmpeg
para crear un video basado en los fotogramas.
Convertir PowerPoint a Video
- Descarga ffmpeg aquí.
- Agrega la ruta a
ffmpeg.exe
a la variable de entornoPATH
. - Ejecuta el código para convertir PowerPoint a video.
Este código en C++ te muestra cómo convertir una presentación (que contiene una figura y dos efectos de animación) a un video:
void OnFrameTick(System::SharedPtr<PresentationPlayer> sender, System::SharedPtr<FrameTickEventArgs> args)
{
System::String fileName = System::String::Format(u"frame_{0}.png", sender->get_FrameIndex());
args->GetFrame()->Save(fileName);
}
void Run()
{
auto presentation = System::MakeObject<Presentation>();
auto slide = presentation->get_Slide(0);
// Agrega una forma de sonrisa y luego la anima
System::SharedPtr<IAutoShape> smile = slide->get_Shapes()->AddAutoShape(ShapeType::SmileyFace, 110.0f, 20.0f, 500.0f, 500.0f);
auto sequence = slide->get_Timeline()->get_MainSequence();
System::SharedPtr<IEffect> effectIn = sequence->AddEffect(smile, EffectType::Fly, EffectSubtype::TopLeft, EffectTriggerType::AfterPrevious);
System::SharedPtr<IEffect> effectOut = sequence->AddEffect(smile, EffectType::Fly, EffectSubtype::BottomRight, EffectTriggerType::AfterPrevious);
effectIn->get_Timing()->set_Duration(2.0f);
effectOut->set_PresetClassType(EffectPresetClassType::Exit);
const int32_t fps = 33;
auto animationsGenerator = System::MakeObject<PresentationAnimationsGenerator>(presentation);
auto player = System::MakeObject<PresentationPlayer>(animationsGenerator, fps);
player->FrameTick += OnFrameTick;
animationsGenerator->Run(presentation->get_Slides());
const System::String ffmpegParameters = System::String::Format(
u"-loglevel {0} -framerate {1} -i {2} -y -c:v {3} -pix_fmt {4} {5}",
u"warning", m_fps, "frame_%d.png", u"libx264", u"yuv420p", "video.mp4");
auto ffmpegProcess = System::Diagnostics::Process::Start(u"ffmpeg", ffmpegParameters);
ffmpegProcess->WaitForExit();
}
Efectos de Video
Puedes aplicar animaciones a objetos en las diapositivas y usar transiciones entre diapositivas.
Las animaciones y transiciones hacen que las presentaciones sean más atractivas e interesantes—y hacen lo mismo por los videos. Agreguemos otra diapositiva y transición al código de la presentación anterior:
// Agrega una forma de sonrisa y la anima
// ...
// Agrega una nueva diapositiva y transición animada
System::SharedPtr<ISlide> newSlide = presentation->get_Slides()->AddEmptySlide(presentation->get_Slide(0)->get_LayoutSlide());
System::SharedPtr<IBackground> slideBackground = newSlide->get_Background();
slideBackground->set_Type(BackgroundType::OwnBackground);
auto fillFormat = slideBackground->get_FillFormat();
fillFormat->set_FillType(FillType::Solid);
fillFormat->get_SolidFillColor()->set_Color(System::Drawing::Color::get_Indigo());
newSlide->get_SlideShowTransition()->set_Type(TransitionType::Push);
Aspose.Slides también admite animaciones para textos. Así que animamos párrafos en objetos, que aparecerán uno tras otro (con el retraso establecido en un segundo):
void OnFrameTick(System::SharedPtr<PresentationPlayer> sender, System::SharedPtr<FrameTickEventArgs> args)
{
System::String fileName = System::String::Format(u"frame_{0}.png", sender->get_FrameIndex());
args->GetFrame()->Save(fileName);
}
void Run()
{
auto presentation = System::MakeObject<Presentation>();
auto slide = presentation->get_Slide(0);
// Agrega texto y animaciones
System::SharedPtr<IAutoShape> autoShape = slide->get_Shapes()->AddAutoShape(ShapeType::Rectangle, 210.0f, 120.0f, 300.0f, 300.0f);
System::SharedPtr<Paragraph> para1 = System::MakeObject<Paragraph>();
para1->get_Portions()->Add(System::MakeObject<Portion>(u"Aspose Slides para C++"));
System::SharedPtr<Paragraph> para2 = System::MakeObject<Paragraph>();
para2->get_Portions()->Add(System::MakeObject<Portion>(u"convertir presentación de PowerPoint con texto a video"));
System::SharedPtr<Paragraph> para3 = System::MakeObject<Paragraph>();
para3->get_Portions()->Add(System::MakeObject<Portion>(u"párrafo por párrafo"));
auto paragraphs = autoShape->get_TextFrame()->get_Paragraphs();
paragraphs->Add(para1);
paragraphs->Add(para2);
paragraphs->Add(para3);
paragraphs->Add(System::MakeObject<Paragraph>());
auto sequence = slide->get_Timeline()->get_MainSequence();
System::SharedPtr<IEffect> effect = sequence->AddEffect(para1, EffectType::Appear, EffectSubtype::None, EffectTriggerType::AfterPrevious);
System::SharedPtr<IEffect> effect2 = sequence->AddEffect(para2, EffectType::Appear, EffectSubtype::None, EffectTriggerType::AfterPrevious);
System::SharedPtr<IEffect> effect3 = sequence->AddEffect(para3, EffectType::Appear, EffectSubtype::None, EffectTriggerType::AfterPrevious);
System::SharedPtr<IEffect> effect4 = sequence->AddEffect(para3, EffectType::Appear, EffectSubtype::None, EffectTriggerType::AfterPrevious);
effect->get_Timing()->set_TriggerDelayTime(1.0f);
effect2->get_Timing()->set_TriggerDelayTime(1.0f);
effect3->get_Timing()->set_TriggerDelayTime(1.0f);
effect4->get_Timing()->set_TriggerDelayTime(1.0f);
// Convierte fotogramas a video
const int32_t fps = 33;
auto animationsGenerator = System::MakeObject<PresentationAnimationsGenerator>(presentation);
auto player = System::MakeObject<PresentationPlayer>(animationsGenerator, fps);
player->FrameTick += OnFrameTick;
animationsGenerator->Run(presentation->get_Slides());
const System::String ffmpegParameters = System::String::Format(
u"-loglevel {0} -framerate {1} -i {2} -y -c:v {3} -pix_fmt {4} {5}",
u"warning", m_fps, "frame_%d.png", u"libx264", u"yuv420p", "video.mp4");
auto ffmpegProcess = System::Diagnostics::Process::Start(u"ffmpeg", ffmpegParameters);
ffmpegProcess->WaitForExit();
}
Clases de Conversión de Video
Para permitirte realizar tareas de conversión de PowerPoint a video, Aspose.Slides proporciona las clases PresentationAnimationsGenerator y PresentationPlayer.
PresentationAnimationsGenerator te permite establecer el tamaño del fotograma para el video (que será creado más tarde) a través de su constructor. Si pasas una instancia de la presentación, se utilizará Presentation.SlideSize
y genera animaciones que usa PresentationPlayer.
Cuando se generan las animaciones, se genera un evento NewAnimation
para cada animación subsiguiente, que tiene el parámetro IPresentationAnimationPlayer. Este último es una clase que representa un reproductor para una animación separada.
Para trabajar con IPresentationAnimationPlayer, se utilizan la propiedad get_Duration (la duración total de la animación) y el método SetTimePosition. Cada posición de animación se establece dentro del rango 0 a la duración, y luego el método GetFrame
devolverá un Bitmap que corresponde al estado de la animación en ese momento.
void OnNewAnimation(System::SharedPtr<IPresentationAnimationPlayer> animationPlayer)
{
System::Console::WriteLine(u"Duración total de la animación: {0}", animationPlayer->get_Duration());
animationPlayer->SetTimePosition(0);
// estado inicial de la animación
System::SharedPtr<System::Drawing::Bitmap> bitmap = animationPlayer->GetFrame();
// bitmap del estado inicial de la animación
animationPlayer->SetTimePosition(animationPlayer->get_Duration());
// estado final de la animación
System::SharedPtr<System::Drawing::Bitmap> lastBitmap = animationPlayer->GetFrame();
// último fotograma de la animación
lastBitmap->Save(u"last.png");
}
void Run()
{
auto presentation = System::MakeObject<Presentation>();
auto slide = presentation->get_Slide(0);
// Agrega una forma de sonrisa y la anima
System::SharedPtr<IAutoShape> smile = slide->get_Shapes()->AddAutoShape(ShapeType::SmileyFace, 110.0f, 20.0f, 500.0f, 500.0f);
auto sequence = slide->get_Timeline()->get_MainSequence();
System::SharedPtr<IEffect> effectIn = sequence->AddEffect(smile, EffectType::Fly, EffectSubtype::TopLeft, EffectTriggerType::AfterPrevious);
System::SharedPtr<IEffect> effectOut = sequence->AddEffect(smile, EffectType::Fly, EffectSubtype::BottomRight, EffectTriggerType::AfterPrevious);
effectIn->get_Timing()->set_Duration(2.0f);
effectOut->set_PresetClassType(EffectPresetClassType::Exit);
auto animationsGenerator = System::MakeObject<PresentationAnimationsGenerator>(presentation);
animationsGenerator->NewAnimation += OnNewAnimation;
}
Para hacer que todas las animaciones en una presentación se reproduzcan a la vez, se utiliza la clase PresentationPlayer. Esta clase toma una instancia de PresentationAnimationsGenerator y FPS para los efectos en su constructor y luego llama al evento FrameTick
para todas las animaciones para que se reproduzcan:
void OnFrameTick(System::SharedPtr<PresentationPlayer> sender, System::SharedPtr<FrameTickEventArgs> args)
{
System::String fileName = System::String::Format(u"frame_{0}.png", sender->get_FrameIndex());
args->GetFrame()->Save(fileName);
}
void Run()
{
auto presentation = System::MakeObject<Presentation>(u"animated.pptx");
auto animationsGenerator = System::MakeObject<PresentationAnimationsGenerator>(presentation);
auto player = System::MakeObject<PresentationPlayer>(animationsGenerator, 33);
player->FrameTick += OnFrameTick;
animationsGenerator->Run(presentation->get_Slides());
}
Luego, los fotogramas generados se pueden compilar para producir un video. Consulta la sección Convertir PowerPoint a Video.
Animaciones y Efectos Admitidos
Entrada:
Tipo de Animación | Aspose.Slides | PowerPoint |
---|---|---|
Aparecer | ||
Desvanecer | ||
Entrar volando | ||
Flotar en | ||
Dividir | ||
Limpiar | ||
Forma | ||
Rueda | ||
Barras aleatorias | ||
Crecer y girar | ||
Acercar | ||
Girar | ||
Botar |
Énfasis:
Tipo de Animación | Aspose.Slides | PowerPoint |
---|---|---|
Pulso | ||
Pulso de color | ||
Balanza | ||
Girar | ||
Crecer/Encoger | ||
Desaturar | ||
Oscurecer | ||
Aclarar | ||
Transparencia | ||
Color de objeto | ||
Color complementario | ||
Color de línea | ||
Color de relleno |
Salida:
Tipo de Animación | Aspose.Slides | PowerPoint |
---|---|---|
Desaparecer | ||
Desvanecer | ||
Salir volando | ||
Flotar fuera | ||
Dividir | ||
Limpiar | ||
Forma | ||
Barras aleatorias | ||
Encoger y girar | ||
Acercar | ||
Girar | ||
Botar |
Rutas de Movimiento:
Tipo de Animación | Aspose.Slides | PowerPoint |
---|---|---|
Líneas | ||
Arcos | ||
Giros | ||
Formas | ||
Bucles | ||
Ruta personalizada |