View difference between Paste ID: mKXvZFVj and xPvBrUCT
SHOW: | | - or go back to the newest paste.
1
#!/usr/bin/python
2
#/home/clockworkpc/bin/tubemixingsave.py
3
4
# Released under a GPLv3 Licence by Clockwork PC 2013
5
# www.clockworkpc.com.au
6
7
# You are entitled to the following four freedoms:
8
# Freedom 0: To run this program for any purpose
9
# Freedom 1: To study how this program works and change it to make it do what you wish
10
# Freedom 2: To redistribute copies so you can help your neighbour
11
# Freedom 3: To distribute copies of your modified version to others
12
13
import os, datetime, re, shutil
14
15
now = datetime.datetime.now()
16
nowstring = str(now.strftime("%Y-%m-%d_%A_%H%M%S"))
17
18
#print nowstring
19
20
tubemixingFolder = "/tmp/tubemixing/"
21
videoFolder = os.getenv("HOME") + "/Videos/"
22
saveFolder = videoFolder + "tubemixing/"
23
originalVideosFolder = saveFolder + "OriginalVideos/"
24
namedVideosFolder = saveFolder + "NamedVideos/"
25
namedVideosFolderDateStamped = namedVideosFolder + nowstring + "/"
26
videoListsFolder = saveFolder + "VideoLists/"
27
videoListsFile = videoListsFolder + nowstring
28
videoDataFolder = saveFolder + "gdata_text_files/"
29
videoDataFolderDatestamped = saveFolder + "gdata_text_files/" + nowstring + "/"
30
mp3Folder = os.getenv("HOME") + "/Music/tubemixing/" + nowstring + "/"
31
gdataFeed = "http://gdata.youtube.com/feeds/api/videos/"
32
33
#Create date-stamped folders
34
os.system("mkdir " + namedVideosFolderDateStamped)
35
os.system("mkdir " + mp3Folder)
36
os.system("mkdir " + videoDataFolderDatestamped)
37
38
# Match only videos that haven't already been saved
39
a = os.listdir(tubemixingFolder)
40
b = os.listdir(originalVideosFolder)
41
c = [x for x in a if x not in b]
42
43
# File-only os.listdir
44
def saveFolder_files_list():
45
	for file in os.listdir(saveFolder):
46
		if os.path.isfile(os.path.join(saveFolder,file)):
47
			return file
48
49
def files_only(saveFolder):
50
	return [filename for filename in os.listdir(saveFolder) if os.path.isfile(os.path.join(saveFolder, filename))]
51
52
def files_only(videoDataFolderDatestamped):
53
	return [filename for filename in os.listdir(videoDataFolderDatestamped) if os.path.isfile(os.path.join(videoDataFolderDatestamped, filename))]
54
55
# Copy NEW videos from Tubemixing temp folder to working folder
56
for file in c:
57
	shutil.copyfile(tubemixingFolder+file,saveFolder+file)
58
# Copy NEW videos to archive folder for future reference
59
	shutil.copyfile(tubemixingFolder+file,originalVideosFolder+file)
60
61
# Remove prefix 
62
# NOTE: I set Tubemixing to save by default to 360p.  
63
# You'll have to tweak it if you save higher resolution by default.
64
preFix1 = "tubemixing-360p-"
65
preFix2 = "tubemixing--"
66
67
#os.listdir(saveFolder)
68
for filename in files_only(saveFolder):
69
	if filename.startswith(preFix1):
70
		os.rename(saveFolder+filename,saveFolder+filename[16:])
71
72
# Second pass (some files are saved with preFix2)
73
os.listdir(saveFolder)
74
for filename in files_only(saveFolder):
75
	if filename.startswith(preFix2):
76
		os.rename(saveFolder+filename,saveFolder+filename[12:])
77
78
# Use gdata to fetch video title from YouTube
79
for filename in files_only(saveFolder):
80
	if len(filename) == 11:
81
		os.system("cd " + videoDataFolderDatestamped + " && wget " + gdataFeed + filename + " " + "-O" + " " + filename)
82
83
# Parse video title from data fetched from YouTube
84
print files_only(videoDataFolderDatestamped)
85
for filename in files_only(videoDataFolderDatestamped):
86
	f = open(videoDataFolderDatestamped+filename)
87
	for line in f:
88
		if "<title type='text'>" in line:
89
			x = line
90
			r = re.compile("<title type='text'>(.*?)</title><content")
91
			m = r.search(x)
92
			if m:
93
				titleInfo = m.group(1)
94
				print titleInfo
95
# Using video title, save properly named and suffixed files in a new date-stamped folder
96-
				for filename in files_only(saveFolder):
96+
# Using os.system instead of shutil because shutil is a FUCKING SLOW MEMORY HOG
97-
					shutil.copyfile(saveFolder+filename,namedVideosFolderDateStamped+titleInfo+".webm")
97+
				os.system("cp -v " + saveFolder+filename + " " + '"' + namedVideosFolderDateStamped+titleInfo+".webm" + '"')
98
#					shutil.copyfile(saveFolder+filename,namedVideosFolderDateStamped+titleInfo+".webm")
99
100
# Remove code-named video files, because originals have already been saved for reference
101
# 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.
102
103
for file in os.listdir(saveFolder):
104
	os.system("rm -v " + saveFolder + file)
105
106
# Use AVconv (FFmpeg) to extract MP3 audio into the Music folder
107
for filename in os.listdir(namedVideosFolderDateStamped):
108
	(str, filename)
109
	namedVideoFile = namedVideosFolderDateStamped + filename
110
	print namedVideoFile
111
112
	os.system("avconv -i " + '"' + namedVideoFile + '"' + " " + '"' + mp3Folder + filename + '.mp3"')