Spravovat video snímky v prezentacích pomocí Pythonu
Úvod
Videa mohou pomoci vysvětlit nápady a zapojit publikum. Aspose.Slides pro Python přes Java vám umožňuje přidávat video snímky do slidů, upravovat nastavení přehrávání, spravovat titulky a extrahovat vložená video data.
PowerPoint podporuje místní videa i odkazy na online videa, například videa z YouTube.
Pro reprezentaci video dat a video snímků poskytuje Aspose.Slides třídu Video , třídu VideoFrame a další relevantní typy.
Vytvořit vložený video snímek
Pokud je video soubor, který chcete přidat do svého slidu, uložen lokálně, můžete vytvořit video snímek k vložení videa do vaší prezentace.
Tento příklad vloží místní video na první slid existující prezentace a uloží výsledek. Souřadnice a rozměry snímku jsou v bodech. Python načte video bajty z disku a JPype je převádí na Java pole bajtů předtím, než je video přidáno do prezentace.
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()
Můžete také předat cestu k místnímu videu přímo metodě addVideoFrame. Tento příklad vloží video na první slid nové prezentace. Video musí zůstat přístupné, dokud není prezentace uložena.
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()
Vytvořit video snímek s videem z webového zdroje
Microsoft PowerPoint podporuje online videa v prezentacích. Můžete vytvořit video snímek, který odkazuje na online video, například video z YouTube.
Tento příklad přidá odkaz na YouTube video a miniaturu na první slid. Nahraďte identifikátor videa, abyste použili jiné video. Metoda setPlayMode požaduje automatické přehrávání. Stahování miniatury a přehrávání videa vyžaduje přístup k internetu. Prohlížeč prezentace také musí podporovat přehrávání online videí.
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()
Přehrát video v režimu celé obrazovky
V tréninkové prezentaci můžete přehrát ukázku softwaru v režimu celé obrazovky, aby publikum vidělo detaily. Zavolejte setFullScreenMode s True pro povolení tohoto chování během přehrávání.
Tento příklad otevře prezentaci, najde první VideoFrame na prvním slidu a povolí přehrávání na celou obrazovku. Vstupní prezentace musí obsahovat alespoň jeden slid s existujícím video snímkem na prvním slidu.
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()
Přehrávání na celé obrazovce řídí, jak je video zobrazeno. Samostatně metoda setPlayMode určuje, zda se spustí automaticky nebo po kliknutí, a metoda setPlayLoopMode určuje, zda se opakuje. Pro výběr chování spuštění nastavte režim přehrávání na VideoPlayModePreset.Auto or VideoPlayModePreset.OnClick. Příklad zachovává existující nastavení startu a opakování.
Přetočit video po přehrání
V tréninkové prezentaci vrácení demonstračního videa na začátek jej připraví pro opětovné přehrání. Zavolejte setRewindVideo s True, aby se video po ukončení přehrávání vrátilo na začátek.
Tento příklad otevře prezentaci, najde první VideoFrame na prvním slidu a povolí přetočení. Vypne opakování, aby přehrávání mohlo skončit, a nastaví start na kliknutí. Vstupní prezentace musí obsahovat alespoň jeden slid s existujícím video snímkem na prvním slidu.
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()
Přetočení vrací video na jeho začátek, aniž by ho spouštělo znovu. Naopak volání setPlayLoopMode s True automaticky opakuje přehrávání. Udržujte opakování zakázáno, pokud chcete, aby video skončilo a zůstalo připraveno k opětovnému přehrání. Metoda setPlayMode samostatně řídí automatické nebo klikací spuštění; tento příklad používá VideoPlayModePreset.OnClick, takže prezentující kontroluje, kdy přehrávání začne. Nastavte režim přehrávání po nastavení opakování, jak je ukázáno v příkladu. Přetočení funguje nezávisle na setFullScreenMode.
Oříznout video snímek
Použijte VideoFrame.setTrimFromStart a VideoFrame.setTrimFromEnd k přeskočení části začátku nebo konce videa během přehrávání. Obě hodnoty jsou v milisekundách. Ořezávání mění nastavení přehrávání bez úpravy vložených video dat.
Nastavit ořezání
Tento příklad vloží místní video a během přehrávání přeskočí první 2,5 s a poslední sekundu. Použijte video delší než 3,5 s, aby zůstala přehratelná část.
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()
Načíst nastavení ořezu
Tento příklad vypíše hodnoty ořezu prvního video snímku na prvním slidu v milisekundách. Prezentace musí obsahovat alespoň jeden slid. Pokud tento slid nemá video snímek, nic se nevypíše. Předchozí příklad produkuje hodnoty 2500 a 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()
Spravovat titulky videa
Aspose.Slides vám umožňuje spravovat uzavřené titulky pro video snímky v PowerPoint prezentacích. Titulky jsou uloženy ve formátu WebVTT a jsou přístupné přes metodu VideoFrame.getCaptionTracks.
Přidat titulky do video snímku
Tento příklad vloží místní video a přidá stopu WebVTT titulků označenou jako English. Časové značky titulků by měly odpovídat videu. Uložená prezentace obsahuje jak video, tak jeho titulky.
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)
# Přidat novou stopu titulků ze souboru WebVTT.
video_frame.getCaptionTracks().add("English", "track.vtt")
presentation.save("video_with_captions.pptx", SaveFormat.Pptx)
finally:
presentation.dispose()
Třída CaptionsCollection také poskytuje přetížení, které vám umožní přidat titulky ze streamu.
Extrahovat titulky z video snímku
Tento příklad uloží všechny stopy titulků z video snímků na prvním slidu jako samostatné soubory WebVTT. Postupná čísla udržují výstupní soubory odlišné. Konzole vypíše počet extrahovaných stop. Prezentace musí obsahovat alespoň jeden slid.
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()
Každý objekt Captions vystavuje identifikátor titulků, popisek, binární data a text titulků jako řetězec UTF‑8.
Odstranit titulky z video snímku
Tento příklad odstraní všechny titulky z video snímku na první pozici tvaru na prvním slidu a výsledek uloží. Předpokládá, že slid a tvar existují a že tvar je video snímek.
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):
# Odstranit všechny titulky z video snímku.
video_frame.getCaptionTracks().clear()
presentation.save("video_without_captions.pptx", SaveFormat.Pptx)
else:
print("The shape is not a video frame.")
finally:
presentation.dispose()
Pokud potřebujete odstranit jen jednu stopu titulků, použijte metody remove nebo removeAt místo clear.
Extrahovat video ze slidu
Kromě přidávání videí do slidů umožňuje Aspose.Slides extrahovat videa vložená v prezentacích.
Tento příklad extrahuje vložená videa ze všech slidů do samostatných, očíslovaných binárních souborů. Propojená videa jsou přeskočena, protože neobsahují vložená data. Konzole vypíše MIME typ každého videa a celkový počet. Výstup používá obecnou příponu .bin; změňte ji podle hlášeného typu média, pokud je to potřeba.
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()
Často kladené otázky
Které parametry přehrávání videa lze u video snímku změnit?
Můžete ovládat režim přehrávání (auto nebo po kliknutí) a opakování. Tyto možnosti jsou dostupné prostřednictvím metod objektu VideoFrame.
Zvyšuje přidání videa velikost souboru PPTX?
Ano. Když vložíte místní video, binární data jsou zahrnuta do dokumentu, takže velikost prezentace roste úměrně velikosti souboru. Když odkazujete na online video a přidáte miniaturu, prezentace uloží jen odkaz a náhledový obrázek místo video dat, takže nárůst velikosti je obvykle menší.
Mohu nahradit video v existujícím video snímku bez změny jeho polohy a rozměrů?
Ano. Můžete vyměnit video content uvnitř snímku a přitom zachovat geometrii tvaru; toto je běžný scénář při aktualizaci médií v existujícím rozvržení.
Lze určit typ obsahu (MIME) vloženého videa?
Ano. Vložené video má content type, který můžete přečíst a použít, například při ukládání na disk.