Videókeretek kezelése prezentációkban Node.js használatával

Bevezetés

A videók segíthetnek ötletek magyarázatában és a közönség bevonásában. Az Aspose.Slides for Node.js a Java segítségével 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, feliratok kezelését és a beágyazott videóadatok kinyerését.

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

A videóadatok és videókeretek ábrázolásához az Aspose.Slides biztosítja a Video osztályt, a VideoFrame osztályt és más releváns típusokat.

Beágyazott videókeret létrehozása

Ha a diára felvenni kívánt videófájl helyileg van tárolva, létrehozhat egy videókeretet a videó prezentációba való beágyazásához.

Ez a példa beágyaz egy helyi videót egy meglévő prezentáció első diájára, és elmenti az eredményt. A keret koordinátái és méretei pontban vannak megadva. A folyam nyitva marad, amíg a mentés be nem fejeződik, mivel a LoadingStreamBehavior.KeepLocked zárolva tartja, amíg a prezentáció használja.

const aspose = { slides: require("aspose.slides.via.java") };
const java = require("java");

const presentation = new aspose.slides.Presentation("presentation.pptx");
try {
    const videoStream = java.newInstanceSync("java.io.FileInputStream", "video.mp4");
    try {
        const slide = presentation.getSlides().get_Item(0);

        const video = presentation.getVideos().addVideo(videoStream, aspose.slides.LoadingStreamBehavior.KeepLocked);
        slide.getShapes().addVideoFrame(10, 10, 150, 250, video);

        presentation.save("embedded_video.pptx", aspose.slides.SaveFormat.Pptx);
    } finally {
        videoStream.close();
    }
} finally {
    presentation.dispose();
}

A helyi videó útvonalát közvetlenül is átadhatja a addVideoFrame metódusnak. Ez a példa beágyazza a videót egy új prezentáció első diájára. A videónak elérhetőnek kell maradnia a prezentáció mentéséig.

const aspose = { slides: require("aspose.slides.via.java") };

const presentation = new aspose.slides.Presentation();
try {
    const slide = presentation.getSlides().get_Item(0);

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

    presentation.save("video_from_path.pptx", aspose.slides.SaveFormat.Pptx);
} finally {
    presentation.dispose();
}

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

A Microsoft PowerPoint támogatja az online videókat a prezentációkban. Létrehozhat egy videókeretet, amely egy online videóra, például egy YouTube videóra hivatkozik.

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

const aspose = { slides: require("aspose.slides.via.java") };
const java = require("java");

const presentation = new aspose.slides.Presentation();
try {
    const slide = presentation.getSlides().get_Item(0);

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

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

    presentation.save("online_video.pptx", aspose.slides.SaveFormat.Pptx);
} finally {
    presentation.dispose();
}

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

Egy képzési prezentációban lejátszhat egy szoftver bemutatót teljes képernyő módban, hogy a közönség láthassa a részleteket. Hívja meg a setFullScreenMode metódust true értékkel a viselkedés lejátszás közbeni engedélyezéséhez.

Ez a példa megnyit egy prezentációt, megtalálja az első VideoFrame elemet az első dián, és engedélyezi a teljes képernyős lejátszást. A bemeneti prezentációnak legalább egy diát kell tartalmaznia, amelyen létezik egy video keret az első dián.

const aspose = { slides: require("aspose.slides.via.java") };
const java = require("java");

const presentation = new aspose.slides.Presentation("training.pptx");
try {
    const slide = presentation.getSlides().get_Item(0);

    for (let shapeIndex = 0; shapeIndex < slide.getShapes().size(); shapeIndex++) {
        const shape = slide.getShapes().get_Item(shapeIndex);
        if (java.instanceOf(shape, "com.aspose.slides.VideoFrame")) {
            const videoFrame = shape;
            videoFrame.setFullScreenMode(true);
            break;
        }
    }

    presentation.save("full_screen_video.pptx", aspose.slides.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 meghatározza, automatikusan vagy kattintásra indul-e, a setPlayLoopMode pedig azt, hogy ismétlődik-e. A kezdési viselkedés kiválasztásához állítsa a lejátszási módot VideoPlayModePreset.Auto vagy VideoPlayModePreset.OnClick értékre. A példa megőrzi a meglévő kezdési és ismétlődési beállításokat.

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

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

Ez a példa megnyit egy prezentációt, megtalálja az első VideoFrame elemet az első dián, és engedélyezi a visszatekerést. Kikapcsolja az ismétlést, hogy a lejátszás befejeződhessen, és a lejátszást kattintásra állítja. A bemeneti prezentációnak legalább egy diát kell tartalmaznia, amelyen létezik egy video keret az első dián.

const aspose = { slides: require("aspose.slides.via.java") };
const java = require("java");

const presentation = new aspose.slides.Presentation("training.pptx");
try {
    const slide = presentation.getSlides().get_Item(0);

    for (let shapeIndex = 0; shapeIndex < slide.getShapes().size(); shapeIndex++) {
        const shape = slide.getShapes().get_Item(shapeIndex);
        if (java.instanceOf(shape, "com.aspose.slides.VideoFrame")) {
            const videoFrame = shape;
            videoFrame.setRewindVideo(true);
            videoFrame.setPlayLoopMode(false);
            videoFrame.setPlayMode(aspose.slides.VideoPlayModePreset.OnClick);
            break;
        }
    }

    presentation.save("rewind_video.pptx", aspose.slides.SaveFormat.Pptx);
} finally {
    presentation.dispose();
}

A visszatekerés a videót a kezdetére helyezi anélkül, hogy újra elindulna. Ezzel szemben a setPlayLoopMode true értékkel való hívása automatikusan ismétli a lejátszást. Tartsa letiltva az ismétlést, ha azt szeretné, hogy a videó befejeződjön és készen álljon a újrajátszásra. A setPlayMode függetlenül szabályozza az automatikus vagy kattintásos indítást; ez a példa a VideoPlayModePreset.OnClick értéket használja, hogy az előadó szabályozhassa a lejátszás kezdetét. Állítsa be a lejátszási módot az ismétlési beállítás után, ahogy a példában látható. A visszatekerés független a setFullScreenMode működésétől.

Videókeret vágása

Használja a VideoFrame.setTrimFromStart és a VideoFrame.setTrimFromEnd metódusokat a videó elejének vagy végének egy részének kihagyásához 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ó adatát megváltoztatná.

Vágás beállítása

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

const aspose = { slides: require("aspose.slides.via.java") };
const java = require("java");
const fs = require("fs");

const presentation = new aspose.slides.Presentation();
try {
    const slide = presentation.getSlides().get_Item(0);

    const videoBuffer = fs.readFileSync("video.mp4");
    const videoData = java.newArray("byte", Array.from(videoBuffer));
    const video = presentation.getVideos().addVideo(videoData);

    const videoFrame = slide.getShapes().addVideoFrame(50, 50, 640, 360, video);
    videoFrame.setTrimFromStart(2500);
    videoFrame.setTrimFromEnd(1000);

    presentation.save("video_with_trim.pptx", aspose.slides.SaveFormat.Pptx);
} finally {
    presentation.dispose();
}

Vágás beállításainak olvasása

Ez a példa a első videókeret vágási értékeit millisecondumban írja ki az első dián. A prezentációnak legalább egy diát kell tartalmaznia. Ha az a dia nem tartalmaz videókeretet, semmi nem kerül kiírásra. Az előző példa 2500 és 1000 értékeket ad.

const aspose = { slides: require("aspose.slides.via.java") };
const java = require("java");

const presentation = new aspose.slides.Presentation("video_with_trim.pptx");
try {
    const slide = presentation.getSlides().get_Item(0);

    for (let shapeIndex = 0; shapeIndex < slide.getShapes().size(); shapeIndex++) {
        const shape = slide.getShapes().get_Item(shapeIndex);
        if (java.instanceOf(shape, "com.aspose.slides.VideoFrame")) {
            const videoFrame = shape;
            console.log("Trim from start: " + videoFrame.getTrimFromStart() + " ms");
            console.log("Trim from end: " + videoFrame.getTrimFromEnd() + " ms");
            break;
        }
    }
} finally {
    presentation.dispose();
}

Videó feliratok kezelése

Az Aspose.Slides lehetővé teszi a videókeretekhez tartozó zárt feliratok kezelését a PowerPoint prezentációkban. A feliratok WebVTT formátumban vannak tárolva, és a VideoFrame.getCaptionTracks metóduson keresztül érhetők el.

Feliratok hozzáadása videókerethez

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

const aspose = { slides: require("aspose.slides.via.java") };
const java = require("java");
const fs = require("fs");

const presentation = new aspose.slides.Presentation();
try {
    const slide = presentation.getSlides().get_Item(0);

    const videoBuffer = fs.readFileSync("video.mp4");
    const videoData = java.newArray("byte", Array.from(videoBuffer));
    const video = presentation.getVideos().addVideo(videoData);

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

    presentation.save("video_with_captions.pptx", aspose.slides.SaveFormat.Pptx);
} finally {
    presentation.dispose();
}

A CaptionsCollection osztály emellett a addFromStream metódust is biztosítja feliratok folyamokból történő hozzáadásához.

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 a kimeneti fájlok egyediségét. A konzol jelzi a kinyert sávok számát. A prezentációnak legalább egy diát kell tartalmaznia.

const aspose = { slides: require("aspose.slides.via.java") };
const java = require("java");
const fs = require("fs");

const presentation = new aspose.slides.Presentation("video_with_captions.pptx");
try {
    const slide = presentation.getSlides().get_Item(0);

    let trackCount = 0;
    for (let shapeIndex = 0; shapeIndex < slide.getShapes().size(); shapeIndex++) {
        const shape = slide.getShapes().get_Item(shapeIndex);
        if (java.instanceOf(shape, "com.aspose.slides.VideoFrame")) {
            const videoFrame = shape;
            for (let trackIndex = 0; trackIndex < videoFrame.getCaptionTracks().getCount(); trackIndex++) {
                const captionTrack = videoFrame.getCaptionTracks().get_Item(trackIndex);
                trackCount++;
                const outputPath = "captions_" + trackCount + ".vtt";
                const outputData = Buffer.from(captionTrack.getBinaryData());
                fs.writeFileSync(outputPath, outputData);
            }
        }
    }

    console.log("Caption tracks extracted: " + trackCount);
} finally {
    presentation.dispose();
}

Minden Captions objektum megjeleníti a felirat azonosítóját, címkéjét, bináris adatait é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ő forma pozíciójában lévő videókeretről, majd elmenti az eredményt. Feltételezi, hogy a dia és a forma létezik, és hogy a forma egy videókeret.

const aspose = { slides: require("aspose.slides.via.java") };

const presentation = new aspose.slides.Presentation("video_with_captions.pptx");
try {
    const slide = presentation.getSlides().get_Item(0);

    const videoFrame = slide.getShapes().get_Item(0);
    videoFrame.getCaptionTracks().clear();

    presentation.save("video_without_captions.pptx", aspose.slides.SaveFormat.Pptx);
} finally {
    presentation.dispose();
}

Ha csak egy feliratsávot szeretne eltávolítani, használja a remove vagy a removeAt metódust a clear helyett.

Videó kinyerése diáról

A videók diára való hozzáadása mellett az Aspose.Slides lehetővé teszi a prezentáció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ók ki vannak hagyva, mivel nincs beágyazott adatuk. A konzol kiírja minden videó MIME típusát és a teljes darabszámot. A kimenet a generikus .bin kiterjesztést használja; ha szükséges, módosítsa a jelentett média típusnak megfelelően.

const aspose = { slides: require("aspose.slides.via.java") };
const java = require("java");
const fs = require("fs");

const presentation = new aspose.slides.Presentation("presentation_with_videos.pptx");
try {
    let videoCount = 0;
    for (let slideIndex = 0; slideIndex < presentation.getSlides().size(); slideIndex++) {
        const slide = presentation.getSlides().get_Item(slideIndex);
        for (let shapeIndex = 0; shapeIndex < slide.getShapes().size(); shapeIndex++) {
            const shape = slide.getShapes().get_Item(shapeIndex);
            if (java.instanceOf(shape, "com.aspose.slides.VideoFrame")) {
                const videoFrame = shape;
                const video = videoFrame.getEmbeddedVideo();
                if (video == null) {
                    console.log("Skipped a linked video: no embedded data is available.");
                    continue;
                }

                videoCount++;
                const outputPath = "extracted_video_" + videoCount + ".bin";
                const outputData = Buffer.from(video.getBinaryData());
                fs.writeFileSync(outputPath, outputData);
                console.log("Video " + videoCount + ": " + video.getContentType());
            }
        }
    }

    console.log("Embedded videos extracted: " + videoCount);
} finally {
    presentation.dispose();
}

GYIK

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

A playback mode (automatikus vagy kattintásra) és a looping vezérelhető. Ezek a beállítások a VideoFrame objektum metódusaiban érhetők el.

A videó hozzáadása befolyásolja a PPTX fájlméretet?

Igen. Ha helyi videót ágyaz be, a bináris adat a dokumentumba kerül, így a prezentáció mérete arányosan nő a fájl méretével. Ha online videóra hivatkozik és előnézeti képet ad hozzá, a prezentáció a hivatkozást és a bélyegképet tárolja a videó adat helyett, ezért a méretnövekedés általában kisebb.

Lecserélhetem a videót egy meglévő videókereten a pozíció és méret megváltoztatása nélkül?

Igen. A keretben lévő video content kicserélhető a forma geometriájának megőrzése mellett; ez gyakori eset a média frissítésére egy meglévő elrendezésben.

Megállapítható-e egy beágyazott videó tartalomtípusa (MIME)?

Igen. Egy beágyazott videónak van content type típusa, amelyet elolvashat és felhasználhat, például a lemezre mentéskor.