3 # Rec10 TS Recording Tools
4 # Copyright (C) 2009 Yukikaze
7 __date__ ="$2009/09/14 17:38:25$"
21 recordedpath=configreader.getpath("recorded")
22 recpath=configreader.getpath("recpath")
25 録画フォルダを検索し、各QUEの実行状況を表示する
27 b25list = glob.glob(path + "/*.b25")
29 ##b25f is title.ts.b25 avi is title.avi
30 dir = os.path.split(b25f)[0]
31 title = os.path.split(b25f)[1]
32 title = title.replace(".ts.b25", "")
33 avipath = os.path.join(dir, title + ".avi")
34 mp4path = os.path.join(dir, title + ".mp4")
35 tspath = os.path.join(dir, title + ".ts")
36 b25f = b25f.replace(".ts.b25", ".avi")
38 if os.path.isfile(tspath):##tsファイルが存在している
39 dtime = time.time()-os.path.getmtime(tspath)
42 if os.path.getsize(tspath) > 1 * 1000 * 1000:##最終更新から22分以上経過かつ1MB以上
48 if os.path.isfile(mp4path):##tsファイルが存在している
49 dtime = time.time()-os.path.getmtime(mkvpath)
52 if os.path.getsize(avipath) > 1 * 1000 * 1000:##最終更新から22分以上経過かつ1MB以上
58 recdblist.printutf8(title + ":" + mode)
59 def search_avi(temppath,recpath):
63 avilist = glob.glob(temppath + "/*.avi")
66 ##b25f is title.ts.b25 avi is title.avi
67 dir = os.path.split(avif)[0]
68 title = os.path.split(avif)[1]
69 title = title.replace(".avi", "")
70 avipath = os.path.join(dir, title + ".avi")
71 dtime = time.time()-os.path.getmtime(avipath)
74 if veryfySize(avipath):
77 def search_mkv(temppath,recpath):
81 avilist = glob.glob(temppath + "/*.mkv")
84 ##b25f is title.ts.b25 avi is title.avi
85 dir = os.path.split(avif)[0]
86 title = os.path.split(avif)[1]
87 title = title.replace(".mkv", "")
88 avipath = os.path.join(dir, title + ".mkv")
89 dtime = time.time()-os.path.getmtime(avipath)
92 if veryfySize(avipath):
95 def search_mp4(temppath,recpath):
99 avilist = glob.glob(temppath + "/*.mp4")
102 ##b25f is title.ts.b25 avi is title.avi
103 dir = os.path.split(avif)[0]
104 title = os.path.split(avif)[1]
105 title = title.replace(".mp4", "")
106 avipath = os.path.join(dir, title + ".mp4")
107 dtime = time.time()-os.path.getmtime(avipath)
110 if veryfySize(avipath):
113 def veryfySize(path):
114 #vsize=[297,497,596,1196]#SD 30m 1h 1.5h 2h
115 vsize=[245,275,295,591,830]
116 vsize=vsize+[325,560,590,602,690,860]
117 #vsize=vsize+[458,916]#HD 30m 1h
118 #vsize=vsize+[381,895,447]
121 if os.path.getsize(path)>(size-10)*1024*1024 and os.path.getsize(path)<(size+10)*1024*1024:
124 def searchFolder(title,path):
126 titleにマッチするフォルダを探し出す。
128 folderpath=os.listdir(path)
131 for ft in folderpath:
132 fullpath=os.path.join(path, ft)
133 if os.path.isdir(fullpath):
134 lfpath.append(fullpath)
135 ftt=os.listdir(fullpath)
138 folderpath.append(os.path.join(fullpath, ft2))
140 lfpath.append(fullpath)
144 if os.path.isdir(dirp):
145 cmpp=os.path.dirname(dirp)
148 cmpp=os.path.basename(dirp)
149 appp=os.path.dirname(dirp)
150 p=n_gram.trigram(title.decode("utf-8"),cmpp.decode("utf-8"))
152 ngram.append((p,appp))
153 ngram=list(set(ngram))
157 #recdblist.printutf8(title + ngram[0][1] + " : "+str(ngram[0][0]))
164 def execMove(title,temppath,recpath):
165 srcpath=os.path.join(temppath,title+".mp4")
166 #desttitle=destName(title, temppath, recpath)
168 sf=searchFolder(title, recpath)
170 destpath=os.path.join(sf,destNameMP4(title, temppath, sf)+".mp4")
171 #os.path.join(sf,desttitle+".mkv")
172 #recdblist.printutf8(srcpath)
173 #recdblist.printutf8(destpath)
174 recdblist.printutf8("moving now..")
175 recdblist.printutf8(srcpath+" : "+destpath)
176 shutil.move(srcpath, destpath)
177 #shutil.copy(srcpath, destpath)
178 delpath=[os.path.join(temppath,title+".ts")]
179 delpath.append(os.path.join(temppath,title+".avi"))
180 delpath.append(os.path.join(temppath,title+".ts.b25"))
181 delpath.append(os.path.join(temppath,title+".ts.tsmix"))
182 delpath.append(os.path.join(temppath,title+".ts.log"))
183 delpath.append(os.path.join(temppath,title+".sa.avi"))
184 delpath.append(os.path.join(temppath,title+".sa.avi.log"))
185 delpath.append(os.path.join(temppath,title+".log"))
192 def destName(title,temppath,recpath):
194 titleから移動先に作るべきファイル名を作り出す。
196 dstpath=os.path.join(recpath,title+".avi")
197 srcpath=os.path.join(temppath,title+".avi")
198 if os.path.exists(dstpath):
199 gmtime=time.gmtime(os.path.getmtime(srcpath))
200 times=time.strftime("%y%m%d",gmtime)
201 title=title+"_"+times
203 def destNameMKV(title,temppath,recpath):
205 titleから移動先に作るべきファイル名を作り出す。
207 dstpath=os.path.join(recpath,title+".mkv")
208 srcpath=os.path.join(temppath,title+".mkv")
209 if os.path.exists(dstpath):
210 gmtime=time.gmtime(os.path.getmtime(srcpath))
211 times=time.strftime("%y%m%d",gmtime)
212 title=title+"_"+times
214 def destNameMP4(title,temppath,recpath):
216 titleから移動先に作るべきファイル名を作り出す。
218 dstpath=os.path.join(recpath,title+".mp4")
219 srcpath=os.path.join(temppath,title+".mp4")
220 if os.path.exists(dstpath):
221 gmtime=time.gmtime(os.path.getmtime(srcpath))
222 times=time.strftime("%y%m%d",gmtime)
223 title=title+"_"+times
225 def detName(path,title):
227 type A ---title#<number>
228 type B ---title#<number>subtitle
229 type C ---title subtitle
230 type D ---title(without number)
232 #if re.match("#\d\s[0,10]\z|#[0-9]\s[0,10]\z", title)
233 # recdblist.printutf8("typeA")
234 #elif re.match("#\d\s[0,10].|#[0-9]\s[0,10].", title)
235 # recdblist.printutf8("typeB")
237 def detNameType(title):
239 type A ---title#<number>
240 type B ---title#<number>subtitle
241 type C ---title subtitle
242 type D ---title(without number)
244 recdblist.printutf8(title)
245 #rA=re.compile(".+(?P<title>)#\d(?P<num>)\s[0,10]\z")
246 rA=re.compile("(.+)#(\d*)\s*\Z")
248 rB=re.compile("(.+)#(\d*)\s*(\D*)")
251 recdblist.printutf8("typeA")
252 recdblist.printutf8("title="+tA.group(1))
253 recdblist.printutf8("num="+tA.group(2))
255 recdblist.printutf8("typeB")
256 recdblist.printutf8("title="+tB.group(1))
257 recdblist.printutf8("num="+tB.group(2))
258 recdblist.printutf8("subtitle="+tB.group(3))
259 if __name__ == "__main__":
260 usage="usage: %prog read -h"
261 version="%prog 0.7.0beta1"
262 parser=optparse.OptionParser(usage=usage,version=version)
263 parser.add_option("-s","--search",action="store",type="string",dest="ltitle",default="",metavar="TITLE",help="test to search where the title should be contained(test for -e)")
264 parser.add_option("-A","--Auto",action="store_true",dest="auto",default=False,help="auto classifying mode(not a test)")
265 parser.add_option("-e","--exec",action="store",type="string",dest="etitle",default="",metavar="TITLE",help="exec move(not a test)")
266 parser.add_option("-l","--list",action="store_true",dest="list",default=False,help="File listing mode(test for -a)")
267 (opts,args)=parser.parse_args(sys.argv)
269 sf=searchFolder(opts.ltitle, recordedpath)
270 recdblist.printutf8(os.path.join(sf, destNameMKV(opts.ltitle,recpath,sf)+".mp4"))
272 sa=search_mp4(recpath, recordedpath)
274 recdblist.printutf8(u"自動推測実行中")
275 sf=searchFolder(t,recordedpath)
277 recdblist.printutf8(u"移動先")
278 recdblist.printutf8(t+" : "+os.path.join(sf, destNameMP4(t, recpath,sf)+".mp4"))
279 recdblist.printutf8(u"実行中")
280 execMove(t, recpath, recordedpath)
282 recdblist.printutf8(t+" can't find matching folder.")
284 sa=search_mp4(recpath, recordedpath)
286 sf=searchFolder(t,recordedpath)
288 recdblist.printutf8(t+" : "+os.path.join(sf, destNameMP4(t, recpath,sf)+".mp4"))
289 elif opts.etitle!="":
290 execMove(opts.etitle,recpath, recordedpath)