Hantera video-ramar i presentationer i .NET
Introduktion
En välplacerad video i en presentation kan göra ditt budskap mer övertygande och öka engagemangsnivåerna 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 (sparad på din dator)
- Lägg till en online‑video (från en webbkälla såsom YouTube).
För att du ska kunna lägga till videor (videoobjekt) i en presentation tillhandahåller Aspose.Slides IVideo‑gränssnittet, IVideoFrame‑gränssnittet och andra relevanta typer.
Skapa en inbäddad video‑ram
Om videofilen du vill lägga till på din bild är sparad lokalt kan du skapa en video‑ram för att bädda in videon i din presentation.
- Skapa en instans av klassen Presentation.
- Hämta en bilds referens via dess index.
- Lägg till ett IVideo‑objekt och skicka videofilens sökväg för att bädda in videon i presentationen.
- Lägg till ett IVideoFrame‑objekt för att skapa en ram för videon.
- Spara den ändrade presentationen.
// Skapar en instans av Presentation-klassen
using (Presentation pres = new Presentation("pres.pptx"))
{
// Laddar videon
using (FileStream fileStream = new FileStream("Wildlife.mp4", FileMode.Open, FileAccess.Read))
{
IVideo video = pres.Videos.AddVideo(fileStream, LoadingStreamBehavior.KeepLocked);
// Hämtar den första bilden och lägger till en video-ram
pres.Slides[0].Shapes.AddVideoFrame(10, 10, 150, 250, video);
// Sparar presentationen till disk
pres.Save("pres-with-video.pptx", SaveFormat.Pptx);
}
}
Alternativt kan du lägga till en video genom att skicka dess filsökväg direkt till metoden AddVideoFrame:
using (Presentation pres = new Presentation())
{
ISlide sld = pres.Slides[0];
IVideoFrame vf = sld.Shapes.AddVideoFrame(50, 150, 300, 150, "video1.avi");
}
Skapa en video‑ram med video från en webbkälla
Microsoft PowerPoint 2013 och nyare stöder YouTube‑videor i presentationer. Om videon du vill använda finns tillgänglig online (t.ex. på YouTube) kan du lägga till den i din presentation via dess webblänk.
- Skapa en instans av klassen Presentation.
- Hämta en bilds referens via dess index.
- Lägg till ett IVideo‑objekt och skicka länken till videon.
- Ställ in en miniatyr för video‑ramen.
- Spara presentationen.
public static void Run()
{
// Skapar ett Presentation-objekt som representerar en presentationsfil
using (Presentation pres = new Presentation())
{
AddVideoFromYouTube(pres, "Tj75Arhq5ho");
pres.Save("AddVideoFrameFromWebSource_out.pptx", SaveFormat.Pptx);
}
}
private static void AddVideoFromYouTube(Presentation pres, string videoId)
{
// Lägger till en VideoFrame
IVideoFrame videoFrame = pres.Slides[0].Shapes.AddVideoFrame(10, 10, 427, 240, "https://www.youtube.com/embed/" + videoId);
videoFrame.PlayMode = VideoPlayModePreset.Auto;
// Laddar miniatyr
using (WebClient client = new WebClient())
{
string thumbnailUri = "http://img.youtube.com/vi/" + videoId + "/hqdefault.jpg";
videoFrame.PictureFormat.Picture.Image = pres.Images.AddImage(client.DownloadData(thumbnailUri));
}
}
Hantera video‑undertexter
Aspose.Slides låter dig hantera stängda undertexter för video‑ramar i PowerPoint‑presentationer. Undertexter lagras i WebVTT‑format och exponeras via egenskapen IVideoFrame.CaptionTracks.
Lägg till undertexter på en video‑ram
För att lägga till undertexter på en video‑ram:
- Skapa en instans av klassen Presentation .
- Lägg till en video i presentationen.
- Lägg till ett IVideoFrame‑objekt på en bild.
- Använd samlingen CaptionTracks för att lägga till ett WebVTT‑undertextspår.
- Spara den ändrade presentationen.
using (Presentation presentation = new Presentation())
{
byte[] videoData = File.ReadAllBytes("video.mp4");
IVideo video = presentation.Videos.AddVideo(videoData);
ISlide slide = presentation.Slides[0];
IVideoFrame videoFrame = slide.Shapes.AddVideoFrame(0, 0, 100, 100, video);
// Lägger till ett nytt undertextspår från en WebVTT-fil.
videoFrame.CaptionTracks.Add("English", "track.vtt");
presentation.Save("video_with_captions.pptx", SaveFormat.Pptx);
}
Gränssnittet ICaptionsCollection 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:
- Läs in presentationen som innehåller videon.
- Hitta mål‑objektet IVideoFrame .
- Iterera genom samlingen CaptionTracks .
- Spara varje undertextspår till en
.vtt‑fil.
using (Presentation presentation = new Presentation("video_with_captions.pptx"))
{
ISlide slide = presentation.Slides[0];
foreach (IShape shape in slide.Shapes)
{
if (shape is IVideoFrame videoFrame)
{
foreach (ICaptions captionTrack in videoFrame.CaptionTracks)
{
// Sparar undertextspåret till en WebVTT-fil.
string filePath = $"{captionTrack.CaptionId}.vtt";
File.WriteAllBytes(filePath, captionTrack.BinaryData);
}
}
}
}
Varje ICaptions‑objekt exponerar undertextens identifierare, etikett, binärdata och undertexten 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:
- Läs in presentationen som innehåller videon.
- Hämta mål‑objektet IVideoFrame .
- Ta bort undertextspår från samlingen CaptionTracks .
- Spara den ändrade presentationen.
using (Presentation presentation = new Presentation("video_with_captions.pptx"))
{
ISlide slide = presentation.Slides[0];
IVideoFrame videoFrame = slide.Shapes[0] as IVideoFrame;
// Tar bort alla undertexter från video-ramen.
videoFrame.CaptionTracks.Clear();
presentation.Save("video_without_captions.pptx", SaveFormat.Pptx);
}
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 en bild
Förutom att lägga till videor på bilder tillåter Aspose.Slides dig att extrahera videor som är inbäddade i presentationer.
- Skapa en instans av klassen Presentation för att läsa in presentationen som innehåller videon.
- Iterera igenom alla ISlide‑objekt.
- Iterera igenom alla IShape‑objekt för att hitta ett VideoFrame.
- Spara videon till disk.
// Skapar ett Presentation-objekt som representerar en presentationsfil
Presentation presentation = new Presentation("Video.pptx");
// Itererar genom bilder
foreach (ISlide slide in presentation.Slides)
{
// Itererar genom former
foreach (IShape shape in presentation.Slides[0].Shapes)
{
// Sparar video till disk när en VideoFrame som innehåller video hittas
if (shape is VideoFrame)
{
IVideoFrame vf = shape as IVideoFrame;
String type = vf.EmbeddedVideo.ContentType;
int ss = type.LastIndexOf('/');
type = type.Remove(0, type.LastIndexOf('/') + 1);
Byte[] buffer = vf.EmbeddedVideo.BinaryData;
using (FileStream stream = new FileStream("NewVideo_out." + type, FileMode.Create, FileAccess.Write, FileShare.Read))
{
stream.Write(buffer, 0, buffer.Length);
}
}
}
}
Vanliga frågor
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 binärdata i dokumentet, så 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å storleksökningen blir mindre.
Kan jag ersätta videon i en befintlig VideoFrame utan att ändra dess position och storlek?
Ja. Du kan byta ut video content i ramen samtidigt som du behåller figurens 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, exempelvis när du sparar den till disk.