使用 Python 在簡報中管理音訊
概觀
本文說明如何在 Aspose.Slides 中處理音訊框架。它展示了如何將嵌入式音訊新增到投影片、客製化音訊框架的縮圖、設定播放選項(如音量、循環、隱藏、修剪與淡入淡出時間),以及如何擷取投影片放映過渡時使用的音訊。
建立音訊框架
Aspose.Slides for Python via Java 允許您將音訊檔案新增到投影片。音訊檔案會以音訊框架的形式嵌入於投影片中。
- 建立 Presentation 類別的實例。
- 依索引取得投影片的參考。
- 讀取您想要嵌入於投影片的音訊檔案。
- 將嵌入式音訊框架(包含音訊檔案)新增至投影片。
- 使用由 AudioFrame 物件公開的 setPlayMode 與 setVolume。
- 儲存已修改的簡報。
以下 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 中的 Audio Options 面板:

PowerPoint Audio Options 與 Aspose.Slides AudioFrame 屬性對應如下:
- Start 下拉清單對應 setPlayMode 方法
- Volume 對應 setVolume 方法
- Play Across Slides 對應 setPlayAcrossSlides 方法
- Loop until Stopped 對應 setPlayLoopMode 方法
- Hide During Show 對應 setHideAtShowing 方法
- Rewind after Playing 對應 setRewindAudio 方法
PowerPoint Editing 選項與 Aspose.Slides AudioFrame 屬性對應如下:
- Fade In 對應 setFadeInDuration 方法
- Fade Out 對應 setFadeOutDuration 方法
- Trim Audio Start Time 對應 setTrimFromStart 方法
- Trim Audio End Time 的值等於音訊總長度減去 setTrimFromEnd 設定的值
PowerPoint 音訊控制面板上的 Volume control 對應 setVolumeValue 方法,可讓您以百分比調整音量。
變更音訊播放選項的步驟如下:
- 依照 建立音訊框架 的方式取得音訊框架。
- 為需要調整的音訊框架屬性設定新值。
- 儲存已修改的 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 允許您提取投影片放映過渡時使用的音效。例如,您可以提取特定投影片所使用的音效。
- 建立 Presentation 類別的實例,並載入含有音訊的簡報。
- 依索引取得相關投影片的參考。
- 透過 slideshow transitions 取得投影片的過渡設定。
- 將音效以位元組資料形式提取出來。
以下 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()
FAQ
我可以在多個投影片間重複使用相同的音訊資產,而不會使檔案大小膨脹嗎?
可以。將音訊一次加入簡報的共用 audio collection,然後建立其他引用該資產的音訊框架。這樣可避免媒體資料重複,控制簡報大小。
我可以在不重新建立圖形的情況下,替換現有音訊框架中的聲音嗎?
可以。對於連結音訊,更新 link path 以指向新檔案。對於嵌入式音訊,將 embedded audio 物件交換為簡報 audio collection 中的另一個音訊。框架的格式與大多數播放設定會保持不變。
修剪會改變簡報中儲存的音訊資料嗎?
不會。修剪僅調整播放的起迄範圍,原始音訊位元組保持不變,仍可透過嵌入式音訊或簡報的音訊集合存取。