PowerPoint Sunumlarını .NET'te Videoya Dönüştürme

Giriş

PowerPoint ya da OpenDocument sunumunuzu videoya dönüştürerek şunları elde edersiniz:

Arttırılmış erişilebilirlik: Tüm cihazlar, platformdan bağımsız olarak, varsayılan olarak video oynatıcılarıyla gelir, bu da kullanıcıların geleneksel sunum uygulamalarına göre videoları açmasını veya oynatmasını kolaylaştırır.

Daha geniş erişim: Videolar, daha geniş bir izleyici kitlesine ulaşmanızı ve bilgiyi daha ilgi çekici bir formatta sunmanızı sağlar. Anketler ve istatistikler, insanların diğer formatlara göre video içeriğini izlemeyi ve tüketmeyi tercih ettiğini gösterir, bu da mesajınızın daha etkili olmasını sağlar.

Aspose.Slides for .NET’te sunumları videoya dönüştürme desteği ekledik.

  • Aspose.Slides for .NET’i kullanarak sunum slaytlarından belirli bir kare hızı (FPS) ile çerçeveler oluşturun.
  • Ardından, ffmpeg gibi bir üçüncü taraf yardımcı programı kullanarak bu çerçeveleri bir videoya derleyin.

PowerPoint Sunumunu Videoya Dönüştürme

  1. Projenize Aspose.Slides ve FFMpegCore kütüphanesini eklemek için dotnet add package komutunu kullanın:
    • dotnet add package Aspose.Slides.NET --version 22.11.0 çalıştırın
    • dotnet add package FFMpegCore --version 4.8.0 çalıştırın
  2. ffmpeg’i buradan indirin.
  3. FFMpegCore, indirilen ffmpeg’in yolunu belirtmenizi ister (örneğin, “C:\tools\ffmpeg” klasörüne çıkarıldı):
    GlobalFFOptions.Configure(new FFOptions { BinaryFolder = @"c:\tools\ffmpeg\bin" });
  1. PowerPoint‑to‑video dönüşüm kodunu çalıştırın.

Bu C# kodu, bir şekil ve iki animasyon efekti içeren bir sunumu videoya dönüştürmeyi gösterir:

using System.Collections.Generic;
using Aspose.Slides;
using FFMpegCore; // daha önce C:\tools\ffmpeg'e çıkardığımız FFmpeg ikili dosyalarını kullanacak.
using Aspose.Slides.Animation;

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

    // Bir gülümseme şekli ekleyin ve ardından animasyon ekleyin.
    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);
    }

    // ffmpeg ikili dosyaları klasörünü yapılandırın. Bu sayfaya bakın: https://github.com/rosenbjerg/FFMpegCore#installation
    GlobalFFOptions.Configure(new FFOptions { BinaryFolder = @"c:\tools\ffmpeg\bin" });

    // Kareleri bir webm videosuna dönüştürün.
    FFMpeg.JoinImageSequence("smile.webm", Fps, frames.Select(frame => ImageInfo.FromPath(frame)).ToArray());
}

Video Efektleri

Aspose.Slides for .NET kullanarak bir PowerPoint sunumunu videoya dönüştürürken, çıkışın görsel kalitesini artırmak için çeşitli video efektleri uygulayabilirsiniz. Bu efektler, final videoda slaytların görünümünü pürüzsüz geçişler, animasyonlar ve diğer görsel öğeler ekleyerek kontrol etmenizi sağlar. Bu bölüm, mevcut video efekt seçeneklerini açıklar ve nasıl uygulanacağını gösterir.

Animasyonlar ve geçişler slayt gösterilerini daha ilgi çekici hâle getirir — videolar için de aynı şey geçerlidir. Önceki sunum koduna bir slayt ve geçiş ekleyelim:

// Bir gülümseme şekli ekleyin ve animasyon uygulayın.
// ...

// Yeni bir slayt ekleyin ve animasyonlu bir geçiş ekleyin.
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 ayrıca metin animasyonlarını da destekler. Bu örnekte, nesneler üzerindeki paragraf ları birbiri ardına, aralarında bir saniyelik gecikme olacak şekilde animasyonluyoruz:

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];

    // Metin ve animasyonlar ekle.
    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);
    }

    // ffmpeg ikili dosyaları klasörünü yapılandırın. Bu sayfaya bakın: https://github.com/rosenbjerg/FFMpegCore#installation
    GlobalFFOptions.Configure(new FFOptions { BinaryFolder = @"c:\tools\ffmpeg\bin" });

    // Kareleri bir webm videosuna dönüştürün.
    FFMpeg.JoinImageSequence("text_animation.webm", Fps, frames.Select(frame => ImageInfo.FromPath(frame)).ToArray());
}

Video Dönüştürme Sınıfları

PowerPoint‑to‑video dönüşüm görevlerini etkinleştirmek için Aspose.Slides for .NET, PresentationAnimationsGenerator ve PresentationPlayer sınıflarını sağlar.

PresentationAnimationsGenerator, video için çerçeve boyutunu (daha sonra oluşturulacak) ve saniyedeki kare (FPS) değerini kurucusu aracılığıyla ayarlamanıza olanak tanır. Bir sunum örneği geçirirseniz, Presentation.SlideSize kullanılacak ve bu sınıf, PresentationPlayer tarafından kullanılan animasyonları üretir.

Animasyonlar üretildiğinde, her ardışık animasyon için bir NewAnimation olayı tetiklenir; bu olay bir IPresentationAnimationPlayer parametresi içerir. Bu sınıf, tek bir animasyonun oynatıcısını temsil eder.

IPresentationAnimationPlayer ile çalışırken, tam animasyon süresini veren Duration özelliğini ve SetTimePosition metodunu kullanırsınız. Her animasyon konumu 0 ile duration aralığında ayarlanır ve GetFrame metodu o noktadaki animasyon durumunu gösteren bir Bitmap döndürür.

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

    // Bir gülümseme şekli ekleyin ve animasyon uygulayın.
    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);          // Animasyonun ilk durumu.
            Bitmap bitmap = animationPlayer.GetFrame();  // Animasyonun ilk durumu bitmap'i.

            animationPlayer.SetTimePosition(animationPlayer.Duration);  // Animasyonun son durumu.
            Bitmap lastBitmap = animationPlayer.GetFrame();             // Animasyonun son karesi.
            lastBitmap.Save("last.png");
        };
    }
}

Tüm animasyonların aynı anda oynatılmasını sağlamak için PresentationPlayer sınıfı kullanılır. Bu sınıf, kurucusunda bir PresentationAnimationsGenerator örneği ve efektler için bir FPS değeri alır, ardından tüm animasyonları oynatmak için FrameTick olayını tetikler:

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);
    }
}

Oluşturulan çerçeveler daha sonra birleştirilerek video üretilir. Bununla ilgili ayrıntıyı PowerPoint Sunumunu Videoya Dönüştürme bölümünde bulabilirsiniz.

Desteklenen Animasyonlar ve Efektler

Aspose.Slides for .NET kullanarak bir PowerPoint sunumunu videoya dönüştürürken, çıkışta hangi animasyonların ve efektlerin desteklendiğini anlamak önemlidir. Aspose.Slides, solma, kaydırma, yakınlaştırma ve döndürme gibi yaygın giriş, çıkış ve vurgu efektlerinin geniş bir yelpazesini destekler. Ancak bazı ileri düzey veya özel animasyonlar tam olarak korunmayabilir ya da final videoda farklı görünebilir. Aşağıda desteklenen animasyon ve efektler özetlenmiştir.

Giriş:

Animasyon Tipi Aspose.Slides PowerPoint
Görünme not supported supported
Soldurma supported supported
Uçuş İçeri supported supported
Yüzme İçeri supported supported
Bölünme supported supported
Silme supported supported
Şekil supported supported
Tekerlek supported supported
Rastgele Çubuklar supported supported
Büyü & Dön not supported supported
Yakınlaştırma supported supported
Dönme supported supported
Sıçrama supported supported

Vurgu:

Animasyon Tipi Aspose.Slides PowerPoint
Darbe not supported supported
Renk Darbesi not supported supported
Osilasyon supported supported
Dönme supported supported
Büyü/Küçül not supported supported
Desaturasyon not supported supported
Karanlıklaştırma not supported supported
Aydınlatma not supported supported
Şeffaflık not supported supported
Nesne Rengi not supported supported
Tamamlayıcı Renk not supported supported
Çizgi Rengi not supported supported
Dolgu Rengi not supported supported

Çıkış:

Animasyon Tipi Aspose.Slides PowerPoint
Kaybolma not supported supported
Soldurma supported supported
Uçuş Dışarı supported supported
Yüzme Dışarı supported supported
Bölünme supported supported
Silme supported supported
Şekil supported supported
Rastgele Çubuklar supported supported
Küçül & Dön not supported supported
Yakınlaştırma supported supported
Dönme supported supported
Sıçrama supported supported

Hareket Yolları:

Animasyon Tipi Aspose.Slides PowerPoint
Çizgiler supported supported
Kemerler supported supported
Dönüşler supported supported
Şekiller supported supported
Döngüler supported supported
Özel Yol supported supported

Desteklenen Slayt Geçiş Efektleri

Slayt geçiş efektleri, bir videoda slaytlar arasındaki değişiklikleri pürüzsüz ve görsel açıdan çekici hâle getirmede önemli bir rol oynar. Aspose.Slides for .NET, orijinal sunumunuzun akışını ve stilini korumak için çeşitli yaygın geçiş efektlerini destekler. Aşağıda dönüşüm sırasında desteklenen geçiş efektleri listelenmiştir.

İnce:

Geçiş Tipi Aspose.Slides PowerPoint
Morph not supported supported
Fade supported supported
Push supported supported
Pull supported supported
Wipe supported supported
Split supported supported
Reveal not supported supported
Random Bars supported supported
Shape not supported supported
Uncover not supported supported
Cover supported supported
Flash supported supported
Strips supported supported

Heyecanlı:

Geçiş Tipi Aspose.Slides PowerPoint
Fall Over not supported supported
Drape not supported supported
Curtains not supported supported
Wind not supported supported
Prestige not supported supported
Fracture not supported supported
Crush not supported supported
Peel Off not supported supported
Page Curl not supported supported
Airplane not supported supported
Origami not supported supported
Dissolve supported supported
Checkerboard not supported supported
Blinds not supported supported
Clock supported supported
Ripple not supported supported
Honeycomb not supported supported
Glitter not supported supported
Vortex not supported supported
Shred not supported supported
Switch not supported supported
Flip not supported supported
Gallery not supported supported
Cube not supported supported
Doors not supported supported
Box not supported supported
Comb not supported supported
Zoom supported supported
Random not supported supported

Dinamik İçerik:

Geçiş Tipi Aspose.Slides PowerPoint
Pan not supported supported
Ferris Wheel supported supported
Conveyor not supported supported
Rotate not supported supported
Orbit not supported supported
Fly Through supported supported

Sıkça Sorulan Sorular

Şifre korumalı sunumları dönüştürmek mümkün mü?

Evet, Aspose.Slides for .NET şifreyle korunan sunumlarla çalışmaya izin verir. Bu dosyaları işlerken doğru şifreyi sağlamanız gerekir; böylece kütüphane sunumun içeriğine erişebilir.

Aspose.Slides for .NET bulut çözümlerinde kullanılabilir mi?

Evet, Aspose.Slides for .NET bulut uygulamaları ve hizmetlerine entegre edilebilir. Kütüphane, sunucu ortamlarında çalışmak üzere tasarlanmıştır ve toplu dosya işleme için yüksek performans ve ölçeklenebilirlik sunar.

Dönüştürme sırasında sunumların boyutlarıyla ilgili sınırlamalar var mı?

Aspose.Slides for .NET neredeyse herhangi bir boyuttaki sunumu işleyebilir. Ancak çok büyük dosyalarla çalışırken ek sistem kaynaklarına ihtiyaç duyulabilir ve performansı artırmak için sunumu optimize etmek önerilir.