Sunumlarda Video Çerçevelerini C++ ile Yönetme

Giriş

Bir sunumda yerleştirilen iyi bir video, mesajınızı daha etkileyici hâle getirebilir ve izleyicilerinizle etkileşim seviyesini artırabilir.

PowerPoint, bir sunumdaki bir slayta videoları iki şekilde eklemenizi sağlar:

  • Yerel bir video ekleyin veya gömün (bilgisayarınızda depolanan)
  • Çevrimiçi bir video ekleyin (YouTube gibi bir web kaynağından).

Sunuma video nesneleri eklemenizi sağlamak için Aspose.Slides, IVideo arayüzünü, IVideoFrame arayüzünü ve diğer ilgili türleri sağlar.

Gömülü Bir Video Çerçevesi Oluşturma

Slaytınıza eklemek istediğiniz video dosyası yerel olarak depolanmışsa, videoyu sunumunuza gömmek için bir video çerçevesi oluşturabilirsiniz.

  1. Bir Presentation sınıfının bir örneğini oluşturun.
  2. Bir slaytın referansını indeksine göre alın.
  3. Bir IVideo nesnesi ekleyin ve videoyu sunuma gömmek için video dosyası yolunu geçirin.
  4. Videoya bir çerçeve oluşturmak için bir IVideoFrame nesnesi ekleyin.
  5. Değiştirilmiş sunumu kaydedin.

Bu C++ kodu, yerel olarak depolanmış bir videoyu sunuma nasıl ekleyeceğinizi gösterir:

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

// Loads the video
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);

// Gets the first slide and adds a videoframe
pres->get_Slide(0)->get_Shapes()->AddVideoFrame(10.0f, 10.0f, 150.0f, 250.0f, video);

// Saves the presentation to disk
pres->Save(u"pres-with-video.pptx", SaveFormat::Pptx);

Alternatif olarak, videoyu doğrudan dosya yolunu AddVideoFrame() metoduna geçirerek ekleyebilirsiniz:

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");

Web Kaynağından Video ile Bir Video Çerçevesi Oluşturma

Microsoft PowerPoint yeni sürümleri, sunumlardaki çevrimiçi videoları destekler. Kullanmak istediğiniz video çevrimiçi olarak (ör. YouTube’da) mevcutsa, web bağlantısı aracılığıyla sunumunuza ekleyebilirsiniz.

  1. Bir Presentation sınıfının bir örneğini oluşturun.
  2. Bir slaytın referansını indeksine göre alın.
  3. Bir IVideo nesnesi ekleyin ve videonun bağlantısını geçirin.
  4. Video çerçevesi için bir küçük resim ayarlayın.
  5. Sunumu kaydedin.

Bu C++ kodu, bir web kaynağından video ekleyerek PowerPoint sunumundaki bir slayta nasıl ekleyeceğinizi gösterir:

// Belgeler dizininin yolu.
const String outPath = u"../out/AddVideoFrameFromWebSource_out.pptx";
const String filePath = u"../templates/video1.avi";

// Sunum dosyasını temsil eden bir Presentation nesnesi oluşturur
SharedPtr<Presentation> pres = MakeObject<Presentation>();

// İlk slayta erişir
SharedPtr<ISlide> slide = pres->get_Slides()->idx_get(0);

// Bir Video Çerçevesi ekler 
System::SharedPtr<IVideoFrame> vf = slide->get_Shapes()->AddVideoFrame(10, 10, 427, 240,u"https://www.youtube.com/embed/Tj75Arhq5ho");

// Videonun Oynatma Modu ve Ses seviyesini ayarlar
vf->set_PlayMode(VideoPlayModePreset::Auto);

//Sunumu diske kaydeder
pres->Save(outPath, Aspose::Slides::Export::SaveFormat::Pptx);

Bir Video Çerçevesini Kırpma

Aspose.Slides, bir videonun hangi bölümünün oynatılacağını IVideoFrame::set_TrimFromStart ve IVideoFrame::set_TrimFromEnd aracılığıyla trim-from-start ve trim-from-end değerlerini ayarlayarak kontrol etmenizi sağlar. Her iki değer de milisaniye cinsindendir ve videonun başından ve sonundan atlanan süreyi belirtir. Bu ayarlar sunumdaki video oynatma ayarlarını değiştirir; gömülü video ikili verisini kesmez veya değiştirmez.

Kırpma Ayarlarını Ayarlama

Bir video çerçevesi oluşturmak ve kırpma ayarlarını belirlemek için:

  1. Bir Presentation sınıfının bir örneğini oluşturun.
  2. Sunuma bir IVideo nesnesi ekleyin.
  3. Bir slayta bir IVideoFrame nesnesi ekleyin.
  4. IVideoFrame::set_TrimFromStart ve IVideoFrame::set_TrimFromEnd aracılığıyla trim-from-start ve trim-from-end değerlerini ayarlayın.
  5. Değiştirilmiş sunumu kaydedin.

Aşağıdaki kod örneği, gömülü bir videonun oynatılması sırasında ilk 2,5 saniyeyi ve son bir saniyeyi atlar:

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(50, 50, 640, 360, video);

videoFrame->set_TrimFromStart(2500.0f);
videoFrame->set_TrimFromEnd(1000.0f);

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

Kırpma Ayarlarını Okuma

Mevcut kırpma ayarlarını incelemek için bir sunumu yükleyin, ilk slayttaki şekiller arasında bir IVideoFrame nesnesi bulun ve değerleri IVideoFrame::get_TrimFromStart ve IVideoFrame::get_TrimFromEnd aracılığıyla okuyun.

Aşağıdaki kod örneği, ilk slayttaki ilk video çerçevesini bulur ve kırpma ayarlarını milisaniye cinsinden raporlar:

auto presentation = MakeObject<Presentation>(u"video_with_trim.pptx");

auto slide = presentation->get_Slide(0);
for (auto&& shape : slide->get_Shapes())
{
    if (ObjectExt::Is<IVideoFrame>(shape))
    {
        auto videoFrame = ExplicitCast<IVideoFrame>(shape);
        auto trimFromStart = videoFrame->get_TrimFromStart();
        auto trimFromEnd = videoFrame->get_TrimFromEnd();

        Console::WriteLine(u"Trim from start: {0} ms", trimFromStart);
        Console::WriteLine(u"Trim from end: {0} ms", trimFromEnd);

        break;
    }
}

presentation->Dispose();

Video Altyazılarını Yönetme

Aspose.Slides, PowerPoint sunumlarındaki video çerçeveleri için kapalı altyazıları yönetmenizi sağlar. Altyazılar WebVTT formatında depolanır ve IVideoFrame::get_CaptionTracks yöntemi aracılığıyla sunulur.

Bir Video Çerçevesine Altyazı Ekleme

Bir video çerçevesine altyazı eklemek için:

  1. Bir Presentation sınıfının bir örneğini oluşturun.
  2. Sunuma bir video ekleyin.
  3. Bir slayta bir IVideoFrame nesnesi ekleyin.
  4. get_CaptionTracks tarafından döndürülen ICaptionsCollection’ı kullanarak bir WebVTT altyazı izini ekleyin.
  5. Değiştirilmiş sunumu kaydedin.

Aşağıdaki kod, bir video çerçevesine nasıl altyazı ekleyeceğinizi gösterir:

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

// WebVTT dosyasından yeni bir altyazı izi ekler.
videoFrame->get_CaptionTracks()->Add(u"English", u"track.vtt");

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

ICaptionsCollection arayüzü ayrıca bir akıştan altyazı eklemenizi sağlayan bir aşırı yükleme sunar.

Bir Video Çerçevesinden Altyazı Çıkarma

Bir video çerçevesinden altyazı çıkarmak için:

  1. Videoyu içeren sunumu yükleyin.
  2. Hedef IVideoFrame nesnesini bulun.
  3. get_CaptionTracks tarafından döndürülen altyazı izleri üzerinde döngü oluşturun.
  4. Her altyazı izini bir .vtt dosyasına kaydedin.

Aşağıdaki kod, bir video çerçevesinden altyazı nasıl çıkarılacağını gösterir:

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())
        {
            // Altyazı izini bir WebVTT dosyasına kaydeder.
            auto filePath = captionTrack->get_CaptionId().ToString() + u".vtt";
            File::WriteAllBytes(filePath, captionTrack->get_BinaryData());
        }
    }
}

presentation->Dispose();

Her ICaptions nesnesi, altyazı kimliği, etiketi, ikili verisi ve UTF-8 dizgesi olarak altyazı verisini ortaya koyar.

Bir Video Çerçevesinden Altyazı Kaldırma

Bir video çerçevesinden altyazı kaldırmak için:

  1. Videoyu içeren sunumu yükleyin.
  2. Hedef IVideoFrame nesnesini alın.
  3. get_CaptionTracks tarafından döndürülen koleksiyondan altyazı izlerini kaldırın.
  4. Değiştirilmiş sunumu kaydedin.

Aşağıdaki kod, bir video çerçevesindeki tüm altyazıların nasıl kaldırılacağını gösterir:

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

// Video çerçevesinden tüm altyazıları kaldırır.
videoFrame->get_CaptionTracks()->Clear();

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

Yalnızca bir altyazı izini kaldırmanız gerekiyorsa, Clear yerine Remove veya RemoveAt metodlarını kullanın.

Bir Slayttan Video Çıkarma

Videoları slaytlara eklemenin yanı sıra, Aspose.Slides sunumlarda gömülü videoları çıkarmanıza da olanak tanır.

  1. Videoyu içeren sunumu yüklemek için bir Presentation sınıfının bir örneğini oluşturun.
  2. Tüm ISlide nesneleri üzerinde döngü oluşturun.
  3. Tüm IShape nesneleri arasında bir VideoFrame bulmak için gezin.
  4. Videoyu diske kaydedin.

Bu C++ kodu, bir sunum slaydındaki videoyu nasıl çıkaracağınızı gösterir:

// Belgeler dizininin yolu.
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());
        }
    }
}

SSS

Bir VideoFrame için hangi video oynatma parametreleri değiştirilebilir?
playback mode (otomatik veya tıklamayla) ve looping kontrol edilebilir. Bu seçenekler, VideoFrame nesnesinin özellikleri aracılığıyla mevcuttur.

Video eklemek PPTX dosya boyutunu etkiler mi?
Evet. Yerel bir video gömülürken ikili veri belgeye dahil edilir, bu yüzden sunum boyutu dosya boyutuyla orantılı olarak artar. Çevrimiçi bir video eklediğinizde ise bir bağlantı ve küçük resim gömülür, bu nedenle boyut artışı daha azdır.

Mevcut bir VideoFrame içindeki videoyu konum ve boyutunu değiştirmeden değiştirebilir miyim?
Evet. Çerçeve içindeki video content değiştirilebilir, şeklin geometrisi korunur; bu, mevcut bir yerleşimde medyanın güncellenmesi için yaygın bir senaryodur.

Gömülü bir videonun içerik türü (MIME) belirlenebilir mi?
Evet. Gömülü bir videonun okunup kullanılabilecek bir content type vardır, örneğin diske kaydedildiğinde.