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

Giriş

PowerPoint sunumunuzu video formatına dönüştürerek elde edersiniz

  • Erişilebilirlik artışı: Sunum açma uygulamalarına kıyasla, tüm cihazlar (platform fark etmeksizin) varsayılan olarak video oynatıcılarla donatılmıştır, bu yüzden kullanıcılar videoları açmayı veya oynatmayı daha kolay bulur.
  • Daha geniş erişim: Videolar sayesinde büyük bir izleyici kitlesine ulaşabilir ve onları bir sunumda sıkıcı olabilecek bilgilerle hedefleyebilirsiniz. Çoğu anket ve istatistik, insanların videoları diğer içerik biçimlerinden daha fazla izlediğini ve tükettiğini, ve genellikle bu tür içerikleri tercih ettiğini gösterir.

Aspose.Slides’da PowerPoint’ten Videoya Dönüştürme

Aspose.Slides sunumdan videoya dönüşümü destekler.

  • Aspose.Slides kullanarak, belirli bir FPS (saniyedeki kare) değerine karşılık gelen bir dizi kare (sunum slaytlarından) oluşturun
  • ffmpeg gibi bir üçüncü taraf aracını (java için) kareler üzerine bir video oluşturmak için kullanın.

PowerPoint’ten Videoya Dönüştürme

  1. ffmpeg’i buradan indirin.

  2. PowerPoint’ten video JavaScript kodunu çalıştırın.

Bu JavaScript kodu, bir şekil ve iki animasyon efekti içeren bir sunumu videoya nasıl dönüştüreceğinizi gösterir:

var presentation = new aspose.slides.Presentation();
try {
    // Bir gülümseme şekli ekler ve ardından animasyon uygular
    var smile = presentation.getSlides().get_Item(0).getShapes().addAutoShape(aspose.slides.ShapeType.SmileyFace, 110, 20, 500, 500);
    var mainSequence = presentation.getSlides().get_Item(0).getTimeline().getMainSequence();
    var effectIn = mainSequence.addEffect(smile, aspose.slides.EffectType.Fly, aspose.slides.EffectSubtype.TopLeft, aspose.slides.EffectTriggerType.AfterPrevious);
    var effectOut = mainSequence.addEffect(smile, aspose.slides.EffectType.Fly, aspose.slides.EffectSubtype.BottomRight, aspose.slides.EffectTriggerType.AfterPrevious);
    effectIn.getTiming().setDuration(2.0);
    effectOut.setPresetClassType(aspose.slides.EffectPresetClassType.Exit);
    final var fps = 33;
    var frames = java.newInstanceSync("java.util.ArrayList");
    var animationsGenerator = new aspose.slides.PresentationAnimationsGenerator(presentation);
    try {
        var player = new aspose.slides.PresentationPlayer(animationsGenerator, fps);
        try {
            player.setFrameTick((sender, arguments) -> {
                try {
                    var frame = java.callStaticMethodSync("java.lang.String", "format", "frame_%04d.png", sender.getFrameIndex());
                    arguments.getFrame().save(frame, aspose.slides.ImageFormat.Png);
                    frames.add(frame);
                } catch (e) {console.log(e);
                    throw java.newInstanceSync("java.lang.RuntimeException", e);
                }
            });
            animationsGenerator.run(presentation.getSlides());
        } finally {
            if (player != null) {
                player.dispose();
            }
        }
    } finally {
        if (animationsGenerator != null) {
            animationsGenerator.dispose();
        }
    }
    // ffmpeg ikili dosyalarının klasörünü yapılandır. Bu sayfaya bak: https://github.com/rosenbjerg/FFMpegCore#installation
    var ffmpeg = java.newInstanceSync("FFmpeg", "path/to/ffmpeg");
    var ffprobe = java.newInstanceSync("FFprobe", "path/to/ffprobe");
    var builder = java.newInstanceSync("FFmpegBuilder").addExtraArgs("-start_number", "1").setInput("frame_%04d.png").addOutput("output.avi").setVideoFrameRate(java.getStaticFieldValue("FFmpeg", "FPS_24")).setFormat("avi").done();
    var executor = java.newInstanceSync("FFmpegExecutor", ffmpeg, ffprobe);
    executor.createJob(builder).run();
} catch (e) {console.log(e);
    console.log(e);
}

Video Efektleri

Slaytlardaki nesnelere animasyonlar uygulayabilir ve slaytlar arasında geçişler kullanabilirsiniz.

Animasyonlar ve geçişler slayt gösterilerini daha çekici ve ilginç hâle getirir—ve videolar için de aynı şeyi yapar. Önceki sunumun koduna bir slayt ve geçiş daha ekleyelim:

// Bir gülümseme şekli ekler ve animasyon uygular
// ...
// Yeni bir slayt ekler ve animasyonlu geçiş ekler
var newSlide = presentation.getSlides().addEmptySlide(presentation.getSlides().get_Item(0).getLayoutSlide());
newSlide.getBackground().setType(aspose.slides.BackgroundType.OwnBackground);
newSlide.getBackground().getFillFormat().setFillType(java.newByte(aspose.slides.FillType.Solid));
newSlide.getBackground().getFillFormat().getSolidFillColor().setColor(java.getStaticFieldValue("java.awt.Color", "MAGENTA"));
newSlide.getSlideShowTransition().setType(aspose.slides.TransitionType.Push);

Aspose.Slides ayrıca metin animasyonunu da destekler. Bu yüzden nesneler üzerindeki paragrafları birbiri ardına (gecikme bir saniye olarak ayarlanmış) görünecek şekilde canlandırıyoruz:

var presentation = new aspose.slides.Presentation();
try {
    // Metin ve animasyonları ekler
    var autoShape = presentation.getSlides().get_Item(0).getShapes().addAutoShape(aspose.slides.ShapeType.Rectangle, 210, 120, 300, 300);
    var para1 = new aspose.slides.Paragraph();
    para1.getPortions().add(new aspose.slides.Portion("Aspose Slides for Node.js via Java"));
    var para2 = new aspose.slides.Paragraph();
    para2.getPortions().add(new aspose.slides.Portion("convert PowerPoint Presentation with text to video"));
    var para3 = new aspose.slides.Paragraph();
    para3.getPortions().add(new aspose.slides.Portion("paragraph by paragraph"));
    var paragraphCollection = autoShape.getTextFrame().getParagraphs();
    paragraphCollection.add(para1);
    paragraphCollection.add(para2);
    paragraphCollection.add(para3);
    paragraphCollection.add(new aspose.slides.Paragraph());
    var mainSequence = presentation.getSlides().get_Item(0).getTimeline().getMainSequence();
    var effect1 = mainSequence.addEffect(para1, aspose.slides.EffectType.Appear, aspose.slides.EffectSubtype.None, aspose.slides.EffectTriggerType.AfterPrevious);
    var effect2 = mainSequence.addEffect(para2, aspose.slides.EffectType.Appear, aspose.slides.EffectSubtype.None, aspose.slides.EffectTriggerType.AfterPrevious);
    var effect3 = mainSequence.addEffect(para3, aspose.slides.EffectType.Appear, aspose.slides.EffectSubtype.None, aspose.slides.EffectTriggerType.AfterPrevious);
    var effect4 = mainSequence.addEffect(para3, aspose.slides.EffectType.Appear, aspose.slides.EffectSubtype.None, aspose.slides.EffectTriggerType.AfterPrevious);
    effect1.getTiming().setTriggerDelayTime(1.0);
    effect2.getTiming().setTriggerDelayTime(1.0);
    effect3.getTiming().setTriggerDelayTime(1.0);
    effect4.getTiming().setTriggerDelayTime(1.0);
    final var fps = 33;
    var frames = java.newInstanceSync("java.util.ArrayList");
    var animationsGenerator = new aspose.slides.PresentationAnimationsGenerator(presentation);
    try {
        var player = new aspose.slides.PresentationPlayer(animationsGenerator, fps);
        try {
            player.setFrameTick((sender, arguments) -> {
                try {
                    var frame = java.callStaticMethodSync("java.lang.String", "format", "frame_%04d.png", sender.getFrameIndex());
                    arguments.getFrame().save(frame, aspose.slides.ImageFormat.Png);
                    frames.add(frame);
                } catch (e) {console.log(e);
                    throw java.newInstanceSync("java.lang.RuntimeException", e);
                }
            });
            animationsGenerator.run(presentation.getSlides());
        } finally {
            if (player != null) {
                player.dispose();
            }
        }
    } finally {
        if (animationsGenerator != null) {
            animationsGenerator.dispose();
        }
    }
    // ffmpeg ikili dosyaları klasörünü yapılandır. Bu sayfaya bak: https://github.com/rosenbjerg/FFMpegCore#installation
    var ffmpeg = java.newInstanceSync("FFmpeg", "path/to/ffmpeg");
    var ffprobe = java.newInstanceSync("FFprobe", "path/to/ffprobe");
    var builder = java.newInstanceSync("FFmpegBuilder").addExtraArgs("-start_number", "1").setInput("frame_%04d.png").addOutput("output.avi").setVideoFrameRate(java.getStaticFieldValue("FFmpeg", "FPS_24")).setFormat("avi").done();
    var executor = java.newInstanceSync("FFmpegExecutor", ffmpeg, ffprobe);
    executor.createJob(builder).run();
} catch (e) {console.log(e);
    console.log(e);
}

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

PowerPoint’ten videoya dönüşüm görevlerini gerçekleştirmenize olanak sağlamak için Aspose.Slides, PresentationAnimationsGenerator ve PresentationPlayer sınıflarını sunar.

PresentationAnimationsGenerator video için (sonradan oluşturulacak) kare boyutunu yapıcı (constructor) aracılığıyla ayarlamanızı sağlar. Sunumun bir örneğini geçirirseniz, Presentation.getSlideSize kullanılır ve PresentationPlayer tarafından kullanılan animasyonları üretir.

Animasyonlar üretildiğinde, her sonraki animasyon için bir NewAnimation olayı oluşturulur; bu olayın sunum animasyon oynatıcı parametresi vardır. İkincisi, ayrı bir animasyon için oynatıcıyı temsil eden bir sınıftır.

Sunum animasyon oynatıcıyla çalışmak için getDuration (animasyonun tam süresi) yöntemi ve setTimePosition yöntemi kullanılır. Her animasyon konumu 0 ile süresi aralığında ayarlanır ve ardından getFrame yöntemi o anki animasyon durumuna karşılık gelen bir BufferedImage döndürür:

var presentation = new aspose.slides.Presentation();
try {
    // Bir gülümseme şekli ekler ve animasyonu uygular
    var smile = presentation.getSlides().get_Item(0).getShapes().addAutoShape(aspose.slides.ShapeType.SmileyFace, 110, 20, 500, 500);
    var mainSequence = presentation.getSlides().get_Item(0).getTimeline().getMainSequence();
    var effectIn = mainSequence.addEffect(smile, aspose.slides.EffectType.Fly, aspose.slides.EffectSubtype.TopLeft, aspose.slides.EffectTriggerType.AfterPrevious);
    var effectOut = mainSequence.addEffect(smile, aspose.slides.EffectType.Fly, aspose.slides.EffectSubtype.BottomRight, aspose.slides.EffectTriggerType.AfterPrevious);
    effectIn.getTiming().setDuration(2.0);
    effectOut.setPresetClassType(aspose.slides.EffectPresetClassType.Exit);
    var animationsGenerator = new aspose.slides.PresentationAnimationsGenerator(presentation);
    try {
        animationsGenerator.setNewAnimation(animationPlayer -> {
            console.log(java.callStaticMethodSync("java.lang.String", "format", "Animation total duration: %f", animationPlayer.getDuration()));
            animationPlayer.setTimePosition(0);// ilk animasyon durumu
            try {
                // ilk animasyon durumu bitmap'i
                animationPlayer.getFrame().save("firstFrame.png", aspose.slides.ImageFormat.Png);
            } catch (e) {console.log(e);
                throw java.newInstanceSync("java.lang.RuntimeException", e);
            }
            animationPlayer.setTimePosition(animationPlayer.getDuration());// final state of the animation
            try {
                // animasyonun son karesi
                animationPlayer.getFrame().save("lastFrame.png", aspose.slides.ImageFormat.Png);
            } catch (e) {console.log(e);
                throw java.newInstanceSync("java.lang.RuntimeException", e);
            }
        });
    } finally {
        if (animationsGenerator != null) {
            animationsGenerator.dispose();
        }
    }
} finally {
    if (presentation != null) {
        presentation.dispose();
    }
}

Bir sunumdaki tüm animasyonların aynı anda çalmasını sağlamak için PresentationPlayer sınıfı kullanılır. Bu sınıf, yapıcısında bir PresentationAnimationsGenerator örneği ve efektler için FPS alır ve ardından tüm animasyonları çalmak için FrameTick olayını tetikler:

var presentation = new aspose.slides.Presentation("animated.pptx");
try {
    var animationsGenerator = new aspose.slides.PresentationAnimationsGenerator(presentation);
    try {
        var player = new aspose.slides.PresentationPlayer(animationsGenerator, 33);
        try {
            player.setFrameTick((sender, arguments) -> {
                try {
                    arguments.getFrame().save(("frame_" + sender.getFrameIndex()) + ".png", aspose.slides.ImageFormat.Png);
                } catch (e) {console.log(e);
                    throw java.newInstanceSync("java.lang.RuntimeException", e);
                }
            });
            animationsGenerator.run(presentation.getSlides());
        } finally {
            if (player != null) {
                player.dispose();
            }
        }
    } finally {
        if (animationsGenerator != null) {
            animationsGenerator.dispose();
        }
    }
} finally {
    if (presentation != null) {
        presentation.dispose();
    }
}

Daha sonra oluşturulan kareler birleştirilerek bir video üretilebilir. Convert PowerPoint to Video bölümüne bakın.

Desteklenen Animasyonlar ve Efektler

Giriş:

Animasyon Türü Aspose.Slides PowerPoint
Görünme not supported supported
Solma supported supported
Uçuş supported supported
Yüzme supported supported
Bölme supported supported
Silme supported supported
Şekil supported supported
Döner 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 Türü Aspose.Slides PowerPoint
Darbe not supported supported
Renk Darbesi not supported supported
Dengesiz supported supported
Dönme supported supported
Büyü/Küçül not supported supported
Desaturasyon not supported supported
Koyulaştır not supported supported
Aydınlat not supported supported
Şeffaflık not supported supported
Nesne Rengi not supported supported
Tamamlayıcı Renk not supported supported
Çizgi Rengi not supported supported
Doldurma Rengi not supported supported

Çıkış:

Animasyon Türü Aspose.Slides PowerPoint
Görünmez Olma not supported supported
Solma supported supported
Uçuş Çıkışı supported supported
Yüzme Çıkışı supported supported
Bölme 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 Türü Aspose.Slides PowerPoint
Çizgiler supported supported
Yaylar supported supported
Dönüşler supported supported
Şekiller supported supported
Döngüler supported supported
Özel Yol supported supported

SSS

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

Evet, Aspose.Slides şifre korumalı sunumlarla çalışmaya izin verir. Bu dosyaları işlerken, kütüphanenin sunumun içeriğine erişebilmesi için doğru şifreyi sağlamanız gerekir.

Aspose.Slides bulut çözümlerinde kullanılmayı destekliyor mu?

Evet, Aspose.Slides bulut uygulamaları ve hizmetleriyle bütünleştirilebilir. Kütüphane, sunucu ortamlarında çalışacak şekilde tasarlanmıştır ve dosyaların toplu işlenmesi için yüksek performans ve ölçeklenebilirlik sağlar.

Dönüştürme sırasında sunumların boyutunda herhangi bir sınırlama var mı?

Aspose.Slides, neredeyse her boyuttaki sunumu işleyebilir. Ancak, çok büyük dosyalarla çalışırken ek sistem kaynakları gerekebilir ve performansı artırmak için sunumu optimize etmeniz önerilebilir.