مدیریت فریم‌های ویدئویی در ارائه‌ها در .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 پشتیبانی از ویدئوهای آنلاین در ارائه‌ها را ارائه می‌دهند. اگر ویدئویی که می‌خواهید استفاده کنید به صورت آنلاین (مثلاً در 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 به شما امکان می‌دهد که بخش‌های مختلف یک ویدئو را با تنظیم مقادیر trim-from-start و trim-from-end از طریق IVideoFrame.TrimFromStart و IVideoFrame.TrimFromEnd کنترل کنید. هر دو مقدار بر حسب میلی‌ثانیه مشخص می‌شوند و نشان می‌دهند چه مقدار زمان از ابتداء و انتهای ویدئو صرف‌نظر شود. این تنظیمات فقط رفتار پخش ویدئو را در ارائه تغییر می‌دهند؛ دادهٔ باینری ویدئوی جاسازی‌شده را قطع یا تغییر نمی‌دهند.

تنظیمات برش

برای ایجاد یک فریم ویدئویی و تنظیم مقادیر برش آن:

  1. یک نمونه از کلاس Presentation ایجاد کنید.
  2. یک شیء IVideo به ارائه اضافه کنید.
  3. یک شیء IVideoFrame به یک اسلاید اضافه کنید.
  4. مقادیر trim-from-start و trim-from-end را از طریق IVideoFrame.TrimFromStart و IVideoFrame.TrimFromEnd تنظیم کنید.
  5. ارائهٔ اصلاح‌شده را ذخیره کنید.

مثال کد زیر ۲٫۵ ثانیهٔ اول و یک ثانیهٔ آخر ویدئوی جاسازی‌شده را هنگام پخش حذف می‌کند:

using var presentation = new Presentation();

var videoData = File.ReadAllBytes("video.mp4");
var video = presentation.Videos.AddVideo(videoData);

var slide = presentation.Slides[0];
var videoFrame = slide.Shapes.AddVideoFrame(50, 50, 640, 360, video);

videoFrame.TrimFromStart = 2500f;
videoFrame.TrimFromEnd = 1000f;

presentation.Save("video_with_trim.pptx", SaveFormat.Pptx);

خواندن تنظیمات برش

برای بررسی تنظیمات برش موجود، یک ارائه بارگیری کنید، یک شیء IVideoFrame را در میان شکل‌های اسلاید اول پیدا کنید و مقادیر را از طریق IVideoFrame.TrimFromStart و IVideoFrame.TrimFromEnd بخوانید.

مثال کد زیر اولین فریم ویدئویی در اسلاید اول را پیدا کرده و تنظیمات برش آن را برحسب میلی‌ثانیه گزارش می‌دهد:

using var presentation = new Presentation("video_with_trim.pptx");

var slide = presentation.Slides[0];
foreach (var shape in slide.Shapes)
{
    if (shape is IVideoFrame videoFrame)
    {
        var trimFromStart = videoFrame.TrimFromStart;
        var trimFromEnd = videoFrame.TrimFromEnd;

        Console.WriteLine($"Trim from start: {trimFromStart} ms");
        Console.WriteLine($"Trim from end: {trimFromEnd} ms");

        break;
    }
}

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

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 اضافه می‌کند.
    videoFrame.CaptionTracks.Add("English", "track.vtt");

    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 تغییر یابند؟

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

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

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

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

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

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

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