Správa video rámců v prezentacích pomocí Pythonu
Úvod
Dobře umístěné video v prezentaci může učinit vaši zprávu přesvědčivější a zvýšit úroveň zapojení publika.
PowerPoint vám umožňuje přidat videa do snímku v prezentaci dvěma způsoby:
- Přidat nebo vložit místní video (uložené ve vašem počítači)
- Přidat online video (z webového zdroje, jako je YouTube).
Aby vám umožnil přidávat videa (videobjekty) do prezentace, Aspose.Slides poskytuje třídu Video , třídu VideoFrame a další související typy.
Vytvoření vložených video rámců
Pokud je video soubor, který chcete přidat do snímku, uložen lokálně, můžete vytvořit video rámec pro vložení videa do prezentace.
- Vytvořte instanci třídy Presentation .
- Získejte odkaz na snímek podle jeho indexu.
- Přidejte objekt Video a předávejte data video souboru pro vložení videa do prezentace.
- Přidejte objekt VideoFrame pro vytvoření rámce pro video.
- Uložte upravenou prezentaci.
Tento Python kód ukazuje, jak přidat video uložené lokálně do prezentace:
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()
Alternativně můžete přidat video předáním jeho cesty k souboru přímo metodě 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()
Vytvoření video rámců s videem z webových zdrojů
Microsoft PowerPoint 2013 a novější podporuje videa z YouTube v prezentacích. Pokud je video, které chcete použít, dostupné online (např. na YouTube), můžete ho přidat do prezentace pomocí jeho webového odkazu.
- Vytvořte instanci třídy Presentation .
- Získejte odkaz na snímek podle jeho indexu.
- Přidejte objekt VideoFrame a předávejte odkaz na video.
- Nastavte miniaturu pro video rámec.
- Uložte prezentaci.
Tento Python kód ukazuje, jak přidat video z webu do snímku v PowerPoint prezentaci:
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)
# Načíst miniaturu.
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()
Oříznutí video rámce
Aspose.Slides vám umožňuje ovládat, která část videa se přehraje, nastavením hodnot trim-from-start a trim-from-end pomocí VideoFrame.setTrimFromStart a VideoFrame.setTrimFromEnd . Obě hodnoty jsou udány v milisekundách a určují, kolik času se přeskočí od začátku a konce videa. Tato nastavení mění nastavení přehrávání videa v prezentaci; nevyříznou ani jinak nemodifikují binární data vloženého videa.
Nastavení ořezu
Pro vytvoření video rámce a nastavení jeho ořezu:
- Vytvořte instanci třídy Presentation .
- Přidejte objekt Video do prezentace.
- Přidejte objekt VideoFrame na snímek.
- Nastavte hodnoty trim-from-start a trim-from-end pomocí VideoFrame.setTrimFromStart a VideoFrame.setTrimFromEnd .
- Uložte upravenou prezentaci.
Následující ukázka kódu přeskočí prvních 2,5 sekundy a poslední sekundu vloženého videa během přehrávání:
from pathlib import Path
import jpime
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()
Čtení nastavení ořezu
Pro prohlédnutí existujících nastavení ořezu načtěte prezentaci, najděte objekt VideoFrame mezi tvary na prvním snímku a přečtěte hodnoty pomocí VideoFrame.getTrimFromStart a VideoFrame.getTrimFromEnd .
Následující ukázka kódu najde první video rámec na prvním snímku a zobrazí jeho nastavení ořezu v milisekundách:
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()
Správa titulků videa
Aspose.Slides vám umožňuje spravovat uzavřené titulky pro video rámy v PowerPoint prezentacích. Titulky jsou uloženy ve formátu WebVTT a jsou přístupné prostřednictvím metody VideoFrame.getCaptionTracks .
Přidání titulků do video rámce
Pro přidání titulků do video rámce:
- Vytvořte instanci třídy Presentation .
- Přidejte video do prezentace.
- Přidejte objekt VideoFrame na snímek.
- Použijte CaptionsCollection vrácenou metodou getCaptionTracks pro přidání WebVTT stopy titulků.
- Uložte upravenou prezentaci.
Následující kód ukazuje, jak přidat titulky do video rámce:
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)
# 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é umožňuje přidat titulky ze streamu.
Extrahování titulků z video rámce
Pro extrahování titulků z video rámce:
- Načtěte prezentaci, která obsahuje video.
- Najděte cílový objekt VideoFrame .
- Iterujte přes stopy titulků v CaptionsCollection .
- Uložte každou stopu titulků do souboru
.vtt.
Následující kód ukazuje, jak extrahovat titulky z video rámce:
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)
for shape in slide.getShapes():
if isinstance(shape, VideoFrame):
for caption_track in shape.getCaptionTracks():
# Uložit stopu titulků do souboru WebVTT.
file_path = Path(str(caption_track.getCaptionId()) + ".vtt")
caption_data = bytes(caption_track.getBinaryData())
file_path.write_bytes(caption_data)
finally:
presentation.dispose()
Každý objekt Captions poskytuje identifikátor titulu, popisek, binární data a text titulu jako řetězec UTF-8.
Odstranění titulků z video rámce
Pro odstranění titulků z video rámce:
- Načtěte prezentaci, která obsahuje video.
- Získejte cílový objekt VideoFrame .
- Odstraňte stopy titulků z CaptionsCollection .
- Uložte upravenou prezentaci.
Následující kód ukazuje, jak odstranit všechny titulky z video rámce:
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 rámce.
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 .
Extrahování videa ze snímků
Kromě přidávání videí do snímků umožňuje Aspose.Slides extrahovat videa vložená v prezentacích.
- Vytvořte instanci třídy Presentation pro načtení prezentace obsahující video.
- Iterujte přes všechny objekty Slide .
- Iterujte přes všechny objekty Shape a najděte VideoFrame .
- Uložte video na disk.
Tento Python kód ukazuje, jak extrahovat video ze snímku v prezentaci:
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()
FAQ
Které parametry přehrávání videa lze změnit pro VideoFrame?
Můžete ovládat playback mode (automaticky nebo po kliknutí) a looping . Tyto možnosti jsou dostupné prostřednictvím vlastností objektu VideoFrame .
Ovlivňuje přidání videa velikost souboru PPTX?
Ano. Když vložíte místní video, binární data jsou součástí dokumentu, takže se velikost prezentace zvětší úměrně k velikosti souboru. Když přidáte online video, vloží se odkaz a miniatura, takže nárůst velikosti je menší.
Mohu nahradit video v existujícím VideoFrame bez změny jeho umístění a velikosti?
Ano. Můžete vyměnit video content uvnitř rámce při zachování geometrie tvaru; jedná se o častý scénář pro aktualizaci média v existujícím rozvržení.
Lze zjistit typ obsahu (MIME) vloženého videa?
Ano. Vložené video má content type , který můžete číst a použít, například při ukládání na disk.