Zarządzanie klatkami wideo w prezentacjach przy użyciu Javy

Wprowadzenie

Odpowiednio umieszczone wideo w prezentacji może uczynić Twoją wiadomość bardziej przekonującą i zwiększyć poziom zaangażowania odbiorców.

PowerPoint umożliwia dodawanie wideo do slajdu w prezentacji na dwa sposoby:

  • Dodaj lub osadź lokalne wideo (przechowywane na komputerze)
  • Dodaj wideo online (z źródła internetowego, takiego jak YouTube).

Aby umożliwić dodawanie wideo (obiektów wideo) do prezentacji, Aspose.Slides udostępnia interfejs IVideo , interfejs IVideoFrame oraz inne istotne typy.

Utworzenie osadzonych klatek wideo

Jeśli plik wideo, który chcesz dodać do slajdu, jest przechowywany lokalnie, możesz utworzyć klatkę wideo, aby osadzić wideo w prezentacji.

  1. Utwórz instancję klasy Presentation.
  2. Uzyskaj odniesienie do slajdu za pomocą jego indeksu.
  3. Dodaj obiekt IVideo i przekaż ścieżkę do pliku wideo, aby osadzić wideo w prezentacji.
  4. Dodaj obiekt IVideoFrame , aby utworzyć klatkę dla wideo.
  5. Zapisz zmodyfikowaną prezentację.

Poniższy kod Java pokazuje, jak dodać lokalnie przechowywane wideo do prezentacji:

// Tworzy instancję klasy Presentation
Presentation pres = new Presentation("pres.pptx");
try {
    // Ładuje wideo
    FileInputStream fileStream = new FileInputStream("Wildlife.mp4");
    
    IVideo video = pres.getVideos().addVideo(fileStream, LoadingStreamBehavior.KeepLocked);

    // Pobiera pierwszy slajd i dodaje klatkę wideo
    pres.getSlides().get_Item(0).getShapes().addVideoFrame(10, 10, 150, 250, video);

    // Zapisuje prezentację na dysku
    pres.save("pres-with-video.pptx", SaveFormat.Pptx);
} catch (IOException e) {
} finally {
    if (pres != null) pres.dispose();
}

Alternatywnie możesz dodać wideo, przekazując bezpośrednio jego ścieżkę do metody addVideoFrame(float x, float y, float width, float height, IVideo video) :

Presentation pres = new Presentation();
try {
	ISlide sld = pres.getSlides().get_Item(0);
	IVideoFrame vf = sld.getShapes().addVideoFrame(50, 150, 300, 150, "video1.avi");
} finally {
	if (pres != null) pres.dispose();
}

Tworzenie klatek wideo z wideo pochodzącym ze źródeł internetowych

Microsoft PowerPoint 2013 i nowsze obsługuje filmy z YouTube w prezentacjach. Jeśli wideo, którego chcesz użyć, jest dostępne online (np. na YouTube), możesz dodać je do prezentacji za pomocą jego linku internetowego.

  1. Utwórz instancję klasy Presentation.
  2. Uzyskaj odniesienie do slajdu za pomocą jego indeksu.
  3. Dodaj obiekt IVideo i przekaż link do wideo.
  4. Ustaw miniaturę dla klatki wideo.
  5. Zapisz prezentację.
// Instancjonuje obiekt Presentation, który reprezentuje plik prezentacji
Presentation pres = new Presentation();
try {
    addVideoFromYouTube(pres, "Tj75Arhq5ho");
    pres.save("out.pptx", SaveFormat.Pptx);
} finally {
    if (pres != null) pres.dispose();
}
private static void addVideoFromYouTube(Presentation pres, String videoID)
{
    // Dodaje klatkę wideo
    IVideoFrame videoFrame = pres.getSlides().get_Item(0).getShapes().addVideoFrame(
            10, 10, 427, 240, "https://www.youtube.com/embed/" + videoID);
    videoFrame.setPlayMode(VideoPlayModePreset.Auto);

    // Ładuje miniaturę
    String thumbnailUri = "http://img.youtube.com/vi/" + videoID + "/hqdefault.jpg";
    URL url;

    try {
        url = new URL(thumbnailUri);
        videoFrame.getPictureFormat().getPicture().setImage(pres.getImages().addImage(url.openStream()));
    } catch (MalformedURLException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

Przycinanie klatki wideo

Aspose.Slides pozwala kontrolować, która część wideo jest odtwarzana, ustawiając wartości trim‑from‑start i trim‑from‑end za pomocą metod IVideoFrame.setTrimFromStart oraz IVideoFrame.setTrimFromEnd. Obie wartości podawane są w milisekundach i określają, ile czasu pomijać od początku i końca wideo. Ustawienia te zmieniają sposób odtwarzania wideo w prezentacji; nie tną ani nie modyfikują binarnych danych osadzonego wideo.

Ustawienia przycięcia

Aby utworzyć klatkę wideo i ustawić jej parametry przycięcia:

  1. Utwórz instancję klasy Presentation .
  2. Dodaj obiekt IVideo do prezentacji.
  3. Dodaj obiekt IVideoFrame do slajdu.
  4. Ustaw wartości trim‑from‑start i trim‑from‑end za pomocą metod IVideoFrame.setTrimFromStart oraz IVideoFrame.setTrimFromEnd.
  5. Zapisz zmodyfikowaną prezentację.

Poniższy przykład kodu pomija pierwsze 2,5 s i ostatnią sekundę osadzonego wideo podczas odtwarzania:

Presentation presentation = new Presentation();
try {
    FileInputStream videoStream = new FileInputStream("video.mp4");
    try {
        IVideo video = presentation.getVideos().addVideo(
                videoStream, LoadingStreamBehavior.ReadStreamAndRelease);
        ISlide slide = presentation.getSlides().get_Item(0);
        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 {
        videoStream.close();
    }
} finally {
    presentation.dispose();
}

Odczyt ustawień przycięcia

Aby sprawdzić istniejące ustawienia przycięcia, wczytaj prezentację, znajdź obiekt IVideoFrame wśród kształtów na pierwszym slajdzie i odczytaj wartości za pomocą metod IVideoFrame.getTrimFromStart oraz IVideoFrame.getTrimFromEnd.

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;
            float trimFromStart = videoFrame.getTrimFromStart();
            float trimFromEnd = videoFrame.getTrimFromEnd();

            System.out.println("Trim from start: " + trimFromStart + " ms");
            System.out.println("Trim from end: " + trimFromEnd + " ms");
            break;
        }
    }
} finally {
    presentation.dispose();
}

Zarządzanie napisami wideo

Aspose.Slides umożliwia zarządzanie napisami zamkniętymi dla klatek wideo w prezentacjach PowerPoint. Napisy są przechowywane w formacie WebVTT i dostępne są przez metodę IVideoFrame.getCaptionTracks .

Dodawanie napisów do klatki wideo

Aby dodać napisy do klatki wideo:

  1. Utwórz instancję klasy Presentation .
  2. Dodaj wideo do prezentacji.
  3. Dodaj obiekt IVideoFrame do slajdu.
  4. Użyj ICaptionsCollection zwróconego przez getCaptionTracks aby dodać ścieżkę napisów w formacie WebVTT.
  5. Zapisz zmodyfikowaną prezentację.

Poniższy kod pokazuje, jak dodać napisy do klatki wideo:

Presentation presentation = new Presentation();
try {
    byte[] videoData = Files.readAllBytes(Paths.get("video.mp4"));
    IVideo video = presentation.getVideos().addVideo(videoData);

    ISlide slide = presentation.getSlides().get_Item(0);
    IVideoFrame videoFrame = slide.getShapes().addVideoFrame(0, 0, 100, 100, video);

    // Dodaje nową ścieżkę napisów z pliku WebVTT.
    videoFrame.getCaptionTracks().add("English", "track.vtt");

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

Interfejs ICaptionsCollection udostępnia także przeciążenie, które pozwala dodać napisy z strumienia.

Wyodrębnianie napisów z klatki wideo

Aby wyodrębnić napisy z klatki wideo:

  1. Wczytaj prezentację zawierającą wideo.
  2. Znajdź docelowy obiekt IVideoFrame .
  3. Przejdź przez wszystkie ścieżki napisów w ICaptionsCollection .
  4. Zapisz każdą ścieżkę napisów do pliku .vtt.
Presentation presentation = new Presentation("video_with_captions.pptx");
try {
    ISlide slide = presentation.getSlides().get_Item(0);
    for (IShape shape : slide.getShapes()) {
        if (shape instanceof IVideoFrame) {
            IVideoFrame videoFrame = (IVideoFrame)shape;
            for (ICaptions captionTrack : videoFrame.getCaptionTracks()) {
                // Zapisuje ścieżkę napisów do pliku WebVTT.
                String filePath = captionTrack.getCaptionId().toString() + ".vtt";
                Files.write(Paths.get(filePath), captionTrack.getBinaryData());
            }
        }
    }
} finally {
    presentation.dispose();
}

Każdy obiekt ICaptions udostępnia identyfikator napisu, etykietę, dane binarne oraz tekst napisu jako ciąg UTF‑8.

Usuwanie napisów z klatki wideo

Aby usunąć napisy z klatki wideo:

  1. Wczytaj prezentację zawierającą wideo.
  2. Pobierz docelowy obiekt IVideoFrame .
  3. Usuń ścieżki napisów z ICaptionsCollection .
  4. Zapisz zmodyfikowaną prezentację.
Presentation presentation = new Presentation("video_with_captions.pptx");
try {
    ISlide slide = presentation.getSlides().get_Item(0);
    IVideoFrame videoFrame = (IVideoFrame)slide.getShapes().get_Item(0);

    // Usuwa wszystkie napisy z klatki wideo.
    videoFrame.getCaptionTracks().clear();

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

Jeśli trzeba usunąć tylko jedną ścieżkę, użyj metod remove lub removeAt zamiast clear .

Wyodrębnianie wideo ze slajdów

Poza dodawaniem wideo do slajdów, Aspose.Slides umożliwia wyodrębnianie wideo osadzonego w prezentacjach.

  1. Utwórz instancję klasy Presentation aby wczytać prezentację zawierającą wideo.
  2. Przejdź przez wszystkie obiekty ISlide .
  3. Przejdź przez wszystkie obiekty IShape aby znaleźć VideoFrame .
  4. Zapisz wideo na dysku.
// Tworzy obiekt Presentation, który reprezentuje plik prezentacji 
Presentation pres = new Presentation("VideoSample.pptx");
try {
    for (ISlide slide : pres.getSlides()) 
    {
        for (IShape shape : slide.getShapes()) 
        {
            if (shape instanceof VideoFrame) 
            {
                IVideoFrame vf = (IVideoFrame) shape;
                String type = vf.getEmbeddedVideo().getContentType();
                int ss = type.lastIndexOf('-');
                byte[] buffer = vf.getEmbeddedVideo().getBinaryData();

                // Pobiera rozszerzenie pliku
                int charIndex = type.indexOf("/");
                type = type.substring(charIndex + 1);

                FileOutputStream fop = new FileOutputStream("testing2." + type);
                fop.write(buffer);
                fop.flush();
                fop.close();
            }
        }
    }
} catch (IOException e) {
} finally {
    if (pres != null) pres.dispose();
}

FAQ

Which video playback parameters can be changed for a VideoFrame?
Można kontrolować playback mode (auto lub po kliknięciu) oraz looping. Opcje te są dostępne w właściwościach obiektu VideoFrame .

Does adding a video affect the PPTX file size?
Tak. Gdy osadzisz lokalne wideo, dane binarne są dołączane do dokumentu, więc rozmiar prezentacji rośnie proporcjonalnie do rozmiaru pliku. Gdy dodasz wideo online, osadzany jest jedynie link i miniatura, więc przyrost rozmiaru jest mniejszy.

Can I replace the video in an existing VideoFrame without changing its position and size?
Tak. Możesz zamienić video content w klatce, zachowując jednocześnie jej położenie i wymiary; jest to typowy scenariusz aktualizacji mediów w istniejącym układzie.

Can the content type (MIME) of an embedded video be determined?
Tak. Osadzone wideo posiada content type , który można odczytać i wykorzystać, np. przy zapisywaniu go na dysku.