Zarządzanie ramkami wideo w prezentacjach przy użyciu Java
Wprowadzenie
Filmy mogą pomóc wyjaśnić pomysły i zaangażować publiczność. Aspose.Slides for Java umożliwia dodawanie ramek wideo do slajdów, dostosowywanie ustawień odtwarzania, zarządzanie napisami oraz wyodrębnianie osadzonych danych wideo.
PowerPoint obsługuje lokalne filmy oraz odnośniki do filmów online, takich jak filmy z YouTube.
Aby reprezentować dane wideo i ramki wideo, Aspose.Slides udostępnia interfejs IVideo interfejs IVideoFrame oraz inne istotne typy.
Utwórz osadzoną ramkę wideo
Jeśli plik wideo, który chcesz dodać do slajdu, jest przechowywany lokalnie, możesz utworzyć ramkę wideo, aby osadzić wideo w swojej prezentacji.
Ten przykład osadza lokalny film na pierwszym slajdzie istniejącej prezentacji i zapisuje wynik. Współrzędne i wymiary ramki są podawane w punktach. Strumień pozostaje otwarty, aż zapis się zakończy, ponieważ LoadingStreamBehavior.KeepLocked utrzymuje go zablokowanym podczas używania go przez prezentację.
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();
}
Możesz także przekazać ścieżkę do lokalnego filmu bezpośrednio do addVideoFrame. Ten przykład osadza wideo na pierwszym slajdzie nowej prezentacji. Film musi pozostać dostępny aż do zapisania prezentacji.
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();
}
Utwórz ramkę wideo z filmem z źródła internetowego
Microsoft PowerPoint obsługuje filmy online w prezentacjach. Możesz utworzyć ramkę wideo, która odwołuje się do filmu online, takiego jak film z YouTube.
Ten przykład dodaje odnośnik do filmu YouTube oraz miniaturę na pierwszy slajd. Zamień identyfikator filmu, aby użyć innego filmu. Metoda setPlayMode żąda automatycznego odtwarzania. Pobieranie miniatury i odtwarzanie filmu wymaga dostępu do internetu. Przeglądarka prezentacji musi również obsługiwać odtwarzanie filmów online.
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();
}
Odtwórz wideo w trybie pełnoekranowym
W prezentacji szkoleniowej możesz odtworzyć demonstrację oprogramowania w trybie pełnoekranowym, aby publiczność widziała szczegóły. Wywołaj setFullScreenMode z true, aby włączyć to zachowanie podczas odtwarzania.
Ten przykład otwiera prezentację, znajduje pierwszą IVideoFrame na pierwszym slajdzie i włącza odtwarzanie w pełnym ekranie. Wejściowa prezentacja musi zawierać co najmniej jeden slajd z istniejącą ramką wideo na pierwszym slajdzie.
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();
}
Odtwarzanie w pełnym ekranie kontroluje sposób wyświetlania wideo. Oddzielnie, setPlayMode określa, czy odtwarzanie rozpoczyna się automatycznie czy po kliknięciu, a setPlayLoopMode kontroluje, czy się powtarza. Aby wybrać zachowanie startu, ustaw tryb odtwarzania na VideoPlayModePreset.Auto lub VideoPlayModePreset.OnClick. Przykład zachowuje istniejące ustawienia startu i pętli.
Przewiń wideo po odtworzeniu
W prezentacji szkoleniowej przywrócenie filmu demonstracyjnego do początku sprawia, że jest gotowy do ponownego odtworzenia przez prowadzącego. Wywołaj setRewindVideo z true, aby po zakończeniu odtwarzania przewinąć wideo do początku.
Ten przykład otwiera prezentację, znajduje pierwszą IVideoFrame na pierwszym slajdzie i włącza przewijanie. Wyłącza pętlę, aby odtwarzanie mogło się zakończyć, i ustawia odtwarzanie na start po kliknięciu. Wejściowa prezentacja musi zawierać co najmniej jeden slajd z istniejącą ramką wideo na pierwszym slajdzie.
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();
}
Przewijanie przywraca wideo do początku bez ponownego uruchamiania. Natomiast wywołanie setPlayLoopMode z true powoduje automatyczne powtarzanie odtwarzania. Wyłącz pętlę, gdy chcesz, aby wideo zakończyło się i było gotowe do ponownego odtworzenia. setPlayMode samodzielnie kontroluje automatyczny lub kliknięciowy start; ten przykład używa VideoPlayModePreset.OnClick aby prowadzący kontrolował moment rozpoczęcia odtwarzania. Ustaw tryb odtwarzania po ustawieniu pętli, jak pokazano w przykładzie. Przewijanie działa niezależnie od setFullScreenMode.
Przytnij ramkę wideo
Użyj IVideoFrame.setTrimFromStart i IVideoFrame.setTrimFromEnd aby pominąć część początku lub końca filmu podczas odtwarzania. Obie wartości podawane są w milisekundach. Przycinanie zmienia ustawienia odtwarzania bez modyfikacji osadzonych danych wideo.
Ustawienia przycięcia
Ten przykład osadza lokalny film i pomija pierwsze 2,5 sekundy oraz ostatnią sekundę podczas odtwarzania. Użyj filmu dłuższego niż 3,5 sekundy, aby pozostał odtwarzalny segment.
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();
}
Odczytaj ustawienia przycięcia
Ten przykład wypisuje wartości przycięcia pierwszej ramki wideo na pierwszym slajdzie w milisekundach. Prezentacja musi zawierać co najmniej jeden slajd. Jeśli ten slajd nie ma ramki wideo, nic nie zostanie wypisane. Poprzedni przykład generuje wartości 2500 i 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();
}
Zarządzaj napisami wideo
Aspose.Slides umożliwia zarządzanie zamkniętymi napisami dla ramek wideo w prezentacjach PowerPoint. Napisy są przechowywane w formacie WebVTT i udostępniane za pośrednictwem metody IVideoFrame.getCaptionTracks.
Dodaj napisy do ramki wideo
Ten przykład osadza lokalny film i dodaje ścieżkę napisów WebVTT oznaczoną jako English. Znaczniki czasu napisów powinny pasować do filmu. Zapisana prezentacja zawiera zarówno wideo, jak i jego napisy.
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();
}
Interfejs ICaptionsCollection oferuje również przeciążenie, które umożliwia dodawanie napisów z strumienia.
Wyodrębnij napisy z ramki wideo
Ten przykład zapisuje wszystkie ścieżki napisów z ramek wideo na pierwszym slajdzie jako oddzielne pliki WebVTT. Numeracja kolejna utrzymuje pliki wyjściowe odrębne. Konsola raportuje liczbę wyodrębnionych ścieżek. Prezentacja musi zawierać co najmniej jeden slajd.
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();
}
Każdy obiekt ICaptions udostępnia identyfikator napisu, etykietę, dane binarne oraz tekst napisu jako ciąg UTF-8.
Usuń napisy z ramki wideo
Ten przykład usuwa wszystkie napisy z ramki wideo znajdującej się na pierwszej pozycji kształtu na pierwszym slajdzie i zapisuje wynik. Zakłada, że slajd i kształt istnieją oraz że kształt jest ramką wideo.
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();
}
Jeśli potrzebujesz usunąć tylko jedną ścieżkę napisu, użyj metod remove lub removeAt, zamiast clear.
Wyodrębnij wideo ze slajdu
Oprócz dodawania filmów do slajdów, Aspose.Slides umożliwia wyodrębnianie filmów osadzonych w prezentacjach.
Ten przykład wyodrębnia osadzone filmy ze wszystkich slajdów do oddzielnych, numerowanych plików binarnych. Filmy powiązane są pomijane, ponieważ nie mają osadzonych danych. Konsola wypisuje typ MIME każdego filmu oraz łączną liczbę. Wyjście używa ogólnego rozszerzenia .bin; w razie potrzeby zmień je, aby pasowało do zgłaszanego typu mediów.
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
Jakie parametry odtwarzania wideo można zmienić dla ramki wideo?
Możesz kontrolować tryb odtwarzania (auto lub po kliknięciu) oraz pętlę. Opcje te są dostępne poprzez metody obiektu VideoFrame.
Czy dodanie wideo wpływa na rozmiar pliku PPTX?
Tak. Jeśli osadzasz lokalny film, dane binarne są włączane do dokumentu, więc rozmiar prezentacji rośnie proporcjonalnie do rozmiaru pliku. Jeśli łączysz się z filmem online i dodajesz miniaturę, prezentacja zapisuje odnośnik oraz obraz podglądu zamiast danych wideo, więc przyrost rozmiaru jest zwykle mniejszy.
Czy mogę wymienić wideo w istniejącej ramce wideo bez zmiany jej pozycji i rozmiaru?
Tak. Możesz zamienić zawartość wideo w ramce, zachowując geometrię kształtu; jest to typowy scenariusz aktualizacji mediów w istniejącym układzie.
Czy można określić typ zawartości (MIME) osadzonego wideo?
Tak. Osadzone wideo posiada typ zawartości który możesz odczytać i wykorzystać, na przykład przy zapisywaniu go na dysku.