จัดการเฟรมวิดีโอในงานนำเสนอด้วย Python
บทนำ
วิดีโอที่วางอย่างเหมาะสมในงานนำเสนอสามารถทำให้ข้อความของคุณน่าสนใจยิ่งขึ้นและเพิ่มระดับการมีส่วนร่วมกับผู้ชมของคุณได้
PowerPoint อนุญาตให้คุณเพิ่มวิดีโอลงในสไลด์ของงานนำเสนอได้สองวิธี:
- เพิ่มหรือฝังวิดีโอในเครื่อง (จัดเก็บบนเครื่องของคุณ)
- เพิ่มวิดีโอออนไลน์ (จากแหล่งเว็บเช่น YouTube).
เพื่อให้คุณสามารถเพิ่มวิดีโอ (วัตถุวิดีโอ) ลงในงานนำเสนอได้ Aspose.Slides มีคลาส Video , คลาส VideoFrame และประเภทที่เกี่ยวข้องอื่นๆ
สร้างเฟรมวิดีโอแบบฝัง
หากไฟล์วิดีโอที่คุณต้องการเพิ่มลงในสไลด์จัดเก็บไว้ในเครื่อง คุณสามารถสร้างเฟรมวิดีโอเพื่อฝังวิดีโอในงานนำเสนอของคุณได้
- สร้างอินสแตนซ์ของคลาส Presentation .
- รับอ้างอิงไปยังสไลด์ตามดัชนีของมัน
- เพิ่มอ็อบเจ็กต์ Video และส่งข้อมูลไฟล์วิดีโอเพื่อฝังวิดีโอในงานนำเสนอ
- เพิ่มอ็อบเจ็กต์ VideoFrame เพื่อสร้างเฟรมสำหรับวิดีโอ
- บันทึกงานนำเสนอที่แก้ไขแล้ว
โค้ด Python นี้แสดงวิธีเพิ่มวิดีโอที่จัดเก็บไว้ในเครื่องลงในงานนำเสนอ:
from pathlib import Path
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import Presentation, SaveFormat
presentation = Presentation("pres.pptx")
try:
video_data = Path("Wildlife.mp4").read_bytes()
java_video_data = jpype.JArray(jpype.JByte)(video_data)
video = presentation.getVideos().addVideo(java_video_data)
presentation.getSlides().get_Item(0).getShapes().addVideoFrame(10, 10, 150, 250, video)
presentation.save("pres-with-video.pptx", SaveFormat.Pptx)
finally:
presentation.dispose()
หรือคุณสามารถเพิ่มวิดีโอโดยส่งพาธไฟล์โดยตรงไปยังเมธอด addVideoFrame:
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import Presentation
presentation = Presentation()
try:
slide = presentation.getSlides().get_Item(0)
video_frame = slide.getShapes().addVideoFrame(50, 150, 300, 150, "video1.avi")
finally:
presentation.dispose()
สร้างเฟรมวิดีโอด้วยวิดีโอจากแหล่งเว็บ
Microsoft PowerPoint 2013 and newer รองรับวิดีโอ YouTube ในงานนำเสนอ หากวิดีโอที่คุณต้องการใช้มีออนไลน์ (เช่นบน YouTube) คุณสามารถเพิ่มลงในงานนำเสนอผ่านลิงก์เว็บของมันได้
- สร้างอินสแตนซ์ของคลาส Presentation .
- รับอ้างอิงไปยังสไลด์ตามดัชนีของมัน
- เพิ่มอ็อบเจ็กต์ VideoFrame และส่งลิงก์ไปยังวิดีโอ
- ตั้งค่าภาพย่อสำหรับเฟรมวิดีโอ
- บันทึกงานนำเสนอ
โค้ด Python นี้แสดงวิธีเพิ่มวิดีโอจากเว็บลงในสไลด์ของงานนำเสนอ PowerPoint:
from urllib.request import urlopen
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import Presentation, SaveFormat, VideoPlayModePreset
video_id = "Tj75Arhq5ho"
presentation = Presentation()
try:
video_frame = presentation.getSlides().get_Item(0).getShapes().addVideoFrame(10, 10, 427, 240, "https://www.youtube.com/embed/" + video_id)
video_frame.setPlayMode(VideoPlayModePreset.Auto)
# โหลดภาพย่อ.
thumbnail_uri = "https://img.youtube.com/vi/" + video_id + "/hqdefault.jpg"
try:
with urlopen(thumbnail_uri) as response:
thumbnail_data = response.read()
java_thumbnail_data = jpype.JArray(jpype.JByte)(thumbnail_data)
thumbnail = presentation.getImages().addImage(java_thumbnail_data)
video_frame.getPictureFormat().getPicture().setImage(thumbnail)
except OSError as error:
print("Could not load the thumbnail:", error)
presentation.save("out.pptx", SaveFormat.Pptx)
finally:
presentation.dispose()
ตัดเฟรมวิดีโอ
Aspose.Slides อนุญาตให้คุณควบคุมส่วนของวิดีโอที่เล่นโดยตั้งค่าการตัดจากเริ่มและจากท้ายผ่าน VideoFrame.setTrimFromStart และ VideoFrame.setTrimFromEnd ค่าทั้งสองระบุเป็นมิลลิวินาทีและกำหนดระยะเวลาที่ข้ามจากจุดเริ่มต้นและสิ้นสุดของวิดีโอตามลำดับ การตั้งค่านี้เปลี่ยนการตั้งค่าการเล่นวิดีโอในงานนำเสนอ; ไม่ได้ตัดหรือแก้ไขข้อมูลไบนารีของวิดีโอที่ฝังไว้
ตั้งค่าการตัด
เพื่อสร้างเฟรมวิดีโอและตั้งค่าการตัด:
- สร้างอินสแตนซ์ของคลาส Presentation .
- เพิ่มอ็อบเจ็กต์ Video ลงในงานนำเสนอ
- เพิ่มอ็อบเจ็กต์ VideoFrame ลงในสไลด์
- ตั้งค่าการตัดจากเริ่มและจากท้ายผ่าน VideoFrame.setTrimFromStart และ VideoFrame.setTrimFromEnd
- บันทึกงานนำเสนอที่แก้ไขแล้ว
โค้ดตัวอย่างต่อไปนี้ข้าม 2.5 วินาทีแรกและ 1 วินาทีสุดท้ายของวิดีโอที่ฝังไว้ระหว่างการเล่น:
from pathlib import Path
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import Presentation, SaveFormat
presentation = Presentation()
try:
video_data = Path("video.mp4").read_bytes()
java_video_data = jpype.JArray(jpype.JByte)(video_data)
video = presentation.getVideos().addVideo(java_video_data)
slide = presentation.getSlides().get_Item(0)
video_frame = slide.getShapes().addVideoFrame(50, 50, 640, 360, video)
video_frame.setTrimFromStart(2500.0)
video_frame.setTrimFromEnd(1000.0)
presentation.save("video_with_trim.pptx", SaveFormat.Pptx)
finally:
presentation.dispose()
อ่านการตั้งค่าการตัด
เพื่อดูการตั้งค่าการตัดที่มีอยู่ ให้โหลดงานนำเสนอ ค้นหาอ็อบเจ็กต์ VideoFrame ภายในรูปร่างบนสไลด์แรก แล้วอ่านค่าผ่าน VideoFrame.getTrimFromStart และ VideoFrame.getTrimFromEnd
โค้ดตัวอย่างต่อไปนี้ค้นหาเฟรมวิดีโอแรกบนสไลด์แรกและรายงานการตั้งค่าการตัดเป็นมิลลิวินาที:
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import Presentation, VideoFrame
presentation = Presentation("video_with_trim.pptx")
try:
slide = presentation.getSlides().get_Item(0)
for shape in slide.getShapes():
if isinstance(shape, VideoFrame):
trim_from_start = shape.getTrimFromStart()
trim_from_end = shape.getTrimFromEnd()
print(f"Trim from start: {trim_from_start} ms")
print(f"Trim from end: {trim_from_end} ms")
break
finally:
presentation.dispose()
จัดการคำบรรยายวิดีโอ
Aspose.Slides อนุญาตให้คุณจัดการคำบรรยายแบบปิดสำหรับเฟรมวิดีโอในงานนำเสนอ PowerPoint คำบรรยายจะถูกจัดเก็บในรูปแบบ WebVTT และสามารถเข้าถึงได้ผ่านเมธอด VideoFrame.getCaptionTracks
เพิ่มคำบรรยายให้กับเฟรมวิดีโอ
เพื่อเพิ่มคำบรรยายให้กับเฟรมวิดีโอ:
- สร้างอินสแตนซ์ของคลาส Presentation .
- เพิ่มวิดีโอลงในงานนำเสนอ
- เพิ่มอ็อบเจ็กต์ VideoFrame ลงในสไลด์
- ใช้ CaptionsCollection ที่ได้จาก getCaptionTracks เพื่อเพิ่มแทร็กคำบรรยาย WebVTT
- บันทึกงานนำเสนอที่แก้ไขแล้ว
โค้ดต่อไปนี้แสดงวิธีเพิ่มคำบรรยายให้กับเฟรมวิดีโอ:
from pathlib import Path
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import Presentation, SaveFormat
presentation = Presentation()
try:
video_data = Path("video.mp4").read_bytes()
java_video_data = jpype.JArray(jpype.JByte)(video_data)
video = presentation.getVideos().addVideo(java_video_data)
slide = presentation.getSlides().get_Item(0)
video_frame = slide.getShapes().addVideoFrame(0, 0, 100, 100, video)
# เพิ่มแทร็กคำบรรยายใหม่จากไฟล์ WebVTT.
video_frame.getCaptionTracks().add("English", "track.vtt")
presentation.save("video_with_captions.pptx", SaveFormat.Pptx)
finally:
presentation.dispose()
คลาส CaptionsCollection ยังมีโอเวอร์โหลดที่ให้คุณเพิ่มคำบรรยายจากสตรีมได้
ดึงคำบรรยายจากเฟรมวิดีโอ
เพื่อดึงคำบรรยายจากเฟรมวิดีโอ:
- โหลดงานนำเสนอที่มีวิดีโออยู่
- ค้นหาอ็อบเจ็กต์ VideoFrame ที่ต้องการ
- วนรอบผ่านแทร็กคำบรรยายใน CaptionsCollection
- บันทึกแต่ละแทร็กคำบรรยายเป็นไฟล์
.vtt
โค้ดต่อไปนี้แสดงวิธีดึงคำบรรยายจากเฟรมวิดีโอ:
from pathlib import Path
import jpype
import asposeslides
if not jpipe.isJVMStarted():
jpype.startJVM()
from asposeslides.api import Presentation, VideoFrame
presentation = Presentation("video_with_captions.pptx")
try:
slide = presentation.getSlides().get_Item(0)
for shape in slide.getShapes():
if isinstance(shape, VideoFrame):
for caption_track in shape.getCaptionTracks():
# บันทึกแทร็กคำบรรยายเป็นไฟล์ WebVTT.
file_path = Path(str(caption_track.getCaptionId()) + ".vtt")
caption_data = bytes(caption_track.getBinaryData())
file_path.write_bytes(caption_data)
finally:
presentation.dispose()
อ็อบเจ็กต์ Captions แต่ละตัวเปิดเผยตัวบ่งชี้คำบรรยาย, ป้าย, ข้อมูลไบนารี, และข้อความคำบรรยายเป็นสตริง UTF-8
ลบคำบรรยายจากเฟรมวิดีโอ
เพื่อทำการลบคำบรรยายจากเฟรมวิดีโอ:
- โหลดงานนำเสนอที่มีวิดีโออยู่
- รับอ็อบเจ็กต์ VideoFrame ที่ต้องการ
- ลบแทร็กคำบรรยายจาก CaptionsCollection
- บันทึกงานนำเสนอที่แก้ไขแล้ว
โค้ดต่อไปนี้แสดงวิธีลบคำบรรยายทั้งหมดจากเฟรมวิดีโอ:
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import Presentation, SaveFormat, VideoFrame
presentation = Presentation("video_with_captions.pptx")
try:
slide = presentation.getSlides().get_Item(0)
video_frame = slide.getShapes().get_Item(0)
if isinstance(video_frame, VideoFrame):
# ลบคำบรรยายทั้งหมดจากเฟรมวิดีโอ.
video_frame.getCaptionTracks().clear()
presentation.save("video_without_captions.pptx", SaveFormat.Pptx)
else:
print("The shape is not a video frame.")
finally:
presentation.dispose()
หากต้องการลบแทร็กคำบรรยายเพียงหนึ่งรายการให้ใช้เมธอด remove หรือ removeAt แทน clear
ดึงวิดีโอจากสไลด์
นอกจากการเพิ่มวิดีโอลงในสไลด์แล้ว Aspose.Slides ยังอนุญาตให้คุณดึงวิดีโอที่ฝังอยู่ในงานนำเสนอได้
- สร้างอินสแตนซ์ของคลาส Presentation เพื่อโหลดงานนำเสนอที่มีวิดีโอ
- วนรอบผ่านอ็อบเจ็กต์ Slide ทั้งหมด
- วนรอบผ่านอ็อบเจ็กต์ Shape ทั้งหมดเพื่อค้นหา VideoFrame
- บันทึกวิดีโอไปยังดิสก์
โค้ด Python นี้แสดงวิธีดึงวิดีโอจากสไลด์ของงานนำเสนอ:
from pathlib import Path
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import Presentation, VideoFrame
presentation = Presentation("VideoSample.pptx")
try:
for slide in presentation.getSlides():
for shape in slide.getShapes():
if isinstance(shape, VideoFrame):
video = shape.getEmbeddedVideo()
if video is not None:
content_type = str(video.getContentType())
file_extension = content_type.split("/", 1)[-1]
video_data = bytes(video.getBinaryData())
Path("testing2." + file_extension).write_bytes(video_data)
else:
print("The video frame has no embedded video.")
finally:
presentation.dispose()
คำถามที่พบบ่อย
พารามิเตอร์การเล่นวิดีโอใดบ้างที่สามารถเปลี่ยนแปลงได้สำหรับ VideoFrame?
คุณสามารถควบคุม playback mode (อัตโนมัติหรือคลิก) และ looping ตัวเลือกเหล่านี้พร้อมใช้งานผ่านคุณสมบัติของอ็อบเจ็กต์ VideoFrame
การเพิ่มวิดีโอมีผลต่อขนาดไฟล์ PPTX หรือไม่?
ใช่ เมื่อคุณฝังวิดีโอในเครื่อง ข้อมูลไบนารีจะถูกรวมอยู่ในเอกสาร ดังนั้นขนาดงานนำเสนอจะเพิ่มตามขนาดไฟล์ของวิดีโอ เมื่อคุณเพิ่มวิดีโอออนไลน์ ลิงก์และภาพย่อจะถูกฝังไว้ ทำให้การเพิ่มขนาดเล็กกว่า
ฉันสามารถแทนที่วิดีโอใน VideoFrame ที่มีอยู่โดยไม่เปลี่ยนตำแหน่งและขนาดได้หรือไม่?
ใช่ คุณสามารถสลับ video content ภายในเฟรมโดยยังคงรักษาเรขาคณิตของรูปร่างไว้; นี่เป็นสถานการณ์ทั่วไปสำหรับอัปเดตสื่อในเลเอาต์ที่มีอยู่
สามารถระบุประเภทเนื้อหา (MIME) ของวิดีโอดังกล่าวได้หรือไม่?
ใช่ วิดีโอที่ฝังไว้มี content type ที่คุณสามารถอ่านและใช้ได้ ตัวอย่างเช่นเมื่อบันทึกลงดิสก์