จัดการ Video Frame ในการนำเสนอโดยใช้ Java
บทนำ
วิดีโอที่วางอย่างเหมาะสมในงานพรีเซนเทชั่นสามารถทำให้ข้อความของคุณน่าสนใจยิ่งขึ้นและเพิ่มระดับการมีส่วนร่วมกับผู้ชมของคุณ
PowerPoint อนุญาตให้คุณเพิ่มวิดีโอลงในสไลด์ของพรีเซนเทชั่นได้สองวิธี:
- เพิ่มหรือฝังวิดีโอในเครื่อง (จัดเก็บบนเครื่องของคุณ)
- เพิ่มวิดีโอออนไลน์ (จากแหล่งเว็บเช่น YouTube).
เพื่อให้คุณสามารถเพิ่มวิดีโอ (วัตถุวิดีโอ) ลงในพรีเซนเทชั่น, Aspose.Slides มีการให้บริการอินเทอร์เฟซ IVideo , อินเทอร์เฟซ IVideoFrame และชนิดที่เกี่ยวข้องอื่น ๆ
สร้าง Video Frame ฝัง
หากไฟล์วิดีโอที่คุณต้องการเพิ่มลงในสไลด์จัดเก็บไว้ในเครื่อง, คุณสามารถสร้าง video frame เพื่อฝังวิดีโอในพรีเซนเทชั่นของคุณ
- สร้างอินสแตนซ์ของคลาส Presentation
- รับอ้างอิงของสไลด์ผ่านดัชนีของมัน
- เพิ่มอ็อบเจ็กต์ IVideo และส่งพาธไฟล์วิดีโอเพื่อฝังวิดีโเข้ากับพรีเซนเทชั่น
- เพิ่มอ็อบเจ็กต์ IVideoFrame เพื่อสร้างเฟรมสำหรับวิดีโอ
- บันทึกพรีเซนเทชั่นที่แก้ไขแล้ว
โค้ด Java นี้แสดงวิธีการเพิ่มวิดีโอที่จัดเก็บไว้ในเครื่องลงในพรีเซนเทชั่น:
// สร้างอินสแตนซ์ของคลาส Presentation
Presentation pres = new Presentation("pres.pptx");
try {
// โหลดวิดีโอ
FileInputStream fileStream = new FileInputStream("Wildlife.mp4");
IVideo video = pres.getVideos().addVideo(fileStream, LoadingStreamBehavior.KeepLocked);
// รับสไลด์แรกและเพิ่ม VideoFrame
pres.getSlides().get_Item(0).getShapes().addVideoFrame(10, 10, 150, 250, video);
// บันทึกพรีเซนเทชั่นลงดิสก์
pres.save("pres-with-video.pptx", SaveFormat.Pptx);
} catch (IOException e) {
} finally {
if (pres != null) pres.dispose();
}
อีกทางหนึ่ง, คุณสามารถเพิ่มวิดีโอโดยส่งพาธไฟล์โดยตรงไปยังเมธอด addVideoFrame(float x, float y, float width, float height, IVideo video):
Presentation pres = new Presentation();
try {
ISlide sld = pres.getSlides().get_Item(0);
IVideoFrame vf = sld.getShapes().addVideoFrame(50, 150, 300, 150, "video1.avi");
} finally {
if (pres != null) pres.dispose();
}
สร้าง Video Frame พร้อมวิดีโอจากแหล่งเว็บ
Microsoft PowerPoint 2013 และรุ่นใหม่กว่า รองรับวิดีโอ YouTube ในพรีเซนเทชั่น หากวิดีโอที่คุณต้องการใช้มีออนไลน์ (เช่นบน YouTube) คุณสามารถเพิ่มลงในพรีเซนเทชั่นผ่านลิงก์เว็บของมัน
- สร้างอินสแตนซ์ของคลาส Presentation
- รับอ้างอิงของสไลด์ผ่านดัชนีของมัน
- เพิ่มอ็อบเจ็กต์ IVideo และส่งลิงก์ไปยังวิดีโอ
- ตั้งค่า thumbnail สำหรับ video frame
- บันทึกพรีเซนเทชั่น
// สร้างอ็อบเจ็กต์ Presentation ที่เป็นตัวแทนของไฟล์พรีเซนเทชั่น
Presentation pres = new Presentation();
try {
addVideoFromYouTube(pres, "Tj75Arhq5ho");
pres.save("out.pptx", SaveFormat.Pptx);
} finally {
if (pres != null) pres.dispose();
}
private static void addVideoFromYouTube(Presentation pres, String videoID)
{
// เพิ่ม VideoFrame
IVideoFrame videoFrame = pres.getSlides().get_Item(0).getShapes().addVideoFrame(
10, 10, 427, 240, "https://www.youtube.com/embed/" + videoID);
videoFrame.setPlayMode(VideoPlayModePreset.Auto);
// โหลด thumbnail
String thumbnailUri = "http://img.youtube.com/vi/" + videoID + "/hqdefault.jpg";
URL url;
try {
url = new URL(thumbnailUri);
videoFrame.getPictureFormat().getPicture().setImage(pres.getImages().addImage(url.openStream()));
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
จัดการคำบรรยายวิดีโอ
Aspose.Slides อนุญาตให้คุณจัดการ closed captions สำหรับ video frames ใน PowerPoint พรีเซนเทชั่น คำบรรยายจะถูกเก็บในรูปแบบ WebVTT และเปิดเผยผ่านเมธอด IVideoFrame.getCaptionTracks
เพิ่มคำบรรยายให้กับ Video Frame
เพื่อเพิ่มคำบรรยายให้กับ video frame:
- สร้างอินสแตนซ์ของคลาส Presentation
- เพิ่มวิดีโอลงในพรีเซนเทชั่น
- เพิ่มอ็อบเจ็กต์ IVideoFrame ไปยังสไลด์
- ใช้ ICaptionsCollection ที่ได้จาก getCaptionTracks เพื่อเพิ่ม WebVTT caption track
- บันทึกพรีเซนเทชั่นที่แก้ไขแล้ว
Presentation presentation = new Presentation();
try {
byte[] videoData = Files.readAllBytes(Paths.get("video.mp4"));
IVideo video = presentation.getVideos().addVideo(videoData);
ISlide slide = presentation.getSlides().get_Item(0);
IVideoFrame videoFrame = slide.getShapes().addVideoFrame(0, 0, 100, 100, video);
// เพิ่มแทร็กคำบรรยายใหม่จากไฟล์ WebVTT.
videoFrame.getCaptionTracks().add("English", "track.vtt");
presentation.save("video_with_captions.pptx", SaveFormat.Pptx);
} finally {
presentation.dispose();
}
อินเทอร์เฟซ ICaptionsCollection ยังมี overload ที่ให้คุณเพิ่มคำบรรยายจากสตรีม
ดึงคำบรรยายจาก Video Frame
เพื่อดึงคำบรรยายจาก video frame:
- โหลดพรีเซนเทชั่นที่มีวิดีโอ
- ค้นหาอ็อบเจ็กต์ IVideoFrame ที่ต้องการ
- วนผ่าน caption tracks ใน ICaptionsCollection
- บันทึกแต่ละ caption track ลงในไฟล์
.vtt
Presentation presentation = new Presentation("video_with_captions.pptx");
try {
ISlide slide = presentation.getSlides().get_Item(0);
for (IShape shape : slide.getShapes()) {
if (shape instanceof IVideoFrame) {
IVideoFrame videoFrame = (IVideoFrame)shape;
for (ICaptions captionTrack : videoFrame.getCaptionTracks()) {
// บันทึกแทร็กคำบรรยายไปยังไฟล์ WebVTT.
String filePath = captionTrack.getCaptionId().toString() + ".vtt";
Files.write(Paths.get(filePath), captionTrack.getBinaryData());
}
}
}
} finally {
presentation.dispose();
}
แต่ละอ็อบเจ็กต์ ICaptions แสดงตัวระบุคำบรรยาย, ป้ายชื่อ, ข้อมูลไบนารี, และข้อความคำบรรยายในรูปแบบสตริง UTF-8
ลบคำบรรยายจาก Video Frame
เพื่อขจัดคำบรรยายออกจาก video frame:
- โหลดพรีเซนเทชั่นที่มีวิดีโอ
- รับอ็อบเจ็กต์ IVideoFrame ที่ต้องการ
- ลบ caption tracks จาก ICaptionsCollection
- บันทึกพรีเซนเทชั่นที่แก้ไขแล้ว
Presentation presentation = new Presentation("video_with_captions.pptx");
try {
ISlide slide = presentation.getSlides().get_Item(0);
IVideoFrame videoFrame = (IVideoFrame)slide.getShapes().get_Item(0);
// ลบคำบรรยายทั้งหมดจากกรอบวิดีโอ
videoFrame.getCaptionTracks().clear();
presentation.save("video_without_captions.pptx", SaveFormat.Pptx);
} finally {
presentation.dispose();
}
หากคุณต้องการลบเฉพาะหนึ่ง caption track, ให้ใช้เมธอด remove หรือ removeAt แทนการใช้ clear
ดึงวิดีโอจากสไลด์
นอกจากการเพิ่มวิดีโอลงในสไลด์แล้ว, Aspose.Slides ยังอนุญาตให้คุณดึงวิดีโอที่ฝังอยู่ในพรีเซนเทชั่น
- สร้างอินสแตนซ์ของคลาส Presentation เพื่อโหลดพรีเซนเทชั่นที่มีวิดีโอ
- วนผ่านวัตถุ ISlide ทั้งหมด
- วนผ่านวัตถุ IShape ทั้งหมดเพื่อค้นหา VideoFrame
- บันทึกวิดีโอลงดิสก์
// สร้างอ็อบเจ็กต์ Presentation ที่เป็นตัวแทนของไฟล์พรีเซนเทชั่น
Presentation pres = new Presentation("VideoSample.pptx");
try {
for (ISlide slide : pres.getSlides())
{
for (IShape shape : slide.getShapes())
{
if (shape instanceof VideoFrame)
{
IVideoFrame vf = (IVideoFrame) shape;
String type = vf.getEmbeddedVideo().getContentType();
int ss = type.lastIndexOf('-');
byte[] buffer = vf.getEmbeddedVideo().getBinaryData();
//ดึงส่วนขยายของไฟล์
int charIndex = type.indexOf("/");
type = type.substring(charIndex + 1);
FileOutputStream fop = new FileOutputStream("testing2." + type);
fop.write(buffer);
fop.flush();
fop.close();
}
}
}
} catch (IOException e) {
} finally {
if (pres != null) pres.dispose();
}
คำถามที่พบบ่อย
พารามิเตอร์การเล่นวิดีโอใดที่สามารถเปลี่ยนแปลงได้สำหรับ VideoFrame?
คุณสามารถควบคุม playback mode (อัตโนมัติหรือเมื่อคลิก) และ looping ตัวเลือกเหล่านี้สามารถเข้าถึงได้ผ่านคุณสมบัติของอ็อบเจ็กต์ VideoFrame
การเพิ่มวิดีโอมีผลต่อขนาดไฟล์ PPTX หรือไม่?
ใช่. เมื่อคุณฝังวิดีโอในเครื่อง, ข้อมูลไบนารีจะถูกเก็บในเอกสาร ทำให้ขนาดพรีเซนเทชั่นเพิ่มตามขนาดไฟล์ เมื่อคุณเพิ่มวิดีโอออนไลน์, จะฝังลิงก์และ thumbnail เท่านั้น ทำให้การเพิ่มขนาดน้อยลง
ฉันสามารถเปลี่ยนวิดีโอใน VideoFrame ที่มีอยู่โดยไม่เปลี่ยนตำแหน่งและขนาดได้หรือไม่?
ได้. คุณสามารถสลับ video content ภายในเฟรมโดยคงรูปทรงของ shape ไว้; นี่เป็นสถานการณ์ทั่วไปในการอัปเดตสื่อในเลย์เอาต์ที่มีอยู่
สามารถตรวจสอบประเภทของเนื้อหา (MIME) ของวิดีโอที่ฝังได้หรือไม่?
ได้. วิดีโอที่ฝังมี content type ที่คุณสามารถอ่านและใช้ได้ เช่น เมื่อบันทึกลงดิสก์