مدیریت چارچوب‌های ویدئویی در ارائه‌ها با استفاده از C++

مقدمه

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

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

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

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

ایجاد چارچوب ویدئوی جاسازی‌شده

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

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

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

System::SharedPtr<Presentation> pres = System::MakeObject<Presentation>(u"pres.pptx");

// ویدئو را بارگذاری می‌کند
System::SharedPtr<System::IO::FileStream> fileStream = System::MakeObject<System::IO::FileStream>(u"Wildlife.mp4", System::IO::FileMode::Open, System::IO::FileAccess::Read);
System::SharedPtr<IVideo> video = pres->get_Videos()->AddVideo(fileStream, LoadingStreamBehavior::KeepLocked);

// اسلاید اول را دریافت می‌کند و یک چارچوب ویدئویی اضافه می‌کند
pres->get_Slide(0)->get_Shapes()->AddVideoFrame(10.0f, 10.0f, 150.0f, 250.0f, video);

// ارائه را روی دیسک ذخیره می‌کند
pres->Save(u"pres-with-video.pptx", SaveFormat::Pptx);

به‌جای آن می‌توانید با پاس دادن مستقیم مسیر فایل به متد AddVideoFrame() یک ویدئو اضافه کنید:

System::SharedPtr<Presentation> pres = System::MakeObject<Presentation>();

System::SharedPtr<ISlide> sld = pres->get_Slide(0);
System::SharedPtr<IVideoFrame> vf = sld->get_Shapes()->AddVideoFrame(50.0f, 150.0f, 300.0f, 150.0f, u"video1.avi");

ایجاد چارچوب ویدئوی با ویدئوی منبع وب

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

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

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

// مسیر پوشهٔ اسناد.
const String outPath = u"../out/AddVideoFrameFromWebSource_out.pptx";
const String filePath = u"../templates/video1.avi";

// یک شیء Presentation ایجاد می‌کند که نمایانگر یک فایل ارائه است
SharedPtr<Presentation> pres = MakeObject<Presentation>();

// به اولین اسلاید دسترسی می‌یابد
SharedPtr<ISlide> slide = pres->get_Slides()->idx_get(0);

// یک چارچوب ویدئویی اضافه می‌کند 
System::SharedPtr<IVideoFrame> vf = slide->get_Shapes()->AddVideoFrame(10, 10, 427, 240,u"https://www.youtube.com/embed/Tj75Arhq5ho");

// حالت پخش و حجم صدا را برای ویدئو تنظیم می‌کند
vf->set_PlayMode(VideoPlayModePreset::Auto);

//ارائه را روی دیسک ذخیره می‌کند
pres->Save(outPath, Aspose::Slides::Export::SaveFormat::Pptx);

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

Aspose.Slides به شما امکان مدیریت زیرنویس‌های بسته برای چارچوب‌های ویدئویی در ارائه‌های PowerPoint را می‌دهد. زیرنویس‌ها در قالب WebVTT ذخیره می‌شوند و از طریق متد IVideoFrame::get_CaptionTracks در دسترس هستند.

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

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

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

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

auto presentation = MakeObject<Presentation>();

auto videoData = File::ReadAllBytes(u"video.mp4");
auto video = presentation->get_Videos()->AddVideo(videoData);

auto slide = presentation->get_Slide(0);
auto videoFrame = slide->get_Shapes()->AddVideoFrame(0, 0, 100, 100, video);

// Adds a new captions track from a WebVTT file.
videoFrame->get_CaptionTracks()->Add(u"English", u"track.vtt");

presentation->Save(u"video_with_captions.pptx", SaveFormat::Pptx);
presentation->Dispose();

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

استخراج زیرنویس‌ها از یک چارچوب ویدئویی

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

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

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

auto presentation = MakeObject<Presentation>(u"video_with_captions.pptx");
auto slide = presentation->get_Slide(0);

for (auto&& shape : slide->get_Shapes())
{
    if (ObjectExt::Is<IVideoFrame>(shape))
    {
        auto videoFrame = ExplicitCast<IVideoFrame>(shape);
        for (auto&& captionTrack : videoFrame->get_CaptionTracks())
        {
            // مسیر زیرنویس‌ها را به یک فایل WebVTT ذخیره می‌کند.
            auto filePath = captionTrack->get_CaptionId().ToString() + u".vtt";
            File::WriteAllBytes(filePath, captionTrack->get_BinaryData());
        }
    }
}

presentation->Dispose();

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

حذف زیرنویس‌ها از یک چارچوب ویدئویی

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

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

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

auto presentation = MakeObject<Presentation>(u"video_with_captions.pptx");
auto slide = presentation->get_Slide(0);
auto videoFrame = ExplicitCast<IVideoFrame>(slide->get_Shape(0));

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

presentation->Save(u"video_without_captions.pptx", SaveFormat::Pptx);
presentation->Dispose();

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

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

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

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

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

// مسیر پوشه اسناد.
const System::String templatePath = u"../templates/Video.pptx";
const System::String outPath = u"../out/Video_out";

auto presentation = System::MakeObject<Presentation>(templatePath);
for (auto&& slide : presentation->get_Slides())
{
    for (auto&& shape : slide->get_Shapes())
    {
        if (System::ObjectExt::Is<VideoFrame>(shape))
        {
            System::SharedPtr<VideoFrame> vf = System::AsCast<VideoFrame>(shape);
            System::String type = vf->get_EmbeddedVideo()->get_ContentType();
            type = type.Remove(0, type.LastIndexOf('/') + 1);
            auto buffer = vf->get_EmbeddedVideo()->get_BinaryData();

            auto stream = System::MakeObject<System::IO::FileStream>(
                outPath + type, System::IO::FileMode::Create, System::IO::FileAccess::Write,
                System::IO::FileShare::Read);
            stream->Write(buffer, 0, buffer->get_Length());
        }
    }
}

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

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

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

آیا افزودن یک ویدئو بر اندازهٔ فایل PPTX تاثیر دارد؟

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

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

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

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

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