1

LibVLC-Pythonを使用してVLCでメディアファイルを「再生できる」かどうかを調べようとしています。

私のpythonスクリプトでは、ディレクトリ(メディアファイルと非メディアファイル、画像などを含む)を再帰的に解析し、VLCで次々とファイルを開いて再生します。次に、vlc 関数の will_play() と get_state() で実際に再生できるかどうかを分析してみます。ただし、これは非常に信頼性が低く、ファイルを完全にロードするためにスクリプトを一時停止する必要があります。たとえば、オーディオ ファイルが非常に短く、スクリプトが長時間一時停止する場合、再生が既に停止しているなどの理由で、「再生可能」として検出されません。ファイルには「will_play」というラベルが付けられます:-(これまでのところ、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
4

1 に答える 1

2

1 つの方法は、メディアを再生する前に問題がないかどうかをテストすることです。

[...]
p = vlc.MediaPlayer(dateipfad)
media = p.get_media() 
media.parse() #get media info
if media.get_duration():
   # your is OK
else:
   # media NOK
于 2012-10-12T12:02:45.713 に答える