View difference between Paste ID: BYYxTiNu and jKXcRAyW
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
# Create time-stamp string for folder and file names
16
now = datetime.datetime.now()
17
nowstring = str(now.strftime("%Y-%m-%d_%A_%H%M%S"))
18-
#print nowstring
18+
19
# Define the folders and file names to be used
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
originalVideosList = originalVideosFolder + "original_videos_list"
33
originalVideosListBackup = originalVideosFolder + "original_videos_list_" + nowstring + ".backup"
34
35-
#Check for new videos in Tubemixing /tmp folder
35+
36-
def check_for_video_list():
36+
37-
	running = True
37+
38-
	for names in os.listdir(originalVideosFolder):
38+
39-
		if names.startswith("original_videos_list"):
39+
40-
			if not names.endswith(".backup"):
40+
41-
				print "found original"
41+
42-
				os.system("cp -v " + originalVideosList + " " + originalVideosListBackup)
42+
43-
				running = False
43+
44-
check_for_video_list()
44+
45
e = [x for x in a if x not in d]
46
print e
47
48
#Replenish list
49
#f = open(originalVideosList, "a")
50
#f.write(str(os.listdir(originalVideosFolder)))
51
#f.close()
52
53
# Match only videos that haven't already been saved (replaced)
54
#a = os.listdir(tubemixingFolder)
55
#b = os.listdir(originalVideosFolder)
56
#c = [x for x in a if x not in b]
57
58
# File-only os.listdir
59
def saveFolder_files_list():
60
	for file in os.listdir(saveFolder):
61
		if os.path.isfile(os.path.join(saveFolder,file)):
62
			return file
63
64
def files_only(saveFolder):
65
	return [filename for filename in os.listdir(saveFolder) if os.path.isfile(os.path.join(saveFolder, filename))]
66
67
def files_only(videoDataFolderDatestamped):
68
	return [filename for filename in os.listdir(videoDataFolderDatestamped) if os.path.isfile(os.path.join(videoDataFolderDatestamped, filename))]
69
70
# Copy NEW videos from Tubemixing temp folder to working folder
71
#for file in c:
72
for file in e:
73
	shutil.copyfile(tubemixingFolder+file,saveFolder+file)
74
# Update list of saved videos
75
g = open(originalVideosList, "a")
76
g.write(str(e))
77
g.close()
78
79
# Copy NEW videos to archive folder for future reference (replaced)
80
#	shutil.copyfile(tubemixingFolder+file,originalVideosFolder+file)
81
82
# Remove prefix 
83
# NOTE: I set Tubemixing to save by default to 360p.  
84
# You'll have to tweak it if you save higher resolution by default.
85
preFix1 = "tubemixing-360p-"
86
preFix2 = "tubemixing--"
87
88
#os.listdir(saveFolder)
89
for filename in files_only(saveFolder):
90
	if filename.startswith(preFix1):
91
		os.rename(saveFolder+filename,saveFolder+filename[16:])
92
93
# Second pass (some files are saved with preFix2)
94
os.listdir(saveFolder)
95
for filename in files_only(saveFolder):
96
	if filename.startswith(preFix2):
97
		os.rename(saveFolder+filename,saveFolder+filename[12:])
98
99
# Use gdata to fetch video title from YouTube
100
for filename in files_only(saveFolder):
101
	if len(filename) == 11:
102
		os.system("cd " + videoDataFolderDatestamped + " && wget " + gdataFeed + filename + " " + "-O" + " " + filename)
103
104
# Parse video title from data fetched from YouTube
105
print files_only(videoDataFolderDatestamped)
106
for filename in files_only(videoDataFolderDatestamped):
107
	f = open(videoDataFolderDatestamped+filename)
108
	for line in f:
109
		if "<title type='text'>" in line:
110
			x = line
111
			r = re.compile("<title type='text'>(.*?)</title><content")
112
			m = r.search(x)
113
			if m:
114
				titleInfo = m.group(1)
115
				print titleInfo
116
# Using video title, save properly named and suffixed files in a new date-stamped folder
117
# Using os.system instead of shutil because shutil is a FUCKING SLOW MEMORY HOG
118
				os.system("cp -v " + saveFolder+filename + " " + '"' + namedVideosFolderDateStamped+titleInfo+".webm" + '"')
119
#					shutil.copyfile(saveFolder+filename,namedVideosFolderDateStamped+titleInfo+".webm")
120
121
# Remove code-named video files, because originals have already been saved for reference
122
# 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.
123
124
for file in os.listdir(saveFolder):
125
	os.system("rm -v " + saveFolder + file)
126
127
# Use AVconv/FFmpeg to extract MP3 audio into the Music folder
128
for filename in os.listdir(namedVideosFolderDateStamped):
129
	(str, filename)
130
	namedVideoFile = namedVideosFolderDateStamped + filename
131
	print namedVideoFile
132
133
#	os.system("avconv -i " + '"' + namedVideoFile + '"' + " " + '"' + mp3Folder + filename + '.mp3"')
134
	os.system("ffmpeg -i " + '"' + namedVideoFile + '"' + " " + '"' + mp3Folder + filename + '.mp3"')
135
136
# Remove the ".webm" that carries over to the MP3 file name during the AVconv conversion
137
print
138-
# Use AVconv (FFmpeg) to extract MP3 audio into the Music folder
138+
139
    for root, _, filenames in os.walk(mp3Folder)
140
    for filename in filenames
141
)
142
for path in pathiter:
143
    newname =  path.replace('.webm', '')
144-
	os.system("avconv -i " + '"' + namedVideoFile + '"' + " " + '"' + mp3Folder + filename + '.mp3"')
144+
145
        os.rename(path,newname)
146
147
# Clear empty folders from directories that tend to get cluttered
148
work_path1 = os.getenv("HOME") + "/Videos/tubemixing/NamedVideos/"
149
work_path2 = os.getenv("HOME") + "/Music/tubemixing/"
150
151
def clear_named_videos_folders():
152
	for file in os.listdir(work_path1):
153
		if not os.listdir(work_path1+file):
154
			print "empty"
155
			os.rmdir(work_path1+file)
156
		else:
157
			print "not empty"
158
159
def clear_avconv_mp3_folders():
160
	for file in os.listdir(work_path2):
161
		if not os.listdir(work_path2+file):
162
			print "empty"
163
			os.rmdir(work_path2+file)
164
		else:
165
			print "not empty"
166
167
clear_named_videos_folders()
168
clear_avconv_mp3_folders()