Hantera videoramar i presentationer med PHP

Introduktion

En välplacerad video i en presentation kan göra ditt budskap mer övertygande och öka engagemangsnivån hos din publik.

PowerPoint låter dig lägga till videor på en bild i en presentation på två sätt:

  • Lägg till eller bädda in en lokal video (lagrad på din maskin)
  • Lägg till en online-video (från en webbkälla såsom YouTube).

För att låta dig lägga till videor (videoobjekt) i en presentation tillhandahåller Aspose.Slides klassen Video, klassen VideoFrame och andra relevanta typer.

Skapa inbäddade video‑ramar

Om videofilen du vill lägga till på din bild är lagrad lokalt kan du skapa en videoram för att bädda in videon i din presentation.

  1. Skapa en instans av klassen Presentation.
  2. Hämta en bilds referens via dess index.
  3. Lägg till ett Video‑objekt och ange videofilens sökväg för att bädda in videon i presentationen.
  4. Lägg till ett VideoFrame‑objekt för att skapa en ram för videon.
  5. Spara den ändrade presentationen.

Denna PHP‑kod visar hur du lägger till en lokalt lagrad video i en presentation:

  # Skapar en instans av Presentation-klassen
  $pres = new Presentation("pres.pptx");
  try {
    # Läser in videon
    $fileStream = new Java("java.io.FileInputStream", "Wildlife.mp4");
    $video = $pres->getVideos()->addVideo($fileStream, LoadingStreamBehavior->KeepLocked);
    # Hämtar den första bilden och lägger till en videoram
    $pres->getSlides()->get_Item(0)->getShapes()->addVideoFrame(10, 10, 150, 250, $video);
    # Sparar presentationen till disk
    $pres->save("pres-with-video.pptx", SaveFormat::Pptx);
  } catch (JavaException $e) {
  } finally {
    if (!java_is_null($pres)) {
      $pres->dispose();
    }
  }

Alternativt kan du lägga till en video genom att skicka dess filsökväg direkt till metoden addVideoFrame(float x, float y, float width, float height, Video video):

  $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();
    }
  }

Skapa video‑ramar med video från webbkällor

Microsoft PowerPoint 2013 och senare stöder YouTube‑videor i presentationer. Om videon du vill använda finns online (t.ex. på YouTube) kan du lägga till den i din presentation via dess webblänk.

  1. Skapa en instans av klassen Presentation.
  2. Hämta en bilds referens via dess index.
  3. Lägg till ett Video‑objekt och ange länken till videon.
  4. Ställ in en miniatyr för video‑ramen.
  5. Spara presentationen.

Denna PHP‑kod visar hur du lägger till en video från webben på en bild i en PowerPoint‑presentation:

  # Skapar ett Presentation-objekt som representerar en presentationsfil
  $pres = new Presentation();
  try {
    addVideoFromYouTube($pres, "Tj75Arhq5ho");
    $pres->save("out.pptx", SaveFormat::Pptx);
  } finally {
    if (!java_is_null($pres)) {
      $pres->dispose();
    }
  }

Hantera video‑undertexter

Aspose.Slides låter dig hantera stängda undertexter för video‑ramar i PowerPoint‑presentationer. Undertexterna lagras i WebVTT‑format och kan nås via metoden VideoFrame::getCaptionTracks.

Lägg till undertexter på en video‑ram

För att lägga till undertexter på en video‑ram:

  1. Skapa en instans av klassen Presentation.
  2. Lägg till en video i presentationen.
  3. Lägg till ett VideoFrame-objekt på en bild.
  4. Använd samlingen CaptionsCollection som returneras av getCaptionTracks för att lägga till ett WebVTT‑undertextspår.
  5. Spara den ändrade presentationen.

Följande kod visar hur du lägger till undertexter på en video‑ram:

$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);

    // Lägger till ett nytt undertextspår från en WebVTT-fil.
    $videoFrame->getCaptionTracks()->add("English", "track.vtt");

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

Klassen CaptionsCollection erbjuder också en överlagring som låter dig lägga till undertexter från en ström.

Extrahera undertexter från en video‑ram

För att extrahera undertexter från en video‑ram:

  1. Läs in presentationen som innehåller videon.
  2. Hitta mål‑objektet VideoFrame.
  3. Iterera igenom samlingen getCaptionTracks.
  4. Spara varje undertextspår till en .vtt‑fil.

Följande kod visar hur du extraherar undertexter från en video‑ram:

$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);
                // Sparar undertextspåret till en WebVTT-fil.
                $filePath = $captionTrack->getCaptionId() . ".vtt";
                file_put_contents($filePath, $captionTrack->getBinaryData());
            }
        }
    }
} finally {
    $presentation->dispose();
}

Varje Captions‑objekt exponerar undertextens identifierare, etikett, binära data och undertextens text som en UTF‑8‑sträng.

Ta bort undertexter från en video‑ram

För att ta bort undertexter från en video‑ram:

  1. Läs in presentationen som innehåller videon.
  2. Hämta mål‑objektet VideoFrame.
  3. Ta bort undertextspår från samlingen getCaptionTracks.
  4. Spara den ändrade presentationen.

Följande kod visar hur du tar bort alla undertexter från en video‑ram:

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

    // Tar bort alla undertexter från videoramen.
    $videoFrame->getCaptionTracks()->clear();

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

Om du bara behöver ta bort ett undertextspår, använd metoderna remove eller removeAt istället för clear.

Extrahera video från bilder

Förutom att lägga till videor på bilder låter Aspose.Slides dig extrahera videor som är inbäddade i presentationer.

  1. Skapa en instans av klassen Presentation för att läsa in presentationen som innehåller videon.
  2. Iterera genom alla Slide‑objekt.
  3. Iterera genom alla Shape‑objekt för att hitta ett VideoFrame.
  4. Spara videon på disk.

Denna PHP‑kod visar hur du extraherar videon på en presentationsbild:

  # Skapar ett Presentation-objekt som representerar en presentationsfil
  $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();
          # Hämtar filändelsen
          $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

Vilka videouppspelningsparametrar kan ändras för en VideoFrame?

Du kan styra playback mode (auto eller vid klick) och looping. Dessa alternativ är tillgängliga via egenskaperna för objektet VideoFrame.

Påverkar tillägg av en video PPTX‑filens storlek?

Ja. När du bäddar in en lokal video inkluderas de binära data i dokumentet, vilket gör att presentationens storlek ökar i proportion till filens storlek. När du lägger till en online‑video bäddas en länk och en miniatyr in, så ökningen av storlek är mindre.

Kan jag ersätta videon i en befintlig VideoFrame utan att ändra dess position och storlek?

Ja. Du kan byta ut video content inom ramen samtidigt som du bevarar formens geometri; detta är ett vanligt scenario för att uppdatera media i en befintlig layout.

Kan innehållstypen (MIME) för en inbäddad video bestämmas?

Ja. En inbäddad video har en content type som du kan läsa och använda, till exempel när du sparar den på disk.