Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # -*- coding: utf-8 -*-
- # randomizer.py
- #Run on Python 3.5.4 on windows
- import os
- import vlc #use: pip install python-vlc
- import random
- import time
- class videoRandom:
- def __init__(self, minRate = 100, maxRate = 100, modeInfo = False):
- #params
- self.minRate = minRate
- self.maxRate = maxRate
- self.modeInfo = modeInfo
- #init
- self.vids = []
- self.dirs = []
- #time duration of the video
- self.minTime = 3000
- self.maxTime = 30000
- self.startingDelay = 0 #seconds
- self.player = None
- def _loadDirNoFilter(self, dirp):
- self.dirs = []
- vidCounter = 0
- for (dirpath, dirnames, filenames) in os.walk(dirp):
- self.dirs.append(dirpath)
- for dire in self.dirs:
- for f in os.listdir(dire):
- if f.endswith('.mp4'):
- self.vids.append(str(dire+'\\'+f))
- vidCounter += 1
- if vidCounter != 0:
- print(str(len(self.vids)) + " Videos after folder " + dirp + " + " + str(vidCounter))
- def _loadDirFilter(self, dirp, filt):
- self.dirs = []
- vidCounter = 0
- for (dirpath, dirnames, filenames) in os.walk(dirp):
- self.dirs.append(dirpath)
- #non case sensitive
- filt = str(filt).lower()
- for dire in self.dirs:
- for f in os.listdir(dire):
- if f.endswith('.mp4'):
- if f.lower().find(filt + " ") == 0: #start
- self.vids.append(str(dire+'\\'+f))
- vidCounter += 1
- elif f.lower().find(" " + filt + " ") != -1: #middle
- self.vids.append(str(dire+'\\'+f))
- vidCounter += 1
- elif f.lower().find(filt + ".mp4") != -1: #end
- if len(filt+".mp4") == len(f):
- #full file name
- self.vids.append(str(dire+'\\'+f))
- vidCounter += 1
- elif f.lower().find(" " + filt + ".mp4") != -1:
- #not full file name
- self.vids.append(str(dire+'\\'+f))
- vidCounter += 1
- if vidCounter != 0:
- print(str(len(self.vids)) + " Videos after " + dirp + " with " + filt)
- def _loadVideo(self, vidPath):
- if os.path.exists(vidPath):
- if vidPath.endswith('.mp4'):
- self.vids.append(vidPath)
- print(str(len(self.vids)) + " Videos after video added")
- else :
- print("Wrong path")
- def load(self, genericPath, filt = None):
- #used to load a video or a directory wth or without a filter
- if os.path.isfile(genericPath):
- #load the video
- self._loadVideo(genericPath)
- if filt is not None:
- print("A filter cannot be used on a single video, filter ignored")
- else :
- #load a directory
- if filt is None:
- #no filter
- self._loadDirNoFilter(genericPath)
- else:
- #filter
- self._loadDirFilter(genericPath, filt)
- def printList(self):
- for item in self.vids:
- print(item)
- def playLoop(self, stopLoop):
- #time before the first video
- time.sleep(self.startingDelay)
- if len(self.vids) != 0:
- while(1):
- random.seed()
- randVid = random.randint(0, len(self.vids)-1)
- print(self.vids[randVid]) #title
- if self.modeInfo:
- print("number: " + str(randVid))
- self.player = vlc.MediaPlayer(self.vids[randVid])
- self.player.set_xwindow(1)
- self.player.set_fullscreen(1)
- random.seed()
- randRate = random.randint(self.minRate, self.maxRate)
- if self.modeInfo:
- print("rate: " + str(randRate))
- self.player.set_rate(randRate/100)
- self.player.play()
- time.sleep(0.2)
- lenVid = self.player.get_length()#ms
- if self.modeInfo:
- print("len: " + str(lenVid))
- random.seed()
- randTime = random.randint(0, lenVid-self.maxTime)
- self.player.set_time(randTime)
- if self.modeInfo:
- print("time: " + str(randTime))
- randLen = lenVid - randTime
- if randLen > self.maxTime:
- randLen = self.maxTime
- random.seed()
- randLen = random.randint(self.minTime, randLen)
- if self.modeInfo:
- print("duration: " + str(randLen))
- stopNow = False
- for sleepIndex in range(100):
- time.sleep((randLen/100)/1000)
- if stopLoop():
- stopNow = True
- break
- self.player.stop()
- #stop the thread loop
- if stopNow:
- break
- else:
- print("nothing to watch !")
- def loadFromFile(self, filePath):
- file = open(filePath, "r")
- lines = file.readlines()
- file.close()
- for l in lines:
- pos = l.find("%")
- if pos == -1:
- #loading the line with no filter
- self.load(l[:-1]) #-1 in order to delete the \n
- else:
- inPath = l[:-(len(l)-pos)]
- inFilter = l[pos+1:-1]
- #loading the line with a filter
- self.load(inPath, inFilter)
- if self.modeInfo:
- print("Videos from file loaded")
- return len(self.vids)
- def setMinRate(self, minrate):
- if minrate < self.maxRate:
- self.minRate = minrate
- print("New minRate is " + str(self.minRate))
- else:
- print("must have minRate < maxRate")
- def setMaxRate(self, maxrate):
- if self.minRate < maxrate:
- self.maxRate = maxrate
- print("New maxRate is " + str(self.maxRate))
- else:
- print("must have minRate < maxRate")
- def setMinTime(self, mintime):
- mintime = mintime*1000 #in ms
- if mintime < self.maxTime:
- self.minTime = mintime
- print("New minTime is " + str(self.minTime/1000))
- else:
- print("must have minTime < maxTime")
- def setMaxTime(self, maxtime):
- maxtime = maxtime*1000 #in ms
- if self.minTime < maxtime:
- self.maxTime = maxtime
- print("New maxTime is " + str(self.maxTime/1000))
- else:
- print("must have minTime < maxTime")
- def reset(self):
- self.vids = []
- self.dirs = []
- def setDelay(self, delay):
- self.startingDelay = delay
- print("New delay is " + str(self.startingDelay))
- if __name__ == '__main__':
- print('Start of the script')
- vr = videoRandom(minRate = 100, maxRate = 100, modeInfo = False)
- vr.loadFromFile("paths_data.txt")
- vr.playLoop()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement