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.

  1. Vytvořte instanci třídy Presentation .
  2. Získejte odkaz na snímek podle jeho indexu.
  3. Přidejte objekt Video a předávejte data video souboru pro vložení videa do prezentace.
  4. Přidejte objekt VideoFrame pro vytvoření rámce pro video.
  5. 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.

  1. Vytvořte instanci třídy Presentation .
  2. Získejte odkaz na snímek podle jeho indexu.
  3. Přidejte objekt VideoFrame a předávejte odkaz na video.
  4. Nastavte miniaturu pro video rámec.
  5. 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:

  1. Vytvořte instanci třídy Presentation .
  2. Přidejte objekt Video do prezentace.
  3. Přidejte objekt VideoFrame na snímek.
  4. Nastavte hodnoty trim-from-start a trim-from-end pomocí VideoFrame.setTrimFromStart a VideoFrame.setTrimFromEnd .
  5. 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:

  1. Vytvořte instanci třídy Presentation .
  2. Přidejte video do prezentace.
  3. Přidejte objekt VideoFrame na snímek.
  4. Použijte CaptionsCollection vrácenou metodou getCaptionTracks pro přidání WebVTT stopy titulků.
  5. 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:

  1. Načtěte prezentaci, která obsahuje video.
  2. Najděte cílový objekt VideoFrame .
  3. Iterujte přes stopy titulků v CaptionsCollection .
  4. 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:

  1. Načtěte prezentaci, která obsahuje video.
  2. Získejte cílový objekt VideoFrame .
  3. Odstraňte stopy titulků z CaptionsCollection .
  4. 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.

  1. Vytvořte instanci třídy Presentation pro načtení prezentace obsahující video.
  2. Iterujte přes všechny objekty Slide .
  3. Iterujte přes všechny objekty Shape a najděte VideoFrame .
  4. 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.