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