Verwalten von Video-Frames in Präsentationen auf Android
Einleitung
Ein gut platziertes Video in einer Präsentation kann Ihre Botschaft überzeugender machen und das Engagement Ihres Publikums erhöhen.
PowerPoint ermöglicht das Hinzufügen von Videos zu einer Folie in einer Präsentation auf zwei Arten:
- Ein lokales Video hinzufügen oder einbetten (auf Ihrem Rechner gespeichert)
- Ein Online-Video hinzufügen (aus einer Webquelle wie YouTube).
Um das Hinzufügen von Videos (Videoobjekten) zu einer Präsentation zu ermöglichen, stellt Aspose.Slides die IVideo‑Schnittstelle, die IVideoFrame‑Schnittstelle 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 Ihrer Präsentation einzubetten.
- Erstellen Sie eine Instanz der Presentation‑Klasse.
- Holen Sie sich über den Index einen Verweis auf eine Folie.
- Fügen Sie ein IVideo‑Objekt hinzu und übergeben Sie den Pfad zur Videodatei, um das Video in die Präsentation einzubetten.
- Fügen Sie ein IVideoFrame‑Objekt hinzu, um einen Frame für das Video zu erstellen.
- Speichern Sie die geänderte Präsentation.
Dieser Java‑Code zeigt, wie Sie ein lokal gespeichertes Video zu einer Präsentation hinzufügen:
// Instanziert die Presentation-Klasse
Presentation pres = new Presentation("pres.pptx");
try {
// Lädt das Video
FileInputStream fileStream = new FileInputStream("Wildlife.mp4");
IVideo video = pres.getVideos().addVideo(fileStream, LoadingStreamBehavior.KeepLocked);
// Holt die erste Folie und fügt einen Video-Frame hinzu
pres.getSlides().get_Item(0).getShapes().addVideoFrame(10, 10, 150, 250, video);
// Speichert die Präsentation auf dem Datenträger
pres.save("pres-with-video.pptx", SaveFormat.Pptx);
} catch (IOException e) {
} finally {
if (pres != null) pres.dispose();
}
Alternativ können Sie ein Video hinzufügen, indem Sie den Dateipfad direkt an die Methode addVideoFrame(float x, float y, float width, float height, IVideo video) übergeben:
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();
}
Erstellen eines Video‑Frames mit Video aus einer Web‑Quelle
Neuere Versionen von Microsoft PowerPoint unterstützen Online‑Videos in Präsentationen. Wenn das Video, das Sie verwenden möchten, online verfügbar ist (z. B. auf YouTube), können Sie es über seinen Web‑Link zu Ihrer Präsentation hinzufügen.
- Erstellen Sie eine Instanz der Presentation‑Klasse.
- Holen Sie sich über den Index einen Verweis auf eine Folie.
- Fügen Sie ein IVideo‑Objekt hinzu und übergeben Sie den Link zum Video.
- Legen Sie ein Thumbnail für den Video‑Frame fest.
- Speichern Sie die Präsentation.
Dieser Java‑Code zeigt, wie Sie ein Video aus dem Web zu einer Folie in einer PowerPoint‑Präsentation hinzufügen:
// Instanziert ein Presentation-Objekt, das eine Präsentationsdatei darstellt
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)
{
// Fügt ein Video-Frame hinzu
IVideoFrame videoFrame = pres.getSlides().get_Item(0).getShapes().addVideoFrame(
10, 10, 427, 240, "https://www.youtube.com/embed/" + videoID);
videoFrame.setPlayMode(VideoPlayModePreset.Auto);
// Lädt das Vorschaubild
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();
}
}
Trimmen eines Video‑Frames
Aspose.Slides ermöglicht es, zu steuern, welcher Teil eines Videos abgespielt wird, indem die Werte trim‑from‑start und trim‑from‑end über IVideoFrame.setTrimFromStart bzw. IVideoFrame.setTrimFromEnd festgelegt werden. Beide Werte werden in Millisekunden angegeben und bestimmen, wie viel Zeit zu Beginn bzw. Ende des Videos übersprungen wird. Diese Einstellungen ändern die Wiedergabeparameter im Dokument; sie schneiden oder verändern die eingebetteten Videodaten nicht.
Trim‑Einstellungen festlegen
Um einen Video‑Frame zu erstellen und seine Trim‑Einstellungen festzulegen:
- Erstellen Sie eine Instanz der Presentation‑Klasse.
- Fügen Sie ein IVideo‑Objekt zur Präsentation hinzu.
- Fügen Sie ein IVideoFrame‑Objekt zu einer Folie hinzu.
- Setzen Sie die Werte trim‑from‑start und trim‑from‑end über IVideoFrame.setTrimFromStart und IVideoFrame.setTrimFromEnd.
- Speichern Sie die geänderte Präsentation.
Das folgende Codebeispiel überspringt die ersten 2,5 Sekunden und die letzte Sekunde eines eingebetteten Videos während der Wiedergabe:
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();
}
Trim‑Einstellungen auslesen
Um vorhandene Trim‑Einstellungen zu prüfen, laden Sie eine Präsentation, finden ein IVideoFrame‑Objekt auf der ersten Folie und lesen die Werte über IVideoFrame.getTrimFromStart bzw. IVideoFrame.getTrimFromEnd.
Das folgende Codebeispiel findet den ersten Video‑Frame auf der ersten Folie und gibt dessen Trim‑Einstellungen in Millisekunden aus:
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();
}
Verwalten von Video‑Untertiteln
Aspose.Slides ermöglicht das Verwalten von Closed‑Captions 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
Um einem Video‑Frame Untertitel hinzuzufügen:
- Erstellen Sie eine Instanz der Presentation‑Klasse.
- Fügen Sie ein Video zur Präsentation hinzu.
- Fügen Sie ein IVideoFrame‑Objekt zu einer Folie hinzu.
- Verwenden Sie die über getCaptionTracks zurückgegebene ICaptionsCollection, um eine WebVTT‑Untertitelspur hinzuzufügen.
- Speichern Sie die geänderte Präsentation.
Der folgende Code zeigt, wie Untertitel zu einem Video‑Frame hinzugefügt werden:
Presentation presentation = new Presentation();
try {
byte[] videoData = // "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);
// Fügt eine neue Untertitelspur aus einer WebVTT-Datei hinzu.
videoFrame.getCaptionTracks().add("English", "track.vtt");
presentation.save("video_with_captions.pptx", SaveFormat.Pptx);
} finally {
presentation.dispose();
}
Die ICaptionsCollection-Schnittstelle bietet zudem eine Überladung, mit der Untertitel aus einem Stream hinzugefügt werden können.
Untertitel aus einem Video‑Frame extrahieren
Um Untertitel aus einem Video‑Frame zu extrahieren:
- Laden Sie die Präsentation, die das Video enthält.
- Finden Sie das Ziel‑IVideoFrame‑Objekt.
- Iterieren Sie über die über getCaptionTracks zurückgegebenen Untertitelspuren.
- Speichern Sie jede Untertitelspur in einer
.vtt‑Datei.
Der folgende Code zeigt, wie Untertitel aus einem Video‑Frame extrahiert werden:
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()) {
// Speichert die Untertitelspur in einer WebVTT-Datei.
FileOutputStream outputStream = new FileOutputStream(captionTrack.getCaptionId() + ".vtt");
outputStream.write(captionTrack.getBinaryData());
outputStream.close();
}
}
}
} finally {
presentation.dispose();
}
Jedes ICaptions-Objekt stellt die Untertitel‑ID, das Label, die binären Daten und die Untertitel‑Daten als UTF‑8‑String bereit.
Untertitel aus einem Video‑Frame entfernen
Um Untertitel aus einem Video‑Frame zu entfernen:
- Laden Sie die Präsentation, die das Video enthält.
- Holen Sie sich das Ziel‑IVideoFrame‑Objekt.
- Entfernen Sie die Untertitelspuren aus der über getCaptionTracks zurückgegebenen Sammlung.
- Speichern Sie die geänderte Präsentation.
Der folgende Code zeigt, wie alle Untertitel aus einem Video‑Frame entfernt werden:
Presentation presentation = new Presentation("video_with_captions.pptx");
try {
ISlide slide = presentation.getSlides().get_Item(0);
IVideoFrame videoFrame = (IVideoFrame) slide.getShapes().get_Item(0);
// Entfernt alle Untertitel vom Video-Frame.
videoFrame.getCaptionTracks().clear();
presentation.save("video_without_captions.pptx", SaveFormat.Pptx);
} finally {
presentation.dispose();
}
Möchten Sie nur eine Untertitelspur entfernen, verwenden Sie die Methoden remove bzw. 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.
- Erstellen Sie eine Instanz der Presentation‑Klasse, um die Präsentation zu laden, die das Video enthält.
- Iterieren Sie über alle ISlide-Objekte.
- Durchlaufen Sie alle IShape-Objekte, um ein VideoFrame zu finden.
- Speichern Sie das Video auf dem Datenträger.
Dieser Java‑Code zeigt, wie das Video einer Präsentationsfolie extrahiert wird:
// Instanziert ein Presentation-Objekt, das eine Präsentationsdatei darstellt
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();
// Ermittelt die Dateierweiterung
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
Welche Wiedergabe‑Parameter können für einen VideoFrame geändert werden?
Sie können den Wiedergabemodus (automatisch oder bei Klick) und das Looping steuern. Diese Optionen stehen über die Eigenschaften des VideoFrame-Objekts bereit.
Wirkt das Hinzufügen eines Videos auf die Dateigröße einer PPTX?
Ja. Beim Einbetten eines lokalen Videos werden die Binärdaten in das Dokument aufgenommen, sodass die Präsentationsgröße proportional zur Dateigröße wächst. Beim Hinzufügen eines Online‑Videos werden nur ein Link und ein Thumbnail eingebettet, sodass die Größenzunahme geringer ausfällt.
Kann ich das Video in einem bestehenden VideoFrame austauschen, ohne Position und Größe zu ändern?
Ja. Sie können den Video‑Inhalt innerhalb des Frames austauschen und dabei die Geometrie der Form beibehalten; dies ist ein gängiges Szenario zum Aktualisieren von Medien in einem bestehenden Layout.
Kann der MIME‑Typ eines eingebetteten Videos ermittelt werden?
Ja. Ein eingebettetes Video verfügt über einen Content‑Typ, den Sie auslesen und beispielsweise beim Speichern auf dem Datenträger verwenden können.