Gerenciar Quadros de Vídeo em Apresentações Usando Java

Introdução

Um vídeo bem colocado em uma apresentação pode tornar sua mensagem mais envolvente e aumentar os níveis de engajamento com seu público.

O PowerPoint permite que você adicione vídeos a um slide em uma apresentação de duas maneiras:

  • Adicionar ou incorporar um vídeo local (armazenado em sua máquina)
  • Adicionar um vídeo online (de uma fonte web como o YouTube).

Para permitir que você adicione vídeos (objetos de vídeo) a uma apresentação, o Aspose.Slides fornece as interfaces IVideo e IVideoFrame, além de outros tipos relevantes.

Criar Quadros de Vídeo Incorporados

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

  1. Crie uma instância da classe Presentation.
  2. Obtenha a referência de um slide através de seu índice.
  3. Adicione um objeto IVideo e passe o caminho do arquivo de vídeo para incorporar o vídeo na apresentação.
  4. Adicione um objeto IVideoFrame para criar um quadro para o vídeo.
  5. Salve a apresentação modificada.

Este código Java mostra como adicionar um vídeo armazenado localmente a uma apresentação:

// Instancia a classe Presentation
Presentation pres = new Presentation("pres.pptx");
try {
    // Carrega o vídeo
    FileInputStream fileStream = new FileInputStream("Wildlife.mp4");
    
    IVideo video = pres.getVideos().addVideo(fileStream, LoadingStreamBehavior.KeepLocked);

    // Obtém o primeiro slide e adiciona um videoframe
    pres.getSlides().get_Item(0).getShapes().addVideoFrame(10, 10, 150, 250, video);

    // Salva a apresentação no disco
    pres.save("pres-with-video.pptx", SaveFormat.Pptx);
} catch (IOException e) {
} finally {
    if (pres != null) pres.dispose();
}

Alternativamente, você pode adicionar um vídeo passando seu caminho de arquivo diretamente para o método addVideoFrame(float x, float y, float width, float height, IVideo video):

Presentation pres = new Presentation();
try {
	ISlide sld = pres.getSlides().get_Item(0);
	IVideoFrame vf = sld.getShapes().addVideoFrame(50, 150, 300, 150, "video1.avi");
} finally {
	if (pres != null) pres.dispose();
}

Criar Quadros de Vídeo com Vídeo de Fontes Web

O Microsoft PowerPoint 2013 e versões mais recentes suporta vídeos do YouTube em apresentações. Se o vídeo que você deseja usar está disponível online (por exemplo, no YouTube), você pode adicioná‑lo à sua apresentação por meio de seu link web.

  1. Crie uma instância da classe Presentation
  2. Obtenha a referência de um slide através de seu índice.
  3. Adicione um objeto IVideo e passe o link para o vídeo.
  4. Defina uma miniatura para o quadro de vídeo.
  5. Salve a apresentação.

Este código Java mostra como adicionar um vídeo da web a um slide em uma apresentação PowerPoint:

// Instancia um objeto Presentation que representa um arquivo de apresentação
Presentation pres = new Presentation();
try {
    addVideoFromYouTube(pres, "Tj75Arhq5ho");
    pres.save("out.pptx", SaveFormat.Pptx);
} finally {
    if (pres != null) pres.dispose();
}
private static void addVideoFromYouTube(Presentation pres, String videoID)
{
    // Adiciona um videoFrame
    IVideoFrame videoFrame = pres.getSlides().get_Item(0).getShapes().addVideoFrame(
            10, 10, 427, 240, "https://www.youtube.com/embed/" + videoID);
    videoFrame.setPlayMode(VideoPlayModePreset.Auto);

    // Carrega miniatura
    String thumbnailUri = "http://img.youtube.com/vi/" + videoID + "/hqdefault.jpg";
    URL url;

    try {
        url = new URL(thumbnailUri);
        videoFrame.getPictureFormat().getPicture().setImage(pres.getImages().addImage(url.openStream()));
    } catch (MalformedURLException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

Cortar um Quadro de Vídeo

O Aspose.Slides permite que você controle qual parte de um vídeo é reproduzida definindo os valores trim-from-start e trim-from-end através de IVideoFrame.setTrimFromStart e IVideoFrame.setTrimFromEnd. Ambos os valores são especificados em milissegundos e definem quanto tempo é pulado do início e do fim do vídeo, respectivamente. Essas configurações alteram as propriedades de reprodução do vídeo na apresentação; elas não cortam nem modificam de outra forma os dados binários do vídeo incorporado.

Definir Configurações de Corte

Para criar um quadro de vídeo e definir suas configurações de corte:

  1. Crie uma instância da classe Presentation.
  2. Adicione um objeto IVideo à apresentação.
  3. Adicione um objeto IVideoFrame a um slide.
  4. Defina os valores trim-from-start e trim-from-end através de IVideoFrame.setTrimFromStart e IVideoFrame.setTrimFromEnd.
  5. Salve a apresentação modificada.

Este exemplo de código pula os primeiros 2,5 segundos e o último segundo de um vídeo incorporado durante a reprodução:

Presentation presentation = new Presentation();
try {
    FileInputStream videoStream = new FileInputStream("video.mp4");
    try {
        IVideo video = presentation.getVideos().addVideo(
                videoStream, LoadingStreamBehavior.ReadStreamAndRelease);
        ISlide slide = presentation.getSlides().get_Item(0);
        IVideoFrame videoFrame = slide.getShapes().addVideoFrame(50, 50, 640, 360, video);

        videoFrame.setTrimFromStart(2500f);
        videoFrame.setTrimFromEnd(1000f);

        presentation.save("video_with_trim.pptx", SaveFormat.Pptx);
    } finally {
        videoStream.close();
    }
} finally {
    presentation.dispose();
}

Ler Configurações de Corte

Para inspecionar as configurações de corte existentes, carregue uma apresentação, encontre um objeto IVideoFrame entre as formas do primeiro slide e leia os valores através de IVideoFrame.getTrimFromStart e IVideoFrame.getTrimFromEnd.

Este exemplo de código encontra o primeiro quadro de vídeo no primeiro slide e relata suas configurações de corte em milissegundos:

Presentation presentation = new Presentation("video_with_trim.pptx");
try {
    ISlide slide = presentation.getSlides().get_Item(0);
    for (IShape shape : slide.getShapes()) {
        if (shape instanceof IVideoFrame) {
            IVideoFrame videoFrame = (IVideoFrame) shape;
            float trimFromStart = videoFrame.getTrimFromStart();
            float trimFromEnd = videoFrame.getTrimFromEnd();

            System.out.println("Trim from start: " + trimFromStart + " ms");
            System.out.println("Trim from end: " + trimFromEnd + " ms");
            break;
        }
    }
} finally {
    presentation.dispose();
}

Gerenciar Legendas de Vídeo

O Aspose.Slides permite que você gerencie legendas fechadas para quadros de vídeo em apresentações PowerPoint. As legendas são armazenadas no formato WebVTT e são expostas através do método IVideoFrame.getCaptionTracks.

Adicionar Legendas a um Quadro de Vídeo

Para adicionar legendas a um quadro de vídeo:

  1. Crie uma instância da classe Presentation.
  2. Adicione um vídeo à apresentação.
  3. Adicione um objeto IVideoFrame a um slide.
  4. Use a ICaptionsCollection retornada por getCaptionTracks para adicionar uma faixa de legenda WebVTT.
  5. Salve a apresentação modificada.

Este código mostra como adicionar legendas a um quadro de vídeo:

Presentation presentation = new Presentation();
try {
    byte[] videoData = Files.readAllBytes(Paths.get("video.mp4"));
    IVideo video = presentation.getVideos().addVideo(videoData);

    ISlide slide = presentation.getSlides().get_Item(0);
    IVideoFrame videoFrame = slide.getShapes().addVideoFrame(0, 0, 100, 100, video);

    // Adiciona uma nova faixa de legendas a partir de um arquivo WebVTT.
    videoFrame.getCaptionTracks().add("English", "track.vtt");

    presentation.save("video_with_captions.pptx", SaveFormat.Pptx);
} finally {
    presentation.dispose();
}

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

Para extrair legendas de um quadro de vídeo:

  1. Carregue a apresentação que contém o vídeo.
  2. Encontre o objeto IVideoFrame alvo.
  3. Itere pelas faixas de legenda na ICaptionsCollection.
  4. Salve cada faixa de legenda em um arquivo .vtt.

Este código mostra como extrair legendas de um quadro de vídeo:

Presentation presentation = new Presentation("video_with_captions.pptx");
try {
    ISlide slide = presentation.getSlides().get_Item(0);
    for (IShape shape : slide.getShapes()) {
        if (shape instanceof IVideoFrame) {
            IVideoFrame videoFrame = (IVideoFrame)shape;
            for (ICaptions captionTrack : videoFrame.getCaptionTracks()) {
                // Salva a faixa de legendas em um arquivo WebVTT.
                String filePath = captionTrack.getCaptionId().toString() + ".vtt";
                Files.write(Paths.get(filePath), captionTrack.getBinaryData());
            }
        }
    }
} finally {
    presentation.dispose();
}

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

Para remover legendas de um quadro de vídeo:

  1. Carregue a apresentação que contém o vídeo.
  2. Obtenha o objeto IVideoFrame alvo.
  3. Remova as faixas de legenda da ICaptionsCollection.
  4. Salve a apresentação modificada.

Este código mostra como remover todas as legendas de um quadro de vídeo:

Presentation presentation = new Presentation("video_with_captions.pptx");
try {
    ISlide slide = presentation.getSlides().get_Item(0);
    IVideoFrame videoFrame = (IVideoFrame)slide.getShapes().get_Item(0);

    // Remove todas as legendas do quadro de vídeo.
    videoFrame.getCaptionTracks().clear();

    presentation.save("video_without_captions.pptx", SaveFormat.Pptx);
} finally {
    presentation.dispose();
}

Se precisar remover apenas uma faixa de legenda, use os métodos remove ou removeAt em vez de clear.

Extrair Vídeo dos Slides

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

  1. Crie uma instância da classe Presentation para carregar a apresentação que contém o vídeo.
  2. Itere por todos os objetos ISlide.
  3. Itere por todos os objetos IShape para encontrar um VideoFrame.
  4. Salve o vídeo no disco.

Este código Java mostra como extrair o vídeo de um slide de apresentação:

// Instancia um objeto Presentation que representa um arquivo de apresentação 
Presentation pres = new Presentation("VideoSample.pptx");
try {
    for (ISlide slide : pres.getSlides()) 
    {
        for (IShape shape : slide.getShapes()) 
        {
            if (shape instanceof VideoFrame) 
            {
                IVideoFrame vf = (IVideoFrame) shape;
                String type = vf.getEmbeddedVideo().getContentType();
                int ss = type.lastIndexOf('-');
                byte[] buffer = vf.getEmbeddedVideo().getBinaryData();

                //Obtém a extensão do arquivo
                int charIndex = type.indexOf("/");
                type = type.substring(charIndex + 1);

                FileOutputStream fop = new FileOutputStream("testing2." + type);
                fop.write(buffer);
                fop.flush();
                fop.close();
            }
        }
    }
} catch (IOException e) {
} finally {
    if (pres != null) pres.dispose();
}

FAQ

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

Você pode controlar o modo de reprodução (automático ou ao clicar) e o looping. 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. Quando você incorpora um vídeo local, os dados binários são incluídos no documento, portanto o tamanho da apresentação aumenta proporcionalmente ao tamanho do arquivo. Quando você adiciona um vídeo online, um link e uma miniatura são incorporados, de modo que o aumento de tamanho é menor.

Posso substituir o vídeo em um VideoFrame 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; este é 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 no disco.