Управление видеокадрами в презентациях на Android
Введение
Хорошо размещённое видео в презентации может сделать ваше сообщение более убедительным и повысить уровень вовлечённости аудитории.
PowerPoint позволяет добавлять видео на слайд в презентации двумя способами:
- Добавить или встроить локальное видео (хранящееся на вашем компьютере)
- Добавить онлайн‑видео (из веб‑источника, например YouTube).
Для того чтобы добавить видео‑объекты в презентацию, Aspose.Slides предоставляет интерфейс IVideo, интерфейс IVideoFrame и другие соответствующие типы.
Создание встроенного кадра видео
Если файл видео, который вы хотите добавить на слайд, хранится локально, вы можете создать кадр видео для встраивания в презентацию.
- Создайте экземпляр класса Presentation.
- Получите ссылку на слайд через его индекс.
- Добавьте объект IVideo и передайте путь к файлу видео, чтобы встроить его в презентацию.
- Добавьте объект IVideoFrame для создания кадра видео.
- Сохраните изменённую презентацию.
Этот Java‑код показывает, как добавить локальное видео в презентацию:
// Создаёт экземпляр класса Presentation
Presentation pres = new Presentation("pres.pptx");
try {
// Загружает видео
FileInputStream fileStream = new FileInputStream("Wildlife.mp4");
IVideo video = pres.getVideos().addVideo(fileStream, LoadingStreamBehavior.KeepLocked);
// Получает первый слайд и добавляет видеокадр
pres.getSlides().get_Item(0).getShapes().addVideoFrame(10, 10, 150, 250, video);
// Сохраняет презентацию на диск
pres.save("pres-with-video.pptx", SaveFormat.Pptx);
} catch (IOException e) {
} finally {
if (pres != null) pres.dispose();
}
В качестве альтернативы можно добавить видео, передав путь к файлу напрямую в метод addVideoFrame(float x,float y,float width,float height,IVideo video):
Presentation pres = new Presentation();
try {
ISlide sld = pres.getSlides().get_Item(0);
IVideoFrame vf = sld.getShapes().addVideoFrame(50, 150, 300, 150, "video1.avi");
} finally {
if (pres != null) pres.dispose();
}
Создание кадра видео с видео из веб‑источника
Новые версии Microsoft PowerPoint поддерживают онлайн‑видео в презентациях. Если нужное вам видео доступно в интернете (например, на YouTube), вы можете добавить его в презентацию по ссылке.
- Создайте экземпляр класса Presentation.
- Получите ссылку на слайд через его индекс.
- Добавьте объект IVideo и передайте ссылку на видео.
- Установите миниатюру для кадра видео.
- Сохраните презентацию.
Этот Java‑код показывает, как добавить видео из интернета на слайд в презентации PowerPoint:
// Создаёт объект Presentation, представляющий файл презентации
Presentation pres = new Presentation();
try {
addVideoFromYouTube(pres, "Tj75Arhq5ho");
pres.save("out.pptx", SaveFormat.Pptx);
} finally {
if (pres != null) pres.dispose();
}
private static void addVideoFromYouTube(Presentation pres, String videoID)
{
// Добавляет видеокадр
IVideoFrame videoFrame = pres.getSlides().get_Item(0).getShapes().addVideoFrame(
10, 10, 427, 240, "https://www.youtube.com/embed/" + videoID);
videoFrame.setPlayMode(VideoPlayModePreset.Auto);
// Загружает миниатюру
String thumbnailUri = "http://img.youtube.com/vi/" + videoID + "/hqdefault.jpg";
URL url;
try {
url = new URL(thumbnailUri);
videoFrame.getPictureFormat().getPicture().setImage(pres.getImages().addImage(url.openStream()));
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
Обрезка кадра видео
Aspose.Slides позволяет управлять тем, какая часть видео будет воспроизводиться, задавая значения trim‑from‑start и trim‑from‑end через методы IVideoFrame.setTrimFromStart и IVideoFrame.setTrimFromEnd. Оба значения указываются в миллисекундах и определяют, сколько времени пропускается с начала и с конца видео соответственно. Эти параметры меняют настройку воспроизведения видео в презентации; они не обрезают и не изменяют бинарные данные встроенного видео.
Установка параметров обрезки
Для создания кадра видео и задания ему параметров обрезки:
- Создайте экземпляр класса Presentation.
- Добавьте объект IVideo в презентацию.
- Добавьте объект IVideoFrame на слайд.
- Задайте значения trim‑from‑start и trim‑from‑end через методы IVideoFrame.setTrimFromStart и IVideoFrame.setTrimFromEnd.
- Сохраните изменённую презентацию.
Следующий пример кода пропускает первые 2,5 секунды и последнюю секунду встроенного видео при воспроизведении:
Presentation presentation = new Presentation();
try {
FileInputStream videoStream = new FileInputStream("video.mp4");
try {
IVideo video = presentation.getVideos().addVideo(
videoStream, LoadingStreamBehavior.ReadStreamAndRelease);
ISlide slide = presentation.getSlides().get_Item(0);
IVideoFrame videoFrame = slide.getShapes().addVideoFrame(50, 50, 640, 360, video);
videoFrame.setTrimFromStart(2500f);
videoFrame.setTrimFromEnd(1000f);
presentation.save("video_with_trim.pptx", SaveFormat.Pptx);
} finally {
videoStream.close();
}
} finally {
presentation.dispose();
}
Чтение параметров обрезки
Чтобы получить текущие параметры обрезки, загрузите презентацию, найдите объект IVideoFrame среди фигур на первом слайде и прочитайте значения через методы IVideoFrame.getTrimFromStart и IVideoFrame.getTrimFromEnd.
Следующий пример кода находит первый кадр видео на первом слайде и выводит его параметры обрезки в миллисекундах:
Presentation presentation = new Presentation("video_with_trim.pptx");
try {
ISlide slide = presentation.getSlides().get_Item(0);
for (IShape shape : slide.getShapes()) {
if (shape instanceof IVideoFrame) {
IVideoFrame videoFrame = (IVideoFrame) shape;
float trimFromStart = videoFrame.getTrimFromStart();
float trimFromEnd = videoFrame.getTrimFromEnd();
System.out.println("Trim from start: " + trimFromStart + " ms");
System.out.println("Trim from end: " + trimFromEnd + " ms");
break;
}
}
} finally {
presentation.dispose();
}
Управление субтитрами видео
Aspose.Slides позволяет управлять закрытыми субтитрами для видеокадров в презентациях PowerPoint. Субтитры хранятся в формате WebVTT и доступны через метод IVideoFrame.getCaptionTracks.
Добавление субтитров к кадру видео
Чтобы добавить субтитры к видеокадру:
- Создайте экземпляр класса Presentation.
- Добавьте видео в презентацию.
- Добавьте объект IVideoFrame на слайд.
- Используйте объект ICaptionsCollection, возвращаемый методом getCaptionTracks, чтобы добавить дорожку субтитров WebVTT.
- Сохраните изменённую презентацию.
Следующий код показывает, как добавить субтитры к видеокадру:
Presentation presentation = new Presentation();
try {
byte[] videoData = // "video.mp4";
IVideo video = presentation.getVideos().addVideo(videoData);
ISlide slide = presentation.getSlides().get_Item(0);
IVideoFrame videoFrame = slide.getShapes().addVideoFrame(0, 0, 100, 100, video);
// Добавляет новую дорожку субтитров из файла WebVTT.
videoFrame.getCaptionTracks().add("English", "track.vtt");
presentation.save("video_with_captions.pptx", SaveFormat.Pptx);
} finally {
presentation.dispose();
}
Интерфейс ICaptionsCollection также предоставляет перегрузку, позволяющую добавить субтитры из потока.
Извлечение субтитров из кадра видео
Чтобы извлечь субтитры из видеокадра:
- Загрузите презентацию, содержащую видео.
- Найдите целевой объект IVideoFrame.
- Пройдитесь по дорожкам субтитров, возвращаемым методом getCaptionTracks.
- Сохраните каждую дорожку в файл с расширением
.vtt.
Следующий код показывает, как извлечь субтитры из видеокадра:
Presentation presentation = new Presentation("video_with_captions.pptx");
try {
ISlide slide = presentation.getSlides().get_Item(0);
for (IShape shape : slide.getShapes()) {
if (shape instanceof IVideoFrame) {
IVideoFrame videoFrame = (IVideoFrame) shape;
for (ICaptions captionTrack : videoFrame.getCaptionTracks()) {
// Сохраняет дорожку субтитров в файл WebVTT.
FileOutputStream outputStream = new FileOutputStream(captionTrack.getCaptionId() + ".vtt");
outputStream.write(captionTrack.getBinaryData());
outputStream.close();
}
}
}
} finally {
presentation.dispose();
}
Каждый объект ICaptions раскрывает идентификатор субтитров, метку, бинарные данные и текст субтитров в виде строки UTF‑8.
Удаление субтитров из кадра видео
Чтобы удалить субтитры из видеокадра:
- Загрузите презентацию, содержащую видео.
- Получите целевой объект IVideoFrame.
- Удалите дорожки субтитров из коллекции, возвращаемой методом getCaptionTracks.
- Сохраните изменённую презентацию.
Следующий код показывает, как удалить все субтитры из видеокадра:
Presentation presentation = new Presentation("video_with_captions.pptx");
try {
ISlide slide = presentation.getSlides().get_Item(0);
IVideoFrame videoFrame = (IVideoFrame) slide.getShapes().get_Item(0);
// Удаляет все субтитры из видеокадра.
videoFrame.getCaptionTracks().clear();
presentation.save("video_without_captions.pptx", SaveFormat.Pptx);
} finally {
presentation.dispose();
}
Если нужно удалить только одну дорожку субтитров, используйте методы remove или removeAt вместо clear.
Извлечение видео со слайда
Кроме добавления видео на слайды, Aspose.Slides позволяет извлекать видео, встроенное в презентации.
- Создайте экземпляр класса Presentation для загрузки презентации, содержащей видео.
- Пройдитесь по всем объектам ISlide.
- Пройдитесь по всем объектам IShape в поиске VideoFrame.
- Сохраните видео на диск.
Этот Java‑код показывает, как извлечь видео со слайда презентации:
// Создаёт объект Presentation, представляющий файл презентации
Presentation pres = new Presentation("VideoSample.pptx");
try {
for (ISlide slide : pres.getSlides())
{
for (IShape shape : slide.getShapes())
{
if (shape instanceof VideoFrame)
{
IVideoFrame vf = (IVideoFrame) shape;
String type = vf.getEmbeddedVideo().getContentType();
int ss = type.lastIndexOf('-');
byte[] buffer = vf.getEmbeddedVideo().getBinaryData();
// Получает расширение файла
int charIndex = type.indexOf("/");
type = type.substring(charIndex + 1);
FileOutputStream fop = new FileOutputStream("testing2." + type);
fop.write(buffer);
fop.flush();
fop.close();
}
}
}
} catch (IOException e) {
} finally {
if (pres != null) pres.dispose();
}
FAQ
Какие параметры воспроизведения видео можно изменить для VideoFrame?
Можно управлять режимом воспроизведения (авто или по щелчку) и цикличностью. Эти параметры доступны через свойства объекта VideoFrame.
Влияет ли добавление видео на размер файла PPTX?
Да. При встраивании локального видео его бинарные данные включаются в документ, поэтому размер презентации растёт пропорционально размеру файла. При добавлении онлайн‑видео встраивается только ссылка и миниатюра, что приводит к меньшему увеличению размера.
Можно ли заменить видео в существующем VideoFrame, не меняя его позицию и размер?
Да. Можно заменить содержимое видео внутри кадра, сохранив геометрию формы; это распространённый сценарий обновления медиа в уже существующем макете.
Можно ли определить тип контента (MIME) встроенного видео?
Да. У встроенного видео есть тип контента, который можно прочитать и использовать, например, при сохранении на диск.