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

ภาพรวม

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

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

Aspose.Slides สำหรับ Python ผ่าน .NET ให้คุณเพิ่มไฟล์เสียงลงในสไลด์ ไฟล์เสียงจะถูกฝังในสไลด์เป็นเฟรมเสียง

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

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

import aspose.slides as slides

# สร้างอินสแตนซ์คลาสการนำเสนอที่แทนไฟล์การนำเสนอ
with slides.Presentation() as pres:
    # ดึงสไลด์แรก
    sld = pres.slides[0]

    # โหลดไฟล์เสียง wav ไปเป็นสตรีม
    with open(path + "sampleaudio.wav", "rb") as in_file:
        # เพิ่มเฟรมเสียง
        audio_frame = sld.shapes.add_audio_frame_embedded(50, 150, 100, 100, in_file)

        # ตั้งค่าโหมดการเล่นและระดับเสียงของออดิโอ
        audio_frame.play_mode = slides.AudioPlayModePreset.AUTO
        audio_frame.volume = slides.AudioVolumeMode.LOUD

        # บันทึกไฟล์ PowerPoint ลงดิสก์
        pres.save("AudioFrameEmbed_out.pptx", slides.export.SaveFormat.PPTX)

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

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

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

import aspose.slides as slides

with slides.Presentation() as presentation:
    slide = presentation.slides[0]

    # เพิ่มเฟรมเสียงไปยังสไลด์ด้วยตำแหน่งและขนาดที่ระบุ.
    with open("sample2.mp3", "rb") as audio_fs:
        audioFrame = slide.shapes.add_audio_frame_embedded(150, 100, 50, 50, audio_fs)

        # เพิ่มรูปภาพไปยังทรัพยากรของงานนำเสนอ.
        with open("eagle.jpeg", "rb") as image_fs:
            data = image_fs.read()
        
        audioImage = presentation.images.add_image(data)

        # ตั้งค่ารูปภาพสำหรับเฟรมเสียง.
        audioFrame.picture_format.picture.image = audioImage
        
        #บันทึกงานนำเสนอที่แก้ไขแล้วลงดิสก์
        presentation.save("example_out.pptx", slides.export.SaveFormat.PPTX)

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

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

The Audio Options pane in Microsoft PowerPoint:

example1_image

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

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

The PowerPoint Volume controll on the audio control panel corresponds to the AudioFrame.volume_value property. It lets you change the audio volume as a percentage.

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

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

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

import aspose.slides as slides

with slides.Presentation("AudioFrameEmbed_out.pptx") as pres:
    # ดึงรูปร่าง AudioFrame
    audioFrame = pres.slides[0].shapes[0]

    # ตั้งค่าโหมดการเล่นให้เล่นเมื่อคลิก
    audioFrame.play_mode = slides.AudioPlayModePreset.ON_CLICK

    # ตั้งค่าปริมาณเสียงเป็นต่ำ
    audioFrame.volume = slides.AudioVolumeMode.LOW

    # ตั้งค่าให้เสียงเล่นผ่านหลายสไลด์
    audioFrame.play_across_slides = True

    # ปิดการวนลูปสำหรับเสียง
    audioFrame.play_loop_mode = False

    # ซ่อน AudioFrame ในระหว่างการแสดงสไลด์
    audioFrame.hide_at_showing = True

    # รีเวินด์เสียงกลับไปเริ่มต้นหลังการเล่น
    audioFrame.rewind_audio = True

    # บันทึกไฟล์ PowerPoint ลงดิสก์
    pres.save("AudioFrameEmbed_changed.pptx", slides.export.SaveFormat.PPTX)

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

with slides.Presentation() as pres:
    slide = pres.slides[0]

    with open("sampleaudio.mp3", "rb") as audio_stream:
        audio_data = audio_stream.read()

    audio = pres.audios.add_audio(audio_data)
    audio_frame = slide.shapes.add_audio_frame_embedded(50, 50, 100, 100, audio)

    # กำหนดจุดเริ่มต้นการตัดเป็น 1.5 วินาที
    audio_frame.trim_from_start = 1500.0
    # กำหนดจุดสิ้นสุดการตัดเป็น 2 วินาที
    audio_frame.trim_from_end = 2000.0

    # กำหนดระยะเวลาเฟดอินเป็น 200 มิลลิวินาที
    audio_frame.fade_in_duration = 200.0
    # กำหนดระยะเวลาเฟดเอาต์เป็น 500 มิลลิวินาที
    audio_frame.fade_out_duration = 500.0

    pres.save("AudioFrameTrimFade_out.pptx", slides.export.SaveFormat.PPTX)

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

with slides.Presentation("AudioFrameEmbed_out.pptx") as pres:
    # ดึงรูปร่างเฟรมเสียง
    audio_frame = pres.slides[0].shapes[0]

    # ตั้งค่าปริมาณเสียงเป็น 85%
    audio_frame.volume_value = 85.0

    pres.save("AudioFrameValue_out.pptx", slides.export.SaveFormat.PPTX)

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

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

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

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

with slides.Presentation() as presentation:
    with open("audio.mp3", "rb") as audio_stream:
        audio = presentation.audios.add_audio(audio_stream.read())

    slide = presentation.slides[0]
    audio_frame = slide.shapes.add_audio_frame_embedded(10, 10, 50, 50, audio)

    # เพิ่มแทร็กคำบรรยายใหม่จากไฟล์ WebVTT.
    audio_frame.caption_tracks.add("New track", "track.vtt")

    presentation.save("audio_with_captions.pptx", slides.export.SaveFormat.PPTX)

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

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

with slides.Presentation("audio_with_captions.pptx") as presentation:
    slide = presentation.slides[0]
    for shape in slide.shapes:
        if isinstance(shape, slides.AudioFrame):
            audio_frame = shape
            for caption_track in audio_frame.caption_tracks:
                # บันทึกแทร็กคำบรรยายเป็นไฟล์ .vtt
                with open(f"{caption_track.caption_id}.vtt", "wb") as track_stream:
                    track_stream.write(caption_track.binary_data)

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

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

with slides.Presentation("audio_with_captions.pptx") as presentation:
    slide = presentation.slides[0]
    audio_frame = slide.shapes[0]  # ประเภท: slides.AudioFrame

    # ลบแทร็กคำบรรยายทั้งหมดจากเฟรมเสียง.
    audio_frame.caption_tracks.clear()

    presentation.save("audio_without_captions.pptx", slides.export.SaveFormat.PPTX)

สกัดเสียง

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

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

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

import aspose.slides as slides

#with slides.Presentation("AudioSlide.pptx") as pres:
with slides.Presentation("AudioFrameEmbed_changed.pptx") as pres:
    # เข้าถึงสไลด์ที่ต้องการ
    slide = pres.slides[0]  

    # ดึงเอฟเฟกต์การเปลี่ยนสไลด์โชว์สำหรับสไลด์
    transition = slide.slide_show_transition

    #สกัดเสียงเป็นอาร์เรย์ไบต์
    audio = transition.sound.binary_data

    print("Length: " + str(len(audio)))

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

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

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

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

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

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

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