Beheer videoframes in presentaties met Python
Inleiding
Video’s kunnen helpen om ideeën uit te leggen en een publiek te boeien. Aspose.Slides for Python via Java stelt je in staat videoframes aan dia’s toe te voegen, afspeelinstellingen aan te passen, bijschriften te beheren en ingebedde videogegevens te extraheren.
PowerPoint ondersteunt lokale video’s en koppelingen naar online video’s, zoals YouTube‑video’s.
Om videogegevens en videoframes te vertegenwoordigen, biedt Aspose.Slides de klasse Video , de klasse VideoFrame en andere relevante types.
Maak een ingebedde videoframe
Als het videobestand dat je aan je dia wilt toevoegen lokaal is opgeslagen, kun je een videoframe maken om de video in je presentatie in te sluiten.
Dit voorbeeld voegt een lokale video toe aan de eerste dia van een bestaande presentatie en slaat het resultaat op. Frame‑coördinaten en afmetingen zijn in points. Python leest de video‑bytes van de schijf, en JPype zet ze om naar een Java‑byte‑array voordat de video aan de presentatie wordt toegevoegd.
from pathlib import Path
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import Presentation, SaveFormat
presentation = Presentation("presentation.pptx")
try:
slide = presentation.getSlides().get_Item(0)
video_data = Path("video.mp4").read_bytes()
java_video_data = jpype.JArray(jpype.JByte)(video_data)
video = presentation.getVideos().addVideo(java_video_data)
slide.getShapes().addVideoFrame(10, 10, 150, 250, video)
presentation.save("embedded_video.pptx", SaveFormat.Pptx)
finally:
presentation.dispose()
Je kunt ook een lokaal videopad rechtstreeks doorgeven aan addVideoFrame. Dit voorbeeld voegt de video toe aan de eerste dia van een nieuwe presentatie. De video moet toegankelijk blijven totdat de presentatie is opgeslagen.
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import Presentation, SaveFormat
presentation = Presentation()
try:
slide = presentation.getSlides().get_Item(0)
slide.getShapes().addVideoFrame(50, 150, 300, 150, "video.avi")
presentation.save("video_from_path.pptx", SaveFormat.Pptx)
finally:
presentation.dispose()
Maak een videoframe met video van een webbron
Microsoft PowerPoint ondersteunt online video’s in presentaties. Je kunt een videoframe maken dat koppelt naar een online video, bijvoorbeeld een YouTube‑video.
Dit voorbeeld voegt een YouTube‑videolink en miniatuur toe aan de eerste dia. Vervang de video‑identifier om een andere video te gebruiken. De methode setPlayMode vraagt om automatisch afspelen. Het downloaden van de miniatuur en het afspelen van de video vereisen internettoegang. De presentatie‑viewer moet ook online video‑afspelen ondersteunen.
from urllib.request import urlopen
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import Presentation, SaveFormat, VideoPlayModePreset
presentation = Presentation()
try:
slide = presentation.getSlides().get_Item(0)
video_id = "aqz-KE-bpKQ"
video_url = "https://www.youtube.com/embed/" + video_id
video_frame = slide.getShapes().addVideoFrame(10, 10, 427, 240, video_url)
video_frame.setPlayMode(VideoPlayModePreset.Auto)
thumbnail_url = "https://img.youtube.com/vi/" + video_id + "/hqdefault.jpg"
with urlopen(thumbnail_url) 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)
presentation.save("online_video.pptx", SaveFormat.Pptx)
finally:
presentation.dispose()
Speel een video in volledig scherm
In een trainingspresentatie kun je een software‑demo in volledig scherm afspelen zodat het publiek de details kan zien. Roep setFullScreenMode aan met True om dit gedrag tijdens het afspelen in te schakelen.
Dit voorbeeld opent een presentatie, vindt de eerste VideoFrame op de eerste dia, en schakelt volledig‑scherm‑afspelen in. De invoer‑presentatie moet minimaal één dia bevatten met een bestaand videoframe op de eerste dia.
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import Presentation, SaveFormat, VideoFrame
presentation = Presentation("training.pptx")
try:
slide = presentation.getSlides().get_Item(0)
for shape in slide.getShapes():
if isinstance(shape, VideoFrame):
shape.setFullScreenMode(True)
break
presentation.save("full_screen_video.pptx", SaveFormat.Pptx)
finally:
presentation.dispose()
Volledig‑scherm‑afspelen bepaalt hoe de video wordt weergegeven. Onafhankelijk daarvan regelt setPlayMode of deze automatisch of bij klikken start, en setPlayLoopMode bepaalt of deze herhaalt. Om het startgedrag te kiezen, stel je de afspeelmodus in op VideoPlayModePreset.Auto of VideoPlayModePreset.OnClick. Het voorbeeld behoudt de bestaande start‑ en lussinstellingen.
Terugspoelen van een video na afspelen
In een trainingspresentatie maakt het terugspoelen van een demonstratie‑video naar het begin het klaar voor de presentator om opnieuw af te spelen. Roep setRewindVideo aan met True om de video na afloop van het afspelen naar het begin te retourneren.
Dit voorbeeld opent een presentatie, vindt de eerste VideoFrame op de eerste dia, en schakelt terugspoelen in. Het schakelt de lus uit zodat het afspelen kan eindigen en stelt het afspelen in om bij klikken te starten. De invoer‑presentatie moet minimaal één dia bevatten met een bestaand videoframe op de eerste dia.
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import Presentation, SaveFormat, VideoFrame, VideoPlayModePreset
presentation = Presentation("training.pptx")
try:
slide = presentation.getSlides().get_Item(0)
for shape in slide.getShapes():
if isinstance(shape, VideoFrame):
shape.setRewindVideo(True)
shape.setPlayLoopMode(False)
shape.setPlayMode(VideoPlayModePreset.OnClick)
break
presentation.save("rewind_video.pptx", SaveFormat.Pptx)
finally:
presentation.dispose()
Terugspoelen zet de video terug naar het begin zonder deze opnieuw te starten. In tegenstelling tot het aanroepen van setPlayLoopMode met True, die het afspelen automatisch herhaalt. Houd de lus uitgeschakeld wanneer je wilt dat de video klaar is om opnieuw afgespeeld te worden. setPlayMode regelt onafhankelijk of het automatisch of bij klikken start; dit voorbeeld gebruikt VideoPlayModePreset.OnClick zodat de presentator bepaalt wanneer het afspelen start. Stel de afspeelmodus in na de lusinstelling, zoals in het voorbeeld getoond. Terugspoelen werkt onafhankelijk van setFullScreenMode.
Trimmen van een videoframe
Gebruik VideoFrame.setTrimFromStart en VideoFrame.setTrimFromEnd om het begin‑ of einddeel van een video over te slaan tijdens het afspelen. Beide waarden staan in milliseconden. Trimmen wijzigt afspeelinstellingen zonder de ingebedde videogegevens te wijzigen.
Triminstellingen instellen
Dit voorbeeld voegt een lokale video in en slaat de eerste 2,5 seconden en de laatste seconde over tijdens het afspelen. Gebruik een video langer dan 3,5 seconden zodat er een speelbaar segment overblijft.
from pathlib import Path
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import Presentation, SaveFormat
presentation = Presentation()
try:
slide = presentation.getSlides().get_Item(0)
video_data = Path("video.mp4").read_bytes()
java_video_data = jpype.JArray(jpype.JByte)(video_data)
video = presentation.getVideos().addVideo(java_video_data)
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()
Triminstellingen lezen
Dit voorbeeld drukt de trim‑waarden van het eerste videoframe op de eerste dia af in milliseconden. De presentatie moet minimaal één dia bevatten. Als die dia geen videoframe heeft, wordt er niets afgedrukt. Het voorgaande voorbeeld levert waarden van 2500 en 1000.
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()
Beheer videobijschriften
Aspose.Slides maakt het mogelijk om closed captions voor videoframes in PowerPoint‑presentaties te beheren. Bijschriften worden opgeslagen in WebVTT‑formaat en zijn toegankelijk via de methode VideoFrame.getCaptionTracks.
Bijschriften toevoegen aan een videoframe
Dit voorbeeld voegt een lokale video in en voegt een WebVTT‑bijschrifttrack met het label English toe. De tijdstempels van de bijschriften moeten overeenkomen met de video. De opgeslagen presentatie bevat zowel de video als de bijschriften.
from pathlib import Path
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import Presentation, SaveFormat
presentation = Presentation()
try:
slide = presentation.getSlides().get_Item(0)
video_data = Path("video.mp4").read_bytes()
java_video_data = jpype.JArray(jpype.JByte)(video_data)
video = presentation.getVideos().addVideo(java_video_data)
video_frame = slide.getShapes().addVideoFrame(0, 0, 100, 100, video)
# Voeg een nieuw ondertiteltrack toe vanaf een WebVTT‑bestand.
video_frame.getCaptionTracks().add("English", "track.vtt")
presentation.save("video_with_captions.pptx", SaveFormat.Pptx)
finally:
presentation.dispose()
De klasse CaptionsCollection biedt ook een overload waarmee je bijschriften uit een stream kunt toevoegen.
Bijschriften extraheren uit een videoframe
Dit voorbeeld slaat alle bijschrifttracks van videoframes op de eerste dia op als afzonderlijke WebVTT‑bestanden. Sequentiële nummers houden de uitvoerbestanden gescheiden. De console meldt het aantal geëxtraheerde tracks. De presentatie moet minimaal één dia bevatten.
from pathlib import Path
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import Presentation, VideoFrame
presentation = Presentation("video_with_captions.pptx")
try:
slide = presentation.getSlides().get_Item(0)
track_count = 0
for shape in slide.getShapes():
if isinstance(shape, VideoFrame):
for caption_track in shape.getCaptionTracks():
track_count += 1
output_path = Path(f"captions_{track_count}.vtt")
caption_data = bytes(caption_track.getBinaryData())
output_path.write_bytes(caption_data)
print(f"Caption tracks extracted: {track_count}")
finally:
presentation.dispose()
Elk Captions‑object geeft de bijschrift‑identifier, het label, binaire data en de bijschrifttekst als UTF‑8‑string weer.
Bijschriften verwijderen uit een videoframe
Dit voorbeeld verwijdert alle bijschriften van het videoframe op de eerste vorm‑positie op de eerste dia en slaat het resultaat op. Het gaat ervan uit dat de dia en vorm bestaan en dat de vorm een videoframe is.
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):
# Verwijder alle bijschriften van het 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()
Als je slechts één bijschrifttrack wilt verwijderen, gebruik dan de methoden remove of removeAt in plaats van clear.
Video uit een dia extraheren
Naast het toevoegen van video’s aan dia’s, maakt Aspose.Slides het mogelijk om video’s die in presentaties zijn ingebed te extraheren.
Dit voorbeeld extrahert ingebedde video’s van elke dia naar afzonderlijke, genummerde binaire bestanden. Gelinkte video’s worden overgeslagen omdat ze geen ingebedde data bevatten. De console drukt het MIME‑type van elke video en het totaal aantal af. De uitvoer gebruikt de algemene extensie .bin; wijzig deze naar het gerapporteerde mediatype indien nodig.
from pathlib import Path
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import Presentation, VideoFrame
presentation = Presentation("presentation_with_videos.pptx")
try:
video_count = 0
for slide in presentation.getSlides():
for shape in slide.getShapes():
if isinstance(shape, VideoFrame):
video = shape.getEmbeddedVideo()
if video is None:
print("Skipped a linked video: no embedded data is available.")
continue
video_count += 1
output_path = Path(f"extracted_video_{video_count}.bin")
video_data = bytes(video.getBinaryData())
output_path.write_bytes(video_data)
print(f"Video {video_count}: {video.getContentType()}")
print(f"Embedded videos extracted: {video_count}")
finally:
presentation.dispose()
FAQ
Welke afspeelparameters van een video kunnen worden gewijzigd voor een videoframe?
Je kunt de afspeelmodus (auto of bij klik) en het herhalen aanpassen. Deze opties zijn beschikbaar via de methoden van het object VideoFrame.
Heeft het toevoegen van een video invloed op de grootte van het PPTX‑bestand?
Ja. Wanneer je een lokale video inbedt, wordt de binaire data in het document opgenomen, zodat de presentatie‑grootte evenredig stijgt met de bestandsgrootte. Wanneer je naar een online video linkt en een miniatuur toevoegt, slaat de presentatie alleen de link en de preview‑afbeelding op in plaats van de videogegevens, waardoor de toename meestal kleiner is.
Kan ik de video in een bestaand videoframe vervangen zonder de positie en grootte te wijzigen?
Ja. Je kunt de videoinhoud binnen het frame verwisselen terwijl je de geometrie van de vorm behoudt; dit is een veelvoorkomend scenario voor het bijwerken van media in een bestaande lay-out.
Kan het contenttype (MIME) van een ingebedde video worden bepaald?
Ja. Een ingebedde video heeft een contenttype dat je kunt uitlezen en gebruiken, bijvoorbeeld bij het opslaan naar schijf.