Video-Frames in Präsentationen auf Android verwalten
Einleitung
Videos können dabei helfen, Ideen zu erklären und ein Publikum zu fesseln. Aspose.Slides für Android über Java ermöglicht das Hinzufügen von Video-Frames zu Folien, das Anpassen von Wiedergabeeinstellungen, das Verwalten von Untertiteln und das Extrahieren eingebetteter Videodaten.
PowerPoint unterstützt lokale Videos und Links zu Online-Videos, wie zum Beispiel YouTube-Videos.
Um Videodaten und Video-Frames darzustellen, stellt Aspose.Slides das IVideo Interface, das IVideoFrame Interface und weitere relevante Typen bereit.
Erstellen eines eingebetteten Video-Frames
Wenn die Videodatei, die Sie zu Ihrer Folie hinzufügen möchten, lokal gespeichert ist, können Sie einen Video-Frame erstellen, um das Video in Ihre Präsentation einzubetten.
Dieses Beispiel bettet ein lokales Video auf der ersten Folie einer vorhandenen Präsentation ein und speichert das Ergebnis. Frame‑Koordinaten und -Abmessungen werden in Punkten angegeben. Der Stream bleibt geöffnet, bis das Speichern abgeschlossen ist, weil LoadingStreamBehavior.KeepLocked ihn gesperrt hält, solange die Präsentation ihn verwendet.
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();
}
Sie können auch einen lokalen Videopfad direkt an addVideoFrame übergeben. Dieses Beispiel bettet das Video auf der ersten Folie einer neuen Präsentation ein. Das Video muss bis zum Speichern der Präsentation zugänglich bleiben.
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();
}
Erstellen eines Video-Frames mit Video aus einer Web‑Quelle
Microsoft PowerPoint unterstützt Online‑Videos in Präsentationen. Sie können einen Video-Frame erstellen, der auf ein Online‑Video, z. B. ein YouTube‑Video, verweist.
Dieses Beispiel fügt einen YouTube‑Video‑Link und ein Vorschaubild zur ersten Folie hinzu. Ersetzen Sie den Video‑Identifikator, um ein anderes Video zu verwenden. Die Methode setPlayMode fordert die automatische Wiedergabe an. Das Herunterladen des Vorschaubilds und das Abspielen des Videos erfordern Internetzugang. Der Präsentations‑Viewer muss ebenfalls die Online‑Videowiedergabe unterstützen.
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();
}
Wiedergabe eines Videos im Vollbildmodus
In einer Schulungspräsentation können Sie eine Software‑Demonstration im Vollbildmodus abspielen, damit das Publikum die Details sehen kann. Rufen Sie setFullScreenMode mit true auf, um dieses Verhalten während der Wiedergabe zu aktivieren.
Dieses Beispiel öffnet eine Präsentation, findet das erste IVideoFrame auf der ersten Folie und aktiviert die Vollbild‑Wiedergabe. Die Eingabe‑Präsentation muss mindestens eine Folie mit einem vorhandenen Video‑Frame auf der ersten Folie enthalten.
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();
}
Die Vollbild‑Wiedergabe steuert, wie das Video angezeigt wird. Unabhängig davon kontrolliert setPlayMode ob es automatisch oder per Klick startet, und setPlayLoopMode bestimmt, ob es wiederholt wird. Um das Startverhalten zu wählen, setzen Sie den Wiedergabemodus auf VideoPlayModePreset.Auto oder VideoPlayModePreset.OnClick. Das Beispiel bewahrt die bestehenden Start‑ und Schleifeinstellungen.
Zurückspulen eines Videos nach der Wiedergabe
In einer Schulungspräsentation macht es Sinn, ein Demonstrations‑Video nach dem Abspielen wieder an den Anfang zu setzen, damit der Vortragende es erneut starten kann. Rufen Sie setRewindVideo mit true auf, um das Video nach Abschluss der Wiedergabe zum Anfang zurückzusetzen.
Dieses Beispiel öffnet eine Präsentation, findet das erste IVideoFrame auf der ersten Folie und aktiviert das Zurückspulen. Es deaktiviert das Schleifen, sodass die Wiedergabe beendet werden kann, und stellt die Wiedergabe so ein, dass sie per Klick startet. Die Eingabe‑Präsentation muss mindestens eine Folie mit einem bestehenden Video‑Frame auf der ersten Folie enthalten.
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();
}
Zurückspulen setzt das Video ohne erneutes Starten an den Anfang zurück. Im Gegensatz dazu wiederholt das Aufrufen von setPlayLoopMode mit true die Wiedergabe automatisch. Halten Sie die Schleife deaktiviert, wenn das Video vollständig beendet werden soll und anschließend bereit für eine erneute Wiedergabe ist. setPlayMode steuert unabhängig davon den automatischen oder klick‑basierten Start; dieses Beispiel verwendet VideoPlayModePreset.OnClick, sodass der Vortragende den Startzeitpunkt bestimmt. Setzen Sie den Wiedergabemodus nach der Schleifeneinstellung, wie im Beispiel gezeigt. Das Zurückspulen funktioniert unabhängig von setFullScreenMode.
Zuschneiden eines Video-Frames
Verwenden Sie IVideoFrame.setTrimFromStart und IVideoFrame.setTrimFromEnd, um zu Beginn oder am Ende eines Videos während der Wiedergabe Teile zu überspringen. Beide Werte werden in Millisekunden angegeben. Das Zuschneiden ändert die Wiedergabeeinstellungen, ohne die eingebetteten Videodaten zu verändern.
Zuschneide‑Einstellungen festlegen
Dieses Beispiel bettet ein lokales Video ein und überspringt die ersten 2,5 Sekunden sowie die letzte Sekunde während der Wiedergabe. Verwenden Sie ein Video, das länger als 3,5 Sekunden ist, damit ein abspielbarer Abschnitt erhalten bleibt.
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();
}
Zuschneide‑Einstellungen auslesen
Dieses Beispiel gibt die Zuschneide‑Werte des ersten Video‑Frames auf der ersten Folie in Millisekunden aus. Die Präsentation muss mindestens eine Folie enthalten. Hat diese Folie keinen Video‑Frame, wird nichts ausgegeben. Das vorherige Beispiel liefert die Werte 2500 und 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();
}
Verwalten von Video‑Untertiteln
Aspose.Slides ermöglicht das Verwalten von geschlossenen Untertiteln für Video‑Frames in PowerPoint‑Präsentationen. Untertitel werden im WebVTT‑Format gespeichert und über die Methode IVideoFrame.getCaptionTracks bereitgestellt.
Untertitel zu einem Video‑Frame hinzufügen
Dieses Beispiel bettet ein lokales Video ein und fügt eine WebVTT‑Untertitelspur mit der Bezeichnung English hinzu. Die Untertitel‑Zeitstempel sollten zum Video passen. Die gespeicherte Präsentation enthält sowohl das Video als auch seine Untertitel.
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();
}
Das ICaptionsCollection Interface bietet ebenfalls eine Überladung, mit der Sie Untertitel aus einem Stream hinzufügen können.
Untertitel aus einem Video‑Frame extrahieren
Dieses Beispiel speichert alle Untertitelspuren von Video‑Frames auf der ersten Folie als separate WebVTT‑Dateien. Fortlaufende Nummern halten die Ausgabedateien eindeutig. Die Konsole meldet die Anzahl der extrahierten Spuren. Die Präsentation muss mindestens eine Folie enthalten.
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();
}
Jedes ICaptions Objekt stellt den Untertitel‑Identifikator, das Label, die Binärdaten und den Untertiteltext als UTF‑8‑Zeichenfolge bereit.
Untertitel von einem Video‑Frame entfernen
Dieses Beispiel entfernt alle Untertitel vom Video‑Frame an der ersten Shape‑Position auf der ersten Folie und speichert das Ergebnis. Es wird vorausgesetzt, dass die Folie und das Shape existieren und dass das Shape ein Video‑Frame ist.
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();
}
Falls Sie nur eine Untertitelspur entfernen möchten, verwenden Sie die Methoden remove oder removeAt anstelle von clear.
Video aus einer Folie extrahieren
Neben dem Hinzufügen von Videos zu Folien ermöglicht Aspose.Slides das Extrahieren von in Präsentationen eingebetteten Videos.
Dieses Beispiel extrahiert eingebettete Videos aus jeder Folie in separate, nummerierte Binärdateien. Verknüpfte Videos werden übersprungen, weil sie keine eingebetteten Daten besitzen. Die Konsole gibt den MIME‑Typ jedes Videos und die Gesamtanzahl aus. Die Ausgabe verwendet die generische .bin‑Erweiterung; passen Sie sie bei Bedarf dem gemeldeten Medientyp an.
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
Welche Wiedergabe‑Parameter können für einen Video‑Frame geändert werden?
Sie können den Wiedergabemodus (automatisch oder per Klick) und das Looping steuern. Diese Optionen stehen über die Methoden des VideoFrame Objekts zur Verfügung.
Beeinflusst das Hinzufügen eines Videos die Dateigröße der PPTX?
Ja. Wenn Sie ein lokales Video einbetten, werden die Binärdaten in das Dokument aufgenommen, sodass die Präsentationsgröße proportional zur Dateigröße wächst. Wenn Sie zu einem Online‑Video verlinken und ein Vorschaubild hinzufügen, speichert die Präsentation nur den Link und das Vorschau‑Bild, nicht die Videodaten, wodurch die Größensteigerung in der Regel kleiner ist.
Kann ich das Video in einem bestehenden Video‑Frame ersetzen, ohne Position und Größe zu ändern?
Ja. Sie können den Video‑Inhalt innerhalb des Frames austauschen, während Sie die Geometrie des Shapes beibehalten; dies ist ein gängiges Szenario für die Aktualisierung von Medien in einem bestehenden Layout.
Kann der Inhaltstyp (MIME) eines eingebetteten Videos ermittelt werden?
Ja. Ein eingebettetes Video besitzt einen Content‑Typ, den Sie auslesen und beispielsweise beim Speichern auf die Festplatte verwenden können.