Zarządzaj ramkami wideo w prezentacjach przy użyciu PHP
Wprowadzenie
Dobrze umieszczone wideo w prezentacji może uczynić Twoje przesłanie bardziej przekonujące i zwiększyć poziom zaangażowania odbiorców.
PowerPoint umożliwia dodanie wideo do slajdu w prezentacji na dwa sposoby:
- Dodaj lub osadź lokalne wideo (przechowywane na Twoim komputerze)
- Dodaj wideo internetowe (z źródła internetowego, takiego jak YouTube).
Aby umożliwić dodawanie wideo (obiektów wideo) do prezentacji, Aspose.Slides udostępnia klasę Video , klasę VideoFrame oraz inne powiązane typy.
Utwórz osadzone ramki wideo
Jeśli plik wideo, który chcesz dodać do slajdu, jest przechowywany lokalnie, możesz utworzyć ramkę wideo, aby osadzić wideo w prezentacji.
- Utwórz instancję klasy Presentation .
- Pobierz referencję do slajdu za pomocą jego indeksu.
- Dodaj obiekt Video i przekaż ścieżkę do pliku wideo, aby osadzić wideo w prezentacji.
- Dodaj obiekt VideoFrame , aby utworzyć ramkę dla wideo.
- Zapisz zmodyfikowaną prezentację.
Ten kod PHP pokazuje, jak dodać lokalnie przechowywane wideo do prezentacji:
# Tworzy instancję klasy Presentation
$pres = new Presentation("pres.pptx");
try {
# Ładuje wideo
$fileStream = new Java("java.io.FileInputStream", "Wildlife.mp4");
$video = $pres->getVideos()->addVideo($fileStream, LoadingStreamBehavior->KeepLocked);
# Pobiera pierwszy slajd i dodaje ramkę wideo
$pres->getSlides()->get_Item(0)->getShapes()->addVideoFrame(10, 10, 150, 250, $video);
# Zapisuje prezentację na dysku
$pres->save("pres-with-video.pptx", SaveFormat::Pptx);
} catch (JavaException $e) {
} finally {
if (!java_is_null($pres)) {
$pres->dispose();
}
}
Alternatywnie możesz dodać wideo, przekazując jego ścieżkę bezpośrednio do metody 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();
}
}
Utwórz ramki wideo z wideo ze źródeł internetowych
Microsoft PowerPoint 2013 i nowsze obsługuje wideo z YouTube w prezentacjach. Jeśli wideo, którego chcesz użyć, jest dostępne w Internecie (np. na YouTube), możesz dodać je do prezentacji za pomocą odnośnika internetowego.
- Utwórz instancję klasy Presentation
- Pobierz referencję do slajdu za pomocą jego indeksu.
- Dodaj obiekt Video i przekaż odnośnik do wideo.
- Ustaw miniaturę dla ramki wideo.
- Zapisz prezentację.
Ten kod PHP pokazuje, jak dodać wideo z sieci do slajdu w prezentacji PowerPoint:
# Tworzy obiekt Presentation, który reprezentuje plik prezentacji
$pres = new Presentation();
try {
addVideoFromYouTube($pres, "Tj75Arhq5ho");
$pres->save("out.pptx", SaveFormat::Pptx);
} finally {
if (!java_is_null($pres)) {
$pres->dispose();
}
}
Przytnij ramkę wideo
Aspose.Slides pozwala kontrolować, która część wideo jest odtwarzana, ustawiając wartości trim‑from‑start i trim‑from‑end za pomocą metod VideoFrame::setTrimFromStart oraz VideoFrame::setTrimFromEnd. Obie wartości podawane są w milisekundach i określają, ile czasu pomijać od początku i końca wideo. Ustawienia te zmieniają sposób odtwarzania wideo w prezentacji; nie tną ani nie modyfikują binarnych danych osadzonego wideo.
Ustawienia przycięcia
Aby utworzyć ramkę wideo i ustawić jej parametry przycięcia:
- Utwórz instancję klasy Presentation .
- Dodaj obiekt Video do prezentacji.
- Dodaj obiekt VideoFrame do slajdu.
- Ustaw wartości trim‑from‑start i trim‑from‑end za pomocą metod VideoFrame::setTrimFromStart i VideoFrame::setTrimFromEnd .
- Zapisz zmodyfikowaną prezentację.
Poniższy przykład kodu pomija pierwsze 2,5 s i ostatnią sekundę osadzonego wideo podczas odtwarzania:
$presentation = new Presentation();
$videoStream = null;
try {
$videoStream = new Java("java.io.FileInputStream", "video.mp4");
$video = $presentation->getVideos()->addVideo(
$videoStream, LoadingStreamBehavior::ReadStreamAndRelease);
$slide = $presentation->getSlides()->get_Item(0);
$videoFrame = $slide->getShapes()->addVideoFrame(50, 50, 640, 360, $video);
$videoFrame->setTrimFromStart(2500);
$videoFrame->setTrimFromEnd(1000);
$presentation->save("video_with_trim.pptx", SaveFormat::Pptx);
} finally {
if ($videoStream !== null) {
$videoStream->close();
}
$presentation->dispose();
}
Odczyt ustawień przycięcia
Aby odczytać istniejące ustawienia przycięcia, wczytaj prezentację, znajdź obiekt VideoFrame wśród kształtów na pierwszym slajdzie i odczytaj wartości za pomocą metod VideoFrame::getTrimFromStart oraz VideoFrame::getTrimFromEnd .
Poniższy przykład kodu znajduje pierwszą ramkę wideo na pierwszym slajdzie i zgłasza jej ustawienia przycięcia w milisekundach:
$presentation = new Presentation("video_with_trim.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;
$trimFromStart = java_values($videoFrame->getTrimFromStart());
$trimFromEnd = java_values($videoFrame->getTrimFromEnd());
echo "Trim from start: " . $trimFromStart . " ms\n";
echo "Trim from end: " . $trimFromEnd . " ms\n";
break;
}
}
} finally {
$presentation->dispose();
}
Zarządzaj napisami wideo
Aspose.Slides pozwala zarządzać napisami zamkniętymi dla ramek wideo w prezentacjach PowerPoint. Napisy są przechowywane w formacie WebVTT i udostępniane poprzez metodę VideoFrame::getCaptionTracks .
Dodaj napisy do ramki wideo
Aby dodać napisy do ramki wideo:
- Utwórz instancję klasy Presentation .
- Dodaj wideo do prezentacji.
- Dodaj obiekt VideoFrame do slajdu.
- Skorzystaj z kolekcji CaptionsCollection zwróconej przez getCaptionTracks , aby dodać ścieżkę napisów WebVTT.
- Zapisz zmodyfikowaną prezentację.
Poniższy kod pokazuje, jak dodać napisy do ramki wideo:
$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);
// Dodaje nową ścieżkę napisów z pliku WebVTT.
$videoFrame->getCaptionTracks()->add("English", "track.vtt");
$presentation->save("video_with_captions.pptx", SaveFormat::Pptx);
} finally {
$presentation->dispose();
}
Klasa CaptionsCollection udostępnia również przeciążenie pozwalające dodać napisy ze strumienia.
Wyodrębnij napisy z ramki wideo
Aby wyodrębnić napisy z ramki wideo:
- Wczytaj prezentację zawierającą wideo.
- Znajdź docelowy obiekt VideoFrame .
- Przeglądaj kolekcję zwróconą przez getCaptionTracks .
- Zapisz każdą ścieżkę napisów do pliku
.vtt.
Poniższy kod pokazuje, jak wyodrębnić napisy z ramki wideo:
$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);
// Zapisuje ścieżkę napisów do pliku WebVTT.
$filePath = $captionTrack->getCaptionId() . ".vtt";
file_put_contents($filePath, $captionTrack->getBinaryData());
}
}
}
} finally {
$presentation->dispose();
}
Każdy obiekt Captions udostępnia identyfikator napisu, etykietę, dane binarne oraz tekst napisu jako ciąg UTF‑8.
Usuń napisy z ramki wideo
Aby usunąć napisy z ramki wideo:
- Wczytaj prezentację zawierającą wideo.
- Pobierz docelowy obiekt VideoFrame .
- Usuń ścieżki napisów z kolekcji zwróconej przez getCaptionTracks .
- Zapisz zmodyfikowaną prezentację.
Poniższy kod pokazuje, jak usunąć wszystkie napisy z ramki wideo:
$presentation = new Presentation("video_with_captions.pptx");
try {
$slide = $presentation->getSlides()->get_Item(0);
$videoFrame = $slide->getShapes()->get_Item(0); // typ: VideoFrame
// Usuwa wszystkie napisy z ramki wideo.
$videoFrame->getCaptionTracks()->clear();
$presentation->save("video_without_captions.pptx", SaveFormat::Pptx);
} finally {
$presentation->dispose();
}
Jeśli potrzebujesz usunąć tylko jedną ścieżkę napisów, użyj metod remove lub removeAt zamiast clear .
Wyodrębnij wideo ze slajdów
Poza dodawaniem wideo do slajdów, Aspose.Slides umożliwia wyodrębnianie wideo osadzonego w prezentacjach.
- Utwórz instancję klasy Presentation , aby wczytać prezentację zawierającą wideo.
- Przeglądaj wszystkie obiekty Slide .
- Przeglądaj wszystkie obiekty Shape , aby znaleźć VideoFrame .
- Zapisz wideo na dysk.
Ten kod PHP pokazuje, jak wyodrębnić wideo z slajdu prezentacji:
# Tworzy obiekt Presentation, który reprezentuje plik prezentacji
$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();
# Uzyskuje rozszerzenie pliku
$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
Jakie parametry odtwarzania wideo można zmienić dla VideoFrame?
Możesz kontrolować tryb odtwarzania (automatycznie lub po kliknięciu) oraz pętlę. Opcje te są dostępne jako właściwości obiektu VideoFrame .
Czy dodanie wideo wpływa na rozmiar pliku PPTX?
Tak. Gdy osadzasz lokalne wideo, jego dane binarne są włączane do dokumentu, więc rozmiar prezentacji rośnie proporcjonalnie do rozmiaru pliku. Gdy dodajesz wideo internetowe, osadzany jest jedynie odnośnik i miniatura, co powoduje mniejszy przyrost rozmiaru.
Czy mogę zamienić wideo w istniejącym VideoFrame bez zmiany jego położenia i rozmiaru?
Tak. Możesz zamienić zawartość wideo w ramach, zachowując geometrię kształtu; jest to typowy scenariusz aktualizacji mediów w istniejącym układzie.
Czy można określić typ zawartości (MIME) osadzonego wideo?
Tak. Osadzone wideo posiada typ zawartości , który możesz odczytać i wykorzystać, np. przy zapisywaniu go na dysk.