Управление видеокадрами в презентациях в .NET

Хорошо размещённое видео в презентации может сделать ваше сообщение более убедительным и повысить уровень вовлечённости аудитории.

PowerPoint позволяет добавлять видео на слайд в презентации двумя способами:

  • Добавить или встроить локальное видео (хранящееся на вашем компьютере)
  • Добавить онлайн‑видео (из веб‑источника, например YouTube).

Чтобы вы могли добавлять видео (объекты видео) в презентацию, Aspose.Slides предоставляет интерфейсы IVideo и IVideoFrame и другие соответствующие типы.

Создание встроенного видеокадра

Если видеофайл, который вы хотите добавить на слайд, хранится локально, вы можете создать видеокадр, чтобы встроить видео в свою презентацию.

  1. Создайте экземпляр класса Presentation class.
  2. Получите ссылку на слайд по его индексу.
  3. Добавьте объект IVideo и укажите путь к файлу видео, чтобы встроить его в презентацию.
  4. Добавьте объект IVideoFrame для создания кадра для видео.
  5. Сохраните изменённую презентацию.

Этот код на C# показывает, как добавить локально хранимое видео в презентацию:

// Создаёт экземпляр класса Presentation
using (Presentation pres = new Presentation("pres.pptx"))
{
    // Загружает видео
    using (FileStream fileStream = new FileStream("Wildlife.mp4", FileMode.Open, FileAccess.Read))
    {
        IVideo video = pres.Videos.AddVideo(fileStream, LoadingStreamBehavior.KeepLocked);
        
        // Получает первый слайд и добавляет видеокадр
        pres.Slides[0].Shapes.AddVideoFrame(10, 10, 150, 250, video);
        
        // Сохраняет презентацию на диск
        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 class
  2. Получите ссылку на слайд по его индексу.
  3. Добавьте объект IVideo и укажите ссылку на видео.
  4. Установите миниатюру для видеокадра.
  5. Сохраните презентацию.

Этот код на C# показывает, как добавить видео из интернета на слайд в презентации PowerPoint:

public static void Run()
{
    // Создаёт объект Presentation, представляющий файл презентации 
    using (Presentation pres = new Presentation())
    {
        AddVideoFromYouTube(pres, "Tj75Arhq5ho");
        pres.Save("AddVideoFrameFromWebSource_out.pptx", SaveFormat.Pptx);
    }
}

private static void AddVideoFromYouTube(Presentation pres, string videoId)
{
    // Добавляет видеокадр
    IVideoFrame videoFrame = pres.Slides[0].Shapes.AddVideoFrame(10, 10, 427, 240, "https://www.youtube.com/embed/" + videoId);
    videoFrame.PlayMode = VideoPlayModePreset.Auto;

    // Загружает миниатюру
    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 позволяет управлять закрытыми субтитрами для видеокадров в презентациях PowerPoint. Субтитры хранятся в формате WebVTT и доступны через свойство IVideoFrame.CaptionTracks.

Добавление субтитров к видеокадру

Чтобы добавить субтитры к видеокадру:

  1. Создайте экземпляр класса Presentation .
  2. Добавьте видео в презентацию.
  3. Добавьте объект IVideoFrame на слайд.
  4. Используйте коллекцию CaptionTracks для добавления WebVTT‑трека субтитров.
  5. Сохраните изменённую презентацию.

Следующий код показывает, как добавить субтитры к видеокадру:

using (Presentation presentation = new Presentation())
{
    byte[] videoData = File.ReadAllBytes("video.mp4");
    IVideo video = presentation.Videos.AddVideo(videoData);

    ISlide slide = presentation.Slides[0];
    IVideoFrame videoFrame = slide.Shapes.AddVideoFrame(0, 0, 100, 100, video);

    // Добавляет новую дорожку субтитров из файла WebVTT.
    videoFrame.CaptionTracks.Add("English", "track.vtt");

    presentation.Save("video_with_captions.pptx", SaveFormat.Pptx);
}

Интерфейс ICaptionsCollection также предоставляет перегрузку, позволяющую добавлять субтитры из потока.

Извлечение субтитров из видеокадра

Чтобы извлечь субтитры из видеокадра:

  1. Загрузите презентацию, содержащую видео.
  2. Найдите целевой объект IVideoFrame.
  3. Пройдитесь по коллекции CaptionTracks.
  4. Сохраните каждый трек субтитров в файл .vtt.

Следующий код показывает, как извлечь субтитры из видеокадра:

using (Presentation presentation = new Presentation("video_with_captions.pptx"))
{
    ISlide slide = presentation.Slides[0];
    foreach (IShape shape in slide.Shapes)
    {
        if (shape is IVideoFrame videoFrame)
        {
            foreach (ICaptions captionTrack in videoFrame.CaptionTracks)
            {
                // Сохраняет дорожку субтитров в файл WebVTT.
                string filePath = $"{captionTrack.CaptionId}.vtt";
                File.WriteAllBytes(filePath, captionTrack.BinaryData);
            }
        }
    }
}

Каждый объект ICaptions предоставляет идентификатор субтитров, метку, бинарные данные и текст субтитров в виде UTF‑8 строки.

Удаление субтитров из видеокадра

Чтобы удалить субтитры из видеокадра:

  1. Загрузите презентацию, содержащую видео.
  2. Получите целевой объект IVideoFrame.
  3. Удалите треки субтитров из коллекции CaptionTracks.
  4. Сохраните изменённую презентацию.

Следующий код показывает, как удалить все субтитры из видеокадра:

using (Presentation presentation = new Presentation("video_with_captions.pptx"))
{
    ISlide slide = presentation.Slides[0];
    IVideoFrame videoFrame = slide.Shapes[0] as IVideoFrame;

    // Удаляет все субтитры из видеокадра.
    videoFrame.CaptionTracks.Clear();

    presentation.Save("video_without_captions.pptx", SaveFormat.Pptx);
}

Если нужно удалить только один трек субтитров, используйте методы Remove или RemoveAt вместо Clear.

Извлечение видео со слайда

Помимо добавления видео на слайды, Aspose.Slides позволяет извлекать встроенные в презентацию видео.

  1. Создайте экземпляр класса Presentation для загрузки презентации, содержащей видео.
  2. Пройдитесь по всем объектам ISlide.
  3. Пройдитесь по всем объектам IShape, чтобы найти VideoFrame.
  4. Сохраните видео на диск.

Этот код на C# показывает, как извлечь видео со слайда презентации:

// Создаёт объект Presentation, представляющий файл презентации 
Presentation presentation = new Presentation("Video.pptx");

// Перебирает слайды
foreach (ISlide slide in presentation.Slides)
{
    // Перебирает фигуры
    foreach (IShape shape in presentation.Slides[0].Shapes)
    {
        // Сохраняет видео на диск, как только найден VideoFrame, содержащий видео
        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);
            }
        }
    }
}

FAQ

Какие параметры воспроизведения видео можно изменить для VideoFrame?

Вы можете управлять режимом воспроизведения (авто или по щелчку) и цикличностью. Эти параметры доступны через свойства объекта VideoFrame.

Влияет ли добавление видео на размер файла PPTX?

Да. При встраивании локального видео бинарные данные включаются в документ, поэтому размер презентации увеличивается пропорционально размеру файла. При добавлении онлайн‑видео в документ встраиваются ссылка и миниатюра, поэтому увеличение размера оказывается меньше.

Можно ли заменить видео в существующем VideoFrame, не меняя его положения и размеров?

Да. Вы можете заменить видеоконтент внутри кадра, сохранив геометрию фигуры; это типичный сценарий обновления медиа в уже существующей раскладке.

Можно ли определить тип содержимого (MIME) встроенного видео?

Да. Встроенное видео имеет тип содержимого, который можно прочитать и использовать, например при сохранении на диск.