在Python上播放mp3歌曲

86
我想从Python播放我的音乐(mp3),你能给我一个最简单的命令吗?
这不正确:
import wave
w = wave.open("e:/LOCAL/Betrayer/Metalik Klinik1-Anak Sekolah.mp3","r")

1
请查看pygame,并阅读raspberrypi.stackexchange上的这个问题 - Steinar Lima
可能是使用Python播放MP3文件的重复问题。 - user
尝试使用just_playback - droptop
17个回答

122

获取VLC Python模块,即vlc.py文件,并将其放入site-packages中,该模块提供libVLC的完整支持。然后:

>>> import vlc
>>> p = vlc.MediaPlayer("file:///path/to/track.mp3")
>>> p.play()

你可以通过以下方式停止它:

>>> p.stop()

那个模块提供了丰富的功能(例如 VLC 媒体播放器的几乎所有功能),但这是播放一个 MP3 最简单有效的方法。

您可以使用 os.path 来查找 MP3 的路径,只需提供文件名并可能限制搜索目录即可。

完整的文档和预先准备的模块在这里。当前版本兼容 Python 3。


6
由于VLC已经完成了99%的工作,因此这可能是最佳答案。虽然PyPi版本已过时,但VLC维基是一个很好的替代来源-https://wiki.videolan.org/Python_bindings - David
1
我认为PyPI版本是从较旧的VLC版本编译而来的,2.1.x和2.2之间肯定存在差异,这破坏了一些东西。使用vlc.py生成从源代码编译的VLC应该总是会产生一个可工作的副本,因为vlc.py将始终具有正确的ctypes设置,以用于编译版本的libvlc。 - Ben
取消那个,PyPI上的版本是完全不相关的东西。这是某人编写自己的包装器并未检查原始项目命名冲突的结果,类似于python-gnupg与gnupg之间的冲突(除了在那种情况下,第二个项目有意破坏第一个项目)。毫无疑问还有其他类似的情况。我想这就是Java做对了的一件事情,以确保不同和唯一的名称。 - Ben
3
工作了,但有一个警告。它播放了一会儿然后就结束了(因为这是我的程序的最后一行)。我不得不再加上一行 time.sleep(10) 然后这个音频才完全播放。 - Nagabhushan S N
2
在2020年的Ubuntu上:当VLC通过snap安装(这是VLC当前推荐的方式)时,这种方法不起作用。只需通过sudo apt-get install vlc进行安装即可。 - JayL

88

试试这个。它很简单,但可能不是最好的方法。

from pygame import mixer  # Load the popular external library

mixer.init()
mixer.music.load('e:/LOCAL/Betrayer/Metalik Klinik1-Anak Sekolah.mp3')
mixer.music.play()

请注意pygame对于MP3的支持是有限的。另外,正如Samy Bencherif所指出的那样,在运行上述代码时不会弹出任何愚蠢的pygame窗口。
安装很简单 -
$pip install pygame

更新:

上述代码仅在交互式运行时播放音乐,因为play()调用将立即执行并退出脚本。为避免这种情况,当作为脚本运行代码时,您可以改用以下代码等待音乐播放完成后退出程序。

import time
from pygame import mixer


mixer.init()
mixer.music.load("/file/path/mymusic.ogg")
mixer.music.play()
while mixer.music.get_busy():  # wait for music to finish playing
    time.sleep(1)

1
测试pygame的混音器,它似乎比pyglet的媒体播放器要少得多。可能是因为pyglet的播放器也是一个视频播放器,所以如果你不需要视频,它有点过度杀伤力!很遗憾pybass没有Python 3支持。那曾经是一种绝佳选择。 - Grimmy
1
如果您因为不想弹出pygame窗口而对使用此功能感到担忧,请注意没有pygame.init,因此这将是无窗口的(在mbp上测试过)。 - Samie Bencherif
需要在此之后“释放”文件或混音器吗? - Filipe Pinto
我使用gTTS生成了一个MP3音频文件,需要将输出保存到磁盘。之后,我使用上面的代码来重现/播放输出。由于gTTS无法第二次覆盖文件,因此我只能执行一次。我也无法在Windows资源管理器中删除该文件,因为它被Python“锁定”。如果不使用上述代码,一切都正常。 - Filipe Pinto
在Raspbian Lite上,这需要安装libsdl2-dev软件包(参见https://dev59.com/Sonda4cB1Zd3GeqPEdWd#64332558),可能还需要其他软件包。由于依赖关系,这会拉取许多其他软件包。 - Vlad
显示剩余8条评论

41

另请参阅playsound

pip install playsound
import playsound
playsound.playsound('/path/to/filename.mp3', True)

9
很遗憾,这个库在Linux上存在问题:https://github.com/TaylorSMarks/playsound/issues/1 - Gorkamorka
1
问题已经解决:D - TheTechRobo the Nerd
错误- 尝试在树莓派上使用 https://gist.github.com/gartha1/e287100003f93b01bdaa9f565590dc47 - barlop
@barlop - 我在Github上的这条评论中写了我认为支持Rasperry Pi所需的步骤。我认为完成所有工作可能需要一到三个小时的时间。如果你能让Travis运行并通过测试,那么请随意去做它并提交PR,我很愿意接受它。https://github.com/TaylorSMarks/playsound/issues/81#issuecomment-890659689 - ArtOfWarfare
看起来不错,但似乎没有任何事件,因此我无法控制声音何时结束。 - Hola Soy Edu Feliz Navidad

23

我尝试了这里列出的大多数选项,并发现以下结果:

对于Windows 10: 类似于@Shuge Lee的答案;

from playsound import playsound
playsound('/path/file.mp3')

您需要运行:

$ pip install playsound

如果您使用的是Mac:

只需尝试以下操作,它将运行操作系统命令:

import os
os.system("afplay file.mp3") 

playsound requires pygame - Leopd
1
@leopd 怎么办?我没有pygame,但我可以使用playsound。 - TheTechRobo the Nerd
我不得不尝试一种替代方案来取代playsound,因为在播放大约30个mp3文件后,它停止工作了,每次都是相同的计数(未找到,已脚本化)- 到目前为止,pygame的混音器表现良好/在相同的测试后没有失败。 - Angry 84

21

如果这里还没有提到,但可能是最简单的解决方案之一:

import subprocess

def play_mp3(path):
    subprocess.Popen(['mpg123', '-q', path]).wait()

它取决于任何符合mpg123标准的播放器,例如Debian可使用以下命令获取:

它取决于任何符合 mpg123 标准的播放器,例如 Debian 可以使用以下命令获取:

apt-get install mpg123
或者
apt-get install mpg321

15
你正在尝试播放一个 .mp3 文件,就好像它是一个 .wav 文件。
你可以尝试使用 pydub 将其转换为 .wav 格式,然后将其输入到 pyAudio 中。 示例:
from pydub import AudioSegment

song = AudioSegment.from_mp3("original.mp3")
song.export("final.wav", format="wav")

另外,如其他答案中所提到的那样,您也可以使用pygame


10
如果您正在使用Jupyter(以前称为IPython)笔记本电脑工作,您可以:
import IPython.display as ipd
ipd.Audio(filename='path/to/file.mp3')

8

另一个快速简便的选择是...

import os

os.system('start path/to/player/executable path/to/file.mp3')

现在你可能需要做一些小的改动才能使其正常工作。例如,如果播放器需要额外的参数或者你不需要指定完整路径。但这是一种简单的方法。


2
仅限于Windows操作系统 - TheTechRobo the Nerd

8
一个简单的解决方案:
import webbrowser
webbrowser.open("C:\Users\Public\Music\Sample Music\Kalimba.mp3")

干杯...


1
可爱,但如果唯一的浏览器是lynx,或者即使其他浏览器在系统上可用,用户只能通过命令行访问怎么办?虽然如此,这是一个不错的快速且简单的工作站解决方案。 - Ben
谢谢你,迈克尔。但是我怎么能添加“播放列表”而不是一个文件? - Amaroc

7
我遇到了这个问题,没有找到我喜欢的解决方案,因此我为mpg321创建了一个Python封装程序:mpyg321
您需要在计算机上安装mpg123或mpg321,然后执行pip install mpyg321
使用相当简单:
from mpyg321.mpyg321 import MPyg321Player
from time import sleep

player = MPyg321Player()       # instanciate the player
player.play_song("sample.mp3") # play a song
sleep(5)
player.pause()                 # pause playing
sleep(3)
player.resume()                # resume playing
sleep(5)
player.stop()                  # stop playing
player.quit()                  # quit the player

您还可以为多个事件定义回调函数(例如用户暂停音乐、歌曲结束等)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接