Converti presentazioni PowerPoint in video con .NET

Introduzione

Convertendo la tua presentazione PowerPoint o OpenDocument in video, ottieni:

Accessibilità aumentata: tutti i dispositivi, indipendentemente dalla piattaforma, sono dotati di lettori video per impostazione predefinita, rendendo più semplice per gli utenti aprire o riprodurre i video rispetto alle tradizionali applicazioni di presentazione.

Portata più ampia: i video ti consentono di raggiungere un pubblico più vasto e di presentare le informazioni in un formato più coinvolgente. Indagini e statistiche indicano che le persone preferiscono guardare e consumare contenuti video rispetto ad altre forme, rendendo il tuo messaggio più impattante.

In Aspose.Slides per .NET, abbiamo implementato il supporto per la conversione delle presentazioni in video.

  • Usa Aspose.Slides per .NET per generare fotogrammi dalle diapositive della presentazione a una frequenza di fotogrammi (FPS) specificata.
  • Quindi, usa un’utilità di terze parti come ffmpeg per compilare questi fotogrammi in un video.

Convertire una presentazione PowerPoint in video

  1. Usa il comando dotnet add package per aggiungere Aspose.Slides e la libreria FFMpegCore al tuo progetto:
    • esegui dotnet add package Aspose.Slides.NET --version 22.11.0
    • esegui dotnet add package FFMpegCore --version 4.8.0
  2. Scarica ffmpeg da qui.
  3. FFMpegCore richiede di specificare il percorso al ffmpeg scaricato (ad es., estratto in “C:\tools\ffmpeg”):
    GlobalFFOptions.Configure(new FFOptions { BinaryFolder = @"c:\tools\ffmpeg\bin" });
  1. Esegui il codice di conversione da PowerPoint a video.

Questo codice C# mostra come convertire una presentazione (contenente una forma e due effetti di animazione) in un video:

using System.Collections.Generic;
using Aspose.Slides;
using FFMpegCore; // utilizzerà i binari FFmpeg che abbiamo estratto in C:\tools\ffmpeg in precedenza.
using Aspose.Slides.Animation;

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

    // Aggiungi una forma sorridente e poi animala.
    IAutoShape smile = slide.Shapes.AddAutoShape(ShapeType.SmileyFace, 110, 20, 500, 500);

    IEffect effectIn = slide.Timeline.MainSequence.AddEffect(
        smile, EffectType.Fly, EffectSubtype.TopLeft, EffectTriggerType.AfterPrevious);

    IEffect effectOut = slide.Timeline.MainSequence.AddEffect(
        smile, EffectType.Fly, EffectSubtype.BottomRight, EffectTriggerType.AfterPrevious);

    effectIn.Timing.Duration = 2f;
    effectOut.PresetClassType = EffectPresetClassType.Exit;

    const int Fps = 33;
    List<string> frames = new List<string>();

    using (var animationsGenerator = new PresentationAnimationsGenerator(presentation))
    using (var player = new PresentationPlayer(animationsGenerator, Fps))
    {
        player.FrameTick += (sender, args) =>
        {
            string frame = $"frame_{(sender.FrameIndex):D4}.png";
            args.GetFrame().Save(frame);
            frames.Add(frame);
        };
        animationsGenerator.Run(presentation.Slides);
    }

    // Configura la cartella dei binari ffmpeg. Vedi questa pagina: https://github.com/rosenbjerg/FFMpegCore#installation
    GlobalFFOptions.Configure(new FFOptions { BinaryFolder = @"c:\tools\ffmpeg\bin" });

    // Converti i fotogrammi in un video webm.
    FFMpeg.JoinImageSequence("smile.webm", Fps, frames.Select(frame => ImageInfo.FromPath(frame)).ToArray());
}

Effetti video

Durante la conversione di una presentazione PowerPoint in video con Aspose.Slides per .NET, è possibile applicare vari effetti video per migliorare la qualità visiva del risultato. Questi effetti consentono di controllare l’aspetto delle diapositive nel video finale aggiungendo transizioni fluide, animazioni e altri elementi visivi. Questa sezione spiega le opzioni di effetto video disponibili e mostra come applicarle.

Le animazioni e le transizioni rendono le presentazioni più coinvolgenti e interessanti — e lo stesso vale per i video. Aggiungiamo un’altra diapositiva e una transizione al codice della presentazione precedente:

// Aggiungi una forma sorridente e animala.
// ...

// Aggiungi una nuova diapositiva e una transizione animata.
ISlide newSlide = presentation.Slides.AddEmptySlide(presentation.Slides[0].LayoutSlide);
newSlide.Background.Type = BackgroundType.OwnBackground;
newSlide.Background.FillFormat.FillType = FillType.Solid;
newSlide.Background.FillFormat.SolidFillColor.Color = Color.Indigo;
newSlide.SlideShowTransition.Type = TransitionType.Push;

Aspose.Slides supporta anche le animazioni di testo. In questo esempio, animiamo i paragrafi sugli oggetti in modo che appaiano uno dopo l’altro, con un intervallo di un secondo tra di essi:

using System.Collections.Generic;
using Aspose.Slides.Export;
using Aspose.Slides;
using FFMpegCore;
using Aspose.Slides.Animation;

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

    // Aggiungi testo e animazioni.
    IAutoShape autoShape = slide.Shapes.AddAutoShape(ShapeType.Rectangle, 210, 120, 300, 300);
    Paragraph para1 = new Paragraph();
    para1.Portions.Add(new Portion("Aspose Slides for .NET"));
    Paragraph para2 = new Paragraph();
    para2.Portions.Add(new Portion("Convert a PowerPoint presentation with text to video"));

    Paragraph para3 = new Paragraph();
    para3.Portions.Add(new Portion("paragraph by paragraph"));
    autoShape.TextFrame.Paragraphs.Add(para1);
    autoShape.TextFrame.Paragraphs.Add(para2);
    autoShape.TextFrame.Paragraphs.Add(para3);
    autoShape.TextFrame.Paragraphs.Add(new Paragraph());

    IEffect effect1 = slide.Timeline.MainSequence.AddEffect(
        para1, EffectType.Appear, EffectSubtype.None, EffectTriggerType.AfterPrevious);

    IEffect effect2 = slide.Timeline.MainSequence.AddEffect(
        para2, EffectType.Appear, EffectSubtype.None, EffectTriggerType.AfterPrevious);

    IEffect effect3 = slide.Timeline.MainSequence.AddEffect(
        para3, EffectType.Appear, EffectSubtype.None, EffectTriggerType.AfterPrevious);

    IEffect effect4 = slide.Timeline.MainSequence.AddEffect(
        para3, EffectType.Appear, EffectSubtype.None, EffectTriggerType.AfterPrevious);

    effect1.Timing.TriggerDelayTime = 1f;
    effect2.Timing.TriggerDelayTime = 1f;
    effect3.Timing.TriggerDelayTime = 1f;
    effect4.Timing.TriggerDelayTime = 1f;

    const int Fps = 33;
    List<string> frames = new List<string>();

    using (var animationsGenerator = new PresentationAnimationsGenerator(presentation))
    using (var player = new PresentationPlayer(animationsGenerator, Fps))
    {
        player.FrameTick += (sender, args) =>
        {
            string frame = $"frame_{(sender.FrameIndex):D4}.png";
            args.GetFrame().Save(frame);
            frames.Add(frame);
        };

        animationsGenerator.Run(presentation.Slides);
    }

    // Configura la cartella dei binari ffmpeg. Vedi questa pagina: https://github.com/rosenbjerg/FFMpegCore#installation
    GlobalFFOptions.Configure(new FFOptions { BinaryFolder = @"c:\tools\ffmpeg\bin" });

    // Converti i fotogrammi in un video webm.
    FFMpeg.JoinImageSequence("text_animation.webm", Fps, frames.Select(frame => ImageInfo.FromPath(frame)).ToArray());
}

Classi per la conversione video

Per abilitare le operazioni di conversione da PowerPoint a video, Aspose.Slides per .NET fornisce le classi PresentationAnimationsGenerator e PresentationPlayer.

PresentationAnimationsGenerator consente di impostare la dimensione del fotogramma per il video (che sarà creato successivamente) e il valore FPS (fotogrammi al secondo) tramite il suo costruttore. Se passi un’istanza di una presentazione, verrà utilizzato il suo Presentation.SlideSize e genera le animazioni che PresentationPlayer utilizza.

Quando le animazioni vengono generate, viene generato un evento NewAnimation per ogni animazione successiva, che include un parametro IPresentationAnimationPlayer. Questa classe rappresenta un lettore per un’animazione individuale.

Per lavorare con IPresentationAnimationPlayer, utilizzi la proprietà Duration (che fornisce la durata completa dell’animazione) e il metodo SetTimePosition. Ogni posizione dell’animazione è impostata nell’intervallo 0 a duration, e il metodo GetFrame restituisce quindi un Bitmap che rappresenta lo stato dell’animazione in quel punto temporale.

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

    // Aggiungi una forma sorridente e animala.
    IAutoShape smile = slide.Shapes.AddAutoShape(ShapeType.SmileyFace, 110, 20, 500, 500);

    IEffect effectIn = slide.Timeline.MainSequence.AddEffect(
        smile, EffectType.Fly, EffectSubtype.TopLeft, EffectTriggerType.AfterPrevious);

    IEffect effectOut = slide.Timeline.MainSequence.AddEffect(
        smile, EffectType.Fly, EffectSubtype.BottomRight, EffectTriggerType.AfterPrevious);

    effectIn.Timing.Duration = 2f;
    effectOut.PresetClassType = EffectPresetClassType.Exit;

    using (var animationsGenerator = new PresentationAnimationsGenerator(presentation))
    {
        animationsGenerator.NewAnimation += animationPlayer =>
        {
            Console.WriteLine($"Total animation duration: {animationPlayer.Duration}");

            animationPlayer.SetTimePosition(0);          // Lo stato iniziale dell'animazione.
            Bitmap bitmap = animationPlayer.GetFrame();  // Bitmap dello stato iniziale dell'animazione.

            animationPlayer.SetTimePosition(animationPlayer.Duration);  // Lo stato finale dell'animazione.
            Bitmap lastBitmap = animationPlayer.GetFrame();             // L'ultimo fotogramma dell'animazione.
            lastBitmap.Save("last.png");
        };
    }
}

Per far riprodurre tutte le animazioni di una presentazione contemporaneamente, si utilizza la classe PresentationPlayer. Questa classe prende un’istanza di PresentationAnimationsGenerator e un valore FPS per gli effetti nel suo costruttore, quindi chiama l’evento FrameTick per tutte le animazioni per riprodurle:

using (Presentation presentation = new Presentation("animated.pptx"))
{
    using (var animationsGenerator = new PresentationAnimationsGenerator(presentation))
    using (var player = new PresentationPlayer(animationsGenerator, 33))
    {
        player.FrameTick += (sender, args) =>
        {
            args.GetFrame().Save($"frame_{sender.FrameIndex}.png");
        };
        animationsGenerator.Run(presentation.Slides);
    }
}

Successivamente i fotogrammi generati possono essere compilati per produrre un video. Vedi la sezione Convertire una presentazione PowerPoint in video.

Animazioni ed effetti supportati

Durante la conversione di una presentazione PowerPoint in video con Aspose.Slides per .NET, è importante capire quali animazioni ed effetti sono supportati nell’output. Aspose.Slides supporta una vasta gamma di effetti di ingresso, uscita ed enfasi comuni, come dissolvenza, volo, zoom e rotazione. Tuttavia, alcune animazioni avanzate o personalizzate potrebbero non essere pienamente preservate o potrebbero apparire in modo diverso nel video finale. Questa sezione elenca le animazioni ed effetti supportati.

Ingresso:

Tipo di animazione Aspose.Slides PowerPoint
Apparire not supported supported
Dissolvenza supported supported
Volo in supported supported
Fluttuare dentro supported supported
Dividere supported supported
Spazzare supported supported
Forma supported supported
Ruota supported supported
Barre casuali supported supported
Crescita e rotazione not supported supported
Zoom supported supported
Rotazione supported supported
Rimbalzo supported supported

Enfasi:

Tipo di animazione Aspose.Slides PowerPoint
Impulso not supported supported
Impulso colore not supported supported
Oscillazione supported supported
Rotazione supported supported
Crescita/Riduzione not supported supported
Desaturazione not supported supported
Scurire not supported supported
Schiarire not supported supported
Trasparenza not supported supported
Colore oggetto not supported supported
Colore complementare not supported supported
Colore linea not supported supported
Colore riempimento not supported supported

Uscita:

Tipo di animazione Aspose.Slides PowerPoint
Sparire not supported supported
Dissolvenza supported supported
Volo fuori supported supported
Fluttuare fuori supported supported
Dividere supported supported
Spazzare supported supported
Forma supported supported
Barre casuali supported supported
Riduzione e rotazione not supported supported
Zoom supported supported
Rotazione supported supported
Rimbalzo supported supported

Percorsi di movimento:

Tipo di animazione Aspose.Slides PowerPoint
Linee supported supported
Archi supported supported
Giri supported supported
Forme supported supported
Loop supported supported
Tracciato personalizzato supported supported

Effetti di transizione delle diapositive supportati

Gli effetti di transizione delle diapositive svolgono un ruolo importante nella creazione di passaggi fluidi e visivamente gradevoli tra le diapositive di un video. Aspose.Slides per .NET supporta una varietà di effetti di transizione comunemente usati per preservare il flusso e lo stile della presentazione originale. Questa sezione evidenzia quali effetti di transizione sono supportati durante il processo di conversione.

Sottile:

Tipo di animazione Aspose.Slides PowerPoint
Morph not supported supported
Dissolvenza supported supported
Spinta supported supported
Trascinamento supported supported
Spazzare supported supported
Dividere supported supported
Rivelare not supported supported
Barre casuali supported supported
Forma not supported supported
Scoprire not supported supported
Copertura supported supported
Lampo supported supported
Strisce supported supported

Entusiasmante:

Tipo di animazione Aspose.Slides PowerPoint
Caduta not supported supported
Tenda not supported supported
Tende not supported supported
Vento not supported supported
Prestigio not supported supported
Frattura not supported supported
Schiacciare not supported supported
Sbucciare not supported supported
Piegatura pagina not supported supported
Aereo not supported supported
Origami not supported supported
Dissolvi supported supported
Scacchiera not supported supported
Persiane not supported supported
Orologio supported supported
Ondulazione not supported supported
Favo not supported supported
Scintillio not supported supported
Vortice not supported supported
Strappare not supported supported
Scambio not supported supported
Capovolgimento not supported supported
Galleria not supported supported
Cubo not supported supported
Porte not supported supported
Scatola not supported supported
Pettine not supported supported
Zoom supported supported
Casuale not supported supported

Contenuto dinamico:

Tipo di animazione Aspose.Slides PowerPoint
Panoramica not supported supported
Ruota panoramica supported supported
Nastro trasportatore not supported supported
Rotazione not supported supported
Orbita not supported supported
Volo attraverso supported supported

FAQ

È possibile convertire presentazioni protette da password?

Sì, Aspose.Slides per .NET consente di lavorare con presentazioni protette da password. Quando si elaborano tali file, è necessario fornire la password corretta affinché la libreria possa accedere al contenuto della presentazione.

Aspose.Slides per .NET è supportato in soluzioni cloud?

Sì, Aspose.Slides per .NET può essere integrato in applicazioni e servizi cloud. La libreria è progettata per funzionare in ambienti server, garantendo alte prestazioni e scalabilità per l’elaborazione batch di file.

Ci sono limitazioni di dimensione per le presentazioni durante la conversione?

Aspose.Slides per .NET è in grado di gestire presentazioni di dimensioni praticamente illimitate. Tuttavia, quando si lavora con file molto grandi, potrebbero essere necessarie risorse di sistema aggiuntive, ed è talvolta consigliato ottimizzare la presentazione per migliorare le prestazioni.