Zarządzanie klatkami wideo w prezentacjach przy użyciu Node.js
Wprowadzenie
Filmy mogą pomóc wyjaśnić pomysły i zaangażować odbiorców. Aspose.Slides for Node.js via Java umożliwia dodawanie klatek wideo do slajdów, dostosowywanie ustawień odtwarzania, zarządzanie napisami i wyodrębnianie osadzonych danych wideo.
PowerPoint obsługuje lokalne filmy oraz odnośniki do filmów online, takich jak filmy z YouTube.
Aby reprezentować dane wideo i klatki wideo, Aspose.Slides udostępnia klasę Video klasę VideoFrame oraz inne odpowiednie typy.
Utwórz osadzoną klatkę wideo
Jeśli plik wideo, który chcesz dodać do slajdu, jest przechowywany lokalnie, możesz utworzyć klatkę wideo, aby osadzić wideo w prezentacji.
Ten przykład osadza lokalny film na pierwszym slajdzie istniejącej prezentacji i zapisuje wynik. Współrzędne i wymiary klatki są podane w punktach. Strumień pozostaje otwarty, dopóki zapisywanie się nie zakończy, ponieważ LoadingStreamBehavior.KeepLocked blokuje go, gdy prezentacja z niego korzysta.
const aspose = { slides: require("aspose.slides.via.java") };
const java = require("java");
const presentation = new aspose.slides.Presentation("presentation.pptx");
try {
const videoStream = java.newInstanceSync("java.io.FileInputStream", "video.mp4");
try {
const slide = presentation.getSlides().get_Item(0);
const video = presentation.getVideos().addVideo(videoStream, aspose.slides.LoadingStreamBehavior.KeepLocked);
slide.getShapes().addVideoFrame(10, 10, 150, 250, video);
presentation.save("embedded_video.pptx", aspose.slides.SaveFormat.Pptx);
} finally {
videoStream.close();
}
} finally {
presentation.dispose();
}
Możesz również przekazać ścieżkę do lokalnego wideo bezpośrednio do addVideoFrame. Ten przykład osadza wideo na pierwszym slajdzie nowej prezentacji. Wideo musi pozostać dostępne, dopóki prezentacja nie zostanie zapisana.
const aspose = { slides: require("aspose.slides.via.java") };
const presentation = new aspose.slides.Presentation();
try {
const slide = presentation.getSlides().get_Item(0);
slide.getShapes().addVideoFrame(50, 150, 300, 150, "video.avi");
presentation.save("video_from_path.pptx", aspose.slides.SaveFormat.Pptx);
} finally {
presentation.dispose();
}
Utwórz klatkę wideo z wideo z źródła internetowego
Microsoft PowerPoint obsługuje wideo online w prezentacjach. Możesz utworzyć klatkę wideo, która łączy się z wideo online, takim jak wideo z YouTube.
Ten przykład dodaje odnośnik do wideo z YouTube oraz miniaturę na pierwszym slajdzie. Zamień identyfikator wideo, aby użyć innego wideo. Metoda setPlayMode żąda automatycznego odtwarzania. Pobieranie miniatury i odtwarzanie wideo wymaga dostępu do Internetu. Przeglądarka prezentacji musi także obsługiwać odtwarzanie wideo online.
const aspose = { slides: require("aspose.slides.via.java") };
const java = require("java");
const presentation = new aspose.slides.Presentation();
try {
const slide = presentation.getSlides().get_Item(0);
const videoId = "aqz-KE-bpKQ";
const videoUrl = "https://www.youtube.com/embed/" + videoId;
const videoFrame = slide.getShapes().addVideoFrame(10, 10, 427, 240, videoUrl);
videoFrame.setPlayMode(aspose.slides.VideoPlayModePreset.Auto);
const thumbnailUrl = "https://img.youtube.com/vi/" + videoId + "/hqdefault.jpg";
const thumbnailLocation = java.newInstanceSync("java.net.URL", thumbnailUrl);
const thumbnailStream = thumbnailLocation.openStream();
try {
const thumbnail = presentation.getImages().addImage(thumbnailStream);
videoFrame.getPictureFormat().getPicture().setImage(thumbnail);
} finally {
thumbnailStream.close();
}
presentation.save("online_video.pptx", aspose.slides.SaveFormat.Pptx);
} finally {
presentation.dispose();
}
Odtwarzaj wideo w trybie pełnoekranowym
W prezentacji szkoleniowej możesz odtwarzać demonstrację oprogramowania w trybie pełnoekranowym, aby publiczność mogła zobaczyć szczegóły. Wywołaj setFullScreenMode z wartością true, aby włączyć to zachowanie podczas odtwarzania.
Ten przykład otwiera prezentację, znajduje pierwszą VideoFrame na pierwszym slajdzie i włącza odtwarzanie w trybie pełnoekranowym. Wejściowa prezentacja musi zawierać co najmniej jeden slajd z istniejącą klatką wideo na pierwszym slajdzie.
const aspose = { slides: require("aspose.slides.via.java") };
const java = require("java");
const presentation = new aspose.slides.Presentation("training.pptx");
try {
const slide = presentation.getSlides().get_Item(0);
for (let shapeIndex = 0; shapeIndex < slide.getShapes().size(); shapeIndex++) {
const shape = slide.getShapes().get_Item(shapeIndex);
if (java.instanceOf(shape, "com.aspose.slides.VideoFrame")) {
const videoFrame = shape;
videoFrame.setFullScreenMode(true);
break;
}
}
presentation.save("full_screen_video.pptx", aspose.slides.SaveFormat.Pptx);
} finally {
presentation.dispose();
}
Odtwarzanie w trybie pełnoekranowym kontroluje sposób wyświetlania wideo. Oddzielnie, setPlayMode kontroluje, czy wideo rozpoczyna się automatycznie, czy po kliknięciu, a setPlayLoopMode kontroluje, czy się powtarza. Aby wybrać zachowanie początkowe, ustaw tryb odtwarzania na VideoPlayModePreset.Auto or VideoPlayModePreset.OnClick. Przykład zachowuje istniejące ustawienia startu i pętli.
Cofnij wideo po odtworzeniu
W prezentacji szkoleniowej przywrócenie demonstracji wideo do początku sprawia, że jest gotowe do ponownego odtworzenia przez prezentera. Wywołaj setRewindVideo z wartością true, aby po zakończeniu odtwarzania wideo wróciło do początku.
Ten przykład otwiera prezentację, znajduje pierwszą VideoFrame na pierwszym slajdzie i włącza przewijanie. Wyłącza pętlę, aby odtwarzanie mogło zakończyć się, oraz ustawia odtwarzanie na start po kliknięciu. Wejściowa prezentacja musi zawierać co najmniej jeden slajd z istniejącą klatką wideo na pierwszym slajdzie.
const aspose = { slides: require("aspose.slides.via.java") };
const java = require("java");
const presentation = new aspose.slides.Presentation("training.pptx");
try {
const slide = presentation.getSlides().get_Item(0);
for (let shapeIndex = 0; shapeIndex < slide.getShapes().size(); shapeIndex++) {
const shape = slide.getShapes().get_Item(shapeIndex);
if (java.instanceOf(shape, "com.aspose.slides.VideoFrame")) {
const videoFrame = shape;
videoFrame.setRewindVideo(true);
videoFrame.setPlayLoopMode(false);
videoFrame.setPlayMode(aspose.slides.VideoPlayModePreset.OnClick);
break;
}
}
presentation.save("rewind_video.pptx", aspose.slides.SaveFormat.Pptx);
} finally {
presentation.dispose();
}
Cofanie zwraca wideo do początku bez ponownego uruchamiania. W przeciwieństwie do tego, wywołanie setPlayLoopMode z wartością true powoduje automatyczne powtarzanie odtwarzania. Trzymaj pętlę wyłączoną, gdy chcesz, aby wideo zakończyło się i było gotowe do ponownego odtworzenia. setPlayMode niezależnie kontroluje automatyczny lub kliknięciowy start; w tym przykładzie użyto VideoPlayModePreset.OnClick, aby prezenter decydował o rozpoczęciu odtwarzania. Ustaw tryb odtwarzania po ustawieniu pętli, jak pokazano w przykładzie. Cofanie działa niezależnie od setFullScreenMode.
Przytnij klatkę wideo
Użyj VideoFrame.setTrimFromStart i VideoFrame.setTrimFromEnd, aby pominąć część początku lub końca wideo podczas odtwarzania. Obie wartości podawane są w milisekundach. Przycinanie zmienia ustawienia odtwarzania bez modyfikacji osadzonych danych wideo.
Ustawienia przycięcia
Ten przykład osadza lokalny film i pomija pierwsze 2,5 sekundy oraz ostatnią sekundę podczas odtwarzania. Użyj wideo dłuższego niż 3,5 sekundy, aby pozostał odtwarzalny segment.
const aspose = { slides: require("aspose.slides.via.java") };
const java = require("java");
const fs = require("fs");
const presentation = new aspose.slides.Presentation();
try {
const slide = presentation.getSlides().get_Item(0);
const videoBuffer = fs.readFileSync("video.mp4");
const videoData = java.newArray("byte", Array.from(videoBuffer));
const video = presentation.getVideos().addVideo(videoData);
const videoFrame = slide.getShapes().addVideoFrame(50, 50, 640, 360, video);
videoFrame.setTrimFromStart(2500);
videoFrame.setTrimFromEnd(1000);
presentation.save("video_with_trim.pptx", aspose.slides.SaveFormat.Pptx);
} finally {
presentation.dispose();
}
Odczytaj ustawienia przycięcia
Ten przykład wypisuje wartości przycięcia pierwszej klatki wideo na pierwszym slajdzie w milisekundach. Prezentacja musi zawierać co najmniej jeden slajd. Jeśli ten slajd nie ma klatki wideo, nic nie zostanie wypisane. Poprzedni przykład generuje wartości 2500 i 1000.
const aspose = { slides: require("aspose.slides.via.java") };
const java = require("java");
const presentation = new aspose.slides.Presentation("video_with_trim.pptx");
try {
const slide = presentation.getSlides().get_Item(0);
for (let shapeIndex = 0; shapeIndex < slide.getShapes().size(); shapeIndex++) {
const shape = slide.getShapes().get_Item(shapeIndex);
if (java.instanceOf(shape, "com.aspose.slides.VideoFrame")) {
const videoFrame = shape;
console.log("Trim from start: " + videoFrame.getTrimFromStart() + " ms");
console.log("Trim from end: " + videoFrame.getTrimFromEnd() + " ms");
break;
}
}
} finally {
presentation.dispose();
}
Zarządzaj napisami wideo
Aspose.Slides pozwala zarządzać napisami zamkniętymi dla klatek wideo w prezentacjach PowerPoint. Napisy są przechowywane w formacie WebVTT i udostępniane poprzez metodę VideoFrame.getCaptionTracks.
Dodaj napisy do klatki wideo
Ten przykład osadza lokalny film i dodaje ścieżkę napisów WebVTT oznaczoną jako English. Znaczniki czasu napisów powinny pasować do wideo. Zapisana prezentacja zawiera zarówno wideo, jak i jego napisy.
const aspose = { slides: require("aspose.slides.via.java") };
const java = require("java");
const fs = require("fs");
const presentation = new aspose.slides.Presentation();
try {
const slide = presentation.getSlides().get_Item(0);
const videoBuffer = fs.readFileSync("video.mp4");
const videoData = java.newArray("byte", Array.from(videoBuffer));
const video = presentation.getVideos().addVideo(videoData);
const videoFrame = slide.getShapes().addVideoFrame(0, 0, 100, 100, video);
videoFrame.getCaptionTracks().add("English", "track.vtt");
presentation.save("video_with_captions.pptx", aspose.slides.SaveFormat.Pptx);
} finally {
presentation.dispose();
}
Klasa CaptionsCollection udostępnia również metodę addFromStream do dodawania napisów ze strumienia.
Wyodrębnij napisy z klatki wideo
Ten przykład zapisuje wszystkie ścieżki napisów z klatek wideo na pierwszym slajdzie jako oddzielne pliki WebVTT. Kolejne numery utrzymują pliki wyjściowe jako odrębne. Konsola raportuje liczbę wyodrębnionych ścieżek. Prezentacja musi zawierać co najmniej jeden slajd.
const aspose = { slides: require("aspose.slides.via.java") };
const java = require("java");
const fs = require("fs");
const presentation = new aspose.slides.Presentation("video_with_captions.pptx");
try {
const slide = presentation.getSlides().get_Item(0);
let trackCount = 0;
for (let shapeIndex = 0; shapeIndex < slide.getShapes().size(); shapeIndex++) {
const shape = slide.getShapes().get_Item(shapeIndex);
if (java.instanceOf(shape, "com.aspose.slides.VideoFrame")) {
const videoFrame = shape;
for (let trackIndex = 0; trackIndex < videoFrame.getCaptionTracks().getCount(); trackIndex++) {
const captionTrack = videoFrame.getCaptionTracks().get_Item(trackIndex);
trackCount++;
const outputPath = "captions_" + trackCount + ".vtt";
const outputData = Buffer.from(captionTrack.getBinaryData());
fs.writeFileSync(outputPath, outputData);
}
}
}
console.log("Caption tracks extracted: " + trackCount);
} finally {
presentation.dispose();
}
Każdy obiekt Captions udostępnia identyfikator napisu, etykietę, dane binarne oraz tekst napisu jako łańcuch UTF‑8.
Usuń napisy z klatki wideo
Ten przykład usuwa wszystkie napisy z klatki wideo znajdującej się na pierwszej pozycji kształtu pierwszego slajdu i zapisuje wynik. Zakłada, że slajd i kształt istnieją oraz że kształt jest klatką wideo.
const aspose = { slides: require("aspose.slides.via.java") };
const presentation = new aspose.slides.Presentation("video_with_captions.pptx");
try {
const slide = presentation.getSlides().get_Item(0);
const videoFrame = slide.getShapes().get_Item(0);
videoFrame.getCaptionTracks().clear();
presentation.save("video_without_captions.pptx", aspose.slides.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 slajdu
Oprócz dodawania wideo do slajdów, Aspose.Slides umożliwia wyodrębnianie wideo osadzonego w prezentacjach.
Ten przykład wyodrębnia osadzone wideo ze wszystkich slajdów do oddzielnych, numerowanych plików binarnych. Wideo powiązane pomijane jest, ponieważ nie ma osadzonych danych. Konsola wypisuje typ MIME każdego wideo oraz całkowitą liczbę. Wynik używa ogólnego rozszerzenia .bin; zmień je, aby pasowało do zgłoszonego typu mediów, gdy jest to konieczne.
const aspose = { slides: require("aspose.slides.via.java") };
const java = require("java");
const fs = require("fs");
const presentation = new aspose.slides.Presentation("presentation_with_videos.pptx");
try {
let videoCount = 0;
for (let slideIndex = 0; slideIndex < presentation.getSlides().size(); slideIndex++) {
const slide = presentation.getSlides().get_Item(slideIndex);
for (let shapeIndex = 0; shapeIndex < slide.getShapes().size(); shapeIndex++) {
const shape = slide.getShapes().get_Item(shapeIndex);
if (java.instanceOf(shape, "com.aspose.slides.VideoFrame")) {
const videoFrame = shape;
const video = videoFrame.getEmbeddedVideo();
if (video == null) {
console.log("Skipped a linked video: no embedded data is available.");
continue;
}
videoCount++;
const outputPath = "extracted_video_" + videoCount + ".bin";
const outputData = Buffer.from(video.getBinaryData());
fs.writeFileSync(outputPath, outputData);
console.log("Video " + videoCount + ": " + video.getContentType());
}
}
}
console.log("Embedded videos extracted: " + videoCount);
} finally {
presentation.dispose();
}
FAQ
Jakie parametry odtwarzania wideo można zmienić dla klatki wideo?
Możesz kontrolować playback mode (auto lub po kliknięciu) oraz looping. Opcje te są dostępne poprzez metody obiektu VideoFrame.
Czy dodanie wideo wpływa na rozmiar pliku PPTX?
Tak. Gdy osadzasz lokalny film, dane binarne są włączane do dokumentu, więc rozmiar prezentacji rośnie proporcjonalnie do rozmiaru pliku. Gdy łączysz się z wideo online i dodajesz miniaturę, prezentacja przechowuje odnośnik i obraz podglądu zamiast danych wideo, więc przyrost rozmiaru zazwyczaj jest mniejszy.
Czy mogę zamienić wideo w istniejącej klatce wideo bez zmiany jej pozycji i rozmiaru?
Tak. Możesz podmienić video content w ramach klatki, zachowując geometryczną strukturę kształtu; jest to częsty scenariusz aktualizacji mediów w istniejącym układzie.
Czy można określić typ zawartości (MIME) osadzonego wideo?
Tak. Osadzone wideo posiada content type, który możesz odczytać i wykorzystać, na przykład przy zapisywaniu go na dysk.