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 メソッドに対応します。音量をパーセンテージで変更できます。
オーディオ再生オプションを変更する手順は次のとおりです:
- Create またはオーディオフレームを取得します。
- 調整したいオーディオフレームプロパティに新しい値を設定します。
- 変更された 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 メソッドを使用して、1 つまたは複数のキャプショントラックをオーディオフレームに添付します。以下の例では、スライドにオーディオファイルを追加し、その後 .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 を新しいファイルを指すように更新します。埋め込み音声の場合は、プレゼンテーションの audio collection から別のオーディオを取得して、embedded audio オブジェクトと入れ替えます。フレームの書式設定やほとんどの再生設定はそのまま保持されます。
トリミングは、プレゼンテーションに保存されている元のオーディオデータを変更しますか?
いいえ。トリミングは再生範囲のみを調整し、元のオーディオバイトは変更されず、埋め込みオーディオまたはプレゼンテーションのオーディオコレクションを通じて引き続きアクセス可能です。