افزودن ویدیوها به ارائه‌ها در پایتون

مقدمه

یک ویدیو به‌خوبی قرار داده شده در یک ارائه می‌تواند پیام شما را قانع‌کننده‌تر کند و سطح تعامل با مخاطبان را افزایش دهد.

PowerPoint به شما اجازه می‌دهد تا ویدیوها را به یک اسلاید در ارائه اضافه کنید به دو روش:

  • افزودن یا تعبیه یک ویدیو محلی (ذخیره شده روی دستگاه شما)
  • افزودن یک ویدیو آنلاین (از منبع وبی مانند YouTube).

برای اینکه بتوانید ویدیوها (اشیای ویدیو) را به یک ارائه اضافه کنید، Aspose.Slides کلاس‌های Video ، VideoFrame و انواع مرتبط دیگر را فراهم می‌کند.

ایجاد قاب ویدیو توکار

اگر فایل ویدیویی که می‌خواهید به اسلاید خود اضافه کنید به‌صورت محلی ذخیره شده باشد، می‌توانید یک قاب ویدیو ایجاد کنید تا ویدیو را در ارائه خود تعبیه کنید.

  1. یک نمونه از کلاس Presentation ایجاد کنید.
  2. مرجع یک اسلاید را از طریق ایندکس آن دریافت کنید.
  3. یک شیء Video اضافه کنید و مسیر فایل ویدیو را برای تعبیه ویدیو در ارائه پاس بدهید.
  4. یک شیء VideoFrame اضافه کنید تا یک قاب برای ویدیو ایجاد شود.
  5. ارائه تغییر یافته را ذخیره کنید.

این کد 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 2013 و جدیدتر از ویدیوهای YouTube در ارائه‌ها پشتیبانی می‌کند. اگر ویدیویی که می‌خواهید استفاده کنید به‌صورت آنلاین در دسترس باشد (مثلاً در YouTube)، می‌توانید آن را از طریق لینک وب به ارائه خود اضافه کنید.

  1. یک نمونه از کلاس Presentation ایجاد کنید.
  2. مرجع یک اسلاید را از طریق ایندکس آن دریافت کنید.
  3. یک شیء Video اضافه کنید و لینک ویدیو را پاس بدهید.
  4. یک تصویر بندانگشتی برای قاب ویدیو تنظیم کنید.
  5. ارائه را ذخیره کنید.

این کد Python نشان می‌دهد چطور یک ویدیو از وب را به اسلایدی در ارائه PowerPoint اضافه کنید:

import aspose.slides as slides
from urllib.request import urlopen

def add_video_from_youyube(pres, videoId):
    # یک VideoFrame اضافه می‌کند
    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 به شما اجازه می‌دهد زیرنویس‌های بسته برای قاب‌های ویدیو در ارائه‌های PowerPoint را مدیریت کنید. زیرنویس‌ها به فرمت WebVTT ذخیره می‌شوند و از طریق ویژگی VideoFrame.caption_tracks در دسترس هستند.

افزودن زیرنویس به قاب ویدیو

برای افزودن زیرنویس به یک قاب ویدیو:

  1. یک نمونه از کلاس Presentation ایجاد کنید.
  2. یک ویدیو به ارائه اضافه کنید.
  3. یک شیء VideoFrame به یک اسلاید اضافه کنید.
  4. از CaptionsCollection که توسط caption_tracks برگردانده می‌شود برای افزودن یک مسیر زیرنویس WebVTT استفاده کنید.
  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(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 همچنین یک بارگذاری اضافه دارد که به شما اجازه می‌دهد زیرنویس‌ها را از یک استریم اضافه کنید.

استخراج زیرنویس‌ها از یک قاب ویدیو

برای استخراج زیرنویس‌ها از یک قاب ویدیو:

  1. ارائه‌ای که شامل ویدیو است را بارگذاری کنید.
  2. شیء هدف VideoFrame را پیدا کنید.
  3. در مجموعه caption_tracks پیمایش کنید.
  4. هر مسیر زیرنویس را در یک فایل .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 در اختیار می‌گذارد.

حذف زیرنویس‌ها از یک قاب ویدیو

برای حذف زیرنویس‌ها از یک قاب ویدیو:

  1. ارائه‌ای که شامل ویدیو است را بارگذاری کنید.
  2. شیء هدف VideoFrame را دریافت کنید.
  3. مسیرهای زیرنویس را از CaptionsCollection حذف کنید.
  4. ارائه تغییر یافته را ذخیره کنید.

کد زیر نشان می‌دهد چطور تمام زیرنویس‌ها را از یک قاب ویدیو حذف کنید:

import aspose.slides as slides

with slides.Presentation("video_with_captions.pptx") as presentation:
    slide = presentation.slides[0]
    video_frame = slide.shapes[0]  # type: slides.VideoFrame

    # تمام زیرنویس‌ها را از قاب ویدیو حذف می‌کند.
    video_frame.caption_tracks.clear()

    presentation.save("video_without_captions.pptx", slides.export.SaveFormat.PPTX)

اگر فقط نیاز به حذف یک مسیر زیرنویس دارید، به‌جای متد clear می‌توانید از متدهای remove یا remove_at استفاده کنید.

استخراج ویدیو از اسلاید

علاوه بر افزودن ویدیوها به اسلایدها، Aspose.Slides به شما اجازه می‌دهد ویدیوهای تعبیه‌شده در ارائه‌ها را استخراج کنید.

  1. یک نمونه از کلاس Presentation ایجاد کنید تا ارائه حاوی ویدیو را بارگذاری کنید.
  2. در تمام اشیاء Slide پیمایش کنید.
  3. در تمام اشیاء Shape پیمایش کنید تا یک VideoFrame پیدا کنید.
  4. ویدیو را بر روی دیسک ذخیره کنید.

این کد 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)

پرسش‌های متداول

کدام پارامترهای پخش ویدیو می‌توانند برای VideoFrame تغییر کنند؟

شما می‌توانید حالت پخش (playback mode) (auto یا on click) و حلقه‌گذاری (looping) را کنترل کنید. این گزینه‌ها از طریق ویژگی‌های شیء VideoFrame در دسترس هستند.

آیا افزودن ویدیو باعث افزایش حجم فایل PPTX می‌شود؟

بله. وقتی یک ویدیوی محلی را تعبیه می‌کنید، داده‌های باینری در سند گنجانده می‌شود، بنابراین حجم ارائه متناسب با اندازه فایل افزایش می‌یابد. وقتی یک ویدیو آنلاین را اضافه می‌کنید، تنها یک لینک و تصویر بندانگشتی تعبیه می‌شود، لذا افزایش حجم کمتر است.

آیا می‌توان ویدیو را در یک VideoFrame موجود بدون تغییر موقعیت و اندازه جایگزین کرد؟

بله. می‌توانید محتوای video content را داخل قاب تعویض کنید در حالی که هندسه شکل حفظ می‌شود؛ این یک سناریو رایج برای به‌روزرسانی رسانه در یک چیدمان موجود است.

آیا می‌توان نوع محتوا (MIME) ویدیو تعبیه‌شده را تشخیص داد؟

بله. یک ویدیو تعبیه‌شده دارای یک content type است که می‌توانید آن را بخوانید و استفاده کنید، برای مثال هنگام ذخیره‌سازی روی دیسک.