Hantera videoramar i presentationer med Java

Introduktion

Videor kan hjälpa till att förklara idéer och engagera en publik. Aspose.Slides för Java låter dig lägga till videoramar på bildspel, justera uppspelningsinställningar, hantera bildtexter och extrahera inbäddad videodata.

PowerPoint stöder lokala videor och länkar till videor på nätet, såsom YouTube‑videor.

För att representera videodata och videoramar tillhandahåller Aspose.Slides gränssnitten IVideo och IVideoFrame, samt andra relevanta typer.

Skapa en inbäddad videoram

Om videofilen du vill lägga till på din bild finns lokalt kan du skapa en videoram för att bädda in videon i din presentation.

Detta exempel bäddar in en lokal video på den första bilden i en befintlig presentation och sparar resultatet. Ramens koordinater och dimensioner är i punkter. Strömmen förblir öppen tills sparandet är klart eftersom LoadingStreamBehavior.KeepLocked låser den medan presentationen använder den.

import com.aspose.slides.*;
import java.io.FileInputStream;

Presentation presentation = new Presentation("presentation.pptx");
try (FileInputStream videoStream = new FileInputStream("video.mp4")) {
    ISlide slide = presentation.getSlides().get_Item(0);

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

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

Du kan också skicka en lokal videoväg direkt till addVideoFrame. Detta exempel bäddar in videon på den första bilden i en ny presentation. Videon måste förbli tillgänglig tills presentationen sparas.

import com.aspose.slides.*;

Presentation presentation = new Presentation();
try {
    ISlide 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();
}

Skapa en videoram med video från en webbkälla

Microsoft PowerPoint stöder online‑videor i presentationer. Du kan skapa en videoram som länkar till en online‑video, såsom en YouTube‑video.

Detta exempel lägger till en YouTube‑videolänk och miniatyr på den första bilden. Byt ut video‑identifieraren för att använda en annan video. Metoden setPlayMode begär automatisk uppspelning. Nedladdning av miniatyren och uppspelning av videon kräver internetåtkomst. Presentationsvisaren måste också stödja online‑videouppspelning.

import com.aspose.slides.*;
import java.io.InputStream;
import java.net.URL;

Presentation presentation = new Presentation();
try {
    ISlide slide = presentation.getSlides().get_Item(0);

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

    String thumbnailUrl = "https://img.youtube.com/vi/" + videoId + "/hqdefault.jpg";
    URL thumbnailLocation = new URL(thumbnailUrl);
    try (InputStream thumbnailStream = thumbnailLocation.openStream()) {
        IPPImage thumbnail = presentation.getImages().addImage(thumbnailStream);
        videoFrame.getPictureFormat().getPicture().setImage(thumbnail);
    }

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

Spela upp en video i helskärmsläge

I en träningspresentation kan du spela upp en mjukvarudemonstration i helskärmsläge så publiken kan se detaljerna. Anropa setFullScreenMode med true för att aktivera detta beteende under uppspelning.

Detta exempel öppnar en presentation, hittar den första IVideoFrame på den första bilden och aktiverar helskärmsuppspelning. Inmatningspresentationen måste innehålla minst en bild med en befintlig videoram på den första bilden.

import com.aspose.slides.*;

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

    for (IShape shape : slide.getShapes()) {
        if (shape instanceof IVideoFrame) {
            IVideoFrame videoFrame = (IVideoFrame) shape;
            videoFrame.setFullScreenMode(true);
            break;
        }
    }

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

Helskärmsuppspelning styr hur videon visas. Oberoende styr setPlayMode om den startar automatiskt eller vid klick, och setPlayLoopMode styr om den upprepas. För att välja startbeteende, sätt uppspelningsläget till VideoPlayModePreset.Auto eller VideoPlayModePreset.OnClick. Exemplet bevarar de befintliga start‑ och loop‑inställningarna.

Spola tillbaka en video efter uppspelning

I en träningspresentation gör återgång av en demonstrationsvideo till början den redo för presentatören att spela upp igen. Anropa setRewindVideo med true för att återgå videon till början efter att uppspelningen är klar.

Detta exempel öppnar en presentation, hittar den första IVideoFrame på den första bilden och möjliggör spolar tillbaka. Det inaktiverar looping så att uppspelning kan avslutas och sätter uppspelning att starta vid klick. Inmatningspresentationen måste innehålla minst en bild med en befintlig videoram på den första bilden.

import com.aspose.slides.*;

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

    for (IShape shape : slide.getShapes()) {
        if (shape instanceof IVideoFrame) {
            IVideoFrame videoFrame = (IVideoFrame) shape;
            videoFrame.setRewindVideo(true);
            videoFrame.setPlayLoopMode(false);
            videoFrame.setPlayMode(VideoPlayModePreset.OnClick);
            break;
        }
    }

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

Spolning återför videon till början utan att starta den igen. Däremot återupprepar ett anrop av setPlayLoopMode med true uppspelningen automatiskt. Håll looping inaktiverad när du vill att videon ska avslutas och vara redo att spelas igen. setPlayMode styr oberoende automatisk eller klick‑start; detta exempel använder VideoPlayModePreset.OnClick så presentatören kontrollerar när uppspelningen startar. Ställ in uppspelningsläget efter loop‑inställningen, som visas i exemplet. Spolning fungerar oberoende av setFullScreenMode.

Beskär en videoram

Använd IVideoFrame.setTrimFromStart och IVideoFrame.setTrimFromEnd för att hoppa över en del av början eller slutet av en video under uppspelning. Båda värdena är i millisekunder. Beskärning ändrar uppspelningsinställningarna utan att ändra den inbäddade videodatan.

Ställ in triminställningar

Detta exempel bäddar in en lokal video och hoppar över de första 2,5 sekunderna och den sista sekunden under uppspelning. Använd en video som är längre än 3,5 sekunder så att ett spelbart segment kvarstår.

import com.aspose.slides.*;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;

Presentation presentation = new Presentation();
try {
    ISlide slide = presentation.getSlides().get_Item(0);

    Path videoPath = Paths.get("video.mp4");
    byte[] videoData = Files.readAllBytes(videoPath);
    IVideo video = presentation.getVideos().addVideo(videoData);

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

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

Läs triminställningar

Detta exempel skriver ut trimvärdena för den första videoramen på den första bilden i millisekunder. Presentationen måste innehålla minst en bild. Om den bilden saknar videoram skrivs inget ut. Det föregående exemplet ger värdena 2500 och 1000.

import com.aspose.slides.*;

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

    for (IShape shape : slide.getShapes()) {
        if (shape instanceof IVideoFrame) {
            IVideoFrame videoFrame = (IVideoFrame) shape;
            System.out.println("Trim from start: " + videoFrame.getTrimFromStart() + " ms");
            System.out.println("Trim from end: " + videoFrame.getTrimFromEnd() + " ms");
            break;
        }
    }
} finally {
    presentation.dispose();
}

Hantera videobildtexter

Aspose.Slides låter dig hantera undertexter för videoramar i PowerPoint‑presentationer. Undertexter lagras i WebVTT‑format och exponeras via metoden IVideoFrame.getCaptionTracks .

Lägg till undertexter i en videoram

Detta exempel bäddar in en lokal video och lägger till ett WebVTT‑undertextspår med etiketten English. Undertextens tidsstämplar bör matcha videon. Den sparade presentationen innehåller både videon och dess undertexter.

import com.aspose.slides.*;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;

Presentation presentation = new Presentation();
try {
    ISlide slide = presentation.getSlides().get_Item(0);

    Path videoPath = Paths.get("video.mp4");
    byte[] videoData = Files.readAllBytes(videoPath);
    IVideo video = presentation.getVideos().addVideo(videoData);

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

Gränssnittet ICaptionsCollection erbjuder också en överlagring som låter dig lägga till undertexter från en ström.

Extrahera undertexter från en videoram

Detta exempel sparar alla undertextspår från videoramar på den första bilden som separata WebVTT‑filer. Sekventiella nummer håller utdatafilerna distinkta. Konsolen rapporterar antalet extraherade spår. Presentationen måste innehålla minst en bild.

import com.aspose.slides.*;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;

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

    int trackCount = 0;
    for (IShape shape : slide.getShapes()) {
        if (shape instanceof IVideoFrame) {
            IVideoFrame videoFrame = (IVideoFrame) shape;
            for (ICaptions captionTrack : videoFrame.getCaptionTracks()) {
                trackCount++;
                Path outputPath = Paths.get("captions_" + trackCount + ".vtt");
                Files.write(outputPath, captionTrack.getBinaryData());
            }
        }
    }

    System.out.println("Caption tracks extracted: " + trackCount);
} finally {
    presentation.dispose();
}

Varje ICaptions‑objekt exponerar undertextens identifierare, etikett, binär data och undertext som en UTF‑8‑sträng.

Ta bort undertexter från en videoram

Detta exempel tar bort alla undertexter från videoramen på den första formens position på den första bilden och sparar resultatet. Det förutsätter att bilden och formen finns samt att formen är en videoram.

import com.aspose.slides.*;

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

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

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

Om du bara behöver ta bort ett undertextspår, använd metoderna remove eller removeAt istället för clear.

Extrahera video från en bild

Förutom att lägga till videor på bilder låter Aspose.Slides dig extrahera videor som är inbäddade i presentationer.

Detta exempel extraherar inbäddade videor från varje bild till separata, numrerade binära filer. Länkade videor hoppas över eftersom de saknar inbäddad data. Konsolen skriver ut varje videos MIME‑typ och det totala antalet. Utdata använder den generiska filändelsen .bin; ändra den för att matcha den rapporterade mediatypen vid behov.

import com.aspose.slides.*;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;

Presentation presentation = new Presentation("presentation_with_videos.pptx");
try {
    int videoCount = 0;
    for (ISlide slide : presentation.getSlides()) {
        for (IShape shape : slide.getShapes()) {
            if (shape instanceof IVideoFrame) {
                IVideoFrame videoFrame = (IVideoFrame) shape;
                IVideo video = videoFrame.getEmbeddedVideo();
                if (video == null) {
                    System.out.println("Skipped a linked video: no embedded data is available.");
                    continue;
                }

                videoCount++;
                Path outputPath = Paths.get("extracted_video_" + videoCount + ".bin");
                Files.write(outputPath, video.getBinaryData());
                System.out.println("Video " + videoCount + ": " + video.getContentType());
            }
        }
    }

    System.out.println("Embedded videos extracted: " + videoCount);
} finally {
    presentation.dispose();
}

FAQ

Vilka videouppspelningsparametrar kan ändras för en videoram?

Du kan styra uppspelningsläget (auto eller vid klick) och loopning. Dessa alternativ är tillgängliga via VideoFrame‑objektets metoder.

Påverkar tillägg av en video PPTX‑filens storlek?

Ja. När du bäddar in en lokal video inkluderas den binära datan i dokumentet, så presentationsstorleken växer i proportion till filens storlek. När du länkar till en online‑video och lägger till en miniatyr lagrar presentationen länken och förhandsbilden istället för videodatan, vilket vanligtvis ger en mindre storleksökning.

Kan jag ersätta videon i en befintlig videoram utan att ändra dess position och storlek?

Ja. Du kan byta ut videoinnehållet i ramen medan du behåller formens geometri; detta är ett vanligt scenario för att uppdatera media i en befintlig layout.

Kan innehållstypen (MIME) för en inbäddad video bestämmas?

Ja. En inbäddad video har en innehållstyp som du kan läsa och använda, till exempel när du sparar den till disk.