Verwalten von Videoframes in Präsentationen mit PHP

Ein gut platziertes Video in einer Präsentation kann Ihre Botschaft überzeugender machen und das Engagement Ihrer Zielgruppe steigern.

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 Computer gespeichert)
  • Ein Online-Video hinzufügen (von einer Webquelle wie YouTube).

Um Ihnen das Hinzufügen von Videos (Videoobjekten) zu einer Präsentation zu ermöglichen, stellt Aspose.Slides die Klasse Video bereit, die Klasse VideoFrame und weitere relevante Typen.

Einbetten von Videoframes erstellen

Wenn die Videodatei, die Sie zu Ihrer Folie hinzufügen möchten, lokal gespeichert ist, können Sie einen Videoframe erstellen, um das Video in Ihrer Präsentation einzubetten.

  1. Erstellen Sie eine Instanz der Klasse Presentation.
  2. Rufen Sie die Referenz einer Folie über ihren Index ab.
  3. Fügen Sie ein Video‑Objekt hinzu und übergeben Sie den Pfad zur Videodatei, um das Video in die Präsentation einzubetten.
  4. Fügen Sie ein VideoFrame‑Objekt hinzu, um einen Frame für das Video zu erstellen.
  5. Speichern Sie die modifizierte Präsentation.

Dieser PHP‑Code zeigt, wie Sie ein lokal gespeichertes Video zu einer Präsentation hinzufügen:

  # Instanziiert die Presentation-Klasse
  $pres = new Presentation("pres.pptx");
  try {
    # Lädt das Video
    $fileStream = new Java("java.io.FileInputStream", "Wildlife.mp4");
    $video = $pres->getVideos()->addVideo($fileStream, LoadingStreamBehavior->KeepLocked);
    # Holt die erste Folie und fügt einen Videoframe 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 (JavaException $e) {
  } finally {
    if (!java_is_null($pres)) {
      $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, Video video) übergeben:

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

Erstellen von Videoframes mit Videos aus Webquellen

Microsoft PowerPoint 2013 and newer unterstützt YouTube‑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 Weblink zu Ihrer Präsentation hinzufügen.

  1. Erstellen Sie eine Instanz der Klasse Presentation.
  2. Rufen Sie die Referenz einer Folie über ihren Index ab.
  3. Fügen Sie ein Video‑Objekt hinzu und übergeben Sie den Link zum Video.
  4. Legen Sie ein Thumbnail für den Videoframe fest.
  5. Speichern Sie die Präsentation.

Dieser PHP‑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
  $pres = new Presentation();
  try {
    addVideoFromYouTube($pres, "Tj75Arhq5ho");
    $pres->save("out.pptx", SaveFormat::Pptx);
  } finally {
    if (!java_is_null($pres)) {
      $pres->dispose();
    }
  }

Video-Untertitel verwalten

Aspose.Slides ermöglicht das Verwalten von geschlossenen Untertiteln für Videoframes in PowerPoint‑Präsentationen. Untertitel werden im WebVTT‑Format gespeichert und über die Methode VideoFrame::getCaptionTracks bereitgestellt.

Untertitel zu einem Videoframe hinzufügen

  1. Erstellen Sie eine Instanz der Klasse Presentation.
  2. Fügen Sie der Präsentation ein Video hinzu.
  3. Fügen Sie ein VideoFrame‑Objekt zu einer Folie hinzu.
  4. Verwenden Sie die von getCaptionTracks zurückgegebene CaptionsCollection, um einen WebVTT‑Untertiteltrack hinzuzufügen.
  5. Speichern Sie die modifizierte Präsentation.

Der folgende Code zeigt, wie Sie Untertitel zu einem Videoframe hinzufügen:

$presentation = new Presentation();
try {
    $videoData = file_get_contents("video.mp4");
    $video = $presentation->getVideos()->addVideo($videoData);

    $slide = $presentation->getSlides()->get_Item(0);
    $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 Klasse CaptionsCollection bietet zudem eine Überladung, mit der Sie Untertitel aus einem Stream hinzufügen können.

Untertitel aus einem Videoframe extrahieren

  1. Laden Sie die Präsentation, die das Video enthält.
  2. Suchen Sie das Ziel‑VideoFrame-Objekt.
  3. Iterieren Sie über die getCaptionTracks-Sammlung.
  4. Speichern Sie jeden Untertiteltrack in einer .vtt‑Datei.

Der folgende Code zeigt, wie Sie Untertitel aus einem Videoframe extrahieren:

$presentation = new Presentation("video_with_captions.pptx");
try {
    $slide = $presentation->getSlides()->get_Item(0);
    $shapeCount = java_values($slide->getShapes()->size());
    for ($shapeIndex = 0; $shapeIndex < $shapeCount; $shapeIndex++) {
        $shape = $slide->getShapes()->get_Item($shapeIndex);
        if (java_instanceof($shape, new JavaClass("com.aspose.slides.VideoFrame"))) {
            $videoFrame = $shape;
            $trackCount = java_values($videoFrame->getCaptionTracks()->getCount());
            for ($trackIndex = 0; $trackIndex < $trackCount; $trackIndex++) {
                $captionTrack = $videoFrame->getCaptionTracks()->get_Item($trackIndex);
                // Speichert die Untertitelspur in einer WebVTT-Datei.
                $filePath = $captionTrack->getCaptionId() . ".vtt";
                file_put_contents($filePath, $captionTrack->getBinaryData());
            }
        }
    }
} finally {
    $presentation->dispose();
}

Jedes Captions‑Objekt stellt die Untertitel‑Kennung, das Label, die Binärdaten und den Untertiteltext als UTF‑8‑Zeichenfolge bereit.

Untertitel von einem Videoframe entfernen

  1. Laden Sie die Präsentation, die das Video enthält.
  2. Rufen Sie das Ziel‑VideoFrame-Objekt ab.
  3. Entfernen Sie Untertiteltracks aus der getCaptionTracks-Sammlung.
  4. Speichern Sie die modifizierte Präsentation.

Der folgende Code zeigt, wie Sie alle Untertitel von einem Videoframe entfernen:

$presentation = new Presentation("video_with_captions.pptx");
try {
    $slide = $presentation->getSlides()->get_Item(0);
    $videoFrame = $slide->getShapes()->get_Item(0); // Typ: VideoFrame

    // Entfernt alle Untertitel aus dem Videoframe.
    $videoFrame->getCaptionTracks()->clear();

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

Wenn Sie nur einen Untertiteltrack entfernen müssen, verwenden Sie die Methoden remove oder removeAt, anstelle von clear.

Video aus Folien extrahieren

Neben dem Hinzufügen von Videos zu Folien ermöglicht Aspose.Slides das Extrahieren von in Präsentationen eingebetteten Videos.

  1. Erstellen Sie eine Instanz der Klasse Presentation, um die Präsentation zu laden, die das Video enthält.
  2. Iterieren Sie über alle Slide‑Objekte.
  3. Iterieren Sie über alle Shape‑Objekte, um ein VideoFrame zu finden.
  4. Speichern Sie das Video auf dem Datenträger.

Dieser PHP‑Code zeigt, wie Sie das Video einer Präsentationsfolie extrahieren:

  # Instanziert ein Presentation-Objekt, das eine Präsentationsdatei darstellt
  $pres = new Presentation("VideoSample.pptx");
  try {
    foreach($pres->getSlides() as $slide) {
      foreach($slide->getShapes() as $shape) {
        if (java_instanceof($shape, new JavaClass("com.aspose.slides.VideoFrame"))) {
          $vf = $shape;
          $type = $vf->getEmbeddedVideo()->getContentType();
          $ss = $type->lastIndexOf('-');
          $buffer = $vf->getEmbeddedVideo()->getBinaryData();
          # Ermittelt die Dateierweiterung
          $charIndex = $type->indexOf("/");
          $type = $type->substring($charIndex + 1);
          $fop = new Java("java.io.FileOutputStream", "testing2." . $type);
          $fop->write($buffer);
          $fop->flush();
          $fop->close();
        }
      }
    }
  } catch (JavaException $e) {
  } finally {
    if (!java_is_null($pres)) {
      $pres->dispose();
    }
  }

FAQ

Welche Wiedergabeparameter können für einen VideoFrame geändert werden?

Sie können den playback mode (automatisch oder bei Klick) und das looping steuern. Diese Optionen sind über die Eigenschaften des VideoFrame‑Objekts verfügbar.

Beeinflusst das Hinzufügen eines Videos die PPTX-Dateigröße?

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 ein Link und ein Thumbnail eingebettet, wodurch die Größensteigerung geringer ausfällt.

Kann ich das Video in einem bestehenden VideoFrame ersetzen, ohne Position und Größe zu ändern?

Ja. Sie können den video content 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 Content-Type (MIME) eines eingebetteten Videos ermittelt werden?

Ja. Ein eingebettetes Video hat einen content type, den Sie auslesen und verwenden können, zum Beispiel beim Speichern auf dem Datenträger.