Zamanında bir cevap alamadıktan sonra (bunu bir hafta önce yayınlamalıydım), VLC'yi otomatikleştirmeye daldım. UNIX yuvalarını kullanarak VLC'yi kontrol etme hakkında bir blog gönderisinin bu taşını buldum . Bunun özü, VLC'yi doğru bir şekilde yapılandırırsanız, komut satırı sözdizimi aracılığıyla komutlar gönderebilirsiniz:
echo [VLC Command] | nc -U /Users/vlc.sock
burada [VLC Komutu] VLC'nin desteklediği herhangi bir komuttur (" longhelp " komutunu göndererek komutların bir listesini bulabilirsiniz ).
Filmlerle dolu bir dizini otomatik olarak yüklemek için bir Python betiği yazdım ve sonra rastgele gösterilecek klipleri seçtim. Komut dosyası önce tüm avis'i bir VLC çalma listesine koyar. Daha sonra oynatma listesinden rastgele bir dosya seçer ve oynatmak için o videoda rastgele bir başlangıç noktası seçer. Komut dosyası daha sonra belirtilen süre kadar bekler ve işlemi tekrarlar. İşte, kalbin zayıflığı için değil:
import subprocess
import random
import time
import os
import sys
## Just seed if you want to get the same sequence after restarting the script
## random.seed()
SocketLocation = "/Users/vlc.sock"
## You can enter a directory as a command line argument; otherwise it will use the default
if(len(sys.argv) >= 2):
MoviesDir = sys.argv[1]
else:
MoviesDir = "/Users/Movies/Xmas"
## You can enter the interval in seconds as the second command line argument as well
if(len(sys.argv) >= 3):
IntervalInSeconds = int(sys.argv[2])
else:
IntervalInSeconds = 240
## Sends an arbitrary command to VLC
def RunVLCCommand(cmd):
p = subprocess.Popen("echo " + cmd + " | nc -U " + SocketLocation, shell = True, stdout = subprocess.PIPE)
errcode = p.wait()
retval = p.stdout.read()
print "returning: " + retval
return retval
## Clear the playlist
RunVLCCommand("clear")
RawMovieFiles = os.listdir(MoviesDir)
MovieFiles = []
FileLengths = []
## Loop through the directory listing and add each avi or divx file to the playlist
for MovieFile in RawMovieFiles:
if(MovieFile.endswith(".avi") or MovieFile.endswith(".divx")):
MovieFiles.append(MovieFile)
RunVLCCommand("add \"" + MoviesDir + "/" + MovieFile + "\"")
PlayListItemNum = 0
## Loop forever
while 1==1:
## Choose a random movie from the playlist
PlayListItemNum = random.randint(1, len(MovieFiles))
RunVLCCommand("goto " + str(PlayListItemNum))
FileLength = "notadigit"
tries = 0
## Sometimes get_length doesn't work right away so retry 50 times
while tries < 50 and FileLength .strip().isdigit() == False or FileLength.strip() == "0":
tries+=1
FileLength = RunVLCCommand("get_length")
## If get_length fails 50 times in a row, just choose another movie
if tries < 50:
## Choose a random start time
StartTimeCode = random.randint(30, int(FileLength) - IntervalInSeconds);
RunVLCCommand("seek " + str(StartTimeCode))
## Turn on fullscreen
RunVLCCommand("f on")
## Wait until the interval expires
time.sleep(IntervalInSeconds)
## Stop the movie
RunVLCCommand("stop")
tries = 0
## Wait until the video stops playing or 50 tries, whichever comes first
while tries < 50 and RunVLCCommand("is_playing").strip() == "1":
time.sleep(1)
tries+=1
Oh ve bir yan not olarak, bunu bir projektörde çalıştırıyorduk ve partinin vuruşu oldu. Herkes saniye değerleriyle uğraşmayı ve eklemek için yeni videolar seçmeyi severdi. Vermedi bana koydu olsun ama neredeyse!
DÜZENLEME: VLC'yi yalnızca çalma listesine dosya eklemeye başladığında VLC'nin yalnızca yarısı yükleneceği zamanlama sorunları olduğu için VLC'yi açan satırı kaldırdım. Şimdi VLC'yi manuel olarak açıyorum ve komut dosyasını başlatmadan önce yüklemeyi bitirmesini bekliyorum.