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

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

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

Конвертация PowerPoint в видео с помощью Aspose.Slides

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

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

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

  1. Скачайте ffmpeg здесь.
  2. Добавьте путь к ffmpeg.exe в переменную окружения PATH.
  3. Запустите код для конвертации PowerPoint в видео.

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

void OnFrameTick(System::SharedPtr<PresentationPlayer> sender, System::SharedPtr<FrameTickEventArgs> args)
{
    System::String fileName = System::String::Format(u"frame_{0}.png", sender->get_FrameIndex());
    args->GetFrame()->Save(fileName);
}

void Run()
{
    auto presentation = System::MakeObject<Presentation>();
    auto slide = presentation->get_Slide(0);

    // Добавляет фигуру смайлика и затем анимирует её
    System::SharedPtr<IAutoShape> smile = slide->get_Shapes()->AddAutoShape(ShapeType::SmileyFace, 110.0f, 20.0f, 500.0f, 500.0f);
    auto sequence = slide->get_Timeline()->get_MainSequence();
    System::SharedPtr<IEffect> effectIn = sequence->AddEffect(smile, EffectType::Fly, EffectSubtype::TopLeft, EffectTriggerType::AfterPrevious);
    System::SharedPtr<IEffect> effectOut = sequence->AddEffect(smile, EffectType::Fly, EffectSubtype::BottomRight, EffectTriggerType::AfterPrevious);
    effectIn->get_Timing()->set_Duration(2.0f);
    effectOut->set_PresetClassType(EffectPresetClassType::Exit);

    const int32_t fps = 33;

    auto animationsGenerator = System::MakeObject<PresentationAnimationsGenerator>(presentation);
    auto player = System::MakeObject<PresentationPlayer>(animationsGenerator, fps);
    player->FrameTick += OnFrameTick;
    animationsGenerator->Run(presentation->get_Slides());

    const System::String ffmpegParameters = System::String::Format(
        u"-loglevel {0} -framerate {1} -i {2} -y -c:v {3} -pix_fmt {4} {5}",
        u"warning", m_fps, "frame_%d.png", u"libx264", u"yuv420p", "video.mp4");
    auto ffmpegProcess = System::Diagnostics::Process::Start(u"ffmpeg", ffmpegParameters);
    ffmpegProcess->WaitForExit();
}

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

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

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

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

// ...

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

System::SharedPtr<ISlide> newSlide = presentation->get_Slides()->AddEmptySlide(presentation->get_Slide(0)->get_LayoutSlide());

System::SharedPtr<IBackground> slideBackground = newSlide->get_Background();

slideBackground->set_Type(BackgroundType::OwnBackground);

auto fillFormat = slideBackground->get_FillFormat();

fillFormat->set_FillType(FillType::Solid);

fillFormat->get_SolidFillColor()->set_Color(System::Drawing::Color::get_Indigo());

newSlide->get_SlideShowTransition()->set_Type(TransitionType::Push);

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

void OnFrameTick(System::SharedPtr<PresentationPlayer> sender, System::SharedPtr<FrameTickEventArgs> args)
{
    System::String fileName = System::String::Format(u"frame_{0}.png", sender->get_FrameIndex());
    args->GetFrame()->Save(fileName);
}

void Run()
{
    auto presentation = System::MakeObject<Presentation>();
    auto slide = presentation->get_Slide(0);

    // Добавляет текст и анимации
    System::SharedPtr<IAutoShape> autoShape = slide->get_Shapes()->AddAutoShape(ShapeType::Rectangle, 210.0f, 120.0f, 300.0f, 300.0f);
    System::SharedPtr<Paragraph> para1 = System::MakeObject<Paragraph>();
    para1->get_Portions()->Add(System::MakeObject<Portion>(u"Aspose Slides для C++"));
    System::SharedPtr<Paragraph> para2 = System::MakeObject<Paragraph>();
    para2->get_Portions()->Add(System::MakeObject<Portion>(u"конвертация презентации PowerPoint с текстом в видео"));

    System::SharedPtr<Paragraph> para3 = System::MakeObject<Paragraph>();
    para3->get_Portions()->Add(System::MakeObject<Portion>(u"абзац за абзацем"));
    auto paragraphs = autoShape->get_TextFrame()->get_Paragraphs();
    paragraphs->Add(para1);
    paragraphs->Add(para2);
    paragraphs->Add(para3);
    paragraphs->Add(System::MakeObject<Paragraph>());

    auto sequence = slide->get_Timeline()->get_MainSequence();
    System::SharedPtr<IEffect> effect = sequence->AddEffect(para1, EffectType::Appear, EffectSubtype::None, EffectTriggerType::AfterPrevious);

    System::SharedPtr<IEffect> effect2 = sequence->AddEffect(para2, EffectType::Appear, EffectSubtype::None, EffectTriggerType::AfterPrevious);

    System::SharedPtr<IEffect> effect3 = sequence->AddEffect(para3, EffectType::Appear, EffectSubtype::None, EffectTriggerType::AfterPrevious);

    System::SharedPtr<IEffect> effect4 = sequence->AddEffect(para3, EffectType::Appear, EffectSubtype::None, EffectTriggerType::AfterPrevious);

    effect->get_Timing()->set_TriggerDelayTime(1.0f);
    effect2->get_Timing()->set_TriggerDelayTime(1.0f);
    effect3->get_Timing()->set_TriggerDelayTime(1.0f);
    effect4->get_Timing()->set_TriggerDelayTime(1.0f);

    // Конвертирует кадры в видео
    const int32_t fps = 33;

    auto animationsGenerator = System::MakeObject<PresentationAnimationsGenerator>(presentation);
    auto player = System::MakeObject<PresentationPlayer>(animationsGenerator, fps);
    
    player->FrameTick += OnFrameTick;
    animationsGenerator->Run(presentation->get_Slides());

    const System::String ffmpegParameters = System::String::Format(
        u"-loglevel {0} -framerate {1} -i {2} -y -c:v {3} -pix_fmt {4} {5}",
        u"warning", m_fps, "frame_%d.png", u"libx264", u"yuv420p", "video.mp4");
    auto ffmpegProcess = System::Diagnostics::Process::Start(u"ffmpeg", ffmpegParameters);
    ffmpegProcess->WaitForExit();
}

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

Чтобы позволить вам выполнять задачи конвертации PowerPoint в видео, Aspose.Slides предоставляет классы PresentationAnimationsGenerator и PresentationPlayer.

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

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

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

void OnNewAnimation(System::SharedPtr<IPresentationAnimationPlayer> animationPlayer)
{
    System::Console::WriteLine(u"Общее время анимации: {0}", animationPlayer->get_Duration());

    animationPlayer->SetTimePosition(0);
    // начальное состояние анимации
    System::SharedPtr<System::Drawing::Bitmap> bitmap = animationPlayer->GetFrame();
    // начальный кадр состояния анимации

    animationPlayer->SetTimePosition(animationPlayer->get_Duration());
    // конечное состояние анимации
    System::SharedPtr<System::Drawing::Bitmap> lastBitmap = animationPlayer->GetFrame();
    // последний кадр анимации
    lastBitmap->Save(u"last.png");
}

void Run()
{
    auto presentation = System::MakeObject<Presentation>();
    auto slide = presentation->get_Slide(0);

    // Добавляет фигуру смайлика и анимирует её
    System::SharedPtr<IAutoShape> smile = slide->get_Shapes()->AddAutoShape(ShapeType::SmileyFace, 110.0f, 20.0f, 500.0f, 500.0f);
    auto sequence = slide->get_Timeline()->get_MainSequence();
    System::SharedPtr<IEffect> effectIn = sequence->AddEffect(smile, EffectType::Fly, EffectSubtype::TopLeft, EffectTriggerType::AfterPrevious);
    System::SharedPtr<IEffect> effectOut = sequence->AddEffect(smile, EffectType::Fly, EffectSubtype::BottomRight, EffectTriggerType::AfterPrevious);
    effectIn->get_Timing()->set_Duration(2.0f);
    effectOut->set_PresetClassType(EffectPresetClassType::Exit);

    auto animationsGenerator = System::MakeObject<PresentationAnimationsGenerator>(presentation);
    animationsGenerator->NewAnimation += OnNewAnimation;
}

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

void OnFrameTick(System::SharedPtr<PresentationPlayer> sender, System::SharedPtr<FrameTickEventArgs> args)
{
    System::String fileName = System::String::Format(u"frame_{0}.png", sender->get_FrameIndex());
    args->GetFrame()->Save(fileName);
}

void Run()
{
    auto presentation = System::MakeObject<Presentation>(u"animated.pptx");
    auto animationsGenerator = System::MakeObject<PresentationAnimationsGenerator>(presentation);
    auto player = System::MakeObject<PresentationPlayer>(animationsGenerator, 33);

    player->FrameTick += OnFrameTick;
    animationsGenerator->Run(presentation->get_Slides());
}

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

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

Вход:

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

Упрощение:

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

Выход:

Тип анимации Aspose.Slides PowerPoint
Исчезновение не поддерживается поддерживается
Затмение поддерживается поддерживается
Вылет поддерживается поддерживается
Выплывание поддерживается поддерживается
Разделение поддерживается поддерживается
Стирание поддерживается поддерживается
Фигура поддерживается поддерживается
Случайные полосы поддерживается поддерживается
Сжатие и поворот не поддерживается поддерживается
Масштабирование поддерживается поддерживается
Крутить поддерживается поддерживается
Деформация поддерживается поддерживается

Движения по пути:

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