Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/python
- #/home/clockworkpc/bin/tubemixingsave.py
- # Released under a GPLv3 Licence by Clockwork PC 2013
- # www.clockworkpc.com.au
- # You are entitled to the following four freedoms:
- # Freedom 0: To run this program for any purpose
- # Freedom 1: To study how this program works and change it to make it do what you wish
- # Freedom 2: To redistribute copies so you can help your neighbour
- # Freedom 3: To distribute copies of your modified version to others
- import os, datetime, re, shutil
- now = datetime.datetime.now()
- nowstring = str(now.strftime("%Y-%m-%d_%A_%H%M%S"))
- #print nowstring
- tubemixingFolder = "/tmp/tubemixing/"
- videoFolder = os.getenv("HOME") + "/Videos/"
- saveFolder = videoFolder + "tubemixing/"
- originalVideosFolder = saveFolder + "OriginalVideos/"
- namedVideosFolder = saveFolder + "NamedVideos/"
- namedVideosFolderDateStamped = namedVideosFolder + nowstring + "/"
- videoListsFolder = saveFolder + "VideoLists/"
- videoListsFile = videoListsFolder + nowstring
- videoDataFolder = saveFolder + "gdata_text_files/"
- videoDataFolderDatestamped = saveFolder + "gdata_text_files/" + nowstring + "/"
- mp3Folder = os.getenv("HOME") + "/Music/tubemixing/" + nowstring + "/"
- gdataFeed = "http://gdata.youtube.com/feeds/api/videos/"
- originalVideosList = originalVideosFolder + "original_videos_list"
- originalVideosListBackup = originalVideosFolder + "original_videos_list_" + nowstring + ".backup"
- #Check for new videos in Tubemixing /tmp folder
- def check_for_video_list():
- running = True
- for names in os.listdir(originalVideosFolder):
- if names.startswith("original_videos_list"):
- if not names.endswith(".backup"):
- print "found original"
- os.system("cp -v " + originalVideosList + " " + originalVideosListBackup)
- running = False
- check_for_video_list()
- #Create date-stamped folders
- os.system("mkdir " + namedVideosFolderDateStamped)
- os.system("mkdir " + mp3Folder)
- os.system("mkdir " + videoDataFolderDatestamped)
- # Match only videos that haven't already been saved
- a = os.listdir(tubemixingFolder)
- b = os.listdir(originalVideosFolder)
- c = open(originalVideosList, "r")
- d = c.read()
- e = [x for x in a if x not in d]
- print e
- #Replenish list
- #f = open(originalVideosList, "a")
- #f.write(str(os.listdir(originalVideosFolder)))
- #f.close()
- # Match only videos that haven't already been saved (replaced)
- #a = os.listdir(tubemixingFolder)
- #b = os.listdir(originalVideosFolder)
- #c = [x for x in a if x not in b]
- # File-only os.listdir
- def saveFolder_files_list():
- for file in os.listdir(saveFolder):
- if os.path.isfile(os.path.join(saveFolder,file)):
- return file
- def files_only(saveFolder):
- return [filename for filename in os.listdir(saveFolder) if os.path.isfile(os.path.join(saveFolder, filename))]
- def files_only(videoDataFolderDatestamped):
- return [filename for filename in os.listdir(videoDataFolderDatestamped) if os.path.isfile(os.path.join(videoDataFolderDatestamped, filename))]
- # Copy NEW videos from Tubemixing temp folder to working folder
- #for file in c:
- for file in e:
- shutil.copyfile(tubemixingFolder+file,saveFolder+file)
- # Update list of saved videos
- g = open(originalVideosList, "a")
- g.write(str(e))
- g.close()
- # Copy NEW videos to archive folder for future reference (replaced)
- # shutil.copyfile(tubemixingFolder+file,originalVideosFolder+file)
- # Remove prefix
- # NOTE: I set Tubemixing to save by default to 360p.
- # You'll have to tweak it if you save higher resolution by default.
- preFix1 = "tubemixing-360p-"
- preFix2 = "tubemixing--"
- #os.listdir(saveFolder)
- for filename in files_only(saveFolder):
- if filename.startswith(preFix1):
- os.rename(saveFolder+filename,saveFolder+filename[16:])
- # Second pass (some files are saved with preFix2)
- os.listdir(saveFolder)
- for filename in files_only(saveFolder):
- if filename.startswith(preFix2):
- os.rename(saveFolder+filename,saveFolder+filename[12:])
- # Use gdata to fetch video title from YouTube
- for filename in files_only(saveFolder):
- if len(filename) == 11:
- os.system("cd " + videoDataFolderDatestamped + " && wget " + gdataFeed + filename + " " + "-O" + " " + filename)
- # Parse video title from data fetched from YouTube
- print files_only(videoDataFolderDatestamped)
- for filename in files_only(videoDataFolderDatestamped):
- f = open(videoDataFolderDatestamped+filename)
- for line in f:
- if "<title type='text'>" in line:
- x = line
- r = re.compile("<title type='text'>(.*?)</title><content")
- m = r.search(x)
- if m:
- titleInfo = m.group(1)
- print titleInfo
- # Using video title, save properly named and suffixed files in a new date-stamped folder
- # Using os.system instead of shutil because shutil is a FUCKING SLOW MEMORY HOG
- os.system("cp -v " + saveFolder+filename + " " + '"' + namedVideosFolderDateStamped+titleInfo+".webm" + '"')
- # shutil.copyfile(saveFolder+filename,namedVideosFolderDateStamped+titleInfo+".webm")
- # Remove code-named video files, because originals have already been saved for reference
- # Unfortunately, the best I can do is use the clumsy rm command, which tries, but fails, to delete folders. This is not the way to go, but I can't find a more elegant way of clearing the working folder.
- for file in os.listdir(saveFolder):
- os.system("rm -v " + saveFolder + file)
- # Use AVconv (FFmpeg) to extract MP3 audio into the Music folder
- for filename in os.listdir(namedVideosFolderDateStamped):
- (str, filename)
- namedVideoFile = namedVideosFolderDateStamped + filename
- print namedVideoFile
- os.system("avconv -i " + '"' + namedVideoFile + '"' + " " + '"' + mp3Folder + filename + '.mp3"')
- # Remove the ".webm" that carries over to the MP3 file name during the AVconv conversion
- print
- pathiter = (os.path.join(root, filename)
- for root, _, filenames in os.walk(mp3Folder)
- for filename in filenames
- )
- for path in pathiter:
- newname = path.replace('.webm', '')
- if newname != path:
- os.rename(path,newname)
- # Clear empty folders from directories that tend to get cluttered
- work_path1 = os.getenv("HOME") + "/Videos/tubemixing/NamedVideos/"
- work_path2 = os.getenv("HOME") + "/Music/tubemixing/"
- def clear_named_videos_folders():
- for file in os.listdir(work_path1):
- if not os.listdir(work_path1+file):
- print "empty"
- os.rmdir(work_path1+file)
- else:
- print "not empty"
- def clear_avconv_mp3_folders():
- for file in os.listdir(work_path2):
- if not os.listdir(work_path2+file):
- print "empty"
- os.rmdir(work_path2+file)
- else:
- print "not empty"
- clear_named_videos_folders()
- clear_avconv_mp3_folders()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement