Správa video rámců v prezentacích pomocí JavaScriptu
Úvod
Dobře umístěné video v prezentaci může učinit vaši zprávu přesvědčivější a zvýšit úroveň zapojení publika.
PowerPoint umožňuje přidávat videa do snímku v prezentaci dvěma způsoby:
- Přidat nebo vložit lokální video (uložené ve vašem počítači)
- Přidat online video (z webového zdroje, například YouTube).
Aby bylo možné do prezentace přidávat videa (video objekty), poskytuje Aspose.Slides třídu Video , třídu VideoFrame a další související typy.
Vytvoření vloženého video rámce
Pokud je video soubor, který chcete přidat do snímku, uložen lokálně, můžete vytvořit video rámec pro vložení videa do prezentace.
- Vytvořte instanci třídy Presentation class.
- Získejte odkaz na snímek pomocí jeho indexu.
- Přidejte objekt Video a předáte cestu k video souboru pro vložení videa do prezentace.
- Přidejte objekt VideoFrame pro vytvoření rámce pro video.
- Uložte upravenou prezentaci.
Tento JavaScript kód ukazuje, jak přidat lokálně uložené video do prezentace:
// Vytváří instanci třídy Presentation
var pres = new aspose.slides.Presentation("pres.pptx");
try {
// Načítá video
var fileStream = java.newInstanceSync("java.io.FileInputStream", "Wildlife.mp4");
var video = pres.getVideos().addVideo(fileStream, aspose.slides.LoadingStreamBehavior.KeepLocked);
// Získá první snímek a přidá video rámec
pres.getSlides().get_Item(0).getShapes().addVideoFrame(10, 10, 150, 250, video);
// Uloží prezentaci na disk
pres.save("pres-with-video.pptx", aspose.slides.SaveFormat.Pptx);
} catch (e) {console.log(e);
} finally {
if (pres != null) {
pres.dispose();
}
}
Případně můžete přidat video předáním cesty k souboru přímo do metody addVideoFrame(float x, float y, float width, float height, IVideo video) :
var pres = new aspose.slides.Presentation();
try {
var sld = pres.getSlides().get_Item(0);
var vf = sld.getShapes().addVideoFrame(50, 150, 300, 150, "video1.avi");
} finally {
if (pres != null) {
pres.dispose();
}
}
Vytvoření video rámce s videem z webového zdroje
Microsoft PowerPoint 2013 a novější podporuje videa z YouTube v prezentacích. Pokud je video, které chcete použít, dostupné online (např. na YouTube), můžete jej přidat do prezentace pomocí jeho webového odkazu.
- Vytvořte instanci třídy Presentation class
- Získejte odkaz na snímek pomocí jeho indexu.
- Přidejte objekt Video a předáte odkaz na video.
- Nastavte náhled pro video rámec.
- Uložte prezentaci.
Tento JavaScript kód ukazuje, jak přidat video z webu do snímku v PowerPoint prezentaci:
// Vytváří objekt Presentation, který představuje soubor prezentace
var pres = new aspose.slides.Presentation();
try {
addVideoFromYouTube(pres, "Tj75Arhq5ho");
pres.save("out.pptx", aspose.slides.SaveFormat.Pptx);
} finally {
if (pres != null) {
pres.dispose();
}
}
async function addVideoFromYouTube(pres, videoID) {
let slide = pres.getSlides().get_Item(0);
let videoUrl = "https://www.youtube.com/embed/" + videoID;
let videoFrame = slide.getShapes().addVideoFrame(10, 10, 427, 240, videoUrl);
videoFrame.setPlayMode(aspose.slides.VideoPlayModePreset.Auto);
let thumbnailUri = "http://img.youtube.com/vi/" + videoID + "/hqdefault.jpg";
try {
const imageStream = await getImageStream(thumbnailUri);
let image = pres.getImages().addImage(imageStream);
videoFrame.getPictureFormat().getPicture().setImage(image);
} catch (error) {
console.error("Error loading thumbnail:", error);
}
}
async function getImageStream(url) {
return new Promise((resolve, reject) => {
http.get(url, (response) => {
if (response.statusCode === 200) {
resolve(response);
} else {
reject(new Error(`Failed to load image: ${response.statusCode}`));
}
}).on('error', (e) => {
reject(e);
});
});
}
Oříznutí video rámce
Aspose.Slides vám umožňuje řídit, která část videa se přehraje, nastavením hodnot trim-from-start a trim-from-end pomocí metod VideoFrame.setTrimFromStart a VideoFrame.setTrimFromEnd. Obě hodnoty jsou uváděny v milisekundách a určují, kolik času se přeskočí od začátku a konce videa. Tato nastavení mění nastavení přehrávání videa v prezentaci; neodstraňují ani jinak nemodifikují binární data vloženého videa.
Nastavení ořezu
Pro vytvoření video rámce a nastavení jeho ořezu:
- Vytvořte instanci třídy Presentation class.
- Přidejte objekt Video do prezentace.
- Přidejte objekt VideoFrame na snímek.
- Nastavte hodnoty trim-from-start a trim-from-end pomocí VideoFrame.setTrimFromStart a VideoFrame.setTrimFromEnd.
- Uložte upravenou prezentaci.
Následující příklad kódu přeskočí prvních 2,5 sekundy a poslední sekundu vloženého videa během přehrávání:
const presentation = new aspose.slides.Presentation();
try {
const videoStream = java.newInstanceSync("java.io.FileInputStream", "video.mp4");
try {
const video = presentation.getVideos().addVideo(
videoStream, aspose.slides.LoadingStreamBehavior.ReadStreamAndRelease);
const slide = presentation.getSlides().get_Item(0);
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 {
videoStream.close();
}
} finally {
presentation.dispose();
}
Čtení nastavení ořezu
Pro zkontrolování existujících nastavení ořezu načtěte prezentaci, najděte objekt VideoFrame mezi tvary na prvním snímku a přečtěte hodnoty pomocí VideoFrame.getTrimFromStart a VideoFrame.getTrimFromEnd.
Následující příklad kódu najde první video rámec na prvním snímku a vypíše jeho nastavení ořezu v milisekundách:
const presentation = new aspose.slides.Presentation("video_with_trim.pptx");
try {
const slide = presentation.getSlides().get_Item(0);
const shapeCount = slide.getShapes().size();
for (let shapeIndex = 0; shapeIndex < shapeCount; shapeIndex++) {
const shape = slide.getShapes().get_Item(shapeIndex);
if (java.instanceOf(shape, "com.aspose.slides.VideoFrame")) {
const videoFrame = shape;
const trimFromStart = videoFrame.getTrimFromStart();
const trimFromEnd = videoFrame.getTrimFromEnd();
console.log("Trim from start: " + trimFromStart + " ms");
console.log("Trim from end: " + trimFromEnd + " ms");
break;
}
}
} finally {
presentation.dispose();
}
Správa titulků videa
Aspose.Slides vám umožňuje spravovat uzavřené titulky pro video rámečky v PowerPoint prezentacích. Titulky jsou uloženy ve formátu WebVTT a jsou dostupné přes metodu VideoFrame.getCaptionTracks.
Přidání titulků do video rámce
Pro přidání titulků do video rámce:
- Vytvořte instanci třídy Presentation class.
- Přidejte video do prezentace.
- Přidejte objekt VideoFrame na snímek.
- Použijte kolekci CaptionsCollection k přidání WebVTT stopy titulků.
- Uložte upravenou prezentaci.
Následující kód ukazuje, jak přidat titulky do video rámce:
let presentation = new aspose.slides.Presentation();
try {
let videoStream = java.newInstanceSync("java.io.FileInputStream", "video.mp4");
let video = presentation.getVideos().addVideo(videoStream, aspose.slides.LoadingStreamBehavior.KeepLocked);
let slide = presentation.getSlides().get_Item(0);
let videoFrame = slide.getShapes().addVideoFrame(0, 0, 100, 100, video);
// Přidá novou stopu titulků z WebVTT souboru.
videoFrame.getCaptionTracks().add("English", "track.vtt");
presentation.save("video_with_captions.pptx", aspose.slides.SaveFormat.Pptx);
} finally {
presentation.dispose();
}
Třída CaptionsCollection také poskytuje metodu addFromStream, která umožňuje přidat titulky ze streamu.
Extrahování titulků z video rámce
Pro extrahování titulků z video rámce:
- Načtěte prezentaci, která obsahuje video.
- Najděte cílový objekt VideoFrame.
- Projděte kolekci CaptionsCollection.
- Uložte každou stopu titulků do souboru
.vtt.
Následující kód ukazuje, jak extrahovat titulky z video rámce:
let presentation = new aspose.slides.Presentation("video_with_captions.pptx");
try {
let slide = presentation.getSlides().get_Item(0);
let shapeCount = slide.getShapes().size();
for (let shapeIndex = 0; shapeIndex < shapeCount; shapeIndex++) {
let shape = slide.getShapes().get_Item(shapeIndex);
if (java.instanceOf(shape, "com.aspose.slides.VideoFrame")) {
let videoFrame = shape;
let trackCount = videoFrame.getCaptionTracks().getCount();
for (let trackIndex = 0; trackIndex < trackCount; trackIndex++) {
let captionTrack = videoFrame.getCaptionTracks().get_Item(trackIndex);
// Uloží stopu titulků do souboru WebVTT.
let filePath = captionTrack.getCaptionId() + ".vtt";
let captionData = Buffer.from(captionTrack.getBinaryData());
fs.writeFileSync(filePath, captionData);
}
}
}
} finally {
presentation.dispose();
}
Každý objekt Captions obsahuje identifikátor titulu, štítek, binární data a text titulu jako řetězec UTF-8.
Odstranění titulků z video rámce
Pro odstranění titulků z video rámce:
- Načtěte prezentaci, která obsahuje video.
- Získejte cílový objekt VideoFrame.
- Odstraňte stopy titulků z kolekce CaptionsCollection.
- Uložte upravenou prezentaci.
Následující kód ukazuje, jak odstranit všechny titulky z video rámce:
let presentation = new aspose.slides.Presentation("video_with_captions.pptx");
try {
let slide = presentation.getSlides().get_Item(0);
let videoFrame = slide.getShapes().get_Item(0); // typ: com.aspose.slides.VideoFrame
// Odstraní všechny titulky z video rámce.
videoFrame.getCaptionTracks().clear();
presentation.save("video_without_captions.pptx", aspose.slides.SaveFormat.Pptx);
} finally {
presentation.dispose();
}
Pokud potřebujete odstranit pouze jednu stopu titulků, použijte metodu remove nebo removeAt místo clear.
Extrahování videa ze snímku
Kromě přidávání videí do snímků umožňuje Aspose.Slides také extrahovat videa vložená v prezentacích.
- Vytvořte instanci třídy Presentation class pro načtení prezentace obsahující video.
- Projděte všechny objekty Slide.
- Projděte všechny objekty Shape a najděte VideoFrame.
- Uložte video na disk.
Tento JavaScript kód ukazuje, jak extrahovat video na snímku prezentace:
// Vytvoří objekt Presentation, který představuje soubor prezentace
var pres = new aspose.slides.Presentation("VideoSample.pptx");
try {
for (let i = 0; i < pres.getSlides().size(); i++) {
let slide = pres.getSlides().get_Item(i);
for (let j = 0; j < slide.getShapes().size(); j++) {
let shape = slide.getShapes().get_Item(j);
if (java.instanceOf(shape, "com.aspose.slides.VideoFrame")) {
var vf = shape;
console.log(shape);
var type = vf.getEmbeddedVideo().getContentType();
var ss = type.lastIndexOf('-');
const buffer = Buffer.from(vf.getEmbeddedVideo().getBinaryData());
console.log(buffer);
// Získá příponu souboru
var charIndex = type.indexOf("/");
type = type.substring(charIndex + 1);
fs.writeFileSync("testing2." + type, buffer);
}
}
}
} catch (e) {console.log(e);
} finally {
if (pres != null) {
pres.dispose();
}
}
Často kladené otázky
Které parametry přehrávání videa lze změnit pro VideoFrame?
Můžete řídit režim přehrávání (automaticky nebo na kliknutí) a opakování. Tyto možnosti jsou dostupné přes vlastnosti objektu VideoFrame.
Ovlivňuje přidání videa velikost souboru PPTX?
Ano. Když vložíte lokální video, binární data jsou zahrnuta v dokumentu, takže velikost prezentace roste úměrně velikosti souboru. Když přidáte online video, je vložen pouze odkaz a náhled, takže nárůst velikosti je menší.
Mohu nahradit video v existujícím VideoFrame bez změny jeho polohy a velikosti?
Ano. Můžete vyměnit video obsah v rámci rámce při zachování geometrie tvaru; jedná se o běžný scénář pro aktualizaci médií v existujícím rozložení.
Lze zjistit typ obsahu (MIME) vloženého videa?
Ano. Vložené video má typ obsahu, který můžete načíst a použít, například při ukládání na disk.