จัดการเฟรมวิดีโอในงานนำเสนอด้วย PHP
บทนำ
วิดีโอที่วางอย่างเหมาะสมในงานนำเสนอสามารถทำให้ข้อความของคุณน่าสนใจยิ่งขึ้นและเพิ่มระดับการมีส่วนร่วมของผู้ชมได้
PowerPoint อนุญาตให้คุณเพิ่มวิดีโอลงในสไลด์ของงานนำเสนอได้สองวิธี:
- เพิ่มหรือฝังวิดีโอในเครื่อง (จัดเก็บบนคอมพิวเตอร์ของคุณ)
- เพิ่มวิดีโอออนไลน์ (จากแหล่งเว็บเช่น YouTube)
เพื่อให้คุณสามารถเพิ่มวิดีโอ (วิดีโออ็อบเจ็กต์) ลงในงานนำเสนอ Aspose.Slides จัดให้มีคลาส Video , คลาส VideoFrame และประเภทที่เกี่ยวข้องอื่น ๆ
สร้างเฟรมวิดีโอแบบฝัง
หากไฟล์วิดีโอที่คุณต้องการเพิ่มลงในสไลด์จัดเก็บไว้ในเครื่อง คุณสามารถสร้างเฟรมวิดีโอเพื่อฝังวิดีโอนั้นในงานนำเสนอของคุณได้
- สร้างอินสแตนซ์ของคลาส Presentation
- รับอ้างอิงของสไลด์ผ่านดัชนีของมัน
- เพิ่มอ็อบเจ็กต์ Video แล้วส่งพาธของไฟล์วิดีโอเพื่อฝังวิดีโอเข้ากับงานนำเสนอ
- เพิ่มอ็อบเจ็กต์ VideoFrame เพื่อสร้างเฟรมสำหรับวิดีโอ
- บันทึกงานนำเสนอที่แก้ไขแล้ว
โค้ด PHP ตัวนี้แสดงวิธีเพิ่มวิดีโอที่จัดเก็บไว้ในเครื่องลงในงานนำเสนอ:
# สร้างอินสแตนซ์ของคลาส Presentation
$pres = new Presentation("pres.pptx");
try {
# โหลดวิดีโอ
$fileStream = new Java("java.io.FileInputStream", "Wildlife.mp4");
$video = $pres->getVideos()->addVideo($fileStream, LoadingStreamBehavior->KeepLocked);
# ดึงสไลด์แรกและเพิ่มเฟรมวิดีโอ
$pres->getSlides()->get_Item(0)->getShapes()->addVideoFrame(10, 10, 150, 250, $video);
# บันทึกงานนำเสนอลงดิสก์
$pres->save("pres-with-video.pptx", SaveFormat::Pptx);
} catch (JavaException $e) {
} finally {
if (!java_is_null($pres)) {
$pres->dispose();
}
}
หรือคุณสามารถเพิ่มวิดีโอโดยส่งพาธไฟล์โดยตรงไปยังเมธอด addVideoFrame(float x, float y, float width, float height, Video video) :
$pres = new Presentation();
try {
$sld = $pres->getSlides()->get_Item(0);
$vf = $sld->getShapes()->addVideoFrame(50, 150, 300, 150, "video1.avi");
} finally {
if (!java_is_null($pres)) {
$pres->dispose();
}
}
สร้างเฟรมวิดีโอด้วยวิดีโอจากแหล่งเว็บ
Microsoft PowerPoint 2013 and newer รองรับวิดีโอ YouTube ในงานนำเสนอ หากวิดีโอที่คุณต้องการใช้มีอยู่บนออนไลน์ (เช่นบน YouTube) คุณสามารถเพิ่มลงในงานนำเสนอผ่านลิงก์เว็บของมันได้
- สร้างอินสแตนซ์ของคลาส Presentation
- รับอ้างอิงของสไลด์ผ่านดัชนีของมัน
- เพิ่มอ็อบเจ็กต์ Video แล้วส่งลิงก์ของวิดีโอ
- ตั้งค่านามสกุลภาพ (thumbnail) สำหรับเฟรมวิดีโอ
- บันทึกงานนำเสนอ
โค้ด PHP ตัวนี้แสดงวิธีเพิ่มวิดีโอจากเว็บลงในสไลด์ของงานนำเสนอ PowerPoint:
# สร้างอ็อบเจ็กต์ Presentation ที่เป็นตัวแทนของไฟล์งานนำเสนอ
$pres = new Presentation();
try {
addVideoFromYouTube($pres, "Tj75Arhq5ho");
$pres->save("out.pptx", SaveFormat::Pptx);
} finally {
if (!java_is_null($pres)) {
$pres->dispose();
}
}
ตัดเฟรมวิดีโอ
Aspose.Slides อนุญาตให้คุณควบคุมส่วนที่ทำการเล่นของวิดีโอโดยตั้งค่า trim‑from‑start และ trim‑from‑end ผ่านเมธอด VideoFrame::setTrimFromStart และ VideoFrame::setTrimFromEnd ค่าทั้งสองระบุเป็นมิลลิ–วินาทีและกำหนดระยะเวลาที่ข้ามจากจุดเริ่มต้นและจุดสิ้นสุดของวิดีโอตามลำดับ การตั้งค่านี้เปลี่ยนการตั้งค่าการเล่นวิดีโอในงานนำเสนอ; ไม่ได้ตัดหรือแก้ไขข้อมูลไบนารีของวิดีโอที่ฝังอยู่
ตั้งค่าการตัด
เพื่อสร้างเฟรมวิดีโอและตั้งค่าการตัดของมัน:
- สร้างอินสแตนซ์ของคลาส Presentation
- เพิ่มอ็อบเจ็กต์ Video ลงในงานนำเสนอ
- เพิ่มอ็อบเจ็กต์ VideoFrame ลงบนสไลด์
- ตั้งค่า trim‑from‑start และ trim‑from‑end ผ่านเมธอด VideoFrame::setTrimFromStart และ VideoFrame::setTrimFromEnd
- บันทึกงานนำเสนอที่แก้ไขแล้ว
ตัวอย่างโค้ดต่อไปนี้ข้าม 2.5 วินาทีแรกและ 1 วินาทีสุดท้ายของวิดีโอที่ฝังไว้ระหว่างการเล่น:
$presentation = new Presentation();
$videoStream = null;
try {
$videoStream = new Java("java.io.FileInputStream", "video.mp4");
$video = $presentation->getVideos()->addVideo(
$videoStream, LoadingStreamBehavior::ReadStreamAndRelease);
$slide = $presentation->getSlides()->get_Item(0);
$videoFrame = $slide->getShapes()->addVideoFrame(50, 50, 640, 360, $video);
$videoFrame->setTrimFromStart(2500);
$videoFrame->setTrimFromEnd(1000);
$presentation->save("video_with_trim.pptx", SaveFormat::Pptx);
} finally {
if ($videoStream !== null) {
$videoStream->close();
}
$presentation->dispose();
}
อ่านการตั้งค่าการตัด
เพื่ออ่านการตั้งค่าการตัดที่มีอยู่ ให้โหลดงานนำเสนอ ค้นหาอ็อบเจ็กต์ VideoFrame ในรูปทรงของสไลด์แรก แล้วอ่านค่าผ่านเมธอด VideoFrame::getTrimFromStart และ VideoFrame::getTrimFromEnd
โค้ดตัวอย่างต่อไปนี้ค้นหาเฟรมวิดีโอแรกบนสไลด์แรกและรายงานค่าการตัดเป็นมิลลิ–วินาที:
$presentation = new Presentation("video_with_trim.pptx");
try {
$slide = $presentation->getSlides()->get_Item(0);
$shapeCount = java_values($slide->getShapes()->size());
for ($shapeIndex = 0; $shapeIndex < $shapeCount; $shapeIndex++) {
$shape = $slide->getShapes()->get_Item($shapeIndex);
if (java_instanceof($shape, new JavaClass("com.aspose.slides.VideoFrame"))) {
$videoFrame = $shape;
$trimFromStart = java_values($videoFrame->getTrimFromStart());
$trimFromEnd = java_values($videoFrame->getTrimFromEnd());
echo "Trim from start: " . $trimFromStart . " ms\n";
echo "Trim from end: " . $trimFromEnd . " ms\n";
break;
}
}
} finally {
$presentation->dispose();
}
จัดการคำบรรยายวิดีโอ
Aspose.Slides อนุญาตให้คุณจัดการคำบรรยายปิด (closed captions) สำหรับเฟรมวิดีโอในงานนำเสนอ PowerPoint คำบรรยายจะถูกเก็บในรูปแบบ WebVTT และสามารถเข้าถึงได้ผ่านเมธอด VideoFrame::getCaptionTracks
เพิ่มคำบรรยายให้กับเฟรมวิดีโอ
เพื่อเพิ่มคำบรรยายให้กับเฟรมวิดีโอ:
- สร้างอินสแตนซ์ของคลาส Presentation
- เพิ่มวิดีโอลงในงานนำเสนอ
- เพิ่มอ็อบเจ็กต์ VideoFrame ลงบนสไลด์
- ใช้คอลเลกชัน CaptionsCollection ที่คืนค่าจากเมธอด getCaptionTracks เพื่อเพิ่มแทร็กคำบรรยาย WebVTT
- บันทึกงานนำเสนอที่แก้ไขแล้ว
โค้ดต่อไปนี้แสดงวิธีเพิ่มคำบรรยายให้กับเฟรมวิดีโอ:
$presentation = new Presentation();
try {
$videoData = file_get_contents("video.mp4");
$video = $presentation->getVideos()->addVideo($videoData);
$slide = $presentation->getSlides()->get_Item(0);
$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();
}
คลาส CaptionsCollection ยังมี overload ที่ให้คุณเพิ่มคำบรรยายจากสตรีมได้ด้วย
สกัดคำบรรยายจากเฟรมวิดีโอ
เพื่อสกัดคำบรรยายจากเฟรมวิดีโอ:
- โหลดงานนำเสนอที่มีวิดีโออยู่
- ค้นหาอ็อบเจ็กต์ VideoFrame ที่ต้องการ
- วนลูปผ่านคอลเลกชันที่ได้จาก getCaptionTracks
- บันทึกแต่ละแทร็กคำบรรยายเป็นไฟล์
.vtt
โค้ดต่อไปนี้แสดงวิธีสกัดคำบรรยายจากเฟรมวิดีโอ:
$presentation = new Presentation("video_with_captions.pptx");
try {
$slide = $presentation->getSlides()->get_Item(0);
$shapeCount = java_values($slide->getShapes()->size());
for ($shapeIndex = 0; $shapeIndex < $shapeCount; $shapeIndex++) {
$shape = $slide->getShapes()->get_Item($shapeIndex);
if (java_instanceof($shape, new JavaClass("com.aspose.slides.VideoFrame"))) {
$videoFrame = $shape;
$trackCount = java_values($videoFrame->getCaptionTracks()->getCount());
for ($trackIndex = 0; $trackIndex < $trackCount; $trackIndex++) {
$captionTrack = $videoFrame->getCaptionTracks()->get_Item($trackIndex);
// บันทึกแทร็กคำบรรยายเป็นไฟล์ WebVTT.
$filePath = $captionTrack->getCaptionId() . ".vtt";
file_put_contents($filePath, $captionTrack->getBinaryData());
}
}
}
} finally {
$presentation->dispose();
}
แต่ละอ็อบเจ็กต์ Captions เปิดเผยตัวระบุคำบรรยาย, ป้ายชื่อ, ข้อมูลไบนารีและข้อความคำบรรยายเป็นสตริง UTF‑8
ลบคำบรรยายจากเฟรมวิดีโอ
เพื่อทำการลบคำบรรยายจากเฟรมวิดีโอ:
- โหลดงานนำเสนอที่มีวิดีโออยู่
- รับอ็อบเจ็กต์ VideoFrame ที่ต้องการ
- ลบแทร็กคำบรรยายจากคอลเลกชันที่ได้จาก getCaptionTracks
- บันทึกงานนำเสนอที่แก้ไขแล้ว
โค้ดต่อไปนี้แสดงวิธีลบคำบรรยายทั้งหมดจากเฟรมวิดีโอ:
$presentation = new Presentation("video_with_captions.pptx");
try {
$slide = $presentation->getSlides()->get_Item(0);
$videoFrame = $slide->getShapes()->get_Item(0); // ประเภท: VideoFrame
// ลบคำบรรยายทั้งหมดออกจากเฟรมวิดีโอ
$videoFrame->getCaptionTracks()->clear();
$presentation->save("video_without_captions.pptx", SaveFormat::Pptx);
} finally {
$presentation->dispose();
}
หากต้องการลบแทร็กคำบรรยายเพียงหนึ่งแทร็ก ให้ใช้เมธอด remove หรือ removeAt แทนการใช้ clear
สกัดวิดีโอจากสไลด์
นอกจากการเพิ่มวิดีโอเข้าสไลด์แล้ว Aspose.Slides ยังอนุญาตให้คุณสกัดวิดีโอที่ฝังอยู่ในงานนำเสนอได้
- สร้างอินสแตนซ์ของคลาส Presentation เพื่อโหลดงานนำเสนอที่มีวิดีโออยู่
- วนลูปผ่านอ็อบเจ็กต์ Slide ทั้งหมด
- วนลูปผ่านอ็อบเจ็กต์ Shape ทั้งหมดเพื่อค้นหา VideoFrame
- บันทึกวิดีโอลงดิสก์
โค้ด PHP ตัวนี้แสดงวิธีสกัดวิดีโอจากสไลด์ของงานนำเสนอ:
# สร้างอ็อบเจ็กต์ Presentation ที่เป็นตัวแทนของไฟล์งานนำเสนอ
$pres = new Presentation("VideoSample.pptx");
try {
foreach($pres->getSlides() as $slide) {
foreach($slide->getShapes() as $shape) {
if (java_instanceof($shape, new JavaClass("com.aspose.slides.VideoFrame"))) {
$vf = $shape;
$type = $vf->getEmbeddedVideo()->getContentType();
$ss = $type->lastIndexOf('-');
$buffer = $vf->getEmbeddedVideo()->getBinaryData();
# รับส่วนขยายของไฟล์
$charIndex = $type->indexOf("/");
$type = $type->substring($charIndex + 1);
$fop = new Java("java.io.FileOutputStream", "testing2." . $type);
$fop->write($buffer);
$fop->flush();
$fop->close();
}
}
}
} catch (JavaException $e) {
} finally {
if (!java_is_null($pres)) {
$pres->dispose();
}
}
FAQ
พารามิเตอร์การเล่นวิดีโอใดที่สามารถเปลี่ยนแปลงได้สำหรับ VideoFrame?
คุณสามารถควบคุม playback mode (อัตโนมัติหรือเมื่อคลิก) และ looping ได้ ตัวเลือกเหล่านี้สามารถตั้งค่าผ่านคุณสมบัติของอ็อบเจ็กต์ VideoFrame
การเพิ่มวิดีโอมีผลต่อขนาดไฟล์ PPTX หรือไม่?
ใช่ เมื่อคุณฝังวิดีโอในเครื่อง ข้อมูลไบนารีของวิดีโอจะถูกรวมอยู่ในเอกสาร ดังนั้นขนาดงานนำเสนอจะเพิ่มตามขนาดไฟล์ของวิดีโอ เมื่อคุณเพิ่มวิดีโอออนไลน์ เพียงแค่ฝังลิงก์และภาพย่อขนาดการเพิ่มจึงน้อยกว่า
ฉันสามารถแทนที่วิดีโอใน VideoFrame ที่มีอยู่โดยไม่เปลี่ยนตำแหน่งและขนาดได้หรือไม่?
ใช่ คุณสามารถสลับ video content ภายในเฟรมโดยคงรูปทรงเดิมไว้ ซึ่งเป็นกรณีทั่วไปสำหรับการอัปเดตสื่อในเลย์เอาต์ที่มีอยู่
สามารถระบุประเภทเนื้อหา (MIME) ของวิดีโอที่ฝังอยู่ได้หรือไม่?
ใช่ วิดีโอที่ฝังอยู่มี content type ที่คุณสามารถอ่านและใช้ได้ ตัวอย่างเช่นเมื่อต้องการบันทึกลงดิสก์