หลังจากไม่ได้รับคำตอบทันเวลา (ควรโพสต์เมื่อสัปดาห์ก่อน) ฉันลงเอยด้วยการดำน้ำให้เป็น VLC แบบอัตโนมัติ ฉันพบนี้อัญมณีของบล็อกโพสต์เกี่ยวกับการควบคุม VLC ใช้ซ็อกเก็ตยูนิกซ์ ส่วนสำคัญของมันคือถ้าคุณกำหนดค่า VLC อย่างถูกต้องคุณสามารถส่งคำสั่งผ่านไวยากรณ์บรรทัดคำสั่ง:
echo [VLC Command] | nc -U /Users/vlc.sock
โดยที่[คำสั่ง VLC]เป็นคำสั่งใด ๆ ที่ VLC สนับสนุน (คุณสามารถค้นหารายการคำสั่งได้โดยส่งคำสั่ง " longhelp ")
ฉันสิ้นสุดการเขียนสคริปต์ Python เพื่อโหลดไดเรกทอรีที่เต็มไปด้วยภาพยนตร์โดยอัตโนมัติแล้วเลือกคลิปที่จะแสดง สคริปต์เริ่มวาง avis ทั้งหมดไว้ในเพลย์ลิสต์ VLC จากนั้นจะเลือกไฟล์สุ่มจากเพลย์ลิสต์และเลือกจุดเริ่มต้นแบบสุ่มในวิดีโอนั้นเพื่อเล่น จากนั้นสคริปต์จะรอตามระยะเวลาที่กำหนดและทำซ้ำกระบวนการ นี่มันไม่ใช่สำหรับลมใจ:
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
โอ้และในฐานะที่เป็นผู้สังเกตการณ์เรามีการทำงานบนโปรเจ็กเตอร์และมันเป็นที่นิยมของพรรค ทุกคนชื่นชอบกับค่าวินาทีและเลือกวิดีโอใหม่เพื่อเพิ่ม ไม่ได้ทำให้ฉันถูกวางแต่เกือบ!
แก้ไข:ฉันลบบรรทัดที่เปิด VLC เนื่องจากมีปัญหาเกี่ยวกับเวลาที่ VLC จะโหลดเพียงครึ่งเดียวเมื่อสคริปต์เริ่มเพิ่มไฟล์ลงในเพลย์ลิสต์ ตอนนี้ฉันเพิ่งเปิด VLC ด้วยตนเองและรอให้โหลดเสร็จก่อนเริ่มสคริปต์