Videókeretek kezelése prezentációkban PHP használatával

Bevezetés

A videók segíthetnek a gondolatok magyarázatában és a közönség bevonásában. Az Aspose.Slides for PHP via Java lehetővé teszi videókeretek hozzáadását a diákhoz, a lejátszási beállítások módosítását, a feliratok kezelését és a beágyazott videóadatok kinyerését.

PowerPoint támogatja a helyi videókat és az online videókra mutató hivatkozásokat, például a YouTube‑videókat.

A videóadatok és videókeretek ábrázolásához az Aspose.Slides biztosítja a Video osztályt, a VideoFrame osztályt és egyéb kapcsolódó típusokat.

Beágyazott videókeret létrehozása

Ha a diára felvenni kívánt videofájl helyben van tárolva, létrehozhatsz egy videókeretet, amely beágyazza a videót a bemutatóba.

Ez a példa egy helyi videót ágyaz be egy meglévő bemutató első diájára, majd elmenti az eredményt. A keret koordinátái és méretei pontban vannak megadva. A folyam (stream) nyitva marad a mentés befejezéséig, mivel a LoadingStreamBehavior::KeepLocked zárolva tartja, amíg a bemutató használja.

use aspose\slides\LoadingStreamBehavior;
use aspose\slides\Presentation;
use aspose\slides\SaveFormat;

$presentation = new Presentation("presentation.pptx");
$videoStream = null;
try {
    $videoStream = new Java("java.io.FileInputStream", "video.mp4");
    $slide = $presentation->getSlides()->get_Item(0);

    $video = $presentation->getVideos()->addVideo($videoStream, LoadingStreamBehavior::KeepLocked);
    $slide->getShapes()->addVideoFrame(10, 10, 150, 250, $video);

    $presentation->save("embedded_video.pptx", SaveFormat::Pptx);
} finally {
    if ($videoStream !== null) {
        $videoStream->close();
    }
    $presentation->dispose();
}

Megadhatod a helyi videó elérési útját közvetlenül a addVideoFrame metódusnak. Ez a példa a videót egy új bemutató első diájára ágyazza be. A videónak a mentés befejezéséig hozzáférhetőnek kell maradnia.

use aspose\slides\Presentation;
use aspose\slides\SaveFormat;

$presentation = new Presentation();
try {
    $slide = $presentation->getSlides()->get_Item(0);

    $slide->getShapes()->addVideoFrame(50, 150, 300, 150, "video.avi");

    $presentation->save("video_from_path.pptx", SaveFormat::Pptx);
} finally {
    $presentation->dispose();
}

Videókeret létrehozása webes forrásból származó videóval

Microsoft PowerPoint támogatja az online videókat a bemutatókban. Létrehozhatsz egy videókeretet, amely egy online videóra mutat, például egy YouTube‑videóra.

Ez a példa egy YouTube videó hivatkozást és előnézeti képet ad hozzá az első diához. Cseréld ki a videó azonosítót, ha másik videót szeretnél használni. A setPlayMode metódus automatikus lejátszást kér. Az előnézeti kép letöltése és a videó lejátszása internetkapcsolatot igényel. A bemutató megjelenítőnek is támogatnia kell az online videó lejátszást.

use aspose\slides\Presentation;
use aspose\slides\SaveFormat;
use aspose\slides\VideoPlayModePreset;

$presentation = new Presentation();
try {
    $slide = $presentation->getSlides()->get_Item(0);

    $videoId = "aqz-KE-bpKQ";
    $videoUrl = "https://www.youtube.com/embed/" . $videoId;
    $videoFrame = $slide->getShapes()->addVideoFrame(10, 10, 427, 240, $videoUrl);
    $videoFrame->setPlayMode(VideoPlayModePreset::Auto);

    $thumbnailUrl = "https://img.youtube.com/vi/" . $videoId . "/hqdefault.jpg";
    $thumbnailLocation = new Java("java.net.URL", $thumbnailUrl);
    $thumbnailStream = $thumbnailLocation->openStream();
    try {
        $thumbnail = $presentation->getImages()->addImage($thumbnailStream);
        $videoFrame->getPictureFormat()->getPicture()->setImage($thumbnail);
    } finally {
        $thumbnailStream->close();
    }

    $presentation->save("online_video.pptx", SaveFormat::Pptx);
} finally {
    $presentation->dispose();
}

Videó lejátszása teljes képernyős módban

Egy oktatási bemutatóban lejátszhatsz egy szoftver demonstrációt teljes képernyőn, hogy a közönség lássa a részleteket. Hívd meg a setFullScreenMode metódust true értékkel a viselkedés engedélyezéséhez a lejátszás során.

Ez a példa megnyit egy bemutatót, megtalálja az első VideoFrame a első dián, és engedélyezi a teljes képernyős lejátszást. A bemeneti bemutatónak legalább egy, az első dián létező videókerettel kell rendelkeznie.

use aspose\slides\Presentation;
use aspose\slides\SaveFormat;

$presentation = new Presentation("training.pptx");
try {
    $slide = $presentation->getSlides()->get_Item(0);

    $shapeCount = java_values($slide->getShapes()->size());
    for ($shapeIndex = 0; $shapeIndex < $shapeCount; $shapeIndex++) {
        $shape = $slide->getShapes()->get_Item($shapeIndex);
        if (java_instanceof($shape, new JavaClass("com.aspose.slides.VideoFrame"))) {
            $videoFrame = $shape;
            $videoFrame->setFullScreenMode(true);
            break;
        }
    }

    $presentation->save("full_screen_video.pptx", SaveFormat::Pptx);
} finally {
    $presentation->dispose();
}

A teljes képernyős lejátszás szabályozza, hogyan jelenik meg a videó. Függetlenül, a setPlayMode határozza meg, automatikusan vagy kattintásra indul-e, a setPlayLoopMode pedig szabályozza az ismétlést. A kezdési viselkedés kiválasztásához állítsd be a lejátszási módot a VideoPlayModePreset::Auto or VideoPlayModePreset::OnClick értékre. A példa megtartja a meglévő kezdési és ismétlődési beállításokat.

Videó visszatekerése lejátszás után

Egy oktatási bemutatóban a demonstrációs videó elejére visszatekerése lehetővé teszi, hogy az előadó újra lejátszhassa. Hívd meg a setRewindVideo metódust true értékkel, hogy a videó a lejátszás befejezése után visszatérjen a kezdethez.

Ez a példa megnyit egy bemutatót, megtalálja az első VideoFrame a első dián, és engedélyezi a visszatekerést. Letiltja az ismétlést, hogy a lejátszás befejeződhessen, és beállítja a lejátszást kattintásra indítva. A bemeneti bemutatónak legalább egy, az első dián létező videókerettel kell rendelkeznie.

use aspose\slides\Presentation;
use aspose\slides\SaveFormat;
use aspose\slides\VideoPlayModePreset;

$presentation = new Presentation("training.pptx");
try {
    $slide = $presentation->getSlides()->get_Item(0);

    $shapeCount = java_values($slide->getShapes()->size());
    for ($shapeIndex = 0; $shapeIndex < $shapeCount; $shapeIndex++) {
        $shape = $slide->getShapes()->get_Item($shapeIndex);
        if (java_instanceof($shape, new JavaClass("com.aspose.slides.VideoFrame"))) {
            $videoFrame = $shape;
            $videoFrame->setRewindVideo(true);
            $videoFrame->setPlayLoopMode(false);
            $videoFrame->setPlayMode(VideoPlayModePreset::OnClick);
            break;
        }
    }

    $presentation->save("rewind_video.pptx", SaveFormat::Pptx);
} finally {
    $presentation->dispose();
}

A visszatekerés a videót a kezdetéhez viszi anélkül, hogy újraindulna. Ezzel szemben a setPlayLoopMode true értékkel való meghívása automatikusan ismétli a lejátszást. Kapcsold ki az ismétlést, ha azt szeretnéd, hogy a videó befejeződjön és készen álljon az újra lejátszásra. A setPlayMode függetlenül szabályozza az automatikus vagy kattintásra indított indítást; ez a példa a VideoPlayModePreset::OnClick értéket használja, így az előadó szabályozza a lejátszás kezdetét. Állítsd be a lejátszási módot a ciklusbeállítás után, ahogyan a példában látható. A visszatekerés független a setFullScreenMode működésétől.

Videókeret vágása

A VideoFrame::setTrimFromStart és a VideoFrame::setTrimFromEnd használatával kihagyhatod a videó elejének vagy végének egy részét a lejátszás során. Mindkét érték ezredmásodpercben van megadva. A vágás módosítja a lejátszási beállításokat anélkül, hogy a beágyazott videóadatot változtatná.

Vágási beállítások beállítása

Ez a példa egy helyi videót ágyaz be, és a lejátszás során kihagyja az első 2,5 másodpercet és az utolsó másodpercet. Használj legalább 3,5 másodpercnél hosszabb videót, hogy lejátszható szegmens maradjon.

use aspose\slides\Presentation;
use aspose\slides\SaveFormat;

$presentation = new Presentation();
try {
    $slide = $presentation->getSlides()->get_Item(0);

    $videoFile = new Java("java.io.File", "video.mp4");
    $videoPath = $videoFile->toPath();
    $videoData = java("java.nio.file.Files")->readAllBytes($videoPath);
    $video = $presentation->getVideos()->addVideo($videoData);

    $videoFrame = $slide->getShapes()->addVideoFrame(50, 50, 640, 360, $video);
    $videoFrame->setTrimFromStart(2500);
    $videoFrame->setTrimFromEnd(1000);

    $presentation->save("video_with_trim.pptx", SaveFormat::Pptx);
} finally {
    $presentation->dispose();
}

Vágási beállítások olvasása

Ez a példa kiírja az első videókeret vágási értékeit az első dián ezredmásodpercben. A bemutatónak legalább egy diát kell tartalmaznia. Ha azon a dián nincs videókeret, semmi sem kerül kiírásra. Az előző példa 2500 és 1000 értékeket eredményez.

use aspose\slides\Presentation;

$presentation = new Presentation("video_with_trim.pptx");
try {
    $slide = $presentation->getSlides()->get_Item(0);

    $shapeCount = java_values($slide->getShapes()->size());
    for ($shapeIndex = 0; $shapeIndex < $shapeCount; $shapeIndex++) {
        $shape = $slide->getShapes()->get_Item($shapeIndex);
        if (java_instanceof($shape, new JavaClass("com.aspose.slides.VideoFrame"))) {
            $videoFrame = $shape;
            echo "Trim from start: " . java_values($videoFrame->getTrimFromStart()) . " ms\n";
            echo "Trim from end: " . java_values($videoFrame->getTrimFromEnd()) . " ms\n";
            break;
        }
    }
} finally {
    $presentation->dispose();
}

Videó feliratok kezelése

Az Aspose.Slides lehetővé teszi a zárt feliratok kezelését a PowerPoint bemutatók videókereteihez. A feliratok WebVTT formátumban tárolódnak, és a VideoFrame::getCaptionTracks metóduson keresztül érhetők el.

Feliratok hozzáadása videókerethez

Ez a példa egy helyi videót ágyaz be, és hozzáad egy WebVTT feliratsp tracket ‘English’ címkével. A felirat időbélyegeinek egyezniük kell a videóval. A mentett bemutató tartalmazza a videót és a feliratokat is.

use aspose\slides\Presentation;
use aspose\slides\SaveFormat;

$presentation = new Presentation();
try {
    $slide = $presentation->getSlides()->get_Item(0);

    $videoFile = new Java("java.io.File", "video.mp4");
    $videoPath = $videoFile->toPath();
    $videoData = java("java.nio.file.Files")->readAllBytes($videoPath);
    $video = $presentation->getVideos()->addVideo($videoData);

    $videoFrame = $slide->getShapes()->addVideoFrame(0, 0, 100, 100, $video);
    $videoFrame->getCaptionTracks()->add("English", "track.vtt");

    $presentation->save("video_with_captions.pptx", SaveFormat::Pptx);
} finally {
    $presentation->dispose();
}

A CaptionsCollection osztály továbbá egy túlterhelést biztosít, amely lehetővé teszi feliratok hozzáadását egy folyam (stream) segítségével.

Feliratok kinyerése videókeretből

Ez a példa az első dián lévő videókeretek összes feliratsávját különálló WebVTT fájlokként menti. A sorozatszámok biztosítják, hogy a kimeneti fájlok különbözőek legyenek. A konzol jelzi a kinyert sávok számát. A bemutatónak legalább egy diát kell tartalmaznia.

use aspose\slides\Presentation;

$presentation = new Presentation("video_with_captions.pptx");
try {
    $slide = $presentation->getSlides()->get_Item(0);

    $trackCount = 0;
    $shapeCount = java_values($slide->getShapes()->size());
    for ($shapeIndex = 0; $shapeIndex < $shapeCount; $shapeIndex++) {
        $shape = $slide->getShapes()->get_Item($shapeIndex);
        if (java_instanceof($shape, new JavaClass("com.aspose.slides.VideoFrame"))) {
            $videoFrame = $shape;
            $captionCount = java_values($videoFrame->getCaptionTracks()->getCount());
            for ($trackIndex = 0; $trackIndex < $captionCount; $trackIndex++) {
                $captionTrack = $videoFrame->getCaptionTracks()->get_Item($trackIndex);
                $trackCount++;
                $outputStream = new Java("java.io.FileOutputStream", "captions_" . $trackCount . ".vtt");
                try {
                    $outputStream->write($captionTrack->getBinaryData());
                } finally {
                    $outputStream->close();
                }
            }
        }
    }

    echo "Caption tracks extracted: " . $trackCount . "\n";
} finally {
    $presentation->dispose();
}

Minden Captions objektum kiállítja a feliratazonosítót, a címkét, a bináris adatot és a felirat szövegét UTF‑8 karakterláncként.

Feliratok eltávolítása videókeretből

Ez a példa eltávolítja az összes feliratot az első dián, az első alakzat pozíciójában lévő videókeretről, és elmenti az eredményt. Feltételezi, hogy a dia és az alakzat létezik, és hogy az alakzat egy videókeret.

use aspose\slides\Presentation;
use aspose\slides\SaveFormat;

$presentation = new Presentation("video_with_captions.pptx");
try {
    $slide = $presentation->getSlides()->get_Item(0);

    $videoFrame = $slide->getShapes()->get_Item(0);
    $videoFrame->getCaptionTracks()->clear();

    $presentation->save("video_without_captions.pptx", SaveFormat::Pptx);
} finally {
    $presentation->dispose();
}

Ha csak egy feliratsáv eltávolítására van szükség, használd a remove vagy removeAt metódusokat a clear helyett.

Videó kinyerése diáról

A videók diákhoz adásán túl az Aspose.Slides lehetővé teszi a bemutatókba beágyazott videók kinyerését.

Ez a példa minden diáról kinyeri a beágyazott videókat különálló, számozott bináris fájlokba. A hivatkozott videókat kihagyja, mivel nincs beágyazott adatuk. A konzol kiírja minden videó MIME‑típusát és a teljes darabszámot. A kimenet általános .bin kiterjesztést használ; szükség esetén változtasd meg a jelentett médiatípusnak megfelelően.

use aspose\slides\Presentation;

$presentation = new Presentation("presentation_with_videos.pptx");
try {
    $videoCount = 0;
    $slideCount = java_values($presentation->getSlides()->size());
    for ($slideIndex = 0; $slideIndex < $slideCount; $slideIndex++) {
        $slide = $presentation->getSlides()->get_Item($slideIndex);
        $shapeCount = java_values($slide->getShapes()->size());
        for ($shapeIndex = 0; $shapeIndex < $shapeCount; $shapeIndex++) {
            $shape = $slide->getShapes()->get_Item($shapeIndex);
            if (java_instanceof($shape, new JavaClass("com.aspose.slides.VideoFrame"))) {
                $videoFrame = $shape;
                $video = $videoFrame->getEmbeddedVideo();
                if (java_is_null($video)) {
                    echo "Skipped a linked video: no embedded data is available.\n";
                    continue;
                }

                $videoCount++;
                $outputStream = new Java("java.io.FileOutputStream", "extracted_video_" . $videoCount . ".bin");
                try {
                    $outputStream->write($video->getBinaryData());
                } finally {
                    $outputStream->close();
                }
                echo "Video " . $videoCount . ": " . java_values($video->getContentType()) . "\n";
            }
        }
    }

    echo "Embedded videos extracted: " . $videoCount . "\n";
} finally {
    $presentation->dispose();
}

GYIK

Milyen videólejátszási paraméterek módosíthatók egy videókeretnél?

A lejátszási mód (automatikus vagy kattintásra) és az ismétlés módja módosítható. Ezek az opciók a VideoFrame objektum metódusain keresztül érhetők el.

Beépített videó növeli a PPTX fájl méretét?

Igen. Ha helyi videót ágyazol be, a bináris adat a dokumentumba kerül, így a bemutató mérete a fájl méretével arányosan nő. Ha online videóra hivatkozol és előnézeti képet adsz hozzá, a bemutató a hivatkozást és a előnézeti képet tárolja a videóadat helyett, így a méretnövekedés általában kisebb.

Lecserélhetem a videót egy meglévő videókeretben anélkül, hogy megváltoztatnám a pozícióját és méretét?

Igen. A videótartalmat cserélheted a kereten belül a forma geometriai adatait megtartva; ez egy gyakori eset a médiák frissítésére meglévő elrendezésben.

Megállapítható egy beágyazott videó tartalom típusa (MIME)?

Igen. Egy beágyazott videónak van egy tartalom típusa, amelyet kiolvashatsz és használhatsz, például amikor lemented a lemezre.