مدیریت فریم‌های ویدئویی در ارائه‌ها در .NET

مقدمه

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

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

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

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

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

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

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

این کد C# نشان می‌دهد چگونه یک ویدئوی ذخیره‌شده به‌صورت محلی را به یک ارائه اضافه کنید:

// یک نمونه از کلاس Presentation ایجاد می‌کند
using (Presentation pres = new Presentation("pres.pptx"))
{
    // ویدئو را بارگیری می‌کند
    using (FileStream fileStream = new FileStream("Wildlife.mp4", FileMode.Open, FileAccess.Read))
    {
        IVideo video = pres.Videos.AddVideo(fileStream, LoadingStreamBehavior.KeepLocked);
        
        // اسلاید اول را دریافت می‌کند و یک فریم ویدئویی اضافه می‌کند
        pres.Slides[0].Shapes.AddVideoFrame(10, 10, 150, 250, video);
        
        // ارائه را روی دیسک ذخیره می‌کند
        pres.Save("pres-with-video.pptx", SaveFormat.Pptx);
    }
}

به‌علاوه، می‌توانید با عبور مسیر فایل مستقیم به روش AddVideoFrame یک ویدئو اضافه کنید:

using (Presentation pres = new Presentation())
{
    ISlide sld = pres.Slides[0];
    IVideoFrame vf = sld.Shapes.AddVideoFrame(50, 150, 300, 150, "video1.avi");
}

ایجاد فریم ویدئویی با ویدئویی از منبع وب

Microsoft PowerPoint 2013 و جدیدتر از ویدئوهای YouTube در ارائه‌ها پشتیبانی می‌کند. اگر ویدئوی مورد نظر شما به‌صورت آنلاین موجود باشد (مثلاً در YouTube)، می‌توانید آن را از طریق لینک وب به ارائه خود اضافه کنید.

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

این کد C# نشان می‌دهد چگونه یک ویدئوی وب را به یک اسلاید در ارائه PowerPoint اضافه کنید:

public static void Run()
{
    // یک شیء Presentation ایجاد می‌کند که نمایانگر یک فایل ارائه است 
    using (Presentation pres = new Presentation())
    {
        AddVideoFromYouTube(pres, "Tj75Arhq5ho");
        pres.Save("AddVideoFrameFromWebSource_out.pptx", SaveFormat.Pptx);
    }
}

private static void AddVideoFromYouTube(Presentation pres, string videoId)
{
    // یک VideoFrame اضافه می‌کند
    IVideoFrame videoFrame = pres.Slides[0].Shapes.AddVideoFrame(10, 10, 427, 240, "https://www.youtube.com/embed/" + videoId);
    videoFrame.PlayMode = VideoPlayModePreset.Auto;

    // تصویر بندانگشتی را بارگیری می‌کند
    using (WebClient client = new WebClient())
    {
        string thumbnailUri = "http://img.youtube.com/vi/" + videoId + "/hqdefault.jpg";
        videoFrame.PictureFormat.Picture.Image = pres.Images.AddImage(client.DownloadData(thumbnailUri));
    }
}

مدیریت زیرنویس‌های ویدئو

Aspose.Slides به شما امکان مدیریت زیرنویس‌های بسته برای فریم‌های ویدئویی در ارائه‌های PowerPoint را می‌دهد. زیرنویس‌ها در فرمت WebVTT ذخیره شده و از طریق ویژگی IVideoFrame.CaptionTracks در دسترس هستند.

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

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

  1. یک نمونه از کلاس Presentation ایجاد کنید.
  2. یک ویدئو به ارائه اضافه کنید.
  3. یک شیء IVideoFrame به یک اسلاید اضافه کنید.
  4. از مجموعه‌ی CaptionTracks برای اضافه کردن یک مسیر زیرنویس WebVTT استفاده کنید.
  5. ارائهٔ تغییر یافته را ذخیره کنید.

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

using (Presentation presentation = new Presentation())
{
    byte[] videoData = File.ReadAllBytes("video.mp4");
    IVideo video = presentation.Videos.AddVideo(videoData);

    ISlide slide = presentation.Slides[0];
    IVideoFrame videoFrame = slide.Shapes.AddVideoFrame(0, 0, 100, 100, video);

    // یک مسیر زیرنویس جدید از یک فایل WebVTT اضافه می‌کند.
    presentation.Save("video_with_captions.pptx", SaveFormat.Pptx);
}

رابط ICaptionsCollection همچنین یک overload فراهم می‌کند که به شما اجازه می‌دهد زیرنویس‌ها را از یک جریان (stream) اضافه کنید.

استخراج زیرنویس از فریم ویدئو

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

  1. ارائه‌ای که شامل ویدئو است را بارگذاری کنید.
  2. شیء IVideoFrame هدف را پیدا کنید.
  3. در مجموعه‌ی CaptionTracks پیمایش کنید.
  4. هر مسیر زیرنویس را در یک فایل .vtt ذخیره کنید.

کد زیر نشان می‌دهد چگونه زیرنویس‌ها را از فریم ویدئو استخراج کنید:

using (Presentation presentation = new Presentation("video_with_captions.pptx"))
{
    ISlide slide = presentation.Slides[0];
    foreach (IShape shape in slide.Shapes)
    {
        if (shape is IVideoFrame videoFrame)
        {
            foreach (ICaptions captionTrack in videoFrame.CaptionTracks)
            {
                // مسیر زیرنویس را به یک فایل WebVTT ذخیره می‌کند.
                string filePath = $"{captionTrack.CaptionId}.vtt";
                File.WriteAllBytes(filePath, captionTrack.BinaryData);
            }
        }
    }
}

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

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

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

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

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

using (Presentation presentation = new Presentation("video_with_captions.pptx"))
{
    ISlide slide = presentation.Slides[0];
    IVideoFrame videoFrame = slide.Shapes[0] as IVideoFrame;

    // تمامی زیرنویس‌ها را از فریم ویدئو حذف می‌کند.
    videoFrame.CaptionTracks.Clear();

    presentation.Save("video_without_captions.pptx", SaveFormat.Pptx);
}

اگر نیاز دارید تنها یک مسیر زیرنویس را حذف کنید، به‌جای Clear، از متدهای Remove یا RemoveAt استفاده کنید.

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

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

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

این کد C# نشان می‌دهد چگونه ویدئوی یک اسلاید در ارائه را استخراج کنید:

// یک شیء Presentation ایجاد می‌کند که نمایانگر یک فایل ارائه است 
Presentation presentation = new Presentation("Video.pptx");

// از اسلایدها عبور می‌کند
foreach (ISlide slide in presentation.Slides)
{
    // از اشکال عبور می‌کند
    foreach (IShape shape in presentation.Slides[0].Shapes)
    {
        // ویدئو را روی دیسک ذخیره می‌کند هنگامی که VideoFrame حاوی ویدئو پیدا می‌شود
        if (shape is VideoFrame)
        {
            IVideoFrame vf = shape as IVideoFrame;
            String type = vf.EmbeddedVideo.ContentType;
            int ss = type.LastIndexOf('/');
            type = type.Remove(0, type.LastIndexOf('/') + 1);
            Byte[] buffer = vf.EmbeddedVideo.BinaryData;
            using (FileStream stream = new FileStream("NewVideo_out." + type, FileMode.Create, FileAccess.Write, FileShare.Read))
            {                                                     
                stream.Write(buffer, 0, buffer.Length);
            }
        }
    }
}

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

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

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

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

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

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

بله. می‌توانید محتوای ویدئویی (video content) را درون فریم جایگزین کنید در حالی که هندسهٔ شکل حفظ می‌شود؛ این یک وضعیت رایج برای به‌روزرسانی رسانه در یک طرح موجود است.

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

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