【问题标题】:Python VLC only works in python shellPython VLC 仅适用于 python shell
【发布时间】:2021-02-06 22:33:57
【问题描述】:

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

import vlc

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

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

【问题讨论】:

  • 在控制台/终端运行python script.py,看看是否显示错误信息。
  • 也许您安装了两个 Python,并且您使用一个 Python 运行 shell 和另一个 Python 运行脚本 - 第二个 Python 可能没有安装 vlc
  • 我在终端运行了,但是没有显示错误信息。
  • 如果我在 p.play() 调用之后输入一个空输入,它也可以在文件中工作,但我需要它在没有它的情况下工作
  • 现在我明白了 - play() 开始在单独的线程中播放音乐,因此您可以在主线程中运行其他代码。但是,如果您不运行其他代码(例如input()),那么它会结束脚本(并结束 Python)并停止线程与音乐。您必须在主线程中运行一些代码 - 以继续运行 Python 和线程与音乐。它可以是while True: pass 而不是input()。也许模块具有检查音乐是否完成的功能-然后您可以使用它退出while True

标签: python mp3 vlc python-vlc


【解决方案1】:

play() 开始在单独的线程中播放音乐,因此在主线程中您可以运行其他代码 - 即。您可以创建带有按钮的 GUI 来控制音乐,或显示此音乐的动画。但是,如果您不运行其他代码(例如 input()),那么它会结束脚本并结束 Python 并停止线程与音乐。

您必须在主线程中运行一些代码才能继续运行 Python,然后线程播放音乐。

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

在示例中,我使用p.is_playing() 运行while-loop,直到音乐结束。

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 显示带有按钮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()我在MediaPlayer的文档中找到

【讨论】:

  • 我正在使用 tkinter 和按钮停止音乐的示例。
  • 我用tkinter添加了示例
猜你喜欢
  • 2017-11-29
  • 2015-09-13
  • 2018-07-06
  • 1970-01-01
  • 2019-08-09
  • 2019-03-15
  • 2016-11-02
  • 2016-09-14
  • 2016-10-20
相关资源
最近更新 更多