Spravujte video rámce v prezentacích pomocí C++

Úvod

Dobře umístěné video v prezentaci může učinit vaše sdělení přesvědčivějším a zvýšit úroveň zapojení publika.

PowerPoint vám umožňuje přidávat videa do snímku v prezentaci dvěma způsoby:

  • Přidat nebo vložit lokální video (uložené ve vašem počítači)
  • Přidat online video (z webového zdroje, například YouTube).

Aby vám Aspose.Slides umožnil přidávat videa (video objekty) do prezentace, poskytuje rozhraní IVideo, rozhraní IVideoFrame a další související typy.

Vytvoření vloženého video rámce

Pokud je video soubor, který chcete přidat do svého snímku, uložen lokálně, můžete vytvořit video rámec pro vložení videa do vaší prezentace.

  1. Vytvořte instanci třídy Presentation .
  2. Získejte odkaz na snímek pomocí jeho indexu.
  3. Přidejte objekt IVideo a předávejte cestu k video souboru pro vložení videa do prezentace.
  4. Přidejte objekt IVideoFrame pro vytvoření rámce pro video.
  5. Uložte upravenou prezentaci.

Tento C++ kód vám ukazuje, jak přidat lokálně uložené video do prezentace:

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

Alternativně můžete přidat video tím, že jeho cestu k souboru předáte přímo metodě 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");

Vytvoření video rámce s videem z webového zdroje

Microsoft PowerPoint 2013 a novější podporuje videa z YouTube v prezentacích. Pokud je video, které chcete použít, dostupné online (např. na YouTube), můžete jej přidat do prezentace pomocí jeho webového odkazu.

  1. Vytvořte instanci třídy Presentation
  2. Získejte odkaz na snímek pomocí jeho indexu.
  3. Přidejte objekt IVideo a předávejte odkaz na video.
  4. Nastavte náhled pro video rámec.
  5. Uložte prezentaci.

Tento C++ kód vám ukazuje, jak přidat video z webu do snímku v PowerPoint prezentaci:

// Cesta k adresáři dokumentů.
const String outPath = u"../out/AddVideoFrameFromWebSource_out.pptx";
const String filePath = u"../templates/video1.avi";

// Vytvoří objekt Presentation, který představuje soubor prezentace
SharedPtr<Presentation> pres = MakeObject<Presentation>();

// Přistupuje k prvnímu snímku
SharedPtr<ISlide> slide = pres->get_Slides()->idx_get(0);

// Přidá video rámec 
System::SharedPtr<IVideoFrame> vf = slide->get_Shapes()->AddVideoFrame(10, 10, 427, 240,u"https://www.youtube.com/embed/Tj75Arhq5ho");

// Nastaví režim přehrávání a hlasitost videa
vf->set_PlayMode(VideoPlayModePreset::Auto);

//Uloží prezentaci na disk
pres->Save(outPath, Aspose::Slides::Export::SaveFormat::Pptx);

Správa titulků videa

Aspose.Slides vám umožňuje spravovat uzavřené titulky pro video rámce v PowerPoint prezentacích. Titulky jsou uloženy ve formátu WebVTT a jsou zpřístupněny prostřednictvím metody IVideoFrame::get_CaptionTracks.

Přidat titulky do video rámce

Pro přidání titulků do video rámce:

  1. Vytvořte instanci třídy Presentation.
  2. Přidejte video do prezentace.
  3. Přidejte objekt IVideoFrame na snímek.
  4. Použijte ICaptionsCollection vrácenou metodou get_CaptionTracks k přidání WebVTT stopy titulků.
  5. Uložte upravenou prezentaci.

Následující kód vám ukazuje, jak přidat titulky do video rámce:

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

Rozhraní ICaptionsCollection také poskytuje přetížení, které vám umožní přidat titulky ze streamu.

Extrahovat titulky z video rámce

Pro extrahování titulků z video rámce:

  1. Načtěte prezentaci, která obsahuje video.
  2. Najděte cílový objekt IVideoFrame.
  3. Procházejte stopy titulků vrácené metodou get_CaptionTracks.
  4. Uložte každou stopu titulků do souboru .vtt.

Následující kód vám ukazuje, jak extrahovat titulky z video rámce:

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())
        {
                    // Uloží stopu titulků do souboru WebVTT.
                    auto filePath = captionTrack->get_CaptionId().ToString() + u".vtt";
                    File::WriteAllBytes(filePath, captionTrack->get_BinaryData());
        }
    }
}

presentation->Dispose();

Každý objekt ICaptions poskytuje identifikátor titulků, popisek, binární data a data titulků jako řetězec UTF-8.

Odstranit titulky z video rámce

Pro odstranění titulků z video rámce:

  1. Načtěte prezentaci, která obsahuje video.
  2. Získejte cílový objekt IVideoFrame.
  3. Odstraňte stopy titulků ze sbírky vrácené metodou get_CaptionTracks.
  4. Uložte upravenou prezentaci.

Následující kód vám ukazuje, jak odstranit všechny titulky z video rámce:

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

// Odstraní všechny titulky z video rámce.
videoFrame->get_CaptionTracks()->Clear();

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

Pokud potřebujete odstranit pouze jednu stopu titulků, použijte metody Remove nebo RemoveAt místo Clear.

Extrahování videa ze snímku

Kromě přidávání videí do snímků vám Aspose.Slides umožňuje extrahovat videa vložená v prezentacích.

  1. Vytvořte instanci třídy Presentation pro načtení prezentace obsahující video.
  2. Procházejte všechny objekty ISlide.
  3. Procházejte všechny objekty IShape a najděte VideoFrame.
  4. Uložte video na disk.

Tento C++ kód vám ukazuje, jak extrahovat video ze snímku prezentace:

// Cesta k adresáři dokumentů.
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());
        }
    }
}

Často kladené otázky

Které parametry přehrávání videa lze změnit pro VideoFrame?

Můžete ovládat režim přehrávání (automaticky nebo při kliknutí) a opakování. Tyto možnosti jsou dostupné prostřednictvím vlastností objektu VideoFrame.

Ovlivňuje přidání videa velikost souboru PPTX?

Ano. Když vložíte lokální video, binární data jsou zahrnuta do dokumentu, takže velikost prezentace roste úměrně velikosti souboru. Když přidáte online video, vloží se odkaz a náhled, takže nárůst velikosti je menší.

Mohu nahradit video v existujícím VideoFrame, aniž bych změnil jeho pozici a velikost?

Ano. Můžete vyměnit obsah videa uvnitř rámce při zachování geometrie tvaru; to je běžný scénář pro aktualizaci médií v existujícím rozložení.

Lze určit typ obsahu (MIME) vloženého videa?

Ano. Vložené video má typ obsahu, který můžete přečíst a použít, například při ukládání na disk.