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

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

  • Увеличение доступности: Все устройства (независимо от платформы) по умолчанию оснащены видеоплеерами по сравнению с приложениями для открытия презентаций, поэтому пользователям проще открывать или воспроизводить видео.
  • Большее охваты: С помощью видео вы можете достичь широкой аудитории и донести до них информацию, которая в противном случае может показаться утомительной в презентации. Большинство опросов и статистики показывают, что люди смотрят и потребляют видео больше, чем другие формы контента, и они в целом предпочитают такой контент.

Конвертация PowerPoint в Видео в Aspose.Slides

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

  • Используйте Aspose.Slides для генерации набора кадров (из слайдов презентации), которые соответствуют определенному FPS (кадров в секунду)
  • Используйте стороннюю утилиту, такую как FFMpegCore (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",} );
  4. Запустите код конвертации PowerPoint в видео.

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

using System.Collections.Generic;
using Aspose.Slides;
using FFMpegCore; // Будем использовать бинарные файлы FFmpeg, которые мы извлекли в "c:\tools\ffmpeg" ранее
using Aspose.Slides.Animation;
using (Presentation presentation = new Presentation())

{
    // Добавляет форму смайлика и затем анимирует ее
    IAutoShape smile = presentation.Slides[0].Shapes.AddAutoShape(ShapeType.SmileyFace, 110, 20, 500, 500);
    IEffect effectIn = presentation.Slides[0].Timeline.MainSequence.AddEffect(smile, EffectType.Fly, EffectSubtype.TopLeft, EffectTriggerType.AfterPrevious);
    IEffect effectOut = presentation.Slides[0].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());

}

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

Вы можете применять анимации к объектам на слайдах и использовать переходы между слайдами.

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

// Добавляет форму смайлика и анимирует ее

// ...

// Добавляет новый слайд и анимированный переход

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())
{
    // Добавляет текст и анимации
    IAutoShape autoShape = presentation.Slides[0].Shapes.AddAutoShape(ShapeType.Rectangle, 210, 120, 300, 300);
    Paragraph para1 = new Paragraph();
    para1.Portions.Add(new Portion("Aspose Slides для .NET"));
    Paragraph para2 = new Paragraph();
    para2.Portions.Add(new Portion("конвертировать презентацию PowerPoint с текстом в видео"));

    Paragraph para3 = new Paragraph();
    para3.Portions.Add(new Portion("параграф за параграфом"));
    autoShape.TextFrame.Paragraphs.Add(para1);
    autoShape.TextFrame.Paragraphs.Add(para2);
    autoShape.TextFrame.Paragraphs.Add(para3);
    autoShape.TextFrame.Paragraphs.Add(new Paragraph());

    IEffect effect = presentation.Slides[0].Timeline.MainSequence.AddEffect(para1, EffectType.Appear, EffectSubtype.None, EffectTriggerType.AfterPrevious);

    IEffect effect2 = presentation.Slides[0].Timeline.MainSequence.AddEffect(para2, EffectType.Appear, EffectSubtype.None, EffectTriggerType.AfterPrevious);

    IEffect effect3 = presentation.Slides[0].Timeline.MainSequence.AddEffect(para3, EffectType.Appear, EffectSubtype.None, EffectTriggerType.AfterPrevious);

    IEffect effect4 = presentation.Slides[0].Timeline.MainSequence.AddEffect(para3, EffectType.Appear, EffectSubtype.None, EffectTriggerType.AfterPrevious);

    effect.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 предоставляет классы PresentationAnimationsGenerator и PresentationPlayer.

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

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

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

using (Presentation presentation = new Presentation())
{
    // Добавляет форму смайлика и анимирует ее
    IAutoShape smile = presentation.Slides[0].Shapes.AddAutoShape(ShapeType.SmileyFace, 110, 20, 500, 500);
    IEffect effectIn = presentation.Slides[0].Timeline.MainSequence.AddEffect(smile, EffectType.Fly, EffectSubtype.TopLeft, EffectTriggerType.AfterPrevious);
    IEffect effectOut = presentation.Slides[0].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($"Общая длительность анимации: {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 в Видео.

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

Вход:

Тип анимации Aspose.Slides PowerPoint
Появление не поддерживается поддерживается
Потускнение поддерживается поддерживается
Вход с летящим эффектом поддерживается поддерживается
Вход с плавным эффектом поддерживается поддерживается
Разделение поддерживается поддерживается
Смыв поддерживается поддерживается
Форма поддерживается поддерживается
Колесо поддерживается поддерживается
Случайные полосы поддерживается поддерживается
Рост и поворот не поддерживается поддерживается
Масштабирование поддерживается поддерживается
Качание поддерживается поддерживается
Отскок поддерживается поддерживается

Акцент:

Тип анимации Aspose.Slides PowerPoint
Пульсация не поддерживается поддерживается
Цветовая пульсация не поддерживается поддерживается
Качание поддерживается поддерживается
Вращение поддерживается поддерживается
Увеличение/уменьшение не поддерживается поддерживается
Обесцвечивание не поддерживается поддерживается
Потемнение не поддерживается поддерживается
Осветление не поддерживается поддерживается
Прозрачность не поддерживается поддерживается
Цвет объекта не поддерживается поддерживается
Дополнительный цвет не поддерживается поддерживается
Цвет линии не поддерживается поддерживается
Цвет заливки не поддерживается поддерживается

Выход:

Тип анимации Aspose.Slides PowerPoint
Исчезновение не поддерживается поддерживается
Потускнение поддерживается поддерживается
Выход с летящим эффектом поддерживается поддерживается
Выход с плавным эффектом поддерживается поддерживается
Разделение поддерживается поддерживается
Смыв поддерживается поддерживается
Форма поддерживается поддерживается
Случайные полосы поддерживается поддерживается
Уменьшение и поворот не поддерживается поддерживается
Масштабирование поддерживается поддерживается
Качание поддерживается поддерживается
Отскок поддерживается поддерживается

Движения по траектории:

Тип анимации Aspose.Slides PowerPoint
Линии поддерживается поддерживается
Арки поддерживается поддерживается
Повороты поддерживается поддерживается
Формы поддерживается поддерживается
Циклы поддерживается поддерживается
Пользовательский путь поддерживается поддерживается

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

Нежные:

Тип анимации Aspose.Slides PowerPoint
Морфинг не поддерживается поддерживается
Потускнение поддерживается поддерживается
Толчок поддерживается поддерживается
Привлечение поддерживается поддерживается
Смыв поддерживается поддерживается
Разделение поддерживается поддерживается
Открытие не поддерживается поддерживается
Случайные полосы поддерживается поддерживается
Форма не поддерживается поддерживается
Скрытие не поддерживается поддерживается
Покрытие поддерживается поддерживается
Мигает поддерживается поддерживается
Полосы поддерживается поддерживается

Возбуждающие:

Тип анимации Aspose.Slides PowerPoint
Упадок не поддерживается поддерживается
Драпировка не поддерживается поддерживается
Занавес не поддерживается поддерживается
Ветер не поддерживается поддерживается
Престиж не поддерживается поддерживается
Фрактура не поддерживается поддерживается
Сжатие не поддерживается поддерживается
Снятие не поддерживается поддерживается
Сгибание страниц не поддерживается поддерживается
Самолет не поддерживается поддерживается
Оригами не поддерживается поддерживается
Растворение поддерживается поддерживается
Шахматная доска не поддерживается поддерживается
Жалюзи не поддерживается поддерживается
Часы поддерживается поддерживается
Волна не поддерживается поддерживается
Соты не поддерживается поддерживается
Искры не поддерживается поддерживается
Воронка не поддерживается поддерживается
Рубка не поддерживается поддерживается
Переключить не поддерживается поддерживается
Перевернуть не поддерживается поддерживается
Галерея не поддерживается поддерживается
Куб не поддерживается поддерживается
Дверцы не поддерживается поддерживается
Коробка не поддерживается поддерживается
Гребень не поддерживается поддерживается
Масштабирование поддерживается поддерживается
Случайный не поддерживается поддерживается

Динамическое содержимое:

Тип анимации Aspose.Slides PowerPoint
Панорамирование не поддерживается поддерживается
Колесо обозрения поддерживается поддерживается
Конвейер не поддерживается поддерживается
Вращение не поддерживается поддерживается
Орбита не поддерживается поддерживается
Полет сквозь поддерживается поддерживается