Python VLC 仅适用于 python shell

Python VLC only works in python shell

我想制作一个音乐播放器,我正在通过 vlc 模块播放音频文件。 我用这段代码来播放文件:

import vlc

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

在 python shell 中,它工作正常并播放文件。 如果我尝试使用一个文件并 运行 它,它会直接退出而不播放任何内容。

play() 开始在单独的线程中播放音乐,因此在主线程中您可以 运行 其他代码 - 即。您可以创建带有按钮的 GUI 来控制音乐,或显示此音乐的动画。但是如果你不 运行 其他代码 - 比如 input() - 然后它结束脚本并结束 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 一直运行 所以它可以一直 运行 与音乐串连。


编辑:

使用 tkinter 显示 window 和按钮 Exit 的示例。因为 windows 一直显示所以分离的线程可以一直播放音乐。

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你可以构建播放器。


vlc 有几个更复杂的例子,如何使用 vlc 和不同的 GUI

https://git.videolan.org/?p=vlc/bindings/python.git;a=tree;f=examples;hb=HEAD


函数is_playing() I found in documentation for MediaPlayer