Python VLC中的媒体列表



我需要用Python编写一个程序,使用Linux操作系统播放VLC播放器中文件夹中的视频文件。这些文件必须在播放列表中。代码:

import vlc
mrl1 = '....1.3gp'
mrl2 = '....2.3gp'
Instance = vlc.Instance('--input-repeat=-1', '--fullscreen', '--mouse-hide-timeout=0')
MediaList = Instance.media_list_new()
MediaList.add_media(Instance.media_new(mrl2))
MediaList.add_media(Instance.media_new(mrl1))
list_player = Instance.media_list_player_new()
list_player.set_media_list(MediaList)
list_player.next()
player.play()

问题是,在运行第一个视频后,播放器关闭。我认为它没有将第二个视频添加到列表中。

  1. 如何在Python为LibVLC绑定的播放列表中添加视频
  2. 有没有一个实用程序功能可以播放文件夹中的所有视频?UPD:我创建了一个播放列表,并在VLC播放器中运行它进行测试。只播放第一个视频。VLC也关闭之后。这个问题是什么

您应该将其放入一个循环中,等待每首歌曲播放完毕。例如,尝试以下代码

import vlc
import time
mrl1 = '....1.3gp'
mrl2 = '....2.3gp'
song_list = [mrl1,mrl2]
instance = vlc.Instance('--input-repeat=-1', '--fullscreen', '--mouse-hide-timeout=0')
for song in song_list:
    player = instance.media_player_new()
    media = instance.media_new(song)
    
    media.get_mrl()
    player.set_media(media)
    player.play()
    playing = set([1,2,3,4])
    time.sleep(1)
    duration = player.get_length() / 1000
    mm, ss = divmod(duration, 60)
    while True:
        state = player.get_state()
        if state not in playing:
            break
        continue

使用while/for循环,该循环将逐个迭代媒体列表。在这种情况下,指针可能只指向第一个视频。

编辑1:

[For Loop的使用](Python VLC绑定-播放播放列表)请参阅此问题的答案部分。For循环用于遍历url(在本例中为媒体列表)。

我知道这个问题很老了,但对未来可能有帮助的人来说。我试了两种方法,一种是公认的答案,另一种是for循环。我发现将MediaList与MediaListPlayer一起使用要高效得多。几乎是原来的两倍!

对于这个问题,您可以执行类似(Python 3.4+)的操作:

import time
from pathlib import Path
import vlc

def create_media_list(vlc_instance, filenames):
    media_list = vlc_instance.media_list_new()
    for f in filenames:
        media_list.add_media(f)
    return media_list

filenames = list(Path("dir_of_music").iterdir())
instance = vlc.Instance()
player = instance.media_list_player_new()
media_list = create_media_list(instance, filenames)
player.set_media_list(media_list)
player.play()
while player.is_playing():
    time.sleep(1)

我相信它可以变得更有效率。但这会很好,而且比公认的答案更有记忆效率。这也将在目录中的所有媒体中播放。

最新更新