Gestire i frame video nelle presentazioni usando Python

Introduzione

Un video posizionato correttamente in una presentazione può rendere il tuo messaggio più convincente e aumentare i livelli di coinvolgimento del pubblico.

PowerPoint consente di aggiungere video a una diapositiva in una presentazione in due modi:

  • Aggiungere o incorporare un video locale (memorizzato sul tuo computer)
  • Aggiungere un video online (da una fonte web come YouTube).

Per consentirti di aggiungere video (oggetti video) a una presentazione, Aspose.Slides fornisce la classe Video , la classe VideoFrame e altri tipi rilevanti.

Crea frame video incorporati

Se il file video che desideri aggiungere alla diapositiva è memorizzato localmente, puoi creare un frame video per incorporare il video nella tua presentazione.

  1. Crea un’istanza della classe Presentation .
  2. Ottieni un riferimento a una diapositiva tramite il suo indice.
  3. Aggiungi un oggetto Video e passa i dati del file video per incorporare il video nella presentazione.
  4. Aggiungi un oggetto VideoFrame per creare un frame per il video.
  5. Salva la presentazione modificata.

Questo codice Python mostra come aggiungere un video memorizzato localmente a una presentazione:

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

In alternativa, puoi aggiungere un video passando direttamente il percorso del file al metodo 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()

Crea frame video con video da fonti web

Microsoft PowerPoint 2013 e versioni successive supportano i video di YouTube nelle presentazioni. Se il video che desideri utilizzare è disponibile online (ad esempio su YouTube), puoi aggiungerlo alla tua presentazione tramite il suo collegamento web.

  1. Crea un’istanza della classe Presentation .
  2. Ottieni un riferimento a una diapositiva tramite il suo indice.
  3. Aggiungi un oggetto VideoFrame e passa il collegamento al video.
  4. Imposta una miniatura per il frame video.
  5. Salva la presentazione.

Questo codice Python mostra come aggiungere un video dal web a una diapositiva in una presentazione PowerPoint:

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)

    # Carica la miniatura.
    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()

Ritaglia un frame video

Aspose.Slides consente di controllare quale parte di un video viene riprodotta impostando i valori trim-from-start e trim-from-end tramite VideoFrame.setTrimFromStart e VideoFrame.setTrimFromEnd . Entrambi i valori sono specificati in millisecondi e definiscono quanto tempo viene saltato dall’inizio e dalla fine del video, rispettivamente. Queste impostazioni modificano le impostazioni di riproduzione del video nella presentazione; non tagliano né modificano i dati binari del video incorporato.

Imposta le impostazioni di ritaglio

Per creare un frame video e impostarne le impostazioni di ritaglio:

  1. Crea un’istanza della classe Presentation .
  2. Aggiungi un oggetto Video alla presentazione.
  3. Aggiungi un oggetto VideoFrame a una diapositiva.
  4. Imposta i valori trim-from-start e trim-from-end tramite VideoFrame.setTrimFromStart e VideoFrame.setTrimFromEnd .
  5. Salva la presentazione modificata.

Il seguente esempio di codice salta i primi 2,5 secondi e l’ultimo secondo di un video incorporato durante la riproduzione:

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

Leggi le impostazioni di ritaglio

Per ispezionare le impostazioni di ritaglio esistenti, carica una presentazione, trova un oggetto VideoFrame tra le forme della prima diapositiva e leggi i valori tramite VideoFrame.getTrimFromStart e VideoFrame.getTrimFromEnd .

Il seguente esempio di codice trova il primo frame video sulla prima diapositiva e ne riporta le impostazioni di ritaglio in millisecondi:

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

Gestisci i sottotitoli video

Aspose.Slides consente di gestire i sottotitoli chiusi per i frame video nelle presentazioni PowerPoint. I sottotitoli sono memorizzati nel formato WebVTT e sono accessibili tramite il metodo VideoFrame.getCaptionTracks .

Aggiungi sottotitoli a un frame video

Per aggiungere sottotitoli a un frame video:

  1. Crea un’istanza della classe Presentation .
  2. Aggiungi un video alla presentazione.
  3. Aggiungi un oggetto VideoFrame a una diapositiva.
  4. Usa la CaptionsCollection restituita da getCaptionTracks per aggiungere una traccia di sottotitoli WebVTT.
  5. Salva la presentazione modificata.

Il seguente codice mostra come aggiungere sottotitoli a un frame video:

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)

    # Aggiungi una nuova traccia di sottotitoli da un file WebVTT.
    video_frame.getCaptionTracks().add("English", "track.vtt")
    presentation.save("video_with_captions.pptx", SaveFormat.Pptx)
finally:
    presentation.dispose()

La classe CaptionsCollection fornisce anche un overload che consente di aggiungere sottotitoli da uno stream.

Estrai i sottotitoli da un frame video

Per estrarre i sottotitoli da un frame video:

  1. Carica la presentazione che contiene il video.
  2. Trova l’oggetto VideoFrame di destinazione.
  3. Itera attraverso le tracce di sottotitoli nella CaptionsCollection .
  4. Salva ogni traccia di sottotitoli in un file .vtt .

Il seguente codice mostra come estrarre i sottotitoli da un frame video:

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():
                # Salva la traccia di sottotitoli in un file WebVTT.
                file_path = Path(str(caption_track.getCaptionId()) + ".vtt")
                caption_data = bytes(caption_track.getBinaryData())
                file_path.write_bytes(caption_data)
finally:
    presentation.dispose()

Ogni oggetto Captions espone l’identificatore del sottotitolo, l’etichetta, i dati binari e il testo del sottotitolo come stringa UTF‑8.

Rimuovi i sottotitoli da un frame video

Per rimuovere i sottotitoli da un frame video:

  1. Carica la presentazione che contiene il video.
  2. Ottieni l’oggetto VideoFrame di destinazione.
  3. Rimuovi le tracce di sottotitoli dalla CaptionsCollection .
  4. Salva la presentazione modificata.

Il seguente codice mostra come rimuovere tutti i sottotitoli da un frame video:

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):
        # Rimuovi tutti i sottotitoli dal frame video.
        video_frame.getCaptionTracks().clear()
        presentation.save("video_without_captions.pptx", SaveFormat.Pptx)
    else:
        print("The shape is not a video frame.")
finally:
    presentation.dispose()

Se devi rimuovere solo una traccia di sottotitoli, usa i metodi remove o removeAt invece di clear .

Estrai video dalle diapositive

Oltre ad aggiungere video alle diapositive, Aspose.Slides consente di estrarre i video incorporati nelle presentazioni.

  1. Crea un’istanza della classe Presentation per caricare la presentazione contenente il video.
  2. Itera attraverso tutti gli oggetti Slide .
  3. Itera attraverso tutti gli oggetti Shape per trovare un VideoFrame .
  4. Salva il video su disco.

Questo codice Python mostra come estrarre il video da una diapositiva di una presentazione:

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

Quali parametri di riproduzione video possono essere modificati per un VideoFrame?

È possibile controllare la modalità di riproduzione (auto o al clic) e il looping. Queste opzioni sono disponibili tramite le proprietà dell’oggetto VideoFrame .

L’aggiunta di un video influisce sulla dimensione del file PPTX?

Sì. Quando incorpori un video locale, i dati binari vengono inclusi nel documento, quindi la dimensione della presentazione cresce in proporzione alle dimensioni del file. Quando aggiungi un video online, vengono incorporati un collegamento e una miniatura, quindi l’aumento di dimensione è minore.

Posso sostituire il video in un VideoFrame esistente senza modificare la sua posizione e dimensione?

Sì. Puoi scambiare il contenuto video all’interno del frame mantenendo intatta la geometria della forma; questo è uno scenario comune per aggiornare i media in un layout esistente.

È possibile determinare il tipo di contenuto (MIME) di un video incorporato?

Sì. Un video incorporato ha un tipo di contenuto che puoi leggere e utilizzare, ad esempio quando lo salvi su disco.