จัดการเฟรมวิดีโอในงานนำเสนอด้วย .NET

คำนำ

วิดีโอที่วางอย่างเหมาะสมในงานนำเสนอสามารถทำให้ข้อความของคุณน่าสนใจยิ่งขึ้นและเพิ่มระดับการมีส่วนร่วมกับผู้ชมของคุณ

PowerPoint อนุญาตให้คุณเพิ่มวิดีโอลงในสไลด์ของงานนำเสนอได้สองวิธี:

  • เพิ่มหรือฝังวิดีโอในเครื่อง (เก็บไว้บนเครื่องของคุณ)
  • เพิ่มวิดีโอออนไลน์ (จากแหล่งเว็บเช่น YouTube).

เพื่อให้คุณสามารถเพิ่มวิดีโอ (วิดีโออ็อบเจ็กต์) ลงในงานนำเสนอได้ Aspose.Slides มีอินเทอร์เฟซ IVideo อินเทอร์เฟซ IVideoFrame และประเภทที่เกี่ยวข้องอื่นๆ

สร้างเฟรมวิดีโอที่ฝังไว้

หากไฟล์วิดีโอที่คุณต้องการเพิ่มลงในสไลด์ถูกเก็บไว้ในเครื่อง คุณสามารถสร้างเฟรมวิดีโอเพื่อฝังวิดีโอในงานนำเสนอของคุณ

  1. สร้างอินสแตนซ์ของคลาส Presentation
  2. รับอ้างอิงของสไลด์ผ่านดัชนีของมัน
  3. เพิ่มอ็อบเจ็กต์ IVideoและส่งเส้นทางไฟล์วิดีโอเพื่อฝังวิดีโอในงานนำเสนอ
  4. เพิ่มอ็อบเจ็กต์ IVideoFrameเพื่อสร้างเฟรมสำหรับวิดีโอ
  5. บันทึกงานนำเสนอที่แก้ไขแล้ว
 // สร้างอินสแตนซ์ของคลาส Presentation
 using (Presentation pres = new Presentation("pres.pptx"))
 {
     // โหลดวิดีโอ
     using (FileStream fileStream = new FileStream("Wildlife.mp4", FileMode.Open, FileAccess.Read))
     {
         IVideo video = pres.Videos.AddVideo(fileStream, LoadingStreamBehavior.KeepLocked);
         
         // ดึงสไลด์แรกและเพิ่มเฟรมวิดีโอ
         pres.Slides[0].Shapes.AddVideoFrame(10, 10, 150, 250, video);
         
         // บันทึกงานนำเสนอลงดิสก์
         pres.Save("pres-with-video.pptx", SaveFormat.Pptx);
     }
 }

หรือคุณสามารถเพิ่มวิดีโอโดยส่งเส้นทางไฟล์โดยตรงไปยังเมธอด AddVideoFrame :

using (Presentation pres = new Presentation())
{
    ISlide sld = pres.Slides[0];
    IVideoFrame vf = sld.Shapes.AddVideoFrame(50, 150, 300, 150, "video1.avi");
}

สร้างเฟรมวิดีโอด้วยวิดีโอจากแหล่งเว็บ

เวอร์ชันใหม่ของ Microsoft PowerPoint รองรับวิดีโอออนไลน์ในงานนำเสนอ หากวิดีโอที่คุณต้องการใช้มีอยู่บนอินเทอร์เน็ต (เช่นบน YouTube) คุณสามารถเพิ่มลงในงานนำเสนอผ่านลิงก์เว็บของมัน

  1. สร้างอินสแตนซ์ของคลาส Presentation
  2. รับอ้างอิงของสไลด์ผ่านดัชนีของมัน
  3. เพิ่มอ็อบเจ็กต์ IVideoและส่งลิงก์ไปยังวิดีโอ
  4. ตั้งค่า thumbnail สำหรับเฟรมวิดีโอ
  5. บันทึกงานนำเสนอ
public static void Run()
{
    // สร้างออบเจ็กต์ Presentation ที่เป็นตัวแทนของไฟล์งานนำเสนอ 
    using (Presentation pres = new Presentation())
    {
        AddVideoFromYouTube(pres, "Tj75Arhq5ho");
        pres.Save("AddVideoFrameFromWebSource_out.pptx", SaveFormat.Pptx);
    }
}

private static void AddVideoFromYouTube(Presentation pres, string videoId)
{
    // เพิ่ม VideoFrame
    IVideoFrame videoFrame = pres.Slides[0].Shapes.AddVideoFrame(10, 10, 427, 240, "https://www.youtube.com/embed/" + videoId);
    videoFrame.PlayMode = VideoPlayModePreset.Auto;

    // โหลดภาพย่อ
    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));
    }
}

ตัดเฟรมวิดีโอ

Aspose.Slides อนุญาตให้คุณควบคุมว่าเป็นส่วนใดของวิดีโอที่จะเล่นโดยกำหนดค่า trim‑from‑start และ trim‑from‑end ผ่าน IVideoFrame.TrimFromStart และ IVideoFrame.TrimFromEnd ค่าทั้งสองระบุเป็นมิลลิวินาทีและบ่งบอกระยะเวลาที่ถูกข้ามจากจุดเริ่มต้นและจุดสิ้นสุดของวิดีโอ การตั้งค่านี้เปลี่ยนการเล่นวิดีโอในงานนำเสนอ; ไม่ได้ตัดหรือแก้ไขข้อมูลไบนารีของวิดีโอที่ฝังอยู่

ตั้งค่าการตัด

เพื่อสร้างเฟรมวิดีโอและตั้งค่าการตัด:

  1. สร้างอินสแตนซ์ของคลาส Presentation
  2. เพิ่มอ็อบเจ็กต์ IVideoลงในงานนำเสนอ
  3. เพิ่มอ็อบเจ็กต์ IVideoFrameลงในสไลด์
  4. ตั้งค่า trim‑from‑start และ trim‑from‑end ผ่าน IVideoFrame.TrimFromStart และ IVideoFrame.TrimFromEnd
  5. บันทึกงานนำเสนอที่แก้ไขแล้ว
using var presentation = new Presentation();

var videoData = File.ReadAllBytes("video.mp4");
var video = presentation.Videos.AddVideo(videoData);

var slide = presentation.Slides[0];
var videoFrame = slide.Shapes.AddVideoFrame(50, 50, 640, 360, video);

videoFrame.TrimFromStart = 2500f;
videoFrame.TrimFromEnd = 1000f;

presentation.Save("video_with_trim.pptx", SaveFormat.Pptx);

อ่านการตั้งค่าการตัด

เพื่อดูการตั้งค่าการตัดที่มีอยู่ ให้โหลดงานนำเสนอ ค้นหาอ็อบเจ็กต์ IVideoFrame ในรูปทรงของสไลด์แรก และอ่านค่าผ่าน IVideoFrame.TrimFromStart และ IVideoFrame.TrimFromEnd

using var presentation = new Presentation("video_with_trim.pptx");

var slide = presentation.Slides[0];
foreach (var shape in slide.Shapes)
{
    if (shape is IVideoFrame videoFrame)
    {
        var trimFromStart = videoFrame.TrimFromStart;
        var trimFromEnd = videoFrame.TrimFromEnd;

        Console.WriteLine($"Trim from start: {trimFromStart} ms");
        Console.WriteLine($"Trim from end: {trimFromEnd} ms");

        break;
    }
}

จัดการคำบรรยายวิดีโอ

Aspose.Slides อนุญาตให้คุณจัดการคำบรรยายแบบปิดสำหรับเฟรมวิดีโอในงานนำเสนอ PowerPoint คำบรรยายถูกเก็บในรูปแบบ WebVTT และเปิดเผยผ่านคุณสมบัติ IVideoFrame.CaptionTracks

เพิ่มคำบรรยายไปยังเฟรมวิดีโอ

เพื่อเพิ่มคำบรรยายไปยังเฟรมวิดีโอ:

  1. สร้างอินสแตนซ์ของคลาส Presentation
  2. เพิ่มวิดีโอลงในงานนำเสนอ
  3. เพิ่มอ็อบเจ็กต์ IVideoFrameลงในสไลด์
  4. ใช้คอลเลกชัน CaptionTracks เพื่อเพิ่มแทร็กคำบรรยาย WebVTT
  5. บันทึกงานนำเสนอที่แก้ไขแล้ว
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);

    // เพิ่มแทร็กคำบรรยายใหม่จากไฟล์ WebVTT.
    videoFrame.CaptionTracks.Add("English", "track.vtt");

    presentation.Save("video_with_captions.pptx", SaveFormat.Pptx);
}

อินเทอร์เฟซ ICaptionsCollection ยังมี overload ที่ให้คุณเพิ่มคำบรรยายจากสตรีมได้

สกัดคำบรรยายจากเฟรมวิดีโอ

เพื่อสกัดคำบรรยายจากเฟรมวิดีโอ:

  1. โหลดงานนำเสนอที่มีวิดีโออยู่
  2. ค้นหาอ็อบเจ็กต์ IVideoFrameเป้าหมาย
  3. วนลูปผ่านคอลเลกชัน CaptionTracks
  4. บันทึกแต่ละแทร็กคำบรรยายเป็นไฟล์ .vtt
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)
            {
                // บันทึกแทร็กคำบรรยายลงไฟล์ WebVTT.
                string filePath = $"{captionTrack.CaptionId}.vtt";
                File.WriteAllBytes(filePath, captionTrack.BinaryData);
            }
        }
    }
}

แต่ละอ็อบเจ็กต์ ICaptions เปิดเผยตัวระบุคำบรรยาย, ป้ายชื่อ, ข้อมูลไบนารี และข้อความคำบรรยายในรูปแบบสตริง UTF‑8

ลบคำบรรยายจากเฟรมวิดีโอ

เพื่อถอดคำบรรยายออกจากเฟรมวิดีโอ:

  1. โหลดงานนำเสนอที่มีวิดีโออยู่
  2. รับอ็อบเจ็กต์ IVideoFrameเป้าหมาย
  3. ลบแทร็กคำบรรยายจากคอลเลกชัน CaptionTracks
  4. บันทึกงานนำเสนอที่แก้ไขแล้ว
using (Presentation presentation = new Presentation("video_with_captions.pptx"))
{
    ISlide slide = presentation.Slides[0];
    IVideoFrame videoFrame = slide.Shapes[0] as IVideoFrame;

    // ลบคำบรรยายทั้งหมดจากเฟรมวิดีโอ.
    videoFrame.CaptionTracks.Clear();

    presentation.Save("video_without_captions.pptx", SaveFormat.Pptx);
}

หากต้องการลบเพียงแทร็กคำบรรยายเดียว ให้ใช้เมธอด Remove หรือ RemoveAt แทนการใช้ Clear

สกัดวิดีโอจากสไลด์

นอกเหนือจากการเพิ่มวิดีโอลงสไลด์แล้ว Aspose.Slides ยังสามารถสกัดวิดีโอที่ฝังอยู่ในงานนำเสนอได้

  1. สร้างอินสแตนซ์ของคลาส Presentation เพื่อโหลดงานนำเสนอที่มีวิดีโอ
  2. วนลูปผ่านอ็อบเจ็กต์ ISlide ทั้งหมด
  3. วนลูปผ่านอ็อบเจ็กต์ IShape ทั้งหมดเพื่อค้นหา VideoFrame
  4. บันทึกวิดีโอลงดิสก์
 // สร้างออบเจ็กต์ Presentation ที่เป็นตัวแทนของไฟล์งานนำเสนอ 
 Presentation presentation = new Presentation("Video.pptx");

// วนลูปผ่านสไลด์
 foreach (ISlide slide in presentation.Slides)
 {
     // วนลูปผ่านรูปร่าง
     foreach (IShape shape in presentation.Slides[0].Shapes)
     {
         // บันทึกวิดีโอลงดิสก์เมื่อพบ VideoFrame ที่มีวิดีโอ
         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);
             }
         }
     }
 }

คำถามที่พบบ่อย

พารามิเตอร์การเล่นวิดีโอใดที่สามารถเปลี่ยนแปลงได้สำหรับ VideoFrame?

คุณสามารถควบคุม โหมดการเล่น (อัตโนมัติหรือเมื่อคลิก) และ การวนลูป ตัวเลือกเหล่านี้สามารถเข้าถึงได้ผ่านคุณสมบัติของอ็อบเจ็กต์ VideoFrame

การเพิ่มวิดีโอมีผลต่อขนาดไฟล์ PPTX หรือไม่?

ใช่ เมื่อคุณฝังวิดีโอในเครื่อง ข้อมูลไบนารีจะถูกรวมอยู่ในเอกสารทำให้ขนาดงานนำเพิ่มตามขนาดไฟล์วิดีโอ ส่วนการเพิ่มวิดีโอออนไลน์จะฝังลิงก์และภาพย่อเท่านั้น ทำให้การเพิ่มขนาดเล็กกว่า

ฉันสามารถแทนที่วิดีโอใน VideoFrame ที่มีอยู่โดยไม่เปลี่ยนตำแหน่งและขนาดได้หรือไม่?

ได้ คุณสามารถสลับ เนื้อหาวิดีโอ ภายในเฟรมโดยยังคงรูปทรงของสไลด์ไว้ ซึ่งเป็นสถานการณ์ทั่วไปสำหรับการอัปเดตสื่อในเลย์เอาต์ที่มีอยู่

สามารถกำหนดประเภทเนื้อหา (MIME) ของวิดีโอที่ฝังไว้ได้หรือไม่?

ได้ วิดีโอที่ฝังไว้มี ประเภทเนื้อหา ซึ่งคุณสามารถอ่านและนำไปใช้ได้ ตัวอย่างเช่นเมื่อต้องการบันทึกลงดิสก์