Gestire i frame video nelle presentazioni in .NET

Introduzione

Un video posizionato in modo appropriato in una presentazione può rendere il tuo messaggio più convincente e aumentare il livello di coinvolgimento del pubblico.

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

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

Per consentirti di aggiungere video (oggetti video) a una presentazione, Aspose.Slides fornisce l’interfaccia IVideo , l’interfaccia IVideoFrame e altri tipi pertinenti.

Crea un frame video incorporato

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

  1. Crea un’istanza della classe Presentation.
  2. Ottieni il riferimento a una diapositiva tramite il suo indice.
  3. Aggiungi un oggetto IVideo e passa il percorso del file video per incorporare il video nella presentazione.
  4. Aggiungi un oggetto IVideoFrame per creare un frame per il video.
  5. Salva la presentazione modificata.
// Istanzia la classe Presentation
using (Presentation pres = new Presentation("pres.pptx"))
{
    // Carica il video
    using (FileStream fileStream = new FileStream("Wildlife.mp4", FileMode.Open, FileAccess.Read))
    {
        IVideo video = pres.Videos.AddVideo(fileStream, LoadingStreamBehavior.KeepLocked);
        
        // Ottiene la prima diapositiva e aggiunge un frame video
        pres.Slides[0].Shapes.AddVideoFrame(10, 10, 150, 250, video);
        
        // Salva la presentazione su disco
        pres.Save("pres-with-video.pptx", SaveFormat.Pptx);
    }
}

In alternativa, è possibile aggiungere un video passando direttamente il suo percorso file al metodo AddVideoFrame:

using (Presentation pres = new Presentation())
{
    ISlide sld = pres.Slides[0];
    IVideoFrame vf = sld.Shapes.AddVideoFrame(50, 150, 300, 150, "video1.avi");
}

Crea un frame video con video da una fonte web

Le versioni più recenti di Microsoft PowerPoint supportano i video online nelle presentazioni. Se il video che desideri utilizzare è disponibile online (ad es. su YouTube), puoi aggiungerlo alla presentazione tramite il suo collegamento web.

  1. Crea un’istanza della classe Presentation.
  2. Ottieni il riferimento a una diapositiva tramite il suo indice.
  3. Aggiungi un oggetto IVideo e passa il collegamento al video.
  4. Imposta una miniatura per il frame video.
  5. Salva la presentazione.
public static void Run()
{
    // Istanzia un oggetto Presentation che rappresenta un file di presentazione 
    using (Presentation pres = new Presentation())
    {
        AddVideoFromYouTube(pres, "Tj75Arhq5ho");
        pres.Save("AddVideoFrameFromWebSource_out.pptx", SaveFormat.Pptx);
    }
}

private static void AddVideoFromYouTube(Presentation pres, string videoId)
{
    // Aggiunge un VideoFrame
    IVideoFrame videoFrame = pres.Slides[0].Shapes.AddVideoFrame(10, 10, 427, 240, "https://www.youtube.com/embed/" + videoId);
    videoFrame.PlayMode = VideoPlayModePreset.Auto;

    // Carica la miniatura
    using (WebClient client = new WebClient())
    {
        string thumbnailUri = "http://img.youtube.com/vi/" + videoId + "/hqdefault.jpg";
        videoFrame.PictureFormat.Picture.Image = pres.Images.AddImage(client.DownloadData(thumbnailUri));
    }
}

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 IVideoFrame.TrimFromStart e IVideoFrame.TrimFromEnd. 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 impostare le sue impostazioni di ritaglio:

  1. Crea un’istanza della classe Presentation.
  2. Aggiungi un oggetto IVideo alla presentazione.
  3. Aggiungi un oggetto IVideoFrame a una diapositiva.
  4. Imposta i valori trim-from-start e trim-from-end tramite IVideoFrame.TrimFromStart e IVideoFrame.TrimFromEnd.
  5. Salva la presentazione modificata.
using var presentation = new Presentation();

var videoData = File.ReadAllBytes("video.mp4");
var video = presentation.Videos.AddVideo(videoData);

var slide = presentation.Slides[0];
var videoFrame = slide.Shapes.AddVideoFrame(50, 50, 640, 360, video);

videoFrame.TrimFromStart = 2500f;
videoFrame.TrimFromEnd = 1000f;

presentation.Save("video_with_trim.pptx", SaveFormat.Pptx);

Leggi le impostazioni di ritaglio

Per ispezionare le impostazioni di ritaglio esistenti, carica una presentazione, trova un oggetto IVideoFrame tra le forme nella prima diapositiva e leggi i valori tramite IVideoFrame.TrimFromStart e IVideoFrame.TrimFromEnd.

using var presentation = new Presentation("video_with_trim.pptx");

var slide = presentation.Slides[0];
foreach (var shape in slide.Shapes)
{
    if (shape is IVideoFrame videoFrame)
    {
        var trimFromStart = videoFrame.TrimFromStart;
        var trimFromEnd = videoFrame.TrimFromEnd;

        Console.WriteLine($"Trim from start: {trimFromStart} ms");
        Console.WriteLine($"Trim from end: {trimFromEnd} ms");

        break;
    }
}

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 esposti tramite la proprietà IVideoFrame.CaptionTracks.

Aggiungi i sottotitoli a un frame video

  1. Crea un’istanza della classe Presentation.
  2. Aggiungi un video alla presentazione.
  3. Aggiungi un oggetto IVideoFrame a una diapositiva.
  4. Utilizza la collezione CaptionTracks per aggiungere una traccia di sottotitoli WebVTT.
  5. Salva la presentazione modificata.
using (Presentation presentation = new Presentation())
{
    byte[] videoData = File.ReadAllBytes("video.mp4");
    IVideo video = presentation.Videos.AddVideo(videoData);

    ISlide slide = presentation.Slides[0];
    IVideoFrame videoFrame = slide.Shapes.AddVideoFrame(0, 0, 100, 100, video);

    // Aggiunge una nuova traccia di sottotitoli da un file WebVTT.
    videoFrame.CaptionTracks.Add("English", "track.vtt");

    presentation.Save("video_with_captions.pptx", SaveFormat.Pptx);
}

L’interfaccia ICaptionsCollection fornisce anche un overload che consente di aggiungere sottotitoli da uno stream.

Estrai i sottotitoli da un frame video

  1. Carica la presentazione che contiene il video.
  2. Trova l’oggetto IVideoFrame di destinazione.
  3. Itera attraverso la collezione CaptionTracks.
  4. Salva ogni traccia di sottotitolo in un file .vtt.
using (Presentation presentation = new Presentation("video_with_captions.pptx"))
{
    ISlide slide = presentation.Slides[0];
    foreach (IShape shape in slide.Shapes)
    {
        if (shape is IVideoFrame videoFrame)
        {
            foreach (ICaptions captionTrack in videoFrame.CaptionTracks)
            {
                // Salva la traccia di sottotitoli in un file WebVTT.
                string filePath = $"{captionTrack.CaptionId}.vtt";
                File.WriteAllBytes(filePath, captionTrack.BinaryData);
            }
        }
    }
}

Ogni oggetto ICaptions 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

  1. Carica la presentazione che contiene il video.
  2. Ottieni l’oggetto IVideoFrame di destinazione.
  3. Rimuovi le tracce di sottotitoli dalla collezione CaptionTracks.
  4. Salva la presentazione modificata.
using (Presentation presentation = new Presentation("video_with_captions.pptx"))
{
    ISlide slide = presentation.Slides[0];
    IVideoFrame videoFrame = slide.Shapes[0] as IVideoFrame;

    // Rimuove tutti i sottotitoli dal frame video.
    videoFrame.CaptionTracks.Clear();

    presentation.Save("video_without_captions.pptx", SaveFormat.Pptx);
}

Se devi rimuovere solo una traccia di sottotitoli, utilizza i metodi Remove o RemoveAt invece di Clear.

Estrai video da una diapositiva

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 ISlide.
  3. Itera attraverso tutti gli oggetti IShape per trovare un VideoFrame.
  4. Salva il video su disco.
// Istanzia un oggetto Presentation che rappresenta un file di presentazione 
Presentation presentation = new Presentation("Video.pptx");

// Itera attraverso le diapositive
foreach (ISlide slide in presentation.Slides)
{
    // Itera attraverso le forme
    foreach (IShape shape in presentation.Slides[0].Shapes)
    {
        // Salva il video su disco una volta trovato il VideoFrame contenente il video
        if (shape is VideoFrame)
        {
            IVideoFrame vf = shape as IVideoFrame;
            String type = vf.EmbeddedVideo.ContentType;
            int ss = type.LastIndexOf('/');
            type = type.Remove(0, type.LastIndexOf('/') + 1);
            Byte[] buffer = vf.EmbeddedVideo.BinaryData;
            using (FileStream stream = new FileStream("NewVideo_out." + type, FileMode.Create, FileAccess.Write, FileShare.Read))
            {                                                     
                stream.Write(buffer, 0, buffer.Length);
            }
        }
    }
}

FAQ

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

Puoi controllare la playback mode (auto o on click) 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 proporzionalmente alla dimensione del file. Quando aggiungi un video online, vengono incorporati un collegamento e una miniatura, perciò l’aumento di dimensione è minore.

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

Sì. È possibile scambiare il video content all’interno del frame mantenendo 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 content type che puoi leggere e utilizzare, ad esempio quando lo salvi su disco.