จัดการเสียงในงานนำเสนอด้วย Python

ภาพรวม

บทความนี้อธิบายวิธีการทำงานกับเฟรมเสียงใน Aspose.Slides แสดงวิธีเพิ่มเสียงฝังลงในสไลด์ ปรับแต่งภาพย่อของเฟรมเสียง กำหนดค่าตัวเลือกการเล่นเช่นระดับเสียง การทำซ้ำ การซ่อน การตัดและระยะเวลาการจาง และสกัดเสียงที่ใช้ในการเปลี่ยนสไลด์โชว์

สร้างเฟรมเสียง

Aspose.Slides for Python via Java ช่วยให้คุณสามารถเพิ่มไฟล์เสียงลงในสไลด์ได้ ไฟล์เสียงจะฝังอยู่ในสไลด์เป็นเฟรมเสียง

  1. สร้างอินสแตนซ์ของคลาส Presentation
  2. รับอ้างอิงถึงสไลด์ตามดัชนีของมัน
  3. อ่านไฟล์เสียงที่ต้องการฝังลงในสไลด์
  4. เพิ่มเฟรมเสียงที่ฝังไว้ (ซึ่งประกอบด้วยไฟล์เสียง) ลงในสไลด์
  5. ใช้เมธอด setPlayMode และ setVolume ที่เปิดเผยโดยอ็อบเจกต์ AudioFrame
  6. บันทึกพรีเซนเทชันที่แก้ไขแล้ว

โค้ด Python นี้แสดงวิธีเพิ่มเฟรมเสียงฝังลงในสไลด์:

from pathlib import Path

import jpype
import asposeslides

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

from asposeslides.api import AudioPlayModePreset, AudioVolumeMode, Presentation, SaveFormat

presentation = Presentation()
try:
    slide = presentation.getSlides().get_Item(0)
    audio_data = Path("audio.wav").read_bytes()
    java_audio_data = jpype.JArray(jpype.JByte)(audio_data)
    audio = presentation.getAudios().addAudio(java_audio_data)
    audio_frame = slide.getShapes().addAudioFrameEmbedded(50, 150, 100, 100, audio)

    audio_frame.setPlayMode(AudioPlayModePreset.Auto)
    audio_frame.setVolume(AudioVolumeMode.Loud)
    presentation.save("AudioFrameEmbed_out.pptx", SaveFormat.Pptx)
finally:
    presentation.dispose()

เปลี่ยนภาพย่อของเฟรมเสียง

เมื่อคุณเพิ่มไฟล์เสียงลงในพรีเซนเทชัน เสียงจะแสดงเป็นเฟรมพร้อมรูปภาพเริ่มต้นมาตรฐาน (ดูรูปภาพในส่วนต่อไป) คุณสามารถเปลี่ยนภาพตัวอย่างของเฟรมเสียงเป็นภาพที่คุณเลือกได้

โค้ด Python นี้แสดงวิธีเปลี่ยนภาพย่อหรือภาพตัวอย่างของเฟรมเสียง:

from pathlib import Path

import jpype
import asposeslides

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

from asposeslides.api import Images, Presentation, SaveFormat

presentation = Presentation()
try:
    slide = presentation.getSlides().get_Item(0)
    audio_data = Path("sample2.mp3").read_bytes()
    java_audio_data = jpype.JArray(jpype.JByte)(audio_data)
    audio = presentation.getAudios().addAudio(java_audio_data)
    audio_frame = slide.getShapes().addAudioFrameEmbedded(150, 100, 50, 50, audio)

    image = Images.fromFile("eagle.jpeg")
    try:
        picture = presentation.getImages().addImage(image)
    finally:
        image.dispose()

    audio_frame.getPictureFormat().getPicture().setImage(picture)
    presentation.save("example_out.pptx", SaveFormat.Pptx)
finally:
    presentation.dispose()

เปลี่ยนตัวเลือกการเล่นเสียง

Aspose.Slides for Python via Java ช่วยให้คุณปรับตัวเลือกที่ควบคุมการเล่นเสียงหรือคุณสมบัติต่าง ๆ ได้ ตัวอย่างเช่น สามารถปรับระดับเสียง ตั้งค่าให้เสียงวนซ้ำ หรือแม้แต่ซ่อนไอคอนเสียง

ตัวเลือกเสียง ใน Microsoft PowerPoint:

example1_image

ตัวเลือกเสียง ของ PowerPoint ที่สอดคล้องกับคุณสมบัติ Aspose.Slides AudioFrame :

  • เริ่ม รายการแบบดรอปดาวน์ตรงกับเมธอด setPlayMode
  • ระดับเสียง ตรงกับเมธอด setVolume
  • เล่นต่อเนื่องข้ามสไลด์ ตรงกับเมธอด setPlayAcrossSlides
  • วนซ้ำจนกว่าจะหยุด ตรงกับเมธอด setPlayLoopMode
  • ซ่อนระหว่างการแสดง ตรงกับเมธอด setHideAtShowing
  • รีวินด์หลังการเล่น ตรงกับเมธอด setRewindAudio

การแก้ไข ของ PowerPoint ที่สอดคล้องกับคุณสมบัติ Aspose.Slides AudioFrame :

  • จางเข้า ตรงกับเมธอด setFadeInDuration
  • จางออก ตรงกับเมธอด setFadeOutDuration
  • ตัดเวลาเริ่มต้นของเสียง ตรงกับเมธอด setTrimFromStart
  • ตัดเวลาเริ่มสุดของเสียง มีค่าเท่ากับระยะเวลาของเสียงลบด้วยค่าที่ตั้งด้วยเมธอด setTrimFromEnd

ตัวควบคุม ระดับเสียง บนแผงควบคุมเสียงของ PowerPoint สอดคล้องกับเมธอด setVolumeValue ให้คุณเปลี่ยนระดับเสียงเป็นเปอร์เซ็นต์

นี่คือวิธีเปลี่ยนตัวเลือกการเล่นเสียง:

  1. สร้าง หรือรับเฟรมเสียง
  2. ตั้งค่าใหม่สำหรับคุณสมบัติของเฟรมเสียงที่ต้องการปรับ
  3. บันทึกไฟล์ PowerPoint ที่แก้ไขแล้ว

โค้ด Python นี้แสดงการปรับตัวเลือกเสียง:

import jpype
import asposeslides

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

from asposeslides.api import AudioFrame, AudioPlayModePreset, AudioVolumeMode, Presentation, SaveFormat

presentation = Presentation("AudioFrameEmbed_out.pptx")
try:
    audio_frame = presentation.getSlides().get_Item(0).getShapes().get_Item(0)
    if isinstance(audio_frame, AudioFrame):
        # เล่นเมื่อคลิกที่ระดับเสียงต่ำ, ข้ามสไลด์, ไม่วนซ้ำ.
        audio_frame.setPlayMode(AudioPlayModePreset.OnClick)
        audio_frame.setVolume(AudioVolumeMode.Low)
        audio_frame.setPlayAcrossSlides(True)
        audio_frame.setPlayLoopMode(False)
        # ซ่อนเฟรมระหว่างการแสดงสไลด์และรีวินด์หลังการเล่น.
        audio_frame.setHideAtShowing(True)
        audio_frame.setRewindAudio(True)
        presentation.save("AudioFrameEmbed_changed.pptx", SaveFormat.Pptx)
    else:
        print("The shape is not an audio frame.")
finally:
    presentation.dispose()

ตัวอย่าง Python นี้แสดงวิธีเพิ่มเฟรมเสียงใหม่พร้อมเสียงฝัง การตัดและการตั้งค่าระยะเวลาจาง:

from pathlib import Path

import jpype
import asposeslides

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

from asposeslides.api import Presentation, SaveFormat

presentation = Presentation()
try:
    slide = presentation.getSlides().get_Item(0)
    audio_data = Path("sampleaudio.mp3").read_bytes()
    java_audio_data = jpype.JArray(jpype.JByte)(audio_data)
    audio = presentation.getAudios().addAudio(java_audio_data)
    audio_frame = slide.getShapes().addAudioFrameEmbedded(50, 50, 100, 100, audio)

    # ตัด 1.5 วินาทีจากจุดเริ่มต้นและ 2 วินาทีจากจุดสิ้นสุด.
    audio_frame.setTrimFromStart(1500.0)
    audio_frame.setTrimFromEnd(2000.0)
    # ตั้งค่าการจางเข้าเป็น 200 มิลลิวินาทีและการจางออกเป็น 500 มิลลิวินาที.
    audio_frame.setFadeInDuration(200.0)
    audio_frame.setFadeOutDuration(500.0)
    presentation.save("AudioFrameTrimFade_out.pptx", SaveFormat.Pptx)
finally:
    presentation.dispose()

โค้ดตัวอย่างต่อไปนี้แสดงวิธีดึงเฟรมเสียงที่ฝังไว้และตั้งค่าระดับเสียงเป็น 85%:

import jpype
import asposeslides

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

from asposeslides.api import AudioFrame, Presentation, SaveFormat

presentation = Presentation("AudioFrameEmbed_out.pptx")
try:
    slide = presentation.getSlides().get_Item(0)
    audio_frame = slide.getShapes().get_Item(0)
    if isinstance(audio_frame, AudioFrame):
        audio_frame.setVolumeValue(85.0)
        presentation.save("AudioFrameValue_out.pptx", SaveFormat.Pptx)
    else:
        print("The shape is not an audio frame.")
finally:
    presentation.dispose()

จัดการคำบรรยายเสียง

Aspose.Slides อนุญาตให้คุณเพิ่มคำบรรยายแบบปิดให้กับเฟรมเสียงผ่านเมธอด getCaptionTracks เมธอดนี้คืนค่า CaptionsCollection ซึ่งช่วยให้คุณเพิ่มแทร็กคำบรรยาย WebVTT, วนซ้ำผ่านแทร็กที่มีอยู่ และลบออกเมื่อจำเป็น

เพิ่มคำบรรยายเสียง

ใช้เมธอด getCaptionTracks เพื่อแนบแทร็กคำบรรยายหนึ่งหรือหลายแทร็กไปยังเฟรมเสียง ตัวอย่างต่อไปนี้เพิ่มไฟล์เสียงลงในสไลด์ แล้วโหลดแทร็กคำบรรยายใหม่จากไฟล์ .vtt

from pathlib import Path

import jpype
import asposeslides

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

from asposeslides.api import Presentation, SaveFormat

presentation = Presentation()
try:
    audio_data = Path("audio.mp3").read_bytes()
    java_audio_data = jpype.JArray(jpype.JByte)(audio_data)
    audio = presentation.getAudios().addAudio(java_audio_data)
    slide = presentation.getSlides().get_Item(0)
    audio_frame = slide.getShapes().addAudioFrameEmbedded(10, 10, 50, 50, audio)

    # เพิ่มแทร็กคำบรรยายใหม่จากไฟล์ WebVTT.
    audio_frame.getCaptionTracks().add("New track", "track.vtt")
    presentation.save("audio_with_captions.pptx", SaveFormat.Pptx)
finally:
    presentation.dispose()

สกัดคำบรรยายเสียง

คุณสามารถวนซ้ำผ่านแทร็กคำบรรยายที่เชื่อมโยงกับเฟรมเสียงและบันทึกเป็นไฟล์ .vtt แต่ละแทร็กคำบรรยายเปิดเผยข้อมูลไบนารีและตัวระบุที่ไม่ซ้ำกันซึ่งสามารถใช้เมื่อต้องส่งออกคำบรรยาย

from pathlib import Path

import jpype
import asposeslides

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

from asposeslides.api import AudioFrame, Presentation

presentation = Presentation("audio_with_captions.pptx")
try:
    slide = presentation.getSlides().get_Item(0)
    for shape in slide.getShapes():
        if isinstance(shape, AudioFrame):
            for caption_track in shape.getCaptionTracks():
                # บันทึกแทร็กคำบรรยายเป็นไฟล์ .vtt.
                file_path = Path(str(caption_track.getCaptionId()) + ".vtt")
                caption_data = bytes(caption_track.getBinaryData())
                file_path.write_bytes(caption_data)
finally:
    presentation.dispose()

ลบคำบรรยายเสียง

เพื่อลบคำบรรยายจากเฟรมเสียง ให้ใช้เมธอดของ CaptionsCollection เช่น clear , remove หรือ removeAt ตัวอย่างต่อไปนี้ลบแทร็กคำบรรยายทั้งหมดจากเฟรมเสียง

import jpype
import asposeslides

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

from asposeslides.api import AudioFrame, Presentation, SaveFormat

presentation = Presentation("audio_with_captions.pptx")
try:
    slide = presentation.getSlides().get_Item(0)
    audio_frame = slide.getShapes().get_Item(0)
    if isinstance(audio_frame, AudioFrame):
        audio_frame.getCaptionTracks().clear()
        presentation.save("audio_without_captions.pptx", SaveFormat.Pptx)
    else:
        print("The shape is not an audio frame.")
finally:
    presentation.dispose()

สกัดเสียง

Aspose.Slides for Python via Java ช่วยให้คุณสกัดเสียงที่ใช้ในการเปลี่ยนสไลด์โชว์ ตัวอย่างเช่น สามารถสกัดเสียงที่ใช้ในสไลด์เฉพาะได้

  1. สร้างอินสแตนซ์ของคลาส Presentation และโหลดพรีเซนเทชันที่มีเสียง
  2. รับอ้างอิงถึงสไลด์ที่เกี่ยวข้องตามดัชนีของมัน
  3. เข้าถึง slideshow transitions ของสไลด์นั้น
  4. สกัดเสียงเป็นข้อมูลไบต์

โค้ด Python นี้แสดงวิธีสกัดเสียงที่ใช้ในสไลด์:

import jpype
import asposeslides

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

from asposeslides.api import Presentation

presentation = Presentation("AudioSlide.pptx")
try:
    slide = presentation.getSlides().get_Item(0)
    transition = slide.getSlideShowTransition()
    sound = transition.getSound()
    if sound is not None:
        audio_data = sound.getBinaryData()
        print("Length:", len(audio_data))
    else:
        print("The slide transition has no sound.")
finally:
    presentation.dispose()

คำถามที่พบบ่อย

ฉันสามารถใช้ทรัพยากรเสียงเดียวกันหลายสไลด์โดยไม่ทำให้ไฟล์ใหญ่ขึ้นได้หรือไม่?

ใช่ เพิ่มเสียงเพียงครั้งเดียวใน audio collection ที่แชร์ของพรีเซนเทชันและสร้างเฟรมเสียงเพิ่มเติมที่อ้างอิงถึงทรัพยากรนั้น จะช่วยหลีกเลี่ยงการทำซ้ำข้อมูลสื่อและทำให้ขนาดพรีเซนเทชันคงที่

ฉันสามารถเปลี่ยนเสียงในเฟรมเสียงที่มีอยู่โดยไม่ต้องสร้างรูปแบบใหม่ได้หรือไม่?

ใช่ สำหรับเสียงแบบลิงก์ ให้อัปเดต link path ให้ชี้ไปยังไฟล์ใหม่ สำหรับเสียงฝัง ให้สลับอ็อบเจกต์ embedded audio กับออบเจกต์อื่นจาก audio collection ของพรีเซนเทชัน รูปแบบของเฟรมและการตั้งค่าการเล่นส่วนใหญ่จะคงเดิม

การตัดทำให้ข้อมูลเสียงพื้นฐานที่เก็บในพรีเซนเทชันเปลี่ยนหรือไม่?

ไม่ การตัดปรับเพียงขอบเขตการเล่นเท่านั้น ไบต์เสียงต้นฉบับยังคงไม่ถูกแก้ไขและสามารถเข้าถึงได้ผ่านเสียงฝังหรือ audio collection ของพรีเซนเทชัน