مدیریت فریم‌های ویدیو در ارائه‌ها با استفاده از جاوا

مقدمه

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

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

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

برای افزودن ویدیوها (اشیاء ویدیو) به یک ارائه، Aspose.Slides رابط‌های IVideo و IVideoFrame و انواع مرتبط دیگر را فراهم می‌کند.

ایجاد فریم‌های ویدیو جاسازی‌شده

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

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

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

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

این کد 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 به شما امکان می‌دهد زیرنویس‌های بسته برای فریم‌های ویدیو در ارائه‌های PowerPoint را مدیریت کنید. زیرنویس‌ها در قالب WebVTT ذخیره می‌شوند و از طریق متد IVideoFrame.getCaptionTracks در دسترس هستند.

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

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

  1. یک نمونه از کلاس Presentation ایجاد کنید.
  2. یک ویدیو به ارائه اضافه کنید.
  3. یک شیء IVideoFrame را به یک اسلاید اضافه کنید.
  4. از ICaptionsCollection که توسط getCaptionTracks برگردانده می‌شود استفاده کنید تا یک ردیف زیرنویس WebVTT اضافه کنید.
  5. ارائه اصلاح‌شده را ذخیره کنید.

کد زیر نشان می‌دهد چگونه زیرنویس‌ها را به یک فریم ویدیو اضافه کنید:

Presentation presentation = new Presentation();
try {
    byte[] videoData = Files.readAllBytes(Paths.get("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 همچنین یک overload دارد که امکان افزودن زیرنویس‌ها از یک جریان (stream) را می‌دهد.

استخراج زیرنویس‌ها از یک فریم ویدیو

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

  1. ارائه‌ای که حاوی ویدیو است را بارگذاری کنید.
  2. شیء IVideoFrame هدف را پیدا کنید.
  3. از طریق ردیف‌های زیرنویس در ICaptionsCollection پیمایش کنید.
  4. هر ردیف زیرنویس را در یک فایل .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 ذخیره می‌کند.
                String filePath = captionTrack.getCaptionId().toString() + ".vtt";
                Files.write(Paths.get(filePath), captionTrack.getBinaryData());
            }
        }
    }
} finally {
    presentation.dispose();
}

هر شیء ICaptions شناسه زیرنویس، برچسب، داده‌های باینری و متن زیرنویس را به‌صورت رشته UTF-8 ارائه می‌دهد.

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

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

  1. ارائه‌ای که حاوی ویدیو است را بارگذاری کنید.
  2. شیء IVideoFrame هدف را دریافت کنید.
  3. ردیف‌های زیرنویس را از ICaptionsCollection حذف کنید.
  4. ارائه اصلاح‌شده را ذخیره کنید.

کد زیر نشان می‌دهد چگونه همه زیرنویس‌ها را از یک فریم ویدیو حذف کنید:

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();
}

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

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

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

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

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

سوالات متداول

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

شما می‌توانید حالت پخش (خودکار یا با کلیک) و حلقه‌دار کردن را کنترل کنید. این گزینه‌ها از طریق ویژگی‌های شیء VideoFrame در دسترس هستند.

آیا افزودن ویدیو بر اندازه فایل PPTX تأثیر می‌گذارد؟

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

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

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

آیا می‌توان نوع محتوا (MIME) یک ویدیو جاسازی‌شده را تعیین کرد؟

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