Zarządzanie ramkami wideo w prezentacjach na Androidzie
Wprowadzenie
Wideo może pomóc wyjaśnić pomysły i zaangażować odbiorców. Aspose.Slides for Android via Java umożliwia dodawanie ramek wideo do slajdów, regulację ustawień odtwarzania, zarządzanie napisami oraz wyodrębnianie osadzonych danych wideo.
PowerPoint obsługuje lokalne wideo oraz odnośniki do wideo online, takich jak filmy z serwisu YouTube.
Aby reprezentować dane wideo i ramki wideo, Aspose.Slides udostępnia interfejs IVideo , interfejs IVideoFrame oraz inne odpowiednie typy.
Utworzenie osadzonej ramki wideo
Jeśli plik wideo, który chcesz dodać do slajdu, znajduje się lokalnie, możesz utworzyć ramkę wideo, aby osadzić wideo w swojej prezentacji.
Ten przykład osadza lokalne wideo na pierwszym slajdzie istniejącej prezentacji i zapisuje wynik. Współrzędne i wymiary ramki podawane są w punktach. Strumień pozostaje otwarty do momentu zakończenia zapisu, ponieważ LoadingStreamBehavior.KeepLocked utrzymuje go zablokowanym, gdy prezentacja go używa.
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 wideo bezpośrednio do addVideoFrame. Ten przykład osadza wideo na pierwszym slajdzie nowej prezentacji. Wideo musi pozostać dostępne do momentu 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();
}
Utworzenie ramki wideo z wideo z źródła internetowego
Microsoft PowerPoint obsługuje wideo online w prezentacjach. Możesz utworzyć ramkę wideo, która odwołuje się do wideo online, na przykład z YouTube.
Ten przykład dodaje odnośnik do filmu z YouTube oraz miniaturę na pierwszy slajd. Zastąp identyfikator wideo, aby użyć innego filmu. Metoda setPlayMode żąda automatycznego odtwarzania. Pobieranie miniatury i odtwarzanie wideo wymaga dostępu do internetu. Odtwarzacz prezentacji musi także obsługiwać odtwarzanie wideo 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();
}
Odtwarzanie wideo w trybie pełnoekranowym
W prezentacji szkoleniowej możesz odtwarzać demonstrację oprogramowania w trybie pełnoekranowym, aby publiczność mogła zobaczyć szczegóły. Wywołaj setFullScreenMode z wartością true, aby włączyć to zachowanie podczas odtwarzania.
Ten przykład otwiera prezentację, znajduje pierwszą IVideoFrame na pierwszym slajdzie i włącza odtwarzanie pełnoekranowe. Wejściowa prezentacja musi zawierać przynajmniej 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 pełnoekranowe kontroluje sposób wyświetlania wideo. Niezależnie od tego, setPlayMode decyduje, czy wideo zaczyna się automatycznie, czy po kliknięciu, a setPlayLoopMode określa, czy powtarza się. Aby wybrać zachowanie uruchomienia, ustaw tryb odtwarzania na VideoPlayModePreset.Auto lub VideoPlayModePreset.OnClick. Przykład zachowuje istniejące ustawienia startu i pętli.
Przewijanie wideo po odtworzeniu
W prezentacji szkoleniowej przywrócenie filmu demonstracyjnego do początku sprawia, że jest gotowy do ponownego odtworzenia przez prezentera. Wywołaj setRewindVideo z wartością true, aby po zakończeniu odtwarzania przewijać 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ć przynajmniej 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 wartością 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 niezależnie kontroluje automatyczny lub ręczny start; ten przykład używa VideoPlayModePreset.OnClick , aby prezenter decydował o rozpoczęciu odtwarzania. Ustaw tryb odtwarzania po ustawieniu pętli, jak pokazano w przykładzie. Przewijanie działa niezależnie od setFullScreenMode.
Przycinanie ramki wideo
Użyj IVideoFrame.setTrimFromStart i IVideoFrame.setTrimFromEnd , aby pominąć część początku lub końca wideo podczas odtwarzania. Obie wartości podawane są w milisekundach. Przycinanie zmienia ustawienia odtwarzania bez modyfikacji osadzonych danych wideo.
Ustawienia przycinania
Ten przykład osadza lokalne wideo i pomija pierwsze 2,5 sekundy oraz ostatnią sekundę podczas odtwarzania. Użyj wideo dłuższego niż 3,5 sekundy, aby pozostał odtwarzalny fragment.
import com.aspose.slides.*;
import java.io.FileInputStream;
Presentation presentation = new Presentation();
try {
ISlide slide = presentation.getSlides().get_Item(0);
IVideo video;
try (FileInputStream videoStream = new FileInputStream("video.mp4")) {
video = presentation.getVideos().addVideo(videoStream, LoadingStreamBehavior.ReadStreamAndRelease);
}
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();
}
Odczyt ustawień przycinania
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ądzanie napisami wideo
Aspose.Slides umożliwia zarządzanie napisami zamkniętymi dla ramek wideo w prezentacjach PowerPoint. Napisy są przechowywane w formacie WebVTT i udostępniane za pośrednictwem metody IVideoFrame.getCaptionTracks .
Dodawanie napisów do ramki wideo
Ten przykład osadza lokalne wideo i dodaje ścieżkę napisów WebVTT oznaczoną jako English. Znaczniki czasu napisów powinny odpowiadać wideo. Zapisana prezentacja zawiera zarówno wideo, jak i jego napisy.
import com.aspose.slides.*;
import java.io.FileInputStream;
Presentation presentation = new Presentation();
try {
ISlide slide = presentation.getSlides().get_Item(0);
IVideo video;
try (FileInputStream videoStream = new FileInputStream("video.mp4")) {
video = presentation.getVideos().addVideo(videoStream, LoadingStreamBehavior.ReadStreamAndRelease);
}
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 także przeciążenie, które pozwala dodać napisy ze strumienia.
Wyodrębnianie napisów z ramki wideo
Ten przykład zapisuje wszystkie ścieżki napisów z ramek wideo na pierwszym slajdzie jako oddzielne pliki WebVTT. Kolejne numery utrzymują 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.io.FileOutputStream;
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++;
try (FileOutputStream outputStream = new FileOutputStream("captions_" + trackCount + ".vtt")) {
outputStream.write(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.
Usuwanie napisów 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ębnianie wideo ze slajdu
Oprócz dodawania wideo do slajdów, Aspose.Slides umożliwia wyodrębnianie wideo osadzonego w prezentacjach.
Ten przykład wyodrębnia osadzone wideo z każdego slajdu do oddzielnych, numerowanych plików binarnych. Wideo powiązane jest pomijane, ponieważ nie ma osadzonych danych. Konsola wypisuje typ MIME każdego wideo 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.io.FileOutputStream;
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++;
try (FileOutputStream outputStream = new FileOutputStream("extracted_video_" + videoCount + ".bin")) {
outputStream.write(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 (automatyczny lub po kliknięciu) oraz pętlę. Opcje te są dostępne za pośrednictwem metod obiektu VideoFrame .
Czy dodanie wideo wpływa na rozmiar pliku PPTX?
Tak. Gdy osadzasz lokalne wideo, dane binarne są dołączane do dokumentu, więc rozmiar prezentacji rośnie proporcjonalnie do wielkości pliku. Gdy łączysz się z wideo online i dodajesz miniaturę, prezentacja przechowuje odnośnik i obraz podglądu zamiast danych wideo, więc przyrost rozmiaru jest zwykle mniejszy.
Czy mogę zamienić wideo w istniejącej ramce wideo bez zmiany jej pozycji i rozmiaru?
Tak. Możesz wymienić 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 treści (MIME) osadzonego wideo?
Tak. Osadzone wideo posiada typ treści , który można odczytać i wykorzystać, na przykład przy zapisywaniu go na dysk.