Hantera video-ramar i presentationer med Python

Introduktion

En välplacerad video i en presentation kan göra ditt budskap mer övertygande och öka engagemangsnivåerna hos din publik.

PowerPoint låter dig lägga till videor på en bild i en presentation på två sätt:

  • Lägg till eller bädda in en lokal video (sparad på din maskin)
  • Lägg till en online-video (från en webbkälla som YouTube).

För att du ska kunna lägga till videor (videoobjekt) i en presentation tillhandahåller Aspose.Slides klassen Video, klassen VideoFrame och andra relevanta typer.

Skapa inbäddade video‑ramar

Om videofilen du vill lägga till på din bild lagras lokalt kan du skapa en videoram för att bädda in videon i din presentation.

  1. Skapa en instans av klassen Presentation.
  2. Hämta en referens till en bild efter dess index.
  3. Lägg till ett Video-objekt och skicka videofilens data för att bädda in videon i presentationen.
  4. Lägg till ett VideoFrame-objekt för att skapa en ram för videon.
  5. Spara den ändrade presentationen.

Denna Python‑kod visar hur du lägger till en lokalt lagrad video i en presentation:

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()

Alternativt kan du lägga till en video genom att skicka dess filsökväg direkt till metoden 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()

Skapa video‑ramar med video från webbkällor

Microsoft PowerPoint 2013 och nyare stöder YouTube‑videor i presentationer. Om videon du vill använda finns online (t.ex. på YouTube) kan du lägga till den i din presentation via dess webblänk.

  1. Skapa en instans av klassen Presentation.
  2. Hämta en referens till en bild efter dess index.
  3. Lägg till ett VideoFrame-objekt och skicka länken till videon.
  4. Ange en miniatyrbild för video‑ramen.
  5. Spara presentationen.

Denna Python‑kod visar hur du lägger till en video från webben på en bild i en PowerPoint‑presentation:

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)

    # Ladda miniatyrbilden.
    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()

Beskär en video‑ram

Aspose.Slides låter dig kontrollera vilken del av en video som spelas genom att ange värdena trim-from-start och trim-from-end via VideoFrame.setTrimFromStart och VideoFrame.setTrimFromEnd. Båda värdena anges i millisekunder och definierar hur mycket tid som hoppas över i början respektive slutet av videon. Dessa inställningar ändrar videouppspelningsinställningarna i presentationen; de kapar eller på annat sätt modifierar inte de inbäddade videodata.

Ställ in triminställningar

För att skapa en video‑ram och ställa in dess triminställningar:

  1. Skapa en instans av klassen Presentation.
  2. Lägg till ett Video-objekt i presentationen.
  3. Lägg till ett VideoFrame-objekt på en bild.
  4. Ange värdena trim-from-start och trim-from-end via VideoFrame.setTrimFromStart och VideoFrame.setTrimFromEnd.
  5. Spara den ändrade presentationen.

Följande kodexempel hoppar över de första 2,5 sekunderna och den sista sekunden av en inbäddad video vid uppspelning:

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()

Läs triminställningar

För att granska befintliga triminställningar, läs in en presentation, hitta ett VideoFrame-objekt bland formerna på den första bilden och läs värdena via VideoFrame.getTrimFromStart och VideoFrame.getTrimFromEnd.

Följande kodexempel hittar den första video‑ramen på den första bilden och rapporterar dess triminställningar i millisekunder:

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()

Hantera video‑undertexter

Aspose.Slides låter dig hantera stängda undertexter för video‑ramar i PowerPoint‑presentationer. Undertexter lagras i WebVTT‑format och exponeras genom metoden VideoFrame.getCaptionTracks.

Lägg till undertexter till en video‑ram

För att lägga till undertexter till en video‑ram:

  1. Skapa en instans av klassen Presentation.
  2. Lägg till en video i presentationen.
  3. Lägg till ett VideoFrame-objekt på en bild.
  4. Använd CaptionsCollection som returneras av getCaptionTracks för att lägga till ett WebVTT‑undertextspår.
  5. Spara den ändrade presentationen.

Följande kod visar hur du lägger till undertexter till en video‑ram:

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)

    # Lägg till ett nytt undertextspår från en WebVTT-fil.
    video_frame.getCaptionTracks().add("English", "track.vtt")
    presentation.save("video_with_captions.pptx", SaveFormat.Pptx)
finally:
    presentation.dispose()

Klassen CaptionsCollection erbjuder även en överlagring som låter dig lägga till undertexter från en ström.

Extrahera undertexter från en video‑ram

För att extrahera undertexter från en video‑ram:

  1. Läs in presentationen som innehåller videon.
  2. Hitta mål‑VideoFrame-objektet.
  3. Iterera genom undertextspåren i CaptionsCollection.
  4. Spara varje undertextspår till en .vtt‑fil.

Följande kod visar hur du extraherar undertexter från en video‑ram:

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():
                # Spara undertextspåret till en WebVTT-fil.
                file_path = Path(str(caption_track.getCaptionId()) + ".vtt")
                caption_data = bytes(caption_track.getBinaryData())
                file_path.write_bytes(caption_data)
finally:
    presentation.dispose()

Varje Captions‑objekt exponerar undertextens identifierare, etikett, binära data och undertexttext som en UTF‑8‑sträng.

Ta bort undertexter från en video‑ram

För att ta bort undertexter från en video‑ram:

  1. Läs in presentationen som innehåller videon.
  2. Hämta mål‑VideoFrame-objektet.
  3. Ta bort undertextspår från CaptionsCollection.
  4. Spara den ändrade presentationen.

Följande kod visar hur du tar bort alla undertexter från en video‑ram:

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):
        # Ta bort alla undertexter från video-ramen.
        video_frame.getCaptionTracks().clear()
        presentation.save("video_without_captions.pptx", SaveFormat.Pptx)
    else:
        print("The shape is not a video frame.")
finally:
    presentation.dispose()

Om du bara behöver ta bort ett undertextspår, använd metoderna remove eller removeAt i stället för clear.

Extrahera video från bilder

Förutom att lägga till videor på bilder låter Aspose.Slides dig extrahera videor som är inbäddade i presentationer.

  1. Skapa en instans av klassen Presentation för att läsa in presentationen som innehåller videon.
  2. Iterera igenom alla Slide-objekt.
  3. Iterera igenom alla Shape-objekt för att hitta en VideoFrame.
  4. Spara videon till disk.

Denna Python‑kod visar hur du extraherar videon på en presentationsbild:

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

Vilka videouppspelningsparametrar kan ändras för en VideoFrame?

Du kan kontrollera playback mode (automatisk eller vid klick) och looping. Dessa alternativ är tillgängliga via egenskaperna för VideoFrame-objektet.

Påverkar tillägg av en video PPTX‑filens storlek?

Ja. När du bäddar in en lokal video inkluderas de binära data i dokumentet, så presentationens storlek växer proportionellt mot filens storlek. När du lägger till en online‑video infogas en länk och en miniatyrbild, vilket innebär att storleksökningen blir mindre.

Kan jag ersätta videon i en befintlig VideoFrame utan att ändra dess position och storlek?

Ja. Du kan byta ut video content i ramen samtidigt som du bevarar formens geometri; detta är ett vanligt scenario för att uppdatera media i en befintlig layout.

Kan innehållstypen (MIME) för en inbäddad video bestämmas?

Ja. En inbäddad video har en content type som du kan läsa och använda, till exempel när du sparar den till disk.