Добавление видео в презентации на Python
Введение
Хорошо размещённое видео в презентации может сделать ваше сообщение более убедительным и повысить уровень вовлечённости аудитории.
PowerPoint позволяет добавлять видео на слайд презентации двумя способами:
- Добавить или встроить локальное видео (хранящееся на вашем компьютере)
- Добавить онлайн‑видео (из веб‑источника, например YouTube).
Чтобы вы могли добавлять видео (объекты video) в презентацию, Aspose.Slides предоставляет классы Video , VideoFrame и другие соответствующие типы.
Создание встроенного видео‑кадра
Если видеофайл, который вы хотите добавить на слайд, хранится локально, вы можете создать видеокадр для встраивания видео в презентацию.
- Создайте экземпляр класса Presentation .
- Получите ссылку на слайд по его индексу.
- Добавьте объект Video и передайте путь к файлу видео для встраивания его в презентацию.
- Добавьте объект VideoFrame , чтобы создать кадр для видео.
- Сохраните изменённую презентацию.
Этот код на Python показывает, как добавить локальное видео в презентацию:
import aspose.slides as slides
with slides.Presentation(path + "pres.pptx") as pres:
with open("Wildlife.mp4", "br") as fileStream:
video = pres.videos.add_video(fileStream, slides.LoadingStreamBehavior.KEEP_LOCKED)
# Получает первый слайд и добавляет видеокадр
pres.slides[0].shapes.add_video_frame(10, 10, 150, 250, video)
# Сохраняет презентацию на диск
pres.save(path + "pres-with-video.pptx", slides.export.SaveFormat.PPTX)
В качестве альтернативы можно добавить видео, передав путь к файлу напрямую в метод add_video_frame(x, y, width, height, fname):
import aspose.slides as slides
with slides.Presentation() as pres:
sld = pres.slides[0]
vf = sld.shapes.add_video_frame(50, 150, 300, 150, "video1.avi")
Создание видеокадра с видео из веб‑источника
Новые версии Microsoft PowerPoint поддерживают онлайн‑видео в презентациях. Если нужное вам видео доступно в интернете (например, на YouTube), вы можете добавить его в презентацию по веб‑ссылке.
- Создайте экземпляр класса Presentation .
- Получите ссылку на слайд по его индексу.
- Добавьте объект Video и передайте ссылку на видео.
- Установите миниатюру для видеокадра.
- Сохраните презентацию.
Этот код на Python показывает, как добавить видео из интернета на слайд в презентации PowerPoint:
import aspose.slides as slides
from urllib.request import urlopen
def add_video_from_youyube(pres, videoId):
# Добавляет видеокадр
videoFrame = pres.slides[0].shapes.add_video_frame(10, 10, 427, 240, "https://www.youtube.com/embed/" + videoId)
videoFrame.play_mode = slides.VideoPlayModePreset.AUTO
# Загружает миниатюру
thumbnail_uri = "http://img.youtube.com/vi/" + videoId + "/hqdefault.jpg"
f = urlopen(thumbnail_uri)
videoFrame.picture_format.picture.image = pres.images.add_image(f.read())
with slides.Presentation() as pres:
add_video_from_youyube(pres, "s5JbfQZ5Cc0")
pres.save("AddVideoFrameFromWebSource_out.pptx", slides.export.SaveFormat.PPTX)
Обрезка видеокадра
Aspose.Slides позволяет контролировать, какая часть видео воспроизводится, задавая значения trim‑from‑start и trim‑from‑end через VideoFrame.trim_from_start и VideoFrame.trim_from_end. Оба значения указываются в миллисекундах и определяют, сколько времени пропускается с начала и конца видео соответственно. Эти настройки меняют параметры воспроизведения видео в презентации; они не обрезают и иным способом не изменяют бинарные данные встроенного видео.
Установка параметров обрезки
Чтобы создать видеокадр и задать ему параметры обрезки:
- Создайте экземпляр класса Presentation .
- Добавьте объект Video в презентацию.
- Добавьте объект VideoFrame на слайд.
- Установите значения trim‑from‑start и trim‑from‑end через VideoFrame.trim_from_start и VideoFrame.trim_from_end .
- Сохраните изменённую презентацию.
В следующем примере кода пропускаются первые 2,5 секунды и последняя секунда встроенного видео при воспроизведении:
import aspose.slides as slides
with slides.Presentation() as presentation:
with open("video.mp4", "rb") as video_stream:
video_data = video_stream.read()
video = presentation.videos.add_video(video_data)
slide = presentation.slides[0]
video_frame = slide.shapes.add_video_frame(50, 50, 640, 360, video)
video_frame.trim_from_start = 2500.0
video_frame.trim_from_end = 1000.0
presentation.save("video_with_trim.pptx", slides.export.SaveFormat.PPTX)
Чтение параметров обрезки
Чтобы просмотреть существующие параметры обрезки, загрузите презентацию, найдите объект VideoFrame среди фигур на первом слайде и прочитайте значения через VideoFrame.trim_from_start и VideoFrame.trim_from_end .
В следующем примере кода находится первый видеокадр на первом слайде и выводятся его параметры обрезки в миллисекундах:
import aspose.slides as slides
with slides.Presentation("video_with_trim.pptx") as presentation:
slide = presentation.slides[0]
for shape in slide.shapes:
if isinstance(shape, slides.VideoFrame):
video_frame = shape
trim_from_start = video_frame.trim_from_start
trim_from_end = video_frame.trim_from_end
print(f"Trim from start: {trim_from_start} ms")
print(f"Trim from end: {trim_from_end} ms")
break
Управление субтитрами видео
Aspose.Slides позволяет управлять закрывающими субтитрами для видеокадров в презентациях PowerPoint. Субтитры хранятся в формате WebVTT и доступны через свойство VideoFrame.caption_tracks .
Добавление субтитров к видеокадру
Чтобы добавить субтитры к видеокадру:
- Создайте экземпляр класса Presentation .
- Добавьте видео в презентацию.
- Добавьте объект VideoFrame на слайд.
- Используйте CaptionsCollection , возвращаемую через caption_tracks , чтобы добавить дорожку субтитров в формате WebVTT.
- Сохраните изменённую презентацию.
Следующий код показывает, как добавить субтитры к видеокадру:
import aspose.slides as slides
with slides.Presentation() as presentation:
with open("video.mp4", "rb") as video_stream:
video_data = video_stream.read()
video = presentation.videos.add_video(video_data)
slide = presentation.slides[0]
video_frame = slide.shapes.add_video_frame(0, 0, 100, 100, video)
# Добавляет новую дорожку субтитров из файла WebVTT.
video_frame.caption_tracks.add("English", "track.vtt")
presentation.save("video_with_captions.pptx", slides.export.SaveFormat.PPTX)
Класс CaptionsCollection также предоставляет перегрузку, позволяющую добавлять субтитры из потока.
Извлечение субтитров из видеокадра
Чтобы извлечь субтитры из видеокадра:
- Загрузите презентацию, содержащую видео.
- Найдите целевой объект VideoFrame .
- Пройдитесь по коллекции caption_tracks .
- Сохраните каждую дорожку субтитров в файл с расширением
.vtt.
Следующий код показывает, как извлечь субтитры из видеокадра:
import aspose.slides as slides
with slides.Presentation("video_with_captions.pptx") as presentation:
slide = presentation.slides[0]
for shape in slide.shapes:
if isinstance(shape, slides.VideoFrame):
for caption_track in shape.caption_tracks:
# Сохраняет дорожку субтитров в файл WebVTT.
file_path = f"{caption_track.caption_id}.vtt"
with open(file_path, "wb") as track_stream:
track_stream.write(bytes(caption_track.binary_data))
Каждый объект Captions раскрывает идентификатор субтитра, метку, бинарные данные и текст субтитра в виде строки UTF-8.
Удаление субтитров из видеокадра
Чтобы удалить субтитры из видеокадра:
- Загрузите презентацию, содержащую видео.
- Получите целевой объект VideoFrame .
- Удалите дорожки субтитров из CaptionsCollection .
- Сохраните изменённую презентацию.
Следующий код показывает, как удалить все субтитры из видеокадра:
import aspose.slides as slides
with slides.Presentation("video_with_captions.pptx") as presentation:
slide = presentation.slides[0]
video_frame = slide.shapes[0] # тип: slides.VideoFrame
# Удаляет все субтитры из видеокадра.
video_frame.caption_tracks.clear()
presentation.save("video_without_captions.pptx", slides.export.SaveFormat.PPTX)
Если необходимо удалить только одну дорожку субтитров, используйте методы remove или remove_at вместо clear .
Извлечение видео со слайда
Помимо добавления видео на слайды, Aspose.Slides позволяет извлекать видео, встроенное в презентации.
- Создайте экземпляр класса Presentation , чтобы загрузить презентацию, содержащую видео.
- Пройдитесь по всем объектам Slide .
- Пройдитесь по всем объектам Shape в поиске VideoFrame .
- Сохраните видео на диск.
Этот код на Python показывает, как извлечь видео со слайда презентации:
import aspose.slides as slides
# Создает объект Presentation, представляющий файл презентации
with slides.Presentation(path + "Video.pptx") as presentation:
for shape in presentation.slides[0].shapes:
if type(shape) is slides.VideoFrame:
type = shape.embedded_video.content_type
buffer = shape.embedded_video.binary_data
with open("NewVideo_out." + type[type.rfind('/') + 1:len(type)], "wb") as stream:
stream.write(buffer)
FAQ
Какие параметры воспроизведения видео можно изменить для VideoFrame?
Можно управлять режимом воспроизведения (авто или по щелчку) и цикличностью . Эти варианты доступны через свойства объекта VideoFrame .
Влияет ли добавление видео на размер файла PPTX?
Да. При встраивании локального видео бинарные данные включаются в документ, поэтому размер презентации растёт пропорционально размеру файла. При добавлении онлайн‑видео встраиваются только ссылка и миниатюра, поэтому увеличение объёма меньше.
Могу ли я заменить видео в существующем VideoFrame, не меняя его положение и размер?
Да. Можно заменить видеоконтент внутри кадра, сохранив геометрию фигуры; это типичная ситуация при обновлении медиа в уже существующей раскладке.
Можно ли определить тип содержимого (MIME) встроенного видео?
Да. Встроенное видео имеет тип содержимого , который можно прочитать и использовать, например, при сохранении на диск.