إدارة إطارات الفيديو في العروض التقديمية باستخدام Java

المقدمة

يمكن للفيديو الموضوع في المكان المناسب داخل عرض تقديمي أن يجعل رسالتك أكثر إقناعًا ويزيد من مستويات التفاعل مع جمهورك.

PowerPoint يتيح لك إضافة مقاطع فيديو إلى شريحة في عرض تقديمي بطريقتين:

  • إضافة أو تضمين فيديو محلي (مخزن على جهازك)
  • إضافة فيديو عبر الإنترنت (من مصدر ويب مثل YouTube).

لتمكينك من إضافة مقاطع فيديو (كائنات فيديو) إلى عرض تقديمي، توفر Aspose.Slides الواجهة IVideo، والواجهة IVideoFrame، وأنواع أخرى ذات صلة.

إنشاء إطارات فيديو مدمجة

إذا كان ملف الفيديو الذي ترغب في إضافته إلى الشريحة مخزنًا محليًا، يمكنك إنشاء إطار فيديو لتضمين الفيديو في عرضك التقديمي.

  1. إنشاء مثيل من الفئة Presentationclass.
  2. الحصول على مرجع الشريحة عبر فهرسها.
  3. إضافة كائن IVideo وتمرير مسار ملف الفيديو لتضمينه مع العرض التقديمي.
  4. إضافة كائن IVideoFrame لإنشاء إطار للفيديو.
  5. حفظ العرض التقديمي المعدّل.

يعرض لك هذا الكود الجاڤا كيفية إضافة فيديو مخزن محليًا إلى عرض تقديمي:

// ينشئ كائن من فئة 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 والإصدارات الأحدث يدعم مقاطع فيديو YouTube في العروض التقديمية. إذا كان الفيديو الذي تريد استخدامه متاحًا عبر الإنترنت (مثلًا على YouTube)، يمكنك إضافته إلى عرضك التقديمي من خلال رابط الويب الخاص به.

  1. إنشاء مثيل من الفئة Presentationclass
  2. الحصول على مرجع الشريحة عبر فهرسها.
  3. إضافة كائن IVideo وتمرير الرابط إلى الفيديو.
  4. تحديد صورة مصغرة لإطار الفيديو.
  5. حفظ العرض التقديمي.

يعرض لك هذا الكود الجاڤا كيفية إضافة فيديو من الويب إلى شريحة في عرض 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. تُحدَّد القيمتين بالميليثانية وتعرِّف مقدار الوقت المتSkipped من بداية ونهاية الفيديو على التوالي. هذه الإعدادات تُغيِّر إعدادات تشغيل الفيديو في العرض؛ لا تقوم بقطع أو تعديل بيانات الفيديو المدمجة.

ضبط إعدادات القص

لإنشاء إطار فيديو وضبط إعدادات القص الخاصة به:

  1. إنشاء مثيل من الفئة Presentationclass.
  2. إضافة كائن IVideo إلى العرض التقديمي.
  3. إضافة كائن IVideoFrame إلى شريحة.
  4. ضبط قيم trim-from-start و trim-from-end عبر IVideoFrame.setTrimFromStart وIVideoFrame.setTrimFromEnd.
  5. حفظ العرض التقديمي المعدّل.

يقوم مثال الكود التالي بتخطي أول 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.

إضافة تسميات إلى إطار فيديو

لإضافة تسميات إلى إطار فيديو:

  1. إنشاء مثيل من الفئة Presentationclass.
  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.
    presentation.save("video_with_captions.pptx", SaveFormat.Pptx);
} finally {
    presentation.dispose();
}

توفر واجهة [ICaptionsCollection] أيضًا نسخة محملة تسمح لك بإضافة تسميات من تدفق.

استخراج التسميات من إطار فيديو

لاستخراج التسميات من إطار فيديو:

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

إذا كنت بحاجة إلى إزالة مسار تسمية واحد فقط، استخدم طريقة remove أو removeAt بدلًا من clear.

استخراج الفيديو من الشرائح

بالإضافة إلى إضافة مقاطع فيديو إلى الشرائح، يتيح لك Aspose.Slides استخراج مقاطع الفيديو المضمنة في العروض التقديمية.

  1. إنشاء مثيل من الفئة Presentation لتحميل العرض التقديمي الذي يحتوي على الفيديو.
  2. التكرار عبر جميع كائنات ISlide.
  3. التكرار عبر جميع كائنات IShape للعثور على VideoFrame.
  4. حفظ الفيديو إلى القرص.

يعرض لك هذا الكود الجاڤا كيفية استخراج الفيديو من شريحة عرض تقديمي:

// ينشئ كائن 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.

هل يؤثر إضافة فيديو على حجم ملف PPTX؟

نعم. عند تضمين فيديو محلي، تُضمَّن البيانات الثنائية في المستند، وبالتالي يزداد حجم العرض التقديمي ب proportion إلى حجم الملف. عند إضافة فيديو عبر الإنترنت، يتم تضمين رابط وصورة مصغرة فقط، لذا يكون الارتفاع في الحجم أصغر.

هل يمكنني استبدال الفيديو في إطار فيديو موجود دون تغيير موقعه وحجمه؟

نعم. يمكنك استبدال محتوى الفيديو داخل الإطار مع الحفاظ على أبعاد الشكل؛ هذا سيناريو شائع لتحديث الوسائط في تخطيط موجود.

هل يمكن تحديد نوع المحتوى (MIME) لفيديو مدمج؟

نعم. يحتوي الفيديو المدمج على نوع محتوى يمكنك قراءته واستخدامه، على سبيل المثال عند حفظه إلى القرص.