Advertisement
Guest User

randomizer.py

a guest
Oct 22nd, 2018
169
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 7.76 KB | None | 0 0
  1. # -*- coding: utf-8 -*-
  2.  
  3. # randomizer.py
  4.  
  5. #Run on Python 3.5.4 on windows
  6.  
  7. import os
  8. import vlc #use: pip install python-vlc
  9. import random
  10. import time
  11.  
  12. class videoRandom:
  13.     def __init__(self, minRate = 100, maxRate = 100, modeInfo = False):
  14.         #params
  15.         self.minRate = minRate
  16.         self.maxRate = maxRate
  17.         self.modeInfo = modeInfo
  18.        
  19.         #init
  20.         self.vids = []
  21.         self.dirs = []
  22.        
  23.         #time duration of the video
  24.         self.minTime = 3000
  25.         self.maxTime = 30000
  26.         self.startingDelay = 0 #seconds
  27.        
  28.         self.player = None
  29.    
  30.     def _loadDirNoFilter(self, dirp):
  31.         self.dirs = []
  32.         vidCounter = 0
  33.         for (dirpath, dirnames, filenames) in os.walk(dirp):
  34.             self.dirs.append(dirpath)
  35.        
  36.         for dire in self.dirs:
  37.             for f in os.listdir(dire):
  38.                 if f.endswith('.mp4'):
  39.                     self.vids.append(str(dire+'\\'+f))
  40.                     vidCounter += 1
  41.        
  42.         if vidCounter != 0:
  43.             print(str(len(self.vids)) + " Videos after folder " + dirp + " + " + str(vidCounter))
  44.        
  45.     def _loadDirFilter(self, dirp, filt):
  46.         self.dirs = []
  47.         vidCounter = 0
  48.         for (dirpath, dirnames, filenames) in os.walk(dirp):
  49.             self.dirs.append(dirpath)
  50.            
  51.         #non case sensitive
  52.         filt = str(filt).lower()
  53.        
  54.         for dire in self.dirs:
  55.             for f in os.listdir(dire):
  56.                 if f.endswith('.mp4'):
  57.                     if f.lower().find(filt + " ") == 0: #start
  58.                         self.vids.append(str(dire+'\\'+f))
  59.                         vidCounter += 1
  60.                     elif f.lower().find(" " + filt + " ") != -1: #middle
  61.                         self.vids.append(str(dire+'\\'+f))
  62.                         vidCounter += 1
  63.                     elif f.lower().find(filt + ".mp4") != -1: #end
  64.                         if len(filt+".mp4") == len(f):
  65.                             #full file name
  66.                             self.vids.append(str(dire+'\\'+f))  
  67.                             vidCounter += 1
  68.                         elif f.lower().find(" " + filt + ".mp4") != -1:
  69.                             #not full file name
  70.                             self.vids.append(str(dire+'\\'+f))
  71.                             vidCounter += 1
  72.         if vidCounter != 0:        
  73.             print(str(len(self.vids)) + " Videos after " + dirp + " with " + filt)
  74.        
  75.     def _loadVideo(self, vidPath):
  76.         if os.path.exists(vidPath):
  77.             if vidPath.endswith('.mp4'):
  78.                 self.vids.append(vidPath)
  79.             print(str(len(self.vids)) + " Videos after video added")
  80.         else :
  81.             print("Wrong path")
  82.            
  83.     def load(self, genericPath, filt = None):
  84.         #used to load a video or a directory wth or without a filter
  85.         if os.path.isfile(genericPath):
  86.             #load the video
  87.             self._loadVideo(genericPath)
  88.             if filt is not None:
  89.                 print("A filter cannot be used on a single video, filter ignored")
  90.         else :
  91.             #load a directory
  92.             if filt is None:
  93.                 #no filter
  94.                 self._loadDirNoFilter(genericPath)
  95.             else:
  96.                 #filter
  97.                 self._loadDirFilter(genericPath, filt)
  98.    
  99.     def printList(self):
  100.         for item in self.vids:
  101.             print(item)
  102.        
  103.     def playLoop(self, stopLoop):
  104.        
  105.         #time before the first video
  106.         time.sleep(self.startingDelay)
  107.        
  108.         if len(self.vids) != 0:
  109.             while(1):                
  110.                 random.seed()
  111.                 randVid = random.randint(0, len(self.vids)-1)
  112.                 print(self.vids[randVid]) #title
  113.                 if self.modeInfo:
  114.                     print("number: " + str(randVid))
  115.                
  116.                 self.player = vlc.MediaPlayer(self.vids[randVid])
  117.                 self.player.set_xwindow(1)
  118.                 self.player.set_fullscreen(1)
  119.                
  120.                 random.seed()
  121.                 randRate = random.randint(self.minRate, self.maxRate)
  122.                 if self.modeInfo:
  123.                     print("rate: " + str(randRate))
  124.                 self.player.set_rate(randRate/100)
  125.                
  126.                 self.player.play()
  127.                 time.sleep(0.2)
  128.                
  129.                 lenVid = self.player.get_length()#ms
  130.                 if self.modeInfo:
  131.                     print("len: " + str(lenVid))
  132.                
  133.                 random.seed()
  134.                 randTime = random.randint(0, lenVid-self.maxTime)
  135.                 self.player.set_time(randTime)
  136.                 if self.modeInfo:
  137.                     print("time: " + str(randTime))
  138.                
  139.                 randLen = lenVid - randTime
  140.                 if randLen > self.maxTime:
  141.                     randLen = self.maxTime
  142.                
  143.                 random.seed()
  144.                 randLen = random.randint(self.minTime, randLen)
  145.                 if self.modeInfo:
  146.                     print("duration: " + str(randLen))
  147.                
  148.                 stopNow = False
  149.                 for sleepIndex in range(100):
  150.                     time.sleep((randLen/100)/1000)
  151.                     if stopLoop():
  152.                         stopNow = True
  153.                         break
  154.                 self.player.stop()
  155.                
  156.                 #stop the thread loop
  157.                 if stopNow:
  158.                     break
  159.         else:
  160.             print("nothing to watch !")
  161.            
  162.     def loadFromFile(self, filePath):
  163.         file = open(filePath, "r")
  164.         lines = file.readlines()
  165.         file.close()
  166.        
  167.         for l in lines:
  168.             pos = l.find("%")
  169.            
  170.             if pos == -1:
  171.                 #loading the line with no filter
  172.                 self.load(l[:-1]) #-1 in order to delete the \n
  173.             else:
  174.                 inPath = l[:-(len(l)-pos)]
  175.                 inFilter = l[pos+1:-1]
  176.                
  177.                 #loading the line with a filter
  178.                 self.load(inPath, inFilter)
  179.                
  180.         if self.modeInfo:
  181.             print("Videos from file loaded")
  182.         return len(self.vids)        
  183.    
  184.     def setMinRate(self, minrate):
  185.         if minrate < self.maxRate:
  186.             self.minRate = minrate
  187.             print("New minRate is " + str(self.minRate))
  188.         else:
  189.             print("must have minRate < maxRate")
  190.        
  191.     def setMaxRate(self, maxrate):
  192.         if self.minRate < maxrate:
  193.             self.maxRate = maxrate
  194.             print("New maxRate is " + str(self.maxRate))
  195.         else:
  196.             print("must have minRate < maxRate")
  197.        
  198.     def setMinTime(self, mintime):
  199.         mintime = mintime*1000 #in ms
  200.         if mintime < self.maxTime:
  201.             self.minTime = mintime
  202.             print("New minTime is " + str(self.minTime/1000))
  203.         else:
  204.             print("must have minTime < maxTime")
  205.        
  206.     def setMaxTime(self, maxtime):
  207.         maxtime = maxtime*1000 #in ms
  208.         if self.minTime < maxtime:
  209.             self.maxTime = maxtime
  210.             print("New maxTime is " + str(self.maxTime/1000))
  211.         else:
  212.             print("must have minTime < maxTime")
  213.            
  214.     def reset(self):
  215.         self.vids = []
  216.         self.dirs = []
  217.  
  218.     def setDelay(self, delay):
  219.         self.startingDelay = delay
  220.         print("New delay is " + str(self.startingDelay))
  221.        
  222. if __name__ == '__main__':
  223.     print('Start of the script')
  224.    
  225.     vr = videoRandom(minRate = 100, maxRate = 100, modeInfo = False)
  226.    
  227.     vr.loadFromFile("paths_data.txt")
  228.    
  229.     vr.playLoop()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement