使用libVLC和Python验证媒体文件

使用libVLC和Python验证媒体文件,python,media,vlc,libvlc,Python,Media,Vlc,Libvlc,我试图找出是否可以使用LibVLC-Python在VLC中播放媒体文件 在我的python脚本中,我递归地解析一个目录(包含媒体和非媒体文件以及图像等),在VLC中打开并播放一个又一个文件。然后我试着分析,如果它真的可以用vlc函数来播放,那么函数将_play()和get _state()。但这是非常不可靠的,脚本必须暂停才能完全加载文件。例如,如果音频文件非常短,脚本暂停时间过长,则不会检测到“可播放”,因为它的播放已停止等。如果脚本在JPG上运行,则会挂起,有时文本和pdf文件会标记为“将播

我试图找出是否可以使用LibVLC-Python在VLC中播放媒体文件

在我的python脚本中,我递归地解析一个目录(包含媒体和非媒体文件以及图像等),在VLC中打开并播放一个又一个文件。然后我试着分析,如果它真的可以用vlc函数来播放,那么函数将_play()和get _state()。但这是非常不可靠的,脚本必须暂停才能完全加载文件。例如,如果音频文件非常短,脚本暂停时间过长,则不会检测到“可播放”,因为它的播放已停止等。如果脚本在JPG上运行,则会挂起,有时文本和pdf文件会标记为“将播放”:(到目前为止,我无法使用MediaTrackInfo()等vlc类)

有没有一种方法可以解析每个文件,并通过它的编解码器来确定VLC是否可以播放它?我只想对巨大的目录进行排序,并复制出未损坏的“真实”媒体文件(音频和视频)

以下是我的原始脚本:

import os, sys, inspect, time

vlcpfad = "C:\Program Files (x86)\VideoLAN\VLC"

if not vlcpfad in sys.path:
    sys.path.append(vlcpfad)  
import vlc

# Get name and path of the script
pfadkomplett = os.path.realpath(os.path.abspath(inspect.getfile(inspect.currentframe())))
pfad = os.path.split(pfadkomplett)[0]
skriptname = os.path.split(pfadkomplett)[1]

# walk path
for pfad, unterordner, dateien in os.walk(pfad):
    for dateiname in dateien:
        # skip script itself
        if dateiname == skriptname: continue

        dateipfad = os.path.join(pfad, dateiname)

        p = vlc.MediaPlayer(dateipfad)          
        p.audio_toggle_mute()
                    p.play()

        # Wait a bit, so vlc can start playback
        time.sleep(0.2)

        while str(p.get_state()) == "State.Opening":
            time.sleep(0.1)

        print(dateipfad + ": " + str(p.will_play()))

        p.stop()
        del p

一种方法是在播放前测试媒体是否正常:

[...]
p = vlc.MediaPlayer(dateipfad)
media = p.get_media() 
media.parse() #get media info
if media.get_duration():
   # your is OK
else:
   # media NOK

我试过这个方法。它有和OP提到的相同的问题。对于一些txt文件,我得到的媒体持续时间是一个整数值。