视频帧

在演示文稿中适当地放置视频可以使您的信息更具吸引力,并提高与观众的互动水平。

PowerPoint允许您通过两种方式向演示文稿的幻灯片添加视频:

  • 添加或嵌入本地视频(存储在您的计算机上)
  • 添加在线视频(来自网络来源,如YouTube)。

为了让您可以向演示文稿中添加视频(视频对象),Aspose.Slides提供了IVideo接口、IVideoFrame接口以及其他相关类型。

创建嵌入式视频帧

如果您想要添加到幻灯片的视频文件存储在本地,您可以创建一个视频帧将视频嵌入到您的演示文稿中。

  1. 创建Presentation类的实例。
  2. 通过其索引获取幻灯片的引用。
  3. 添加IVideo对象,并传递视频文件路径以将视频与演示文稿嵌入。
  4. 添加IVideoFrame对象以创建视频的框架。
  5. 保存修改后的演示文稿。

以下C#代码展示了如何将本地存储的视频添加到演示文稿中:

// Instantiates the Presentation class
using (Presentation pres = new Presentation("pres.pptx"))
{
    // Loads the video
    using (FileStream fileStream = new FileStream("Wildlife.mp4", FileMode.Open, FileAccess.Read))
    {
        IVideo video = pres.Videos.AddVideo(fileStream, LoadingStreamBehavior.KeepLocked);
        
        // Gets the first slide and adds a videoframe
        pres.Slides[0].Shapes.AddVideoFrame(10, 10, 150, 250, video);
        
        // Saves the presentation to disk
        pres.Save("pres-with-video.pptx", SaveFormat.Pptx);
    }
}

另外,您也可以通过直接将文件路径传递给AddVideoFrame方法来添加视频:

using (Presentation pres = new Presentation())
{
    ISlide sld = pres.Slides[0];
    IVideoFrame vf = sld.Shapes.AddVideoFrame(50, 150, 300, 150, "video1.avi");
}

从网络来源创建视频帧

Microsoft PowerPoint 2013及更新版本支持在演示文稿中使用YouTube视频。如果您想要使用的视频在线可用(例如在YouTube上),您可以通过其网页链接将其添加到演示文稿中。

  1. 创建Presentation类的实例。
  2. 通过其索引获取幻灯片的引用。
  3. 添加IVideo对象并传递视频链接。
  4. 设置视频帧的缩略图。
  5. 保存演示文稿。

以下C#代码展示了如何将网络视频添加到PowerPoint演示文稿的幻灯片中:

public static void Run()
{
    // Instantiates a Presentation object that represents a presentation file 
    using (Presentation pres = new Presentation())
    {
        AddVideoFromYouTube(pres, "Tj75Arhq5ho");
        pres.Save("AddVideoFrameFromWebSource_out.pptx", SaveFormat.Pptx);
    }
}

private static void AddVideoFromYouTube(Presentation pres, string videoId)
{
    // Adds a VideoFrame
    IVideoFrame videoFrame = pres.Slides[0].Shapes.AddVideoFrame(10, 10, 427, 240, "https://www.youtube.com/embed/" + videoId);
    videoFrame.PlayMode = VideoPlayModePreset.Auto;

    // Loads thumbnail
    using (WebClient client = new WebClient())
    {
        string thumbnailUri = "http://img.youtube.com/vi/" + videoId + "/hqdefault.jpg";
        videoFrame.PictureFormat.Picture.Image = pres.Images.AddImage(client.DownloadData(thumbnailUri));
    }
}

从幻灯片中提取视频

除了向幻灯片添加视频,Aspose.Slides还允许您提取嵌入在演示文稿中的视频。

  1. 创建Presentation类的实例以加载包含视频的演示文稿。
  2. 遍历所有ISlide对象。
  3. 遍历所有IShape对象以查找VideoFrame
  4. 将视频保存到磁盘。

以下C#代码展示了如何从演示文稿幻灯片中提取视频:

// Instantiates a Presentation object that represents a presentation file 
Presentation presentation = new Presentation("Video.pptx");

// Iterates through slides
foreach (ISlide slide in presentation.Slides)
{
    // Iterates through shapes
    foreach (IShape shape in presentation.Slides[0].Shapes)
    {
        // Saves video to disk once VideoFrame containing video is found
        if (shape is VideoFrame)
        {
            IVideoFrame vf = shape as IVideoFrame;
            String type = vf.EmbeddedVideo.ContentType;
            int ss = type.LastIndexOf('/');
            type = type.Remove(0, type.LastIndexOf('/') + 1);
            Byte[] buffer = vf.EmbeddedVideo.BinaryData;
            using (FileStream stream = new FileStream("NewVideo_out." + type, FileMode.Create, FileAccess.Write, FileShare.Read))
            {                                                     
                stream.Write(buffer, 0, buffer.Length);
            }
        }
    }
}