使用pythonvlc同时播放多个音频/视频文件

2024-10-01 02:23:21 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在开发一个tkinter应用程序,其中视频和声音排队并根据特定事件播放

为此,我使用PythonVLC,但我还没有找到一种同时播放多个声音的方法(除了多线程)。这些视频还需要自己的窗口才能运行

以下代码来自一个纯模块,用于测试此功能

import vlc

files = ['/home/silver/Desktop/hl1sfx/sound/gman/gman_potential.wav', 
         '/home/silver/Desktop/hl1sfx/sound/gman/gman_nasty.wav',
         '/home/silver/Desktop/hl1sfx/sound/gman/gman_nowork.wav',
         '/home/silver/Downloads/atlas_motor_jitter.mp4']



instance = vlc.Instance ()
medias = [instance.media_new (f) for f in files]
player = vlc.MediaPlayer ()

for m in medias:
    input ('>> ')
    player.set_media (m)
    player.play ()
    if player.is_playing ():
        p = vlc.MediaPlayer (m)
        p.play ()
    input ('next?')

甚至创建一个新的mediaplayer也不起作用。每个文件都有单独的线程是解决方案还是我忽略了python vlc中的某些功能


Tags: instance功能声音homesilver视频filesplayer
3条回答

如果您想使用python vlc

您可以使用“线程”和播放音乐或。。。在后台

import threading

def MusicPlay(Name):
    #Your Code

while True:
    threading.Thread(target=Delete, args=('NameOfMusic',)).start() 

使用mpyg321执行此操作:

pip3 install mpyg321
from mpyg321.mpyg321 import MPyg321Player

然后:

while True:
    player = MPyg321Player()
    player.play_song(input('Path To Song'))

谢谢

可以,但需要单独的实例。
下面是一个使用列表的简单而粗糙的方法。我相信随着时间的推移,你可以想出一个更干净的方法

import vlc
import time

files = ['./V2.mp4','./vp1.mp3','./V3.mp4'] 
instances = []
medias = []
players = []


for idx, fname in enumerate(files):
    print("Loading",fname)
    instances.append(vlc.Instance())
    medias.append(instances[idx].media_new(fname))

    players.append(vlc.MediaPlayer())
    players[idx].set_media(medias[idx])
    players[idx].play() 

player_count = players # copy of the players list so we don't modify during iteration
still_playing = True
time.sleep(0.5) # Wait for players to start

while still_playing:
    time.sleep(1)
    for p in players:
        if p.is_playing():
            continue
        else:
            player_count.remove(p)
            players = player_count # no point iterating over players that have finished
            print("Finished - Still playing ", str(len(player_count)))

    if len(player_count) != 0:
        continue
    else:
        still_playing = False

主持人删除了我对这个问题的另一个答案的质量的评论。您是否容忍“阅读手册”类型的回答或评论?你真丢脸。有了这样的态度,这个网站就要破产了。 我等待你的编辑

相关问题 更多 >