我有一个想法,希望通过Python脚本控制媒体播放器,比如VLC,但由于我是新手,不知道如何实现。具体来说,我想从Python脚本中获取并设置VLC的音量值。我不需要整个代码,只需要一些提示和建议,先行谢过。
我有一个想法,希望通过Python脚本控制媒体播放器,比如VLC,但由于我是新手,不知道如何实现。具体来说,我想从Python脚本中获取并设置VLC的音量值。我不需要整个代码,只需要一些提示和建议,先行谢过。
安装 python-vlc
pip install python-vlc
只需更改路径,就可以继续进行了。
from vlc import Instance
import time
import os
class VLC:
def __init__(self):
self.Player = Instance('--loop')
def addPlaylist(self):
self.mediaList = self.Player.media_list_new()
path = r"C:\Users\dell5567\Desktop\engsong"
songs = os.listdir(path)
for s in songs:
self.mediaList.add_media(self.Player.media_new(os.path.join(path,s)))
self.listPlayer = self.Player.media_list_player_new()
self.listPlayer.set_media_list(self.mediaList)
def play(self):
self.listPlayer.play()
def next(self):
self.listPlayer.next()
def pause(self):
self.listPlayer.pause()
def previous(self):
self.listPlayer.previous()
def stop(self):
self.listPlayer.stop()
创建一个对象
player = VLC()
player.addPlaylist()
player.play()
time.sleep(9)
播放下一首歌曲
player.next()
time.sleep(9)
暂停歌曲
player.pause()
time.sleep(9)
恢复播放歌曲
player.play()
time.sleep(9)
player.previous()
time.sleep(9)
停止歌曲
player.stop()
使用TCP套接字连接控制vlc比使用vlc-ctrl更好。我在树莓派上尝试了vlc-ctrl,但无法满足我的期望。因此,我决定从socket连接控制vlc播放器。
步骤:
1)你需要从命令提示符或shell中运行'vlc --intf rc --rc-host 127.0.0.1:44500'
[启动vlc播放器],以启用tcp连接控制vlc播放器...你可以使用subprocess从python中这样启动vlc。
2)以下是我的示例脚本,用于从Python进行控制:
class player():
def __init__(self):
self.is_initiated = False
self.SEEK_TIME = 20
self.MAX_VOL = 512
self.MIN_VOL = 0
self.DEFAULT_VOL = 256
self.VOL_STEP = 13
self.current_vol = self.DEFAULT_VOL
def toggle_play(self):
if not self.is_initiated:
self.is_initiated = True
self.thrededreq("loop on")
self.thrededreq("random on")
self.thrededreq("add /home/pi/Desktop/Music")#adding the music folder
print("Init Playing")
return
self.thrededreq("pause")
print("Toggle play")
def next(self):
if not self.is_initiated:
self.toggle_play()
return
self.thrededreq("next")
print("Next")
pass
def prev(self):
if not self.is_initiated:
self.toggle_play()
return
self.thrededreq("prev")
print("Previous")
pass
def volup(self):
self.current_vol = self.current_vol + self.VOL_STEP
self.thrededreq("volume " + str(self.current_vol))
print("Volume up")
pass
def voldown(self):
self.current_vol = self.current_vol - self.VOL_STEP
self.thrededreq("volume " + str(self.current_vol))
print("Volume Down")
pass
def seek(self, forward: bool):
length = self._timeinfo("get_length")
print(length)
cur = self._timeinfo("get_time")
print(cur)
if (forward):
seekable = cur + self.SEEK_TIME
else:
seekable = cur - self.SEEK_TIME
if seekable > length:
seekable = length - 5
if seekable < 0:
seekable = 0
self.thrededreq("seek " + str(seekable))
print("Seek: ",seekable," Cur: ",cur,"Len: ",length)
pass
def _timeinfo(self, msg):
length = self.req(msg, True).split("\r\n")
if (len(length) < 2):
return None
length = length[1].split(" ")
if (len(length) < 2):
return None
try:
num = int(length[1])
return num
except:
return None
def req(self, msg: str, full=False):
try:
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as sock:
# Connect to server and send data
sock.settimeout(0.7)
sock.connect(('127.0.0.1', 44500))
response = ""
received = ""
sock.sendall(bytes(msg + '\n', "utf-8"))
# if True:
try:
while (True):
received = (sock.recv(1024)).decode()
response = response + received
if full:
b = response.count("\r\n")
if response.count("\r\n") > 1:
sock.close()
break
else:
if response.count("\r\n") > 0:
sock.close()
break
except:
response = response + received
pass
sock.close()
return response
except:
return None
pass
def thrededreq(self, msg):
Thread(target=self.req, args=(msg,)).start()
#'vlc --intf rc --rc-host 127.0.0.1:44500' you need to run the vlc player from command line to allo controlling it via TCP
Player=player()
player.toggle_play()
#player.next()
#player.prev()
import socket
。2)添加了import time
并在代码结尾和操作之间使用了time.sleep(secs),因为该代码为每个发送的消息创建一个新的套接字。也许Windows无法处理太快创建套接字的情况?我本来想编辑代码的,但是SO说编辑队列已满。最后一件事,在Windows中,媒体/音乐的路径需要转义,即d:\\folder\\sub
。 - Dude named Benpip install vlc-ctrl
test.py:(增加音量)
import subprocess
subprocess.Popen(['vlc-ctrl', 'volume', '+10%'])
使用以下命令运行代码:
python test.py
这里有关于 vlc-ctrl 模块的更多文档链接。
sleep()
的意义是什么?谢谢! - beechovsky