Gestire i fotogrammi video nelle presentazioni su Android
Introduzione
Un video ben posizionato 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:
- 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 l’interfaccia IVideo, l’interfaccia IVideoFrame e altri tipi pertinenti.
Creare un fotogramma video incorporato
Se il file video che desideri aggiungere alla tua diapositiva è memorizzato localmente, puoi creare un fotogramma video per incorporare il video nella tua presentazione.
- Crea un’istanza della classe Presentation.
- Ottieni un riferimento a una diapositiva tramite il suo indice.
- Aggiungi un oggetto IVideo e passa il percorso del file video per incorporare il video nella presentazione.
- Aggiungi un oggetto IVideoFrame per creare un fotogramma per il video.
- Salva la presentazione modificata.
// Istanzia la classe Presentation
Presentation pres = new Presentation("pres.pptx");
try {
// Carica il video
FileInputStream fileStream = new FileInputStream("Wildlife.mp4");
IVideo video = pres.getVideos().addVideo(fileStream, LoadingStreamBehavior.KeepLocked);
// Ottiene la prima diapositiva e aggiunge un videoframe
pres.getSlides().get_Item(0).getShapes().addVideoFrame(10, 10, 150, 250, video);
// Salva la presentazione su disco
pres.save("pres-with-video.pptx", SaveFormat.Pptx);
} catch (IOException e) {
} finally {
if (pres != null) pres.dispose();
}
In alternativa, puoi aggiungere un video passando direttamente il suo percorso file al metodo 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();
}
Creare un fotogramma 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 esempio su YouTube), puoi aggiungerlo alla tua presentazione tramite il suo link web.
- Crea un’istanza della classe Presentation
- Ottieni un riferimento a una diapositiva tramite il suo indice.
- Aggiungi un oggetto IVideo e passa il link al video.
- Imposta una miniatura per il fotogramma video.
- Salva la presentazione.
// Istanzia un oggetto Presentation che rappresenta un file di presentazione
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)
{
// Aggiunge un videoFrame
IVideoFrame videoFrame = pres.getSlides().get_Item(0).getShapes().addVideoFrame(
10, 10, 427, 240, "https://www.youtube.com/embed/" + videoID);
videoFrame.setPlayMode(VideoPlayModePreset.Auto);
// Carica la 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();
}
}
Ritagliare un fotogramma 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.setTrimFromStart e IVideoFrame.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.
Impostare le impostazioni di trim
Per creare un fotogramma video e impostarne le impostazioni di trim:
- Crea un’istanza della classe Presentation.
- Aggiungi un oggetto IVideo alla presentazione.
- Aggiungi un oggetto IVideoFrame a una diapositiva.
- Imposta i valori trim-from-start e trim-from-end tramite IVideoFrame.setTrimFromStart e IVideoFrame.setTrimFromEnd.
- Salva la presentazione modificata.
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();
}
Leggere le impostazioni di trim
Per ispezionare le impostazioni di trim esistenti, carica una presentazione, trova un oggetto IVideoFrame tra le forme nella prima diapositiva e leggi i valori tramite IVideoFrame.getTrimFromStart e IVideoFrame.getTrimFromEnd.
Il seguente esempio di codice trova il primo fotogramma video nella prima diapositiva e riporta le sue impostazioni di trim in millisecondi:
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();
}
Gestire i sottotitoli video
Aspose.Slides consente di gestire i sottotitoli chiusi per i fotogrammi video nelle presentazioni PowerPoint. I sottotitoli sono memorizzati in formato WebVTT e sono esposti tramite il metodo IVideoFrame.getCaptionTracks.
Aggiungere sottotitoli a un fotogramma video
Per aggiungere sottotitoli a un fotogramma video:
- Crea un’istanza della classe Presentation.
- Aggiungi un video alla presentazione.
- Aggiungi un oggetto IVideoFrame a una diapositiva.
- Utilizza l'ICaptionsCollection restituita da getCaptionTracks per aggiungere una traccia di sottotitoli WebVTT.
- Salva la presentazione modificata.
Il seguente codice mostra come aggiungere sottotitoli a un fotogramma video:
Presentation presentation = new Presentation();
try {
byte[] videoData = // "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);
// Aggiunge una nuova traccia di sottotitoli da un file WebVTT.
videoFrame.getCaptionTracks().add("English", "track.vtt");
presentation.save("video_with_captions.pptx", SaveFormat.Pptx);
} finally {
presentation.dispose();
}
L’interfaccia ICaptionsCollection fornisce anche una sovraccarico che consente di aggiungere sottotitoli da uno stream.
Estrarre i sottotitoli da un fotogramma video
Per estrarre i sottotitoli da un fotogramma video:
- Carica la presentazione che contiene il video.
- Trova l’oggetto IVideoFrame di destinazione.
- Itera attraverso le tracce di sottotitoli restituite da getCaptionTracks.
- Salva ogni traccia di sottotitoli in un file
.vtt.
Il seguente codice mostra come estrarre i sottotitoli da un fotogramma video:
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 la traccia di sottotitoli in un file WebVTT.
FileOutputStream outputStream = new FileOutputStream(captionTrack.getCaptionId() + ".vtt");
outputStream.write(captionTrack.getBinaryData());
outputStream.close();
}
}
}
} finally {
presentation.dispose();
}
Ogni oggetto ICaptions espone l’identificatore del sottotitolo, l’etichetta, i dati binari e i dati del sottotitolo come stringa UTF-8.
Rimuovere i sottotitoli da un fotogramma video
Per rimuovere i sottotitoli da un fotogramma video:
- Carica la presentazione che contiene il video.
- Ottieni l’oggetto IVideoFrame di destinazione.
- Rimuovi le tracce di sottotitoli dalla collezione restituita da getCaptionTracks.
- Salva la presentazione modificata.
Il seguente codice mostra come rimuovere tutti i sottotitoli da un fotogramma video:
Presentation presentation = new Presentation("video_with_captions.pptx");
try {
ISlide slide = presentation.getSlides().get_Item(0);
IVideoFrame videoFrame = (IVideoFrame) slide.getShapes().get_Item(0);
// Rimuove tutti i sottotitoli dal fotogramma video.
videoFrame.getCaptionTracks().clear();
presentation.save("video_without_captions.pptx", SaveFormat.Pptx);
} finally {
presentation.dispose();
}
Se devi rimuovere solo una traccia di sottotitoli, usa i metodi remove o removeAt invece di clear.
Estrarre il video da una diapositiva
Oltre ad aggiungere video alle diapositive, Aspose.Slides consente di estrarre i video incorporati nelle presentazioni.
- Crea un’istanza della classe Presentation per caricare la presentazione che contiene il video.
- Itera attraverso tutti gli oggetti ISlide.
- Itera attraverso tutti gli oggetti IShape per trovare un VideoFrame.
- Salva il video su disco.
// Instanzia un oggetto Presentation che rappresenta un file di presentazione
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();
// Ottiene l'estensione del file
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
Quali parametri di riproduzione video possono essere modificati per un VideoFrame?
Puoi 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 sono inclusi nel documento, quindi la dimensione della presentazione cresce proporzionalmente alla dimensione del file. Quando aggiungi un video online, vengono incorporati un link e una miniatura, quindi l’aumento di dimensione è minore.
Posso sostituire il video in un VideoFrame esistente senza cambiare la sua posizione e dimensione?
Sì. Puoi scambiare il contenuto video all’interno del fotogramma 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.