Sunumlarda Python Kullanarak Video Çerçevelerini Yönetme

Giriş

Bir sunumda iyi konumlandırılmış bir video, mesajınızı daha etkileyici hale getirebilir ve izleyicilerinizle etkileşim seviyesini artırabilir.

PowerPoint, bir sunumdaki slayta video eklemenizi iki şekilde sağlar:

  • Yerel bir video ekle veya göm (bilgisayarınızda depolanmış)
  • Çevrimiçi bir video ekle (YouTube gibi bir web kaynağından).

Sunuma video (video nesneleri) eklemenizi sağlamak için Aspose.Slides, Video sınıfını, VideoFrame sınıfını ve diğer ilgili türleri sunar.

Gömülü Video Çerçeveleri Oluşturma

Slaytınıza eklemek istediğiniz video dosyası yerel olarak depolanıyorsa, videoyu sunuma gömmek için bir video çerçevesi oluşturabilirsiniz.

  1. Presentation sınıfının bir örneğini oluşturun.
  2. Dizinine göre bir slayta referans alın.
  3. Bir Video nesnesi ekleyin ve video dosyası verilerini geçirerek videoyu sunuma gömün.
  4. Video için bir çerçeve oluşturmak üzere bir VideoFrame nesnesi ekleyin.
  5. Değiştirilmiş sunumu kaydedin.

Bu Python kodu, yerel olarak depolanmış bir videoyu sunuma nasıl ekleyeceğinizi gösterir:

from pathlib import Path

import jpype
import asposeslides

if not jpype.isJVMStarted():
    jpype.startJVM()

from asposeslides.api import Presentation, SaveFormat

presentation = Presentation("pres.pptx")
try:
    video_data = Path("Wildlife.mp4").read_bytes()
    java_video_data = jpype.JArray(jpype.JByte)(video_data)
    video = presentation.getVideos().addVideo(java_video_data)
    presentation.getSlides().get_Item(0).getShapes().addVideoFrame(10, 10, 150, 250, video)
    presentation.save("pres-with-video.pptx", SaveFormat.Pptx)
finally:
    presentation.dispose()

Alternatif olarak, videoyu dosya yolunu doğrudan addVideoFrame yöntemine geçirerek ekleyebilirsiniz:

import jpype
import asposeslides

if not jpype.isJVMStarted():
    jpype.startJVM()

from asposeslides.api import Presentation

presentation = Presentation()
try:
    slide = presentation.getSlides().get_Item(0)
    video_frame = slide.getShapes().addVideoFrame(50, 150, 300, 150, "video1.avi")
finally:
    presentation.dispose()

Web Kaynaklarından Video ile Video Çerçeveleri Oluşturma

Microsoft PowerPoint 2013 ve üzeri sunumlarda YouTube videolarını destekler. Kullanmak istediğiniz video çevrimiçi olarak mevcutsa (örneğin YouTube’da), web bağlantısı aracılığıyla sunuma ekleyebilirsiniz.

  1. Presentation sınıfının bir örneğini oluşturun.
  2. Dizinine göre bir slayta referans alın.
  3. Bir VideoFrame nesnesi ekleyin ve videonun bağlantısını geçirin.
  4. Video çerçevesi için bir küçük resim ayarlayın.
  5. Sunumu kaydedin.

Bu Python kodu, web üzerinden bir videoyu PowerPoint sunumundaki bir slayta nasıl ekleyeceğinizi gösterir:

from urllib.request import urlopen

import jpype
import asposeslides

if not jpype.isJVMStarted():
    jpype.startJVM()

from asposeslides.api import Presentation, SaveFormat, VideoPlayModePreset

video_id = "Tj75Arhq5ho"
presentation = Presentation()
try:
    video_frame = presentation.getSlides().get_Item(0).getShapes().addVideoFrame(10, 10, 427, 240, "https://www.youtube.com/embed/" + video_id)
    video_frame.setPlayMode(VideoPlayModePreset.Auto)

    # Küçük resmi yükle.
    thumbnail_uri = "https://img.youtube.com/vi/" + video_id + "/hqdefault.jpg"
    try:
        with urlopen(thumbnail_uri) as response:
            thumbnail_data = response.read()
        java_thumbnail_data = jpype.JArray(jpype.JByte)(thumbnail_data)
        thumbnail = presentation.getImages().addImage(java_thumbnail_data)
        video_frame.getPictureFormat().getPicture().setImage(thumbnail)
    except OSError as error:
        print("Could not load the thumbnail:", error)

    presentation.save("out.pptx", SaveFormat.Pptx)
finally:
    presentation.dispose()

Video Çerçevesini Kesme

Aspose.Slides, videonun hangi bölümünün oynatılacağını VideoFrame.setTrimFromStart ve VideoFrame.setTrimFromEnd aracılığıyla trim-from-start ve trim-from-end değerlerini ayarlayarak kontrol etmenizi sağlar. Her iki değer milisaniye cinsindendir ve videonun başından ve sonundan ne kadar sürenin atlanacağını belirler. Bu ayarlar sunumdaki video oynatma ayarlarını değiştirir; gömülü video ikili verisini kesmez veya başka şekilde değiştirmez.

Kesme Ayarlarını Belirleme

Bir video çerçevesi oluşturmak ve onun kesme ayarlarını belirlemek için:

  1. Presentation sınıfının bir örneğini oluşturun.
  2. Sunuma bir Video nesnesi ekleyin.
  3. Bir slayta bir VideoFrame nesnesi ekleyin.
  4. VideoFrame.setTrimFromStart ve VideoFrame.setTrimFromEnd aracılığıyla trim-from-start ve trim-from-end değerlerini ayarlayın.
  5. Değiştirilmiş sunumu kaydedin.

Aşağıdaki kod örneği, gömülü bir videonun oynatılması sırasında ilk 2,5 saniyeyi ve son saniyeyi atlar:

from pathlib import Path

import jpype
import asposeslides

if not jpype.isJVMStarted():
    jpype.startJVM()

from asposeslides.api import Presentation, SaveFormat

presentation = Presentation()
try:
    video_data = Path("video.mp4").read_bytes()
    java_video_data = jpype.JArray(jpype.JByte)(video_data)
    video = presentation.getVideos().addVideo(java_video_data)
    slide = presentation.getSlides().get_Item(0)
    video_frame = slide.getShapes().addVideoFrame(50, 50, 640, 360, video)

    video_frame.setTrimFromStart(2500.0)
    video_frame.setTrimFromEnd(1000.0)
    presentation.save("video_with_trim.pptx", SaveFormat.Pptx)
finally:
    presentation.dispose()

Kesme Ayarlarını Okuma

Mevcut kesme ayarlarını incelemek için bir sunumu yükleyin, ilk slayttaki şekiller arasında bir VideoFrame nesnesi bulun ve değerleri VideoFrame.getTrimFromStart ve VideoFrame.getTrimFromEnd aracılığıyla okuyun.

Aşağıdaki kod örneği, ilk slayttaki ilk video çerçevesini bulur ve kesme ayarlarını milisaniye cinsinden raporlar:

import jpype
import asposeslides

if not jpype.isJVMStarted():
    jpype.startJVM()

from asposeslides.api import Presentation, VideoFrame

presentation = Presentation("video_with_trim.pptx")
try:
    slide = presentation.getSlides().get_Item(0)
    for shape in slide.getShapes():
        if isinstance(shape, VideoFrame):
            trim_from_start = shape.getTrimFromStart()
            trim_from_end = shape.getTrimFromEnd()
            print(f"Trim from start: {trim_from_start} ms")
            print(f"Trim from end: {trim_from_end} ms")
            break
finally:
    presentation.dispose()

Video Altyazılarını Yönetme

Aspose.Slides, PowerPoint sunumlarındaki video çerçeveleri için kapalı altyazıları yönetmenizi sağlar. Altyazılar WebVTT formatında depolanır ve VideoFrame.getCaptionTracks yöntemi aracılığıyla erişilebilir.

Bir Video Çerçevesine Altyazı Ekleme

  1. Presentation sınıfının bir örneğini oluşturun.
  2. Sunuma bir video ekleyin.
  3. Bir slayta bir VideoFrame nesnesi ekleyin.
  4. getCaptionTracks tarafından döndürülen CaptionsCollection kullanarak bir WebVTT altyazı parçası ekleyin.
  5. Değiştirilmiş sunumu kaydedin.

Aşağıdaki kod, bir video çerçevesine altyazı eklemenizi gösterir:

from pathlib import Path

import jpype
import asposeslides

if not jpype.isJVMStarted():
    jpype.startJVM()

from asposeslides.api import Presentation, SaveFormat

presentation = Presentation()
try:
    video_data = Path("video.mp4").read_bytes()
    java_video_data = jpype.JArray(jpype.JByte)(video_data)
    video = presentation.getVideos().addVideo(java_video_data)
    slide = presentation.getSlides().get_Item(0)
    video_frame = slide.getShapes().addVideoFrame(0, 0, 100, 100, video)

    # WebVTT dosyasından yeni bir altyazı parçası ekle.
    video_frame.getCaptionTracks().add("English", "track.vtt")
    presentation.save("video_with_captions.pptx", SaveFormat.Pptx)
finally:
    presentation.dispose()

CaptionsCollection sınıfı ayrıca bir akıştan altyazı eklemenizi sağlayan bir aşırı yükleme sunar.

Bir Video Çerçevesinden Altyazı Çıkarma

  1. Videoyu içeren sunumu yükleyin.
  2. Hedef VideoFrame nesnesini bulun.
  3. CaptionsCollection içindeki altyazı parçalarını döngü ile gezinin.
  4. Her altyazı parçasını bir .vtt dosyasına kaydedin.

Aşağıdaki kod, bir video çerçevesinden altyazı nasıl çıkarılacağını gösterir:

from pathlib import Path

import jpype
import asposeslides

if not jpype.isJVMStarted():
    jpype.startJVM()

from asposeslides.api import Presentation, VideoFrame

presentation = Presentation("video_with_captions.pptx")
try:
    slide = presentation.getSlides().get_Item(0)
    for shape in slide.getShapes():
        if isinstance(shape, VideoFrame):
            for caption_track in shape.getCaptionTracks():
                # Altyazı parçasını bir WebVTT dosyasına kaydet.
                file_path = Path(str(caption_track.getCaptionId()) + ".vtt")
                caption_data = bytes(caption_track.getBinaryData())
                file_path.write_bytes(caption_data)
finally:
    presentation.dispose()

Her bir Captions nesnesi, altyazı tanımlayıcısını, etiketini, ikili verisini ve altyazı metnini UTF-8 dizesi olarak sunar.

Bir Video Çerçevesinden Altyazı Kaldırma

  1. Videoyu içeren sunumu yükleyin.
  2. Hedef VideoFrame nesnesini alın.
  3. CaptionsCollection içindeki altyazı parçalarını kaldırın.
  4. Değiştirilmiş sunumu kaydedin.

Aşağıdaki kod, bir video çerçevesinden tüm altyazıların nasıl kaldırılacağını gösterir:

import jpype
import asposeslides

if not jpype.isJVMStarted():
    jpype.startJVM()

from asposeslides.api import Presentation, SaveFormat, VideoFrame

presentation = Presentation("video_with_captions.pptx")
try:
    slide = presentation.getSlides().get_Item(0)
    video_frame = slide.getShapes().get_Item(0)
    if isinstance(video_frame, VideoFrame):
        # Video çerçevesindeki tüm altyazıları kaldır.
        video_frame.getCaptionTracks().clear()
        presentation.save("video_without_captions.pptx", SaveFormat.Pptx)
    else:
        print("The shape is not a video frame.")
finally:
    presentation.dispose()

Yalnızca bir altyazı parçasını kaldırmanız gerektiğinde, clear yerine remove veya removeAt yöntemlerini kullanın.

Slaytlardan Video Çıkarma

Videoları slaytlara eklemenin yanı sıra, Aspose.Slides, sunumlara gömülmüş videoları çıkarmanıza da olanak tanır.

  1. Videoyu içeren sunumu yüklemek için bir Presentation sınıfının örneğini oluşturun.
  2. Tüm Slide nesnelerini döngü ile gezinin.
  3. Tüm Shape nesnelerini döngü ile gezerek bir VideoFrame bulun.
  4. Videoyu diske kaydedin.

Bu Python kodu, bir sunum slaydındaki videoyu nasıl çıkaracağınızı gösterir:

from pathlib import Path

import jpype
import asposeslides

if not jpype.isJVMStarted():
    jpype.startJVM()

from asposeslides.api import Presentation, VideoFrame

presentation = Presentation("VideoSample.pptx")
try:
    for slide in presentation.getSlides():
        for shape in slide.getShapes():
            if isinstance(shape, VideoFrame):
                video = shape.getEmbeddedVideo()
                if video is not None:
                    content_type = str(video.getContentType())
                    file_extension = content_type.split("/", 1)[-1]
                    video_data = bytes(video.getBinaryData())
                    Path("testing2." + file_extension).write_bytes(video_data)
                else:
                    print("The video frame has no embedded video.")
finally:
    presentation.dispose()

SSS

Bir VideoFrame için hangi video oynatma parametreleri değiştirilebilir?

Oynatma modunu (playback mode, otomatik veya tıklamayla) ve döngüyü (looping) kontrol edebilirsiniz. Bu seçenekler, VideoFrame nesnesinin özellikleri aracılığıyla mevcuttur.

Video eklemek PPTX dosya boyutunu etkiler mi?

Evet. Yerel bir video gömdüğünüzde, ikili veri belgeye dahil edilir, bu nedenle sunum boyutu dosya boyutuyla orantılı olarak artar. Çevrimiçi bir video eklediğinizde, bir bağlantı ve küçük resim gömülür, bu yüzden boyut artışı daha küçüktür.

Mevcut bir VideoFrame içindeki videoyu konum ve boyutunu değiştirmeden değiştirebilir miyim?

Evet. Şeklin geometrisini koruyarak çerçevedeki video içeriğini değiştirebilirsiniz; bu, mevcut bir düzen içinde medyayı güncellemenin yaygın bir senaryosudur.

Gömülü bir videonun içerik tipi (MIME) belirlenebilir mi?

Evet. Gömülü bir videonun okunup kullanılabilecek bir content type (içerik tipi) vardır, örneğin diske kaydederken.