HOWTO · Python

如何使用 Python 播放 Mp3 檔案

學習用 Python 播放 MP3 檔案的五種方法,包括安裝、路徑和平台方面的指導。

本頁內容

要用 Python 播放 MP3 檔案,短小的播放腳本可以使用 playsound,需要混音器控制時可以使用 pygame,在有 VLC 可用時可以使用 python-vlc。Python 還可以讓瀏覽器處理程序透過 webbrowser 開啟檔案,或者啟動已安裝的系統播放器。在每個範例中,請將 sample.mp3 替換為你的音訊檔案的路徑。相對路徑以程序的目前工作目錄為基準解析。

使用 playsound 播放 MP3 檔案

使用 python -m pip install playsound 安裝第三方 playsound 套件,然後以檔案路徑呼叫其播放函式。它支援包括 MP3 和 WAV 在內的常見音訊格式;播放效果取決於該套件所用的平台音訊後端。

這個完整的腳本會播放目前工作目錄中的 sample.mp3。請先安裝該套件並將檔案放在那裡,或者將 track 改為正確的路徑。播放需要可用的音訊裝置以及該套件支援的平台音訊後端。

from pathlib import Path

track = Path("sample.mp3")
if track.is_file():
    from playsound import playsound

    playsound(str(track))

使用 pygame 播放 MP3 檔案

使用 python -m pip install pygame 安裝 pygame。它的混音器 API 會載入曲目並開始播放。MP3 的解碼取決於所使用的 pygame 和 SDL_mixer 建置版本,因此如果已安裝的建置版本無法解碼你的 MP3,WAV 檔案是一個實用的後備選擇。參見如何將 MP3 檔案轉換為 WAV。

這個腳本會從目前工作目錄載入 sample.mp3。請先安裝 pygame 並提供音訊後端。混音器的 play() 呼叫會以非同步方式開始播放;迴圈會讓腳本一直執行,直到曲目播放結束。MP3 的解碼取決於所使用的 pygame 和 SDL_mixer 建置版本,因此如果已安裝的建置版本無法解碼該曲目,WAV 檔案是一個實用的後備選擇。

from pathlib import Path

track = Path("sample.mp3")
if track.is_file():
    import time

    import pygame

    pygame.mixer.init()
    pygame.mixer.music.load(str(track))
    pygame.mixer.music.play()
    while pygame.mixer.music.get_busy():
        time.sleep(0.1)

使用 python-vlc 播放 MP3 檔案

python-vlc 是 pip 上的發行名稱;它在 Python 中的匯入名稱是 vlc。使用 python -m pip install python-vlc 安裝該綁定。該綁定使用 VLC 的原生媒體框架,因此還需要安裝相容的 VLC 執行階段,並確保程序可以存取它。所需的設定可能因作業系統而異。

這個腳本使用目前工作目錄中的 sample.mp3 檔案。執行之前,請同時安裝 python-vlc 綁定和相容的 VLC 執行階段。player.play() 會以非同步方式開始播放,因此在曲目播放期間,提示會讓程序保持執行;想停止時按 Enter 鍵即可。另外還需要音訊輸出。

from pathlib import Path

track = Path("sample.mp3")
if track.is_file():
    import vlc

    player = vlc.MediaPlayer(str(track))
    player.play()
    input("Press Enter to stop playback.\n")
    player.stop()

使用 webbrowser 開啟 MP3 檔案

webbrowser 是 Python 標準函式庫的一部分,因此無需透過 pip 安裝。這個完整的範例會讓系統設定的瀏覽器開啟目前工作目錄中 sample.mp3 的檔案 URL。將路徑解析並轉換為 URI 可以處理空格等路徑字元。

from pathlib import Path
import webbrowser

track = Path("sample.mp3")
if track.is_file():
    webbrowser.open(track.resolve().as_uri())

這會讓瀏覽器或已註冊的處理程序開啟該檔案。它並不能保證瀏覽器分頁會播放音訊;具體行為取決於瀏覽器和作業系統。

從 Python 啟動系統播放器

使用帶參數清單的 subprocess.run 來啟動已安裝的命令列播放器。這樣可以避免用檔案路徑拼裝 shell 命令。播放器需要單獨安裝;其可用性和命令名稱取決於作業系統。下面的範例在 Linux 上使用 mpg123,在 macOS 上使用 afplay。

這個完整的腳本在 Linux 上使用 mpg123、在 macOS 上使用 afplay 來播放目前工作目錄中的 sample.mp3。請單獨安裝所選的播放器。參數清單形式會把路徑作為單個參數傳遞,即使路徑中包含空格也是如此。check=True 會將播放器的非零結束報告為 Python 錯誤,這在診斷啟動失敗時很有用。

from pathlib import Path
import subprocess
import sys

track = Path("sample.mp3")
if track.is_file():
    if sys.platform.startswith("linux"):
        player = "mpg123"
    elif sys.platform == "darwin":
        player = "afplay"
    else:
        raise SystemExit("Choose a player command for this operating system.")

    subprocess.run([player, str(track)], check=True)

在選擇播放方法之前,如果想做一個簡單的路徑檢查,這個獨立的 Python 範例會列印目前工作目錄中某個路徑的檔案名稱:

from pathlib import Path

track = Path("sample.mp3")
print(track.name)
sample.mp3