Python VLC只在Python shell中工作

1 人关注

我想做一个音乐播放器,我通过vlc模块播放音频文件。 我使用这个代码来播放文件。

import vlc
p = vlc.MediaPlayer("music/song.mp3")
p.play()

在Python shell中,它可以正常工作并播放文件。 如果我试图使用一个文件并运行它,它只是退出,没有播放任何东西。

5 个评论
在控制台/终端运行 python script.py ,看看是否显示错误信息。
也许你安装了两个Python,你用一个Python来运行 shell ,另一个Python来运行脚本--而第二个Python可能没有安装 vlc
我在终端运行了它,但它没有显示错误信息。
如果我在p.play()调用后放一个空的输入,它也能在文件中工作,但我需要它在没有它的情况下工作。
现在我明白了-- play() 在分离的线程中开始播放音乐,所以在主线程中你可以运行其他代码。但如果你不运行其他代码--比如【替换代码1- 那么它就会结束脚本(并结束Python),并停止播放音乐的线程。你必须在主线程中运行一些代码--以便继续运行Python和音乐线程。它可以是 while True: pass 而不是 input() 。也许模块有检查音乐是否完成的功能,然后你可以用它来退出 while True
python
mp3
vlc
python-vlc
af2111
af2111
发布于 2021-02-07
1 个回答
furas
furas
发布于 2021-02-07
已采纳
0 人赞同

替换代码0】在分离的线程中开始播放音乐,所以在主线程中你可以运行其他代码--即你可以创建带有按钮的GUI来控制音乐,或者为这个音乐显示动画。但如果你不运行其他代码--比如 input() ,那么它就会结束脚本,并结束Python。- 那么它就会结束脚本,结束Python,并停止有音乐的线程。

你必须在主线程中运行一些代码来保持Python的运行,然后线程播放音乐。

甚至可以是 while True: pass 而不是 input()

在例子中,我用 p.is_playing() 来运行 while 的循环,直到它结束音乐。

import vlc
import time
p = vlc.MediaPlayer("music/song.mp3")
p.play()
print('is_playing:', p.is_playing())  # 0 = False
time.sleep(0.5)  # sleep because it needs time to start playing
print('is_playing:', p.is_playing())  # 1 = True
while p.is_playing():
    time.sleep(0.5)  # sleep to use less CPU

Python shell中,你一直在运行Python,所以它可以一直随着音乐运行线程。

EDIT:

例子中使用tkinter来显示带有按钮Exit的窗口。因为窗口是一直显示的,所以分离的线程可以一直播放音乐。

import vlc
import tkinter as tk
p = vlc.MediaPlayer("music/song.mp3")
p.play()
def on_click():
    p.stop()   # stop music
    root.destroy()  # close tkinter window
root = tk.Tk()
button = tk.Button(root, text="Exit", command=on_click)
button.pack()
root.mainloop()

使用tkinter你可以建立播放器。