Gerenciar Quadros de Vídeo em Apresentações no .NET

Introdução

Os vídeos podem ajudar a explicar ideias e envolver o público. Aspose.Slides for .NET permite adicionar quadros de vídeo aos slides, ajustar as configurações de reprodução, gerenciar legendas e extrair dados de vídeo incorporados.

PowerPoint oferece suporte a vídeos locais e links para vídeos online, como vídeos do YouTube.

Para representar dados de vídeo e quadros de vídeo, Aspose.Slides fornece a interface IVideo , a interface IVideoFrame e outros tipos relevantes.

Criar um Quadro de Vídeo Incorporado

Se o arquivo de vídeo que você deseja adicionar ao slide estiver armazenado localmente, você pode criar um quadro de vídeo para incorporar o vídeo na sua apresentação.

Este exemplo incorpora um vídeo local no primeiro slide de uma apresentação existente e salva o resultado. As coordenadas e dimensões do quadro estão em pontos. O fluxo permanece aberto até que a gravação termine porque LoadingStreamBehavior.KeepLocked o mantém bloqueado enquanto a apresentação o utiliza.

using System.IO;
using Aspose.Slides;
using Aspose.Slides.Export;

using var presentation = new Presentation("presentation.pptx");
var slide = presentation.Slides[0];

using var videoStream = File.OpenRead("video.mp4");
var video = presentation.Videos.AddVideo(videoStream, LoadingStreamBehavior.KeepLocked);
slide.Shapes.AddVideoFrame(10, 10, 150, 250, video);

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

Você também pode passar um caminho de vídeo local diretamente para AddVideoFrame. Este exemplo incorpora o vídeo no primeiro slide de uma nova apresentação. O vídeo deve permanecer acessível até que a apresentação seja salva.

using Aspose.Slides;
using Aspose.Slides.Export;

using var presentation = new Presentation();
var slide = presentation.Slides[0];

slide.Shapes.AddVideoFrame(50, 150, 300, 150, "video.avi");

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

Definir Volume de Vídeo Precisamente

No Aspose.Slides for .NET 26.11 ou posterior, IVideoFrame.VolumeValue define uma porcentagem de ponto flutuante de 0 a 100. Use-o quando as predefinições de Volume são muito grosseiras. Por exemplo, 75.5f solicita 75,5 % de volume.

Este exemplo requer Aspose.Slides for .NET 26.11 ou posterior e um video.mp4 local. Ele incorpora o vídeo, inicializa explicitamente a reprodução, salva a apresentação e lê a porcentagem armazenada de volta.

using System;
using System.IO;
using System.Linq;
using Aspose.Slides;
using Aspose.Slides.Export;

var volume = 75.5f;
if (float.IsNaN(volume) || float.IsInfinity(volume) || volume < 0 || volume > 100)
{
    Console.WriteLine("Use a finite volume from 0 to 100.");
    return;
}

using (var presentation = new Presentation())
{
    var videoBytes = File.ReadAllBytes("video.mp4");
    var video = presentation.Videos.AddVideo(videoBytes);
    var frame = presentation.Slides[0].Shapes.AddVideoFrame(50, 50, 320, 180, video);
    frame.PlayMode = VideoPlayModePreset.Auto;
    frame.VolumeValue = volume;
    presentation.Save("video-volume.pptx", SaveFormat.Pptx);
}

using var saved = new Presentation("video-volume.pptx");
var savedFrame = saved.Slides[0].Shapes.OfType<IVideoFrame>().First();
Console.WriteLine(savedFrame.VolumeValue);

Valide a entrada você mesmo; não confie no setter para rejeitar valores fora do intervalo documentado. As predefinições Low, Medium e Loud correspondem a 20, 50 e 80 na 26.11. Definir uma predefinição pode substituir uma porcentagem anterior, portanto atribua a porcentagem por último quando precisar de um valor exato. Use AudioVolumeMode.Mute para a configuração explícita de mudo; zero numérico e a enumeração de predefinição não são estados intercambiáveis.

Defina explicitamente PlayMode ao configurar um vídeo vinculado também, e mantenha seu arquivo de mídia disponível para o visualizador. Salvar e reabrir verifica a configuração armazenada; a reprodução real e a intensidade dependem do player da apresentação e de suas configurações de áudio.

Criar um Quadro de Vídeo com Vídeo de Fonte Web

Microsoft PowerPoint oferece suporte a vídeos online em apresentações. Você pode criar um quadro de vídeo que vincula a um vídeo online, como um vídeo do YouTube.

Este exemplo adiciona um link de vídeo do YouTube e uma miniatura ao primeiro slide. Substitua o identificador do vídeo para usar outro vídeo. A configuração PlayMode solicita reprodução automática. Baixar a miniatura e reproduzir o vídeo requer acesso à internet. O visualizador da apresentação também deve oferecer suporte à reprodução de vídeo online.

using System.Net.Http;
using Aspose.Slides;
using Aspose.Slides.Export;

using var presentation = new Presentation();
var slide = presentation.Slides[0];

using var httpClient = new HttpClient();

var videoId = "aqz-KE-bpKQ";
var videoUrl = $"https://www.youtube.com/embed/{videoId}";
var videoFrame = slide.Shapes.AddVideoFrame(10, 10, 427, 240, videoUrl);
videoFrame.PlayMode = VideoPlayModePreset.Auto;

var thumbnailUrl = $"https://img.youtube.com/vi/{videoId}/hqdefault.jpg";
var thumbnailData = httpClient.GetByteArrayAsync(thumbnailUrl).GetAwaiter().GetResult();
var thumbnail = presentation.Images.AddImage(thumbnailData);
videoFrame.PictureFormat.Picture.Image = thumbnail;

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

Reproduzir um Vídeo em Modo de Tela Cheia

Em uma apresentação de treinamento, você pode reproduzir uma demonstração de software em modo de tela cheia para que o público veja os detalhes. Defina FullScreenMode como true para habilitar esse comportamento durante a reprodução.

Este exemplo abre uma apresentação, encontra o primeiro IVideoFrame no primeiro slide e habilita a reprodução em tela cheia. A apresentação de entrada deve conter ao menos um slide com um quadro de vídeo existente no primeiro slide.

using Aspose.Slides;
using Aspose.Slides.Export;

using var presentation = new Presentation("training.pptx");
var slide = presentation.Slides[0];

foreach (var shape in slide.Shapes)
{
    if (shape is IVideoFrame videoFrame)
    {
        videoFrame.FullScreenMode = true;
        break;
    }
}

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

A reprodução em tela cheia controla como o vídeo é exibido. Independentemente disso, PlayMode controla se ele começa automaticamente ou ao clicar, e PlayLoopMode controla se ele se repete. Para escolher o comportamento de início, defina o modo de reprodução para VideoPlayModePreset.Auto or VideoPlayModePreset.OnClick. O exemplo preserva as configurações de início e de loop existentes.

Retroceder um Vídeo Após a Reprodução

Em uma apresentação de treinamento, retornar um vídeo de demonstração ao início o deixa pronto para o apresentador reproduzir novamente. Defina RewindVideo como true para devolver o vídeo ao começo após a reprodução terminar.

Este exemplo abre uma apresentação, encontra o primeiro IVideoFrame no primeiro slide e habilita o retrocesso. Ele desabilita o loop para que a reprodução possa terminar e define a reprodução para iniciar ao clicar. A apresentação de entrada deve conter ao menos um slide com um quadro de vídeo existente no primeiro slide.

using Aspose.Slides;
using Aspose.Slides.Export;

using var presentation = new Presentation("training.pptx");
var slide = presentation.Slides[0];

foreach (var shape in slide.Shapes)
{
    if (shape is IVideoFrame videoFrame)
    {
        videoFrame.RewindVideo = true;
        videoFrame.PlayLoopMode = false;
        videoFrame.PlayMode = VideoPlayModePreset.OnClick;
        break;
    }
}

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

O retrocesso devolve o vídeo ao início sem iniciá-lo novamente. Em contraste, habilitar PlayLoopMode repete a reprodução automaticamente. Mantenha o loop desativado quando desejar que o vídeo termine e permaneça pronto para ser reproduzido novamente. PlayMode controla independentemente o início automático ou ao clicar; este exemplo usa VideoPlayModePreset.OnClick para que o apresentador decida quando a reprodução começa. Defina o modo de reprodução após a configuração do loop, como mostrado no exemplo. O retrocesso funciona independentemente de FullScreenMode.

Cortar um Quadro de Vídeo

Use IVideoFrame.TrimFromStart e IVideoFrame.TrimFromEnd para pular parte do início ou do fim de um vídeo durante a reprodução. Ambos os valores estão em milissegundos. O corte altera as configurações de reprodução sem modificar os dados de vídeo incorporados.

Definir Configurações de Corte

Este exemplo incorpora um vídeo local e pula os primeiros 2,5 segundos e o último segundo durante a reprodução. Use um vídeo com mais de 3,5 segundos para que reste um segmento reproduzível.

using System.IO;
using Aspose.Slides;
using Aspose.Slides.Export;

using var presentation = new Presentation();
var slide = presentation.Slides[0];

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

var videoFrame = slide.Shapes.AddVideoFrame(50, 50, 640, 360, video);
videoFrame.TrimFromStart = 2500f;
videoFrame.TrimFromEnd = 1000f;

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

Ler Configurações de Corte

Este exemplo imprime os valores de corte do primeiro quadro de vídeo no primeiro slide em milissegundos. A apresentação deve conter ao menos um slide. Se esse slide não possuir quadro de vídeo, nada é impresso. O exemplo anterior produz valores de 2500 e 1000.

using System;
using Aspose.Slides;

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)
    {
        Console.WriteLine($"Trim from start: {videoFrame.TrimFromStart} ms");
        Console.WriteLine($"Trim from end: {videoFrame.TrimFromEnd} ms");
        break;
    }
}

Gerenciar Legendas de Vídeo

Aspose.Slides permite que você gerencie legendas fechadas para quadros de vídeo em apresentações do PowerPoint. As legendas são armazenadas no formato WebVTT e são expostas por meio da propriedade IVideoFrame.CaptionTracks.

Adicionar Legendas a um Quadro de Vídeo

Este exemplo incorpora um vídeo local e adiciona uma faixa de legenda WebVTT rotulada English. Os timestamps das legendas devem corresponder ao vídeo. A apresentação salva inclui tanto o vídeo quanto suas legendas.

using System.IO;
using Aspose.Slides;
using Aspose.Slides.Export;

using var presentation = new Presentation();
var slide = presentation.Slides[0];

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

var videoFrame = slide.Shapes.AddVideoFrame(0, 0, 100, 100, video);
videoFrame.CaptionTracks.Add("English", "track.vtt");

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

A interface ICaptionsCollection também fornece uma sobrecarga que permite adicionar legendas a partir de um fluxo.

Extrair Legendas de um Quadro de Vídeo

Este exemplo salva todas as faixas de legenda dos quadros de vídeo no primeiro slide como arquivos WebVTT separados. Números sequenciais mantêm os arquivos de saída distintos. O console relata o número de faixas extraídas. A apresentação deve conter ao menos um slide.

using System;
using System.IO;
using Aspose.Slides;

using var presentation = new Presentation("video_with_captions.pptx");
var slide = presentation.Slides[0];

var trackCount = 0;
foreach (var shape in slide.Shapes)
{
    if (shape is IVideoFrame videoFrame)
    {
        foreach (var captionTrack in videoFrame.CaptionTracks)
        {
            trackCount++;
            var outputPath = $"captions_{trackCount}.vtt";
            File.WriteAllBytes(outputPath, captionTrack.BinaryData);
        }
    }
}

Console.WriteLine($"Caption tracks extracted: {trackCount}");

Cada objeto ICaptions expõe o identificador da legenda, rótulo, dados binários e o texto da legenda como uma string UTF‑8.

Remover Legendas de um Quadro de Vídeo

Este exemplo remove todas as legendas do quadro de vídeo na primeira posição de forma no primeiro slide e salva o resultado. Assume‑se que o slide e a forma existam e que a forma seja um quadro de vídeo.

using System;
using Aspose.Slides;
using Aspose.Slides.Export;

using var presentation = new Presentation("video_with_captions.pptx");
var slide = presentation.Slides[0];

var videoFrame = (IVideoFrame) slide.Shapes[0];
videoFrame.CaptionTracks.Clear();

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

Se precisar remover apenas uma faixa de legenda, use os métodos Remove ou RemoveAt em vez de Clear.

Extrair Vídeo de um Slide

Além de adicionar vídeos aos slides, Aspose.Slides permite extrair vídeos incorporados em apresentações.

Este exemplo extrai vídeos incorporados de cada slide em arquivos binários numerados e separados. Vídeos vinculados são ignorados porque não possuem dados incorporados. O console imprime o tipo MIME de cada vídeo e a contagem total. A saída usa a extensão genérica .bin; altere-a para corresponder ao tipo de mídia relatado quando necessário.

using System;
using System.IO;
using Aspose.Slides;

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

var videoCount = 0;
foreach (var slide in presentation.Slides)
{
    foreach (var shape in slide.Shapes)
    {
        if (shape is IVideoFrame videoFrame)
        {
            var video = videoFrame.EmbeddedVideo;
            if (video == null)
            {
                Console.WriteLine("Skipped a linked video: no embedded data is available.");
                continue;
            }

            videoCount++;
            var outputPath = $"extracted_video_{videoCount}.bin";
            File.WriteAllBytes(outputPath, video.BinaryData);
            Console.WriteLine($"Video {videoCount}: {video.ContentType}");
        }
    }
}

Console.WriteLine($"Embedded videos extracted: {videoCount}");

FAQ

Quais parâmetros de reprodução de vídeo podem ser alterados para um quadro de vídeo?

Você pode controlar o modo de reprodução (automático ou ao clicar) e a repetição. Essas opções estão disponíveis através das propriedades do objeto VideoFrame.

Adicionar um vídeo afeta o tamanho do arquivo PPTX?

Sim. Ao incorporar um vídeo local, os dados binários são incluídos no documento, de modo que o tamanho da apresentação cresce proporcionalmente ao tamanho do arquivo. Ao vincular a um vídeo online e adicionar uma miniatura, a apresentação armazena o link e a imagem de pré‑visualização em vez dos dados do vídeo, portanto o aumento de tamanho costuma ser menor.

Posso substituir o vídeo em um quadro de vídeo existente sem alterar sua posição e tamanho?

Sim. Você pode trocar o conteúdo de vídeo dentro do quadro preservando a geometria da forma; esse é um cenário comum para atualizar mídia em um layout existente.

É possível determinar o tipo de conteúdo (MIME) de um vídeo incorporado?

Sim. Um vídeo incorporado possui um tipo de conteúdo que pode ser lido e usado, por exemplo, ao salvá‑lo em disco.