Конвертировать презентации PowerPoint в видео в .NET

Обзор

Преобразуя вашу презентацию PowerPoint или OpenDocument в видео, вы получаете:

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

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

В Aspose.Slides для .NET мы реализовали поддержку преобразования презентаций в видео.

  • Используйте Aspose.Slides для .NET, чтобы генерировать кадры из слайдов презентации с заданной частотой кадров (FPS).
  • Затем примените стороннюю утилиту, например ffmpeg, чтобы собрать эти кадры в видео.

Конвертация презентации PowerPoint в видео

  1. Используйте команду dotnet add package, чтобы добавить Aspose.Slides и библиотеку FFMpegCore в ваш проект:
    • выполните dotnet add package Aspose.Slides.NET --version 22.11.0
    • выполните dotnet add package FFMpegCore --version 4.8.0
  2. Скачайте ffmpeg по ссылке здесь.
  3. FFMpegCore требует указать путь к загруженному ffmpeg (например, извлечённому в “C:\tools\ffmpeg”):
    GlobalFFOptions.Configure(new FFOptions { BinaryFolder = @"c:\tools\ffmpeg\bin" });
  1. Запустите код конвертации PowerPoint в видео.

Этот C#‑код демонстрирует, как преобразовать презентацию (с фигурой и двумя анимационными эффектами) в видео:

using System.Collections.Generic;
using Aspose.Slides;
using FFMpegCore; // будет использовать бинарники FFmpeg, которые мы ранее извлекли в C:\tools\ffmpeg.
using Aspose.Slides.Animation;

using (Presentation presentation = new Presentation())
{
    ISlide slide = presentation.Slides[0];

    // Добавить форму улыбки, а затем анимировать её.
    IAutoShape smile = slide.Shapes.AddAutoShape(ShapeType.SmileyFace, 110, 20, 500, 500);

    IEffect effectIn = slide.Timeline.MainSequence.AddEffect(
        smile, EffectType.Fly, EffectSubtype.TopLeft, EffectTriggerType.AfterPrevious);

    IEffect effectOut = slide.Timeline.MainSequence.AddEffect(
        smile, EffectType.Fly, EffectSubtype.BottomRight, EffectTriggerType.AfterPrevious);

    effectIn.Timing.Duration = 2f;
    effectOut.PresetClassType = EffectPresetClassType.Exit;

    const int Fps = 33;
    List<string> frames = new List<string>();

    using (var animationsGenerator = new PresentationAnimationsGenerator(presentation))
    using (var player = new PresentationPlayer(animationsGenerator, Fps))
    {
        player.FrameTick += (sender, args) =>
        {
            string frame = $"frame_{(sender.FrameIndex):D4}.png";
            args.GetFrame().Save(frame);
            frames.Add(frame);
        };
        animationsGenerator.Run(presentation.Slides);
    }

    // Настройте папку с бинарниками ffmpeg. Смотрите эту страницу: https://github.com/rosenbjerg/FFMpegCore#installation
    GlobalFFOptions.Configure(new FFOptions { BinaryFolder = @"c:\tools\ffmpeg\bin" });

    // Преобразовать кадры в видео webm.
    FFMpeg.JoinImageSequence("smile.webm", Fps, frames.Select(frame => ImageInfo.FromPath(frame)).ToArray());
}

Видеоэффекты

При преобразовании презентации PowerPoint в видео с помощью Aspose.Slides для .NET вы можете применять различные видеоэффекты для повышения визуального качества результата. Эти эффекты позволяют управлять отображением слайдов в финальном видео, добавляя плавные переходы, анимации и другие визуальные элементы. В этом разделе объясняются доступные варианты видеоэффектов и показывается, как их применять.

Анимации и переходы делают слайд‑шоу более интересным и захватывающим — то же самое относится и к видео. Добавим ещё один слайд и переход в код предыдущей презентации:

// Добавьте форму улыбки и анимируйте её.
// ...

// Добавьте новый слайд и анимированный переход.
ISlide newSlide = presentation.Slides.AddEmptySlide(presentation.Slides[0].LayoutSlide);
newSlide.Background.Type = BackgroundType.OwnBackground;
newSlide.Background.FillFormat.FillType = FillType.Solid;
newSlide.Background.FillFormat.SolidFillColor.Color = Color.Indigo;
newSlide.SlideShowTransition.Type = TransitionType.Push;

Aspose.Slides также поддерживает анимацию текста. В этом примере мы анимируем абзацы на объектах так, чтобы они появлялись последовательно с односекундной задержкой между ними:

using System.Collections.Generic;
using Aspose.Slides.Export;
using Aspose.Slides;
using FFMpegCore;
using Aspose.Slides.Animation;

using (Presentation presentation = new Presentation())
{
    ISlide slide = presentation.Slides[0];

    // Добавить текст и анимацию.
    IAutoShape autoShape = slide.Shapes.AddAutoShape(ShapeType.Rectangle, 210, 120, 300, 300);
    Paragraph para1 = new Paragraph();
    para1.Portions.Add(new Portion("Aspose Slides for .NET"));
    Paragraph para2 = new Paragraph();
    para2.Portions.Add(new Portion("Convert a PowerPoint presentation with text to video"));

    Paragraph para3 = new Paragraph();
    para3.Portions.Add(new Portion("paragraph by paragraph"));
    autoShape.TextFrame.Paragraphs.Add(para1);
    autoShape.TextFrame.Paragraphs.Add(para2);
    autoShape.TextFrame.Paragraphs.Add(para3);
    autoShape.TextFrame.Paragraphs.Add(new Paragraph());

    IEffect effect1 = slide.Timeline.MainSequence.AddEffect(
        para1, EffectType.Appear, EffectSubtype.None, EffectTriggerType.AfterPrevious);

    IEffect effect2 = slide.Timeline.MainSequence.AddEffect(
        para2, EffectType.Appear, EffectSubtype.None, EffectTriggerType.AfterPrevious);

    IEffect effect3 = slide.Timeline.MainSequence.AddEffect(
        para3, EffectType.Appear, EffectSubtype.None, EffectTriggerType.AfterPrevious);

    IEffect effect4 = slide.Timeline.MainSequence.AddEffect(
        para3, EffectType.Appear, EffectSubtype.None, EffectTriggerType.AfterPrevious);

    effect1.Timing.TriggerDelayTime = 1f;
    effect2.Timing.TriggerDelayTime = 1f;
    effect3.Timing.TriggerDelayTime = 1f;
    effect4.Timing.TriggerDelayTime = 1f;

    const int Fps = 33;
    List<string> frames = new List<string>();

    using (var animationsGenerator = new PresentationAnimationsGenerator(presentation))
    using (var player = new PresentationPlayer(animationsGenerator, Fps))
    {
        player.FrameTick += (sender, args) =>
        {
            string frame = $"frame_{(sender.FrameIndex):D4}.png";
            args.GetFrame().Save(frame);
            frames.Add(frame);
        };

        animationsGenerator.Run(presentation.Slides);
    }

    // Настройте папку с бинарниками ffmpeg. См. эту страницу: https://github.com/rosenbjerg/FFMpegCore#installation
    GlobalFFOptions.Configure(new FFOptions { BinaryFolder = @"c:\tools\ffmpeg\bin" });

    // Преобразовать кадры в видео webm.
    FFMpeg.JoinImageSequence("text_animation.webm", Fps, frames.Select(frame => ImageInfo.FromPath(frame)).ToArray());
}

Классы конвертации видео

Для выполнения задач конвертации PowerPoint в видео Aspose.Slides для .NET предоставляет классы PresentationAnimationsGenerator и PresentationPlayer.

PresentationAnimationsGenerator позволяет задать размер кадра для будущего видео и значение FPS (кадров в секунду) через конструктор. Если передать экземпляр презентации, будет использовано её Presentation.SlideSize, а генерируемые анимации использует PresentationPlayer.

При генерации анимаций для каждой последующей анимации возбуждается событие NewAnimation, которое содержит параметр типа IPresentationAnimationPlayer. Этот класс представляет проигрыватель отдельной анимации.

Для работы с IPresentationAnimationPlayer используется свойство Duration (полная длительность анимации) и метод SetTimePosition. Каждая позиция анимации задаётся в диапазоне 0‑duration, после чего метод GetFrame возвращает объект Bitmap, представляющий состояние анимации в указанный момент времени.

using (Presentation presentation = new Presentation())
{
    ISlide slide = presentation.Slides[0];

    // Добавьте форму улыбки и анимируйте её.
    IAutoShape smile = slide.Shapes.AddAutoShape(ShapeType.SmileyFace, 110, 20, 500, 500);

    IEffect effectIn = slide.Timeline.MainSequence.AddEffect(
        smile, EffectType.Fly, EffectSubtype.TopLeft, EffectTriggerType.AfterPrevious);

    IEffect effectOut = slide.Timeline.MainSequence.AddEffect(
        smile, EffectType.Fly, EffectSubtype.BottomRight, EffectTriggerType.AfterPrevious);

    effectIn.Timing.Duration = 2f;
    effectOut.PresetClassType = EffectPresetClassType.Exit;

    using (var animationsGenerator = new PresentationAnimationsGenerator(presentation))
    {
        animationsGenerator.NewAnimation += animationPlayer =>
        {
            Console.WriteLine($"Total animation duration: {animationPlayer.Duration}");

            animationPlayer.SetTimePosition(0);          // Начальное состояние анимации.
            Bitmap bitmap = animationPlayer.GetFrame();  // Битмап начального состояния анимации.

            animationPlayer.SetTimePosition(animationPlayer.Duration);  // Конечное состояние анимации.
            Bitmap lastBitmap = animationPlayer.GetFrame();             // Последний кадр анимации.
            lastBitmap.Save("last.png");
        };
    }
}

Чтобы все анимации презентации воспроизводились одновременно, используется класс PresentationPlayer. Он принимает экземпляр PresentationAnimationsGenerator и значение FPS для эффектов в конструкторе, а затем вызывает событие FrameTick для всех анимаций, чтобы воспроизвести их:

using (Presentation presentation = new Presentation("animated.pptx"))
{
    using (var animationsGenerator = new PresentationAnimationsGenerator(presentation))
    using (var player = new PresentationPlayer(animationsGenerator, 33))
    {
        player.FrameTick += (sender, args) =>
        {
            args.GetFrame().Save($"frame_{sender.FrameIndex}.png");
        };
        animationsGenerator.Run(presentation.Slides);
    }
}

Затем сгенерированные кадры могут быть собраны в видео. Смотрите раздел Конвертация презентации PowerPoint в видео.

Поддерживаемые анимации и эффекты

При преобразовании презентации PowerPoint в видео с помощью Aspose.Slides для .NET важно знать, какие анимации и эффекты сохраняются в итоговом файле. Aspose.Slides поддерживает широкий набор стандартных эффектов появления, исчезновения и акцентирования, таких как fade, fly in, zoom и spin. Однако некоторые продвинутые или пользовательские анимации могут не полностью сохраниться или выглядеть иначе в конечном видео. Ниже перечислены поддерживаемые анимации и эффекты.

Entrance:

Тип анимации Aspose.Slides PowerPoint
Appear not supported supported
Fade supported supported
Fly In supported supported
Float In supported supported
Split supported supported
Wipe supported supported
Shape supported supported
Wheel supported supported
Random Bars supported supported
Grow & Turn not supported supported
Zoom supported supported
Swivel supported supported
Bounce supported supported

Emphasis:

Тип анимации Aspose.Slides PowerPoint
Pulse not supported supported
Color Pulse not supported supported
Teeter supported supported
Spin supported supported
Grow/Shrink not supported supported
Desaturate not supported supported
Darken not supported supported
Lighten not supported supported
Transparency not supported supported
Object Color not supported supported
Complementary Color not supported supported
Line Color not supported supported
Fill Color not supported supported

Exit:

Тип анимации Aspose.Slides PowerPoint
Disappear not supported supported
Fade supported supported
Fly Out supported supported
Float Out supported supported
Split supported supported
Wipe supported supported
Shape supported supported
Random Bars supported supported
Shrink & Turn not supported supported
Zoom supported supported
Swivel supported supported
Bounce supported supported

Motion Paths:

Тип анимации Aspose.Slides PowerPoint
Lines supported supported
Arcs supported supported
Turns supported supported
Shapes supported supported
Loops supported supported
Custom Path supported supported

Поддерживаемые эффекты переходов слайдов

Эффекты переходов между слайдами важны для создания плавных и визуально привлекательных смен в видео. Aspose.Slides для .NET поддерживает множество часто используемых переходов, помогая сохранить стиль и динамику оригинальной презентации. Ниже перечислены поддерживаемые эффекты переходов.

Тонкие:

Тип анимации Aspose.Slides PowerPoint
Morph not supported supported
Fade supported supported
Push supported supported
Pull supported supported
Wipe supported supported
Split supported supported
Reveal not supported supported
Random Bars supported supported
Shape not supported supported
Uncover not supported supported
Cover supported supported
Flash supported supported
Strips supported supported

Захватывающие:

Тип анимации Aspose.Slides PowerPoint
Fall Over not supported supported
Drape not supported supported
Curtains not supported supported
Wind not supported supported
Prestige not supported supported
Fracture not supported supported
Crush not supported supported
Peel Off not supported supported
Page Curl not supported supported
Airplane not supported supported
Origami not supported supported
Dissolve supported supported
Checkerboard not supported supported
Blinds not supported supported
Clock supported supported
Ripple not supported supported
Honeycomb not supported supported
Glitter not supported supported
Vortex not supported supported
Shred not supported supported
Switch not supported supported
Flip not supported supported
Gallery not supported supported
Cube not supported supported
Doors not supported supported
Box not supported supported
Comb not supported supported
Zoom supported supported
Random not supported supported

Динамический контент:

Тип анимации Aspose.Slides PowerPoint
Pan not supported supported
Ferris Wheel supported supported
Conveyor not supported supported
Rotate not supported supported
Orbit not supported supported
Fly Through supported supported

FAQ

Можно ли конвертировать презентации, защищённые паролем?

Да, Aspose.Slides для .NET позволяет работать с презентациями, защищёнными паролем. При обработке таких файлов необходимо предоставить корректный пароль, чтобы библиотека могла получить доступ к содержимому презентации.

Поддерживает ли Aspose.Slides для .NET использование в облачных решениях?

Да, Aspose.Slides для .NET может быть интегрирован в облачные приложения и сервисы. Библиотека разработана для работы в серверных средах, обеспечивая высокую производительность и масштабируемость при пакетной обработке файлов.

Существуют ли ограничения по размеру презентаций при конвертации?

Aspose.Slides для .NET способен обрабатывать презентации практически любого размера. Однако при работе с очень большими файлами может потребоваться дополнительное системное ресурсы, и иногда рекомендуется оптимизировать презентацию для повышения производительности.