Конвертировать презентации PowerPoint в видео с помощью JavaScript
Преобразуя вашу презентацию PowerPoint в видео, вы получаете
- Повышение доступности: Все устройства (независимо от платформы) по умолчанию оснащены видеоплеерами, в отличие от приложений для открытия презентаций, поэтому пользователям проще открывать или воспроизводить видео.
- Больший охват: С помощью видео вы можете достичь широкой аудитории и предоставить ей информацию, которая иначе могла бы показаться утомительной в презентации. Большинство опросов и статистических данных показывают, что люди чаще просматривают и потребляют видео, чем другие формы контента, и обычно предпочитают именно его.
Преобразование PowerPoint в видео в Aspose.Slides
Aspose.Slides поддерживает преобразование презентаций в видео.
- Используйте Aspose.Slides для создания набора кадров (из слайдов презентации), соответствующих определённому FPS (кадрам в секунду)
- Используйте стороннюю утилиту, например ffmpeg (for java), чтобы создать видео на основе кадров.
Преобразовать PowerPoint в видео
- Скачайте ffmpeg здесь.
- Запустите JavaScript‑код преобразования PowerPoint в видео.
Этот JavaScript‑код показывает, как преобразовать презентацию (содержащую схему и два анимационных эффекта) в видео:
var presentation = new aspose.slides.Presentation();
try {
// Добавляет форму улыбки и затем анимирует её
var smile = presentation.getSlides().get_Item(0).getShapes().addAutoShape(aspose.slides.ShapeType.SmileyFace, 110, 20, 500, 500);
var mainSequence = presentation.getSlides().get_Item(0).getTimeline().getMainSequence();
var effectIn = mainSequence.addEffect(smile, aspose.slides.EffectType.Fly, aspose.slides.EffectSubtype.TopLeft, aspose.slides.EffectTriggerType.AfterPrevious);
var effectOut = mainSequence.addEffect(smile, aspose.slides.EffectType.Fly, aspose.slides.EffectSubtype.BottomRight, aspose.slides.EffectTriggerType.AfterPrevious);
effectIn.getTiming().setDuration(2.0);
effectOut.setPresetClassType(aspose.slides.EffectPresetClassType.Exit);
final var fps = 33;
var frames = java.newInstanceSync("java.util.ArrayList");
var animationsGenerator = new aspose.slides.PresentationAnimationsGenerator(presentation);
try {
var player = new aspose.slides.PresentationPlayer(animationsGenerator, fps);
try {
player.setFrameTick((sender, arguments) -> {
try {
var frame = java.callStaticMethodSync("java.lang.String", "format", "frame_%04d.png", sender.getFrameIndex());
arguments.getFrame().save(frame, aspose.slides.ImageFormat.Png);
frames.add(frame);
} catch (e) {console.log(e);
throw java.newInstanceSync("java.lang.RuntimeException", e);
}
});
animationsGenerator.run(presentation.getSlides());
} finally {
if (player != null) {
player.dispose();
}
}
} finally {
if (animationsGenerator != null) {
animationsGenerator.dispose();
}
}
// Настройте папку с бинарными файлами ffmpeg. Смотрите эту страницу: https://github.com/rosenbjerg/FFMpegCore#installation
var ffmpeg = java.newInstanceSync("FFmpeg", "path/to/ffmpeg");
var ffprobe = java.newInstanceSync("FFprobe", "path/to/ffprobe");
var builder = java.newInstanceSync("FFmpegBuilder").addExtraArgs("-start_number", "1").setInput("frame_%04d.png").addOutput("output.avi").setVideoFrameRate(java.getStaticFieldValue("FFmpeg", "FPS_24")).setFormat("avi").done();
var executor = java.newInstanceSync("FFmpegExecutor", ffmpeg, ffprobe);
executor.createJob(builder).run();
} catch (e) {console.log(e);
console.log(e);
}
Видеоэффекты
Вы можете применять анимацию к объектам на слайдах и использовать переходы между слайдами.
Анимация и переходы делают презентацию более захватывающей и интересной — и то же самое происходит с видео. Добавим ещё один слайд и переход в код для предыдущей презентации:
// Добавляет форму улыбки и анимирует её
// ...
// Добавляет новый слайд и анимированный переход
var newSlide = presentation.getSlides().addEmptySlide(presentation.getSlides().get_Item(0).getLayoutSlide());
newSlide.getBackground().setType(aspose.slides.BackgroundType.OwnBackground);
newSlide.getBackground().getFillFormat().setFillType(java.newByte(aspose.slides.FillType.Solid));
newSlide.getBackground().getFillFormat().getSolidFillColor().setColor(java.getStaticFieldValue("java.awt.Color", "MAGENTA"));
newSlide.getSlideShowTransition().setType(aspose.slides.TransitionType.Push);
Aspose.Slides также поддерживает анимацию текста. Мы анимируем абзацы на объектах, которые будут появляться один за другим (с задержкой в одну секунду):
var presentation = new aspose.slides.Presentation();
try {
// Добавляет текст и анимацию
var autoShape = presentation.getSlides().get_Item(0).getShapes().addAutoShape(aspose.slides.ShapeType.Rectangle, 210, 120, 300, 300);
var para1 = new aspose.slides.Paragraph();
para1.getPortions().add(new aspose.slides.Portion("Aspose Slides for Node.js via Java"));
var para2 = new aspose.slides.Paragraph();
para2.getPortions().add(new aspose.slides.Portion("convert PowerPoint Presentation with text to video"));
var para3 = new aspose.slides.Paragraph();
para3.getPortions().add(new aspose.slides.Portion("paragraph by paragraph"));
var paragraphCollection = autoShape.getTextFrame().getParagraphs();
paragraphCollection.add(para1);
paragraphCollection.add(para2);
paragraphCollection.add(para3);
paragraphCollection.add(new aspose.slides.Paragraph());
var mainSequence = presentation.getSlides().get_Item(0).getTimeline().getMainSequence();
var effect1 = mainSequence.addEffect(para1, aspose.slides.EffectType.Appear, aspose.slides.EffectSubtype.None, aspose.slides.EffectTriggerType.AfterPrevious);
var effect2 = mainSequence.addEffect(para2, aspose.slides.EffectType.Appear, aspose.slides.EffectSubtype.None, aspose.slides.EffectTriggerType.AfterPrevious);
var effect3 = mainSequence.addEffect(para3, aspose.slides.EffectType.Appear, aspose.slides.EffectSubtype.None, aspose.slides.EffectTriggerType.AfterPrevious);
var effect4 = mainSequence.addEffect(para3, aspose.slides.EffectType.Appear, aspose.slides.EffectSubtype.None, aspose.slides.EffectTriggerType.AfterPrevious);
effect1.getTiming().setTriggerDelayTime(1.0);
effect2.getTiming().setTriggerDelayTime(1.0);
effect3.getTiming().setTriggerDelayTime(1.0);
effect4.getTiming().setTriggerDelayTime(1.0);
final var fps = 33;
var frames = java.newInstanceSync("java.util.ArrayList");
var animationsGenerator = new aspose.slides.PresentationAnimationsGenerator(presentation);
try {
var player = new aspose.slides.PresentationPlayer(animationsGenerator, fps);
try {
player.setFrameTick((sender, arguments) -> {
try {
var frame = java.callStaticMethodSync("java.lang.String", "format", "frame_%04d.png", sender.getFrameIndex());
arguments.getFrame().save(frame, aspose.slides.ImageFormat.Png);
frames.add(frame);
} catch (e) {console.log(e);
throw java.newInstanceSync("java.lang.RuntimeException", e);
}
});
animationsGenerator.run(presentation.getSlides());
} finally {
if (player != null) {
player.dispose();
}
}
} finally {
if (animationsGenerator != null) {
animationsGenerator.dispose();
}
}
// Настройте папку с бинарными файлами ffmpeg. Смотрите эту страницу: https://github.com/rosenbjerg/FFMpegCore#installation
var ffmpeg = java.newInstanceSync("FFmpeg", "path/to/ffmpeg");
var ffprobe = java.newInstanceSync("FFprobe", "path/to/ffprobe");
var builder = java.newInstanceSync("FFmpegBuilder").addExtraArgs("-start_number", "1").setInput("frame_%04d.png").addOutput("output.avi").setVideoFrameRate(java.getStaticFieldValue("FFmpeg", "FPS_24")).setFormat("avi").done();
var executor = java.newInstanceSync("FFmpegExecutor", ffmpeg, ffprobe);
executor.createJob(builder).run();
} catch (e) {console.log(e);
console.log(e);
}
Классы конвертации видео
Для выполнения задач по преобразованию PowerPoint в видео Aspose.Slides предоставляет классы PresentationAnimationsGenerator и PresentationPlayer.
PresentationAnimationsGenerator позволяет задать размер кадра для будущего видео через конструктор. Если передать экземпляр презентации, будет использован Presentation.getSlideSize, и он генерирует анимацию, которую использует PresentationPlayer.
При генерации анимаций создаётся событие NewAnimation для каждой последующей анимации, которое имеет параметр плеера анимации презентации. Этот класс представляет плеер отдельной анимации.
Для работы с плеером анимации презентации используют методы getDuration (полная длительность анимации) и setTimePosition. Каждая позиция анимации задаётся в диапазоне 0 до длительности, после чего метод getFrame возвращает BufferedImage, соответствующий состоянию анимации в данный момент:
var presentation = new aspose.slides.Presentation();
try {
// Добавляет форму улыбки и анимирует её
var smile = presentation.getSlides().get_Item(0).getShapes().addAutoShape(aspose.slides.ShapeType.SmileyFace, 110, 20, 500, 500);
var mainSequence = presentation.getSlides().get_Item(0).getTimeline().getMainSequence();
var effectIn = mainSequence.addEffect(smile, aspose.slides.EffectType.Fly, aspose.slides.EffectSubtype.TopLeft, aspose.slides.EffectTriggerType.AfterPrevious);
var effectOut = mainSequence.addEffect(smile, aspose.slides.EffectType.Fly, aspose.slides.EffectSubtype.BottomRight, aspose.slides.EffectTriggerType.AfterPrevious);
effectIn.getTiming().setDuration(2.0);
effectOut.setPresetClassType(aspose.slides.EffectPresetClassType.Exit);
var animationsGenerator = new aspose.slides.PresentationAnimationsGenerator(presentation);
try {
animationsGenerator.setNewAnimation(animationPlayer -> {
console.log(java.callStaticMethodSync("java.lang.String", "format", "Animation total duration: %f", animationPlayer.getDuration()));
animationPlayer.setTimePosition(0);// начальное состояние анимации
try {
// битмап начального состояния анимации
animationPlayer.getFrame().save("firstFrame.png", aspose.slides.ImageFormat.Png);
} catch (e) {console.log(e);
throw java.newInstanceSync("java.lang.RuntimeException", e);
}
animationPlayer.setTimePosition(animationPlayer.getDuration());// final state of the animation
try {
// последний кадр анимации
animationPlayer.getFrame().save("lastFrame.png", aspose.slides.ImageFormat.Png);
} catch (e) {console.log(e);
throw java.newInstanceSync("java.lang.RuntimeException", e);
}
});
} finally {
if (animationsGenerator != null) {
animationsGenerator.dispose();
}
}
} finally {
if (presentation != null) {
presentation.dispose();
}
}
Чтобы все анимации в презентации воспроизводились одновременно, используется класс PresentationPlayer. Этот класс принимает экземпляр PresentationAnimationsGenerator и FPS для эффектов в конструкторе, после чего вызывает событие FrameTick для всех анимаций, чтобы они проигрывались:
var presentation = new aspose.slides.Presentation("animated.pptx");
try {
var animationsGenerator = new aspose.slides.PresentationAnimationsGenerator(presentation);
try {
var player = new aspose.slides.PresentationPlayer(animationsGenerator, 33);
try {
player.setFrameTick((sender, arguments) -> {
try {
arguments.getFrame().save(("frame_" + sender.getFrameIndex()) + ".png", aspose.slides.ImageFormat.Png);
} catch (e) {console.log(e);
throw java.newInstanceSync("java.lang.RuntimeException", e);
}
});
animationsGenerator.run(presentation.getSlides());
} finally {
if (player != null) {
player.dispose();
}
}
} finally {
if (animationsGenerator != null) {
animationsGenerator.dispose();
}
}
} finally {
if (presentation != null) {
presentation.dispose();
}
}
Затем сгенерированные кадры могут быть собраны в виде видео. См. раздел Convert PowerPoint to Video.
Поддерживаемые анимации и эффекты
Вход:
| Тип анимации | Aspose.Slides | PowerPoint |
|---|---|---|
| Появление | ![]() |
![]() |
| Исчезание | ![]() |
![]() |
| Влёт | ![]() |
![]() |
| Плавный полёт | ![]() |
![]() |
| Разделение | ![]() |
![]() |
| Смахивание | ![]() |
![]() |
| Форма | ![]() |
![]() |
| Колесо | ![]() |
![]() |
| Случайные полосы | ![]() |
![]() |
| Рост и поворот | ![]() |
![]() |
| Увеличение | ![]() |
![]() |
| Вращение | ![]() |
![]() |
| Отскок | ![]() |
![]() |
Эффект:
| Тип анимации | Aspose.Slides | PowerPoint |
|---|---|---|
| Пульс | ![]() |
![]() |
| Цветовой пульс | ![]() |
![]() |
| Качание | ![]() |
![]() |
| Вращение | ![]() |
![]() |
| Увеличение/Уменьшение | ![]() |
![]() |
| Обесцвечивание | ![]() |
![]() |
| Затемнение | ![]() |
![]() |
| Осветление | ![]() |
![]() |
| Прозрачность | ![]() |
![]() |
| Цвет объекта | ![]() |
![]() |
| Дополнительный цвет | ![]() |
![]() |
| Цвет линии | ![]() |
![]() |
| Цвет заливки | ![]() |
![]() |
Выход:
| Тип анимации | Aspose.Slides | PowerPoint |
|---|---|---|
| Исчезновение | ![]() |
![]() |
| Исчезание | ![]() |
![]() |
| Вылет | ![]() |
![]() |
| Плавный вылет | ![]() |
![]() |
| Разделение | ![]() |
![]() |
| Смахивание | ![]() |
![]() |
| Форма | ![]() |
![]() |
| Случайные полосы | ![]() |
![]() |
| Уменьшение и поворот | ![]() |
![]() |
| Увеличение | ![]() |
![]() |
| Вращение | ![]() |
![]() |
| Отскок | ![]() |
![]() |
Траектории движения:
| Тип анимации | Aspose.Slides | PowerPoint |
|---|---|---|
| Линии | ![]() |
![]() |
| Дуги | ![]() |
![]() |
| Повороты | ![]() |
![]() |
| Фигуры | ![]() |
![]() |
| Петли | ![]() |
![]() |
| Пользовательский путь | ![]() |
![]() |
Часто задаваемые вопросы
Можно ли конвертировать презентации, защищённые паролем?
Да, Aspose.Slides поддерживает работу с презентациями, защищёнными паролем. При обработке таких файлов необходимо указать правильный пароль, чтобы библиотека могла получить доступ к содержимому презентации.
Поддерживает ли Aspose.Slides использование в облачных решениях?
Да, Aspose.Slides можно интегрировать в облачные приложения и сервисы. Библиотека разработана для работы в серверных средах, обеспечивая высокую производительность и масштабируемость при пакетной обработке файлов.
Есть ли ограничения по размеру презентаций при конвертации?
Aspose.Slides способен обрабатывать презентации практически любого размера. Однако при работе с очень большими файлами могут потребоваться дополнительные системные ресурсы, и иногда рекомендуется оптимизировать презентацию для повышения производительности.

