إدارة إطارات الفيديو في العروض التقديمية على Android

المقدمة

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

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

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

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

إنشاء إطار فيديو مضمّن

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

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

  1. أنشئ مثيلًا من فئة Presentation class
  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 التحكم في الجزء الذي يُشغل من الفيديو عن طريق ضبط قيمتي trim‑from‑start وtrim‑from‑end عبر IVideoFrame.setTrimFromStart وIVideoFrame.setTrimFromEnd. تُحدد القيمتين بالميليثانية وتُعرّف مقدار الوقت الذي يتم تخطيه من بداية الفيديو ونهايته على التوالي. تُغيّر هذه الإعدادات سلوك تشغيل الفيديو في العرض التقديمي؛ ولا تقوم بقطع أو تعديل بيانات الفيديو المضمّنة.

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

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

  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 = // "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 أيضًا نسخة زائدة تتيح لك إضافة ترجمات من تدفق بيانات.

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

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

  1. حمّل العرض التقديمي الذي يحتوي على الفيديو.
  2. ابحث عن كائن IVideoFrame المستهدف.
  3. تكرّر عبر مسارات الترجمات التي تُعيدها getCaptionTracks.
  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.
                FileOutputStream outputStream = new FileOutputStream(captionTrack.getCaptionId() + ".vtt");
                outputStream.write(captionTrack.getBinaryData());
                outputStream.close();
            }
        }
    }
} finally {
    presentation.dispose();
}

كل كائن ICaptions يُظهر معرّف الترجة، التسمية، البيانات الثنائية، وبيانات الترجة كسلسلة UTF‑8.

إزالة الترجمات من إطار فيديو

لإزالة الترجمات من إطار فيديو:

  1. حمّل العرض التقديمي الذي يحتوي على الفيديو.
  2. احصل على كائن IVideoFrame المستهدف.
  3. أزل مسارات الترجمات من المجموعة التي تُعيدها getCaptionTracks.
  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. أنشئ مثيلًا من فئة Presentationclass لتحميل العرض التقديمي الذي يحتوي على الفيديو.
  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();
}

الأسئلة المتداولة

ما هي معلمات تشغيل الفيديو التي يمكن تغييرها لإطار الفيديو؟

يمكنك التحكم في وضع التشغيل (playback mode) (تلقائي أو عند النقر) وlooping. تتوفر هذه الخيارات عبر خصائص كائن VideoFrame .

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

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

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

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

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

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