Gestionar marcos de vídeo en presentaciones usando C++
Un vídeo bien colocado en una presentación puede hacer que tu mensaje sea más atractivo y aumentar los niveles de compromiso con tu audiencia.
PowerPoint permite añadir vídeos a una diapositiva en una presentación de dos maneras:
- Añadir o incrustar un vídeo local (almacenado en tu equipo)
- Añadir un vídeo en línea (de una fuente web como YouTube).
Para permitirte añadir vídeos (objetos de vídeo) a una presentación, Aspose.Slides ofrece la interfaz IVideo, la interfaz IVideoFrame y otros tipos relevantes.
Crear un marco de vídeo incrustado
Si el archivo de vídeo que deseas añadir a tu diapositiva está almacenado localmente, puedes crear un marco de vídeo para incrustar el vídeo en tu presentación.
- Crea una instancia de la clase Presentation .
- Obtén una referencia a la diapositiva mediante su índice.
- Añade un objeto IVideo y pasa la ruta del archivo de vídeo para incrustar el vídeo en la presentación.
- Añade un objeto IVideoFrame para crear un marco para el vídeo.
- Guarda la presentación modificada.
Este código C++ muestra cómo añadir un vídeo almacenado localmente a una presentación:
System::SharedPtr<Presentation> pres = System::MakeObject<Presentation>(u"pres.pptx");
// Loads the video
System::SharedPtr<System::IO::FileStream> fileStream = System::MakeObject<System::IO::FileStream>(u"Wildlife.mp4", System::IO::FileMode::Open, System::IO::FileAccess::Read);
System::SharedPtr<IVideo> video = pres->get_Videos()->AddVideo(fileStream, LoadingStreamBehavior::KeepLocked);
// Gets the first slide and adds a videoframe
pres->get_Slide(0)->get_Shapes()->AddVideoFrame(10.0f, 10.0f, 150.0f, 250.0f, video);
// Saves the presentation to disk
pres->Save(u"pres-with-video.pptx", SaveFormat::Pptx);
Alternativamente, puedes añadir un vídeo pasando su ruta de archivo directamente al método AddVideoFrame():
System::SharedPtr<Presentation> pres = System::MakeObject<Presentation>();
System::SharedPtr<ISlide> sld = pres->get_Slide(0);
System::SharedPtr<IVideoFrame> vf = sld->get_Shapes()->AddVideoFrame(50.0f, 150.0f, 300.0f, 150.0f, u"video1.avi");
Crear un marco de vídeo con vídeo de una fuente web
Microsoft PowerPoint 2013 y versiones posteriores admite vídeos de YouTube en presentaciones. Si el vídeo que deseas usar está disponible en línea (p. ej., en YouTube), puedes añadirlo a tu presentación mediante su enlace web.
- Crea una instancia de la clase Presentation
- Obtén una referencia a la diapositiva mediante su índice.
- Añade un objeto IVideo y pasa el enlace al vídeo.
- Establece una miniatura para el marco de vídeo.
- Guarda la presentación.
Este código C++ muestra cómo añadir un vídeo desde la web a una diapositiva en una presentación de PowerPoint:
// La ruta al directorio de documentos.
const String outPath = u"../out/AddVideoFrameFromWebSource_out.pptx";
const String filePath = u"../templates/video1.avi";
// Instancia un objeto Presentation que representa un archivo de presentación
SharedPtr<Presentation> pres = MakeObject<Presentation>();
// Accede a la primera diapositiva
SharedPtr<ISlide> slide = pres->get_Slides()->idx_get(0);
// Añade un marco de vídeo
System::SharedPtr<IVideoFrame> vf = slide->get_Shapes()->AddVideoFrame(10, 10, 427, 240,u"https://www.youtube.com/embed/Tj75Arhq5ho");
// Establece el modo de reproducción y el volumen del vídeo
vf->set_PlayMode(VideoPlayModePreset::Auto);
//Guarda la presentación en disco
pres->Save(outPath, Aspose::Slides::Export::SaveFormat::Pptx);
Gestionar subtítulos de vídeo
Aspose.Slides permite gestionar subtítulos cerrados para los marcos de vídeo en presentaciones de PowerPoint. Los subtítulos se almacenan en formato WebVTT y se exponen mediante el método IVideoFrame::get_CaptionTracks.
Añadir subtítulos a un marco de vídeo
Para añadir subtítulos a un marco de vídeo:
- Crea una instancia de la clase Presentation.
- Añade un vídeo a la presentación.
- Añade un objeto IVideoFrame a una diapositiva.
- Utiliza la ICaptionsCollection devuelta por get_CaptionTracks para añadir una pista de subtítulos WebVTT.
- Guarda la presentación modificada.
El siguiente código muestra cómo añadir subtítulos a un marco de vídeo:
auto presentation = MakeObject<Presentation>();
auto videoData = File::ReadAllBytes(u"video.mp4");
auto video = presentation->get_Videos()->AddVideo(videoData);
auto slide = presentation->get_Slide(0);
auto videoFrame = slide->get_Shapes()->AddVideoFrame(0, 0, 100, 100, video);
// Adds a new captions track from a WebVTT file.
videoFrame->get_CaptionTracks()->Add(u"English", u"track.vtt");
presentation->Save(u"video_with_captions.pptx", SaveFormat::Pptx);
presentation->Dispose();
La interfaz ICaptionsCollection también proporciona una sobrecarga que permite añadir subtítulos desde un flujo.
Extraer subtítulos de un marco de vídeo
Para extraer subtítulos de un marco de vídeo:
- Carga la presentación que contiene el vídeo.
- Encuentra el objeto IVideoFrame objetivo.
- Itera a través de las pistas de subtítulos devueltas por get_CaptionTracks.
- Guarda cada pista de subtítulos en un archivo
.vtt.
El siguiente código muestra cómo extraer subtítulos de un marco de vídeo:
auto presentation = MakeObject<Presentation>(u"video_with_captions.pptx");
auto slide = presentation->get_Slide(0);
for (auto&& shape : slide->get_Shapes())
{
if (ObjectExt::Is<IVideoFrame>(shape))
{
auto videoFrame = ExplicitCast<IVideoFrame>(shape);
for (auto&& captionTrack : videoFrame->get_CaptionTracks())
{
// Guarda la pista de subtítulos en un archivo WebVTT.
auto filePath = captionTrack->get_CaptionId().ToString() + u".vtt";
File::WriteAllBytes(filePath, captionTrack->get_BinaryData());
}
}
}
presentation->Dispose();
Cada objeto ICaptions expone el identificador del subtítulo, la etiqueta, los datos binarios y los datos del subtítulo como una cadena UTF-8.
Eliminar subtítulos de un marco de vídeo
Para eliminar subtítulos de un marco de vídeo:
- Carga la presentación que contiene el vídeo.
- Obtén el objeto IVideoFrame objetivo.
- Elimina las pistas de subtítulos de la colección devuelta por get_CaptionTracks.
- Guarda la presentación modificada.
El siguiente código muestra cómo eliminar todos los subtítulos de un marco de vídeo:
auto presentation = MakeObject<Presentation>(u"video_with_captions.pptx");
auto slide = presentation->get_Slide(0);
auto videoFrame = ExplicitCast<IVideoFrame>(slide->get_Shape(0));
// Elimina todos los subtítulos del marco de vídeo.
videoFrame->get_CaptionTracks()->Clear();
presentation->Save(u"video_without_captions.pptx", SaveFormat::Pptx);
presentation->Dispose();
Si necesitas eliminar solo una pista de subtítulos, utiliza los métodos Remove o RemoveAt en lugar de Clear.
Extraer vídeo de una diapositiva
Además de añadir vídeos a las diapositivas, Aspose.Slides permite extraer los vídeos incrustados en las presentaciones.
- Crea una instancia de la clase Presentation para cargar la presentación que contiene el vídeo.
- Recorre todos los objetos ISlide .
- Recorre todos los objetos IShape para encontrar un VideoFrame.
- Guarda el vídeo en el disco.
Este código C++ muestra cómo extraer el vídeo de una diapositiva de la presentación:
// La ruta al directorio de documentos.
const System::String templatePath = u"../templates/Video.pptx";
const System::String outPath = u"../out/Video_out";
auto presentation = System::MakeObject<Presentation>(templatePath);
for (auto&& slide : presentation->get_Slides())
{
for (auto&& shape : slide->get_Shapes())
{
if (System::ObjectExt::Is<VideoFrame>(shape))
{
System::SharedPtr<VideoFrame> vf = System::AsCast<VideoFrame>(shape);
System::String type = vf->get_EmbeddedVideo()->get_ContentType();
type = type.Remove(0, type.LastIndexOf('/') + 1);
auto buffer = vf->get_EmbeddedVideo()->get_BinaryData();
auto stream = System::MakeObject<System::IO::FileStream>(
outPath + type, System::IO::FileMode::Create, System::IO::FileAccess::Write,
System::IO::FileShare::Read);
stream->Write(buffer, 0, buffer->get_Length());
}
}
}
Preguntas frecuentes
¿Qué parámetros de reproducción de vídeo pueden modificarse para un VideoFrame?
Puedes controlar el modo de reproducción (automático o al hacer clic) y el bucle. Estas opciones están disponibles a través de las propiedades del objeto VideoFrame.
¿Afecta la adición de un vídeo al tamaño del archivo PPTX?
Sí. Cuando incrustas un vídeo local, los datos binarios se incluyen en el documento, por lo que el tamaño de la presentación crece en proporción al tamaño del archivo. Cuando añades un vídeo en línea, se incrustan un enlace y una miniatura, por lo que el aumento de tamaño es menor.
¿Puedo sustituir el vídeo en un VideoFrame existente sin cambiar su posición y tamaño?
Sí. Puedes intercambiar el contenido de vídeo dentro del marco mientras preservas la geometría de la forma; este es un escenario habitual para actualizar medios en un diseño existente.
¿Se puede determinar el tipo de contenido (MIME) de un vídeo incrustado?
Sí. Un vídeo incrustado tiene un tipo de contenido que puedes leer y utilizar, por ejemplo al guardarlo en el disco.