X-Git-Url: http://git.osdn.net/view?a=blobdiff_plain;f=rec10%2Ftrunk%2Fsrc%2Fauto_process.py;h=fb647b1b6d8a512d620682e5bc4a8ab7d1d2e9da;hb=80efc35360b189dacaeaf6c64f21ea189e7e2d3c;hp=be8f2c8d2f32d7f872ea33985596de302ec4bde6;hpb=1438bd816cc08f3f45d3b50e590edc710f039c4a;p=rec10%2Frec10-git.git diff --git a/rec10/trunk/src/auto_process.py b/rec10/trunk/src/auto_process.py index be8f2c8..fb647b1 100644 --- a/rec10/trunk/src/auto_process.py +++ b/rec10/trunk/src/auto_process.py @@ -1,119 +1,279 @@ -#!/usr/bin/python -# coding: UTF-8 -# Rec10 TS Recording Tools -# Copyright (C) 2009 Yukikaze -import os -import glob -import time - -import recdb -import recdblist -import rec10d -import os.path -import tv2mp4 -def Update_to_MP4(path): - """ - 録画一時フォルダ内mp4ファイルを検索 - """ - avilist = glob.glob(path + "/*.avi") - mkvlist = glob.glob(path+"/*.mkv") - avilist=avilist+mkvlist - #print avilist - for avif in avilist: - if avif.rfind("sa.avi")==-1: - ##b25f is title.ts.b25 avi is title.avi - dir = os.path.split(avif)[0] - title = os.path.split(avif)[1] - title = title.replace(".avi", "") - title = title.replace(".mkv", "") - avipath = os.path.join(dir, title + ".avi") - mkvpath = os.path.join(dir, title + ".mkv") - mp4path = os.path.join(dir, title + ".mp4") - if not os.path.exists(mp4path): - if os.path.exists(avipath): - avidtime = int(time.time()-os.path.getmtime(avipath)) - if avidtime>300: - if os.path.exists(mkvpath): - mkvdtime = int(time.time()-os.path.getmtime(mkvpath)) - if mkvdtime>300: - print mkvpath+":"+mp4path - tv2mp4.mkv2mp4(mkvpath,mp4path) - else: - print avipath+":"+mp4path - tv2mp4.avi2mp4(avipath,mp4path) - else: - print avipath+":"+mp4path - tv2mp4.avi2mp4(avipath,mp4path) - else: - if not os.path.exists(avipath): - if os.path.exists(mkvpath): - mkvdtime = int(time.time()-os.path.getmtime(mkvpath)) - if mkvdtime>300: - print mkvpath+":"+mp4path - tv2mp4.mkv2mp4(mkvpath,mp4path) -def auto_check(path): - avilist = glob.glob(path + "/*.avi") - mkvlist = glob.glob(path+"/*.mkv") - tslist = glob.glob(path+"/*.ts") - b25list = glob.glob(path+"/*.ts.b25") - filelist=avilist+mkvlist+tslist+b25list - rec10d.rec10db.new_auto_proc() - for fn in filelist: - if fn.rfind("sa.avi")==-1: - dir = os.path.split(fn)[0] - file = os.path.split(fn)[1] - title = os.path.splitext(file)[0] - ext = os.path.splitext(file)[1] - if ext == "b25": - title=title.replace(".ts","") - proc=check_process(dir, title) - if proc=="b25": - rec10d.rec10db.add_auto_proc(recdblist.REC_AUTO_SUGGEST_DECODE,title) - elif proc=="ts": - rec10d.rec10db.add_auto_proc(recdblist.REC_AUTO_SUGGEST_ENCODE,title) - elif proc =="avi": - rec10d.rec10db.add_auto_proc(recdblist.REC_AUTO_SUGGEST_AVI2MP4,title) - elif proc =="mkv": - rec10d.rec10db.add_auto_proc(recdblist.REC_AUTO_SUGGEST_MKV2MP4,title) -""" - 処理がどの段階まで言ったのかを調査し返す。 - return - recording - b25 - b25decoding - tssplitting - ts - encoding - avi - mp4making - mp4 -""" -def check_process(path,title): - path1 = os.path.join(path,title+".mp4") - if os.path.exists(path1): - if int(time.time()-os.path.getmtime(path1))>300: - return "mp4" - else: - return "mp4making" - elif os.path.exists(os.path.join(path,title+".avi")): - if int(time.time()-os.path.getmtime(os.path.join(path,title+".avi")))>300: - return "avi" - else: - return "encoding" - elif os.path.exists(os.path.join(path,title+".ts")): - if int(time.time()-os.path.getmtime(os.path.join(path,title+".ts")))>300: - return "ts" - else: - return "tssplitting" - elif os.path.exists(os.path.join(path,title+".sa.avi")): - if int(time.time()-os.path.getmtime(os.path.join(path,title+".sa.avi")))>300: - return "ts" - else: - return "tssplitting" - elif os.path.exists(os.path.join(path,title+".ts.b25")): - if int(time.time()-os.path.getmtime(os.path.join(path,title+".ts.b25")))>300: - return "b25" - else: - return "recording" - - +#!/usr/bin/python +# coding: UTF-8 +# Rec10 TS Recording Tools +# Copyright (C) 2009-2011 Yukikaze +import os +import glob +import time +import datetime +import commands +import re +import os.path + +import chdb +import status +import configreader +import recdblist +import rec10d +import tv2mp4 +import epgdb +def updateToMP4(path): + """ + !現在未使用! + 録画一時フォルダ内mp4ファイルを検索 + """ + avilist = glob.glob(path + "/*.avi") + mkvlist = glob.glob(path+"/*.mkv") + avilist=avilist+mkvlist + for avif in avilist: + if avif.rfind("sa.avi")==-1: + dir = os.path.split(avif)[0] + title = os.path.split(avif)[1] + title = title.replace(".avi", "") + title = title.replace(".mkv", "") + avipath = os.path.join(dir, title + ".avi") + mkvpath = os.path.join(dir, title + ".mkv") + mp4path = os.path.join(dir, title + ".mp4") + if not os.path.exists(mp4path): + if os.path.exists(avipath): + avidtime = int(time.time()-os.path.getmtime(avipath)) + if avidtime>300: + if os.path.exists(mkvpath): + mkvdtime = int(time.time()-os.path.getmtime(mkvpath)) + if mkvdtime>300: + recdblist.printutf8(mkvpath+":"+mp4path) + tv2mp4.mkv2mp4(mkvpath,mp4path) + else: + recdblist.printutf8(avipath+":"+mp4path) + tv2mp4.avi2mp4(avipath,mp4path) + else: + recdblist.printutf8(avipath+":"+mp4path) + tv2mp4.avi2mp4(avipath,mp4path) + else: + if not os.path.exists(avipath): + if os.path.exists(mkvpath): + mkvdtime = int(time.time()-os.path.getmtime(mkvpath)) + if mkvdtime>300: + recdblist.printutf8(mkvpath+":"+mp4path) + tv2mp4.mkv2mp4(mkvpath,mp4path) +def autoCheck(path): + avilist = glob.glob(path + "/*.avi") + mkvlist = glob.glob(path+"/*.mkv") + mp4list = glob.glob(path+"/*.mp4") + tslist = glob.glob(path+"/*.ts") + b25list = glob.glob(path+"/*.ts.b25") + filelist=avilist+mkvlist+tslist+b25list+mp4list + add=[] + tbtime=datetime.datetime.now()+datetime.timedelta(seconds=60) + tbtime2=datetime.datetime.now()+datetime.timedelta(seconds=1200) + for fn in filelist: + if os.path.exists(fn): + if fn.rfind("sa.avi")==-1 and fn.rfind(".120.avi")==-1 and os.path.getsize(fn)>1*1000*1000: + dir = os.path.split(fn)[0] + file = os.path.split(fn)[1] + title = os.path.splitext(file)[0] + title = unicode(title,'utf-8') + ext = os.path.splitext(file)[1] + if ext == ".b25": + title=title.replace(".ts","") + dbs=rec10d.rec10db.select_by_name_time_timeline(title,tbtime,tbtime2) + if len(dbs)==0: + proc=checkProcess(dir, title) + chtxtt=rec10d.rec10db.select_chtxt_by_title_timeline_log(title) + nchtxt="" + if chtxtt!=None: + nchtxt=chtxtt + if proc=="b25": + add.append([recdblist.REC_AUTO_SUGGEST_DECODE,title,nchtxt]) + elif proc=="ts": + add.append([recdblist.REC_AUTO_SUGGEST_ENCODE,title,nchtxt]) + elif proc =="264": + add.append([recdblist.REC_AUTO_SUGGEST_AVI2FP,title,nchtxt]) + #elif proc =="mp4": + # add.append([recdblist.REC_AUTO_SUGGEST_AP2FP,title,nchtxt]) + #print add + if len(add)>0: + rec10d.rec10db.new_auto_proc() + for a in add: + rec10d.rec10db.add_auto_proc(a[0],a[1],a[2]) + time.sleep(1) +""" + 処理がどの段階まで言ったのかを調査し返す。 + return + recording + b25 + b25decoding + tssplitting + ts + encoding + avi + mp4making + mp4 +""" +def checkProcess(path,title): + path1 = os.path.join(path,title+".mkv") + if os.path.exists(path1): + if int(time.time()-os.path.getmtime(path1))>300: + return "mkv" + else: + return "mkvmaking" + elif os.path.exists(os.path.join(path,title+".mp4")): + if int(time.time()-os.path.getmtime(os.path.join(path,title+".mp4")))>300: + return "mp4" + else: + return "mp4making" + elif os.path.exists(os.path.join(path,title+".264")): + if int(time.time()-os.path.getmtime(os.path.join(path,title+".264")))>300: + return "264" + else: + return "encoding" + elif os.path.exists(os.path.join(path,title+".ts.log")): + if int(time.time()-os.path.getmtime(os.path.join(path,title+".ts")))<300: + return "encoding" + else: + return "ts" + elif os.path.exists(os.path.join(path,title+".ts")): + if int(time.time()-os.path.getmtime(os.path.join(path,title+".ts")))>300: + return "ts" + else: + return "tssplitting" + elif os.path.exists(os.path.join(path,title+".sa.avi")): + if int(time.time()-os.path.getmtime(os.path.join(path,title+".sa.avi")))>300: + return "ts" + else: + return "tssplitting" + elif os.path.exists(os.path.join(path,title+".ts.b25")): + if int(time.time()-os.path.getmtime(os.path.join(path,title+".ts.b25")))>300: + return "b25" + else: + return "recording" +def update_all_timeline_epg(): + now=datetime.datetime.now() + et=now+datetime.timedelta(days=7) + update_timeline_epg(now.strftime("%Y-%m-%d %H:%M:%S"), et.strftime("%Y-%m-%d %H:%M:%S")) +def update_timeline_epg(btime,etime): + update_timeline_epg_schedule(btime,etime) + update_timeline_dup(btime,etime) +def update_timeline_epg_schedule(btime,etime): + dbl=rec10d.rec10db.select_bytime_all_timeline(btime, etime) + #print dbl + for db in dbl: + ret=[] + #[chtxtt, title, btime, etime,exp,longexp,category] + if db['type']==recdblist.REC_KEYWORD or db['type']==recdblist.REC_KEYWORD_EVERY_SOME_DAYS: + ret=epgdb.searchTime(db['title'], db['btime'], db['deltatime'], db['chtxt']) + if len(ret)>4 and len(ret[2])>18: + rec10d.rec10db.update_epg_timeline(db['type'], db['chtxt'], db['title'], db['btime'], ret[2],ret[3],ret[1],ret[4],ret[6]) + if not (db['btime'] == ret[2] and db['etime']==ret[3]): + rec10d.rec10db.update_status_change_timeline(db['type'], db['chtxt'], db['title'], db['btime'], "1") + else: + rec10d.rec10db.update_status_change_timeline(db['type'], db['chtxt'], db['title'], db['btime'], "0") + else: + rec10d.rec10db.update_status_change_timeline(db['type'], db['chtxt'], db['title'], db['btime'], "1") + elif db['type']==recdblist.REC_RESERVE or db['type']==recdblist.REC_FINAL_RESERVE : + ret=epgdb.searchTime(db['title'], db['btime'],"5", db['chtxt']) + if len(ret)>4 and len(ret[2])>18: + rec10d.rec10db.update_epg_timeline(db['type'], db['chtxt'], db['title'], db['btime'], ret[2],ret[3],ret[1],ret[4],ret[6]) + if not (db['btime'] == ret[2] and db['etime']==ret[3]): + rec10d.rec10db.update_status_change_timeline(db['type'], db['chtxt'], db['title'], db['btime'], "1") + else: + rec10d.rec10db.update_status_change_timeline(db['type'], db['chtxt'], db['title'], db['btime'], "0") + else: + rec10d.rec10db.update_status_change_timeline(db['type'], db['chtxt'], db['title'], db['btime'], "1") +def update_timeline_dup(epgbtime,epgetime): + dbl=rec10d.rec10db.select_byepgtime_all_timeline(epgbtime, epgetime) + for db in dbl: + if db['type']==recdblist.REC_KEYWORD or db['type']==recdblist.REC_KEYWORD_EVERY_SOME_DAYS: + dbn=epgdb.countEpgSchedule(db['epgbtime'], db['epgetime']) + try: + bctypet=chdb.searchCHFromChtxt(db['chtxt'])['bctype'] + if bctypet.find("cs") > -1 or bctypet.find("bs") > -1 : + if dbn[1]>status.getRecordingMax()[1]: + rec10d.rec10db.update_status_dup_timeline(db['type'], db['chtxt'], db['title'], db['btime'], "1") + else: + rec10d.rec10db.update_status_dup_timeline(db['type'], db['chtxt'], db['title'], db['btime'], "0") + else: + if dbn[0]>status.getRecordingMax()[0]: + rec10d.rec10db.update_status_dup_timeline(db['type'], db['chtxt'], db['title'], db['btime'], "1") + else: + rec10d.rec10db.update_status_dup_timeline(db['type'], db['chtxt'], db['title'], db['btime'], "0") + except: + "" +def killDeadEncode(path): + rawlist = glob.glob(path + "/*.264") + for fn in rawlist: + if int(time.time()-os.path.getmtime(fn))>3000: + m2vpath=unicode(fn.replace(".264",".m2v"),'utf-8') + x264path=os.path.split(fn)[1] + folderpath=unicode(os.path.split(fn)[0],'utf-8') + x264path=re.sub("\\[","[",x264path) + x264path=re.sub("\[","\\\[",x264path) + x264path=re.sub("\\]","]",x264path) + x264path=re.sub("]","\\]",x264path) + tspath=unicode(x264path.replace(".264",".ts"),'utf-8') + m2vpath=unicode(x264path.replace(".264",".m2v"),'utf-8') + x264path=unicode(x264path,'utf-8') + os.environ['LANG']="ja_JP.UTF-8" + ktmp=[] + ktmp.append(u"ps auxww | grep \""+folderpath+"\" | grep \""+x264path+u"\" | egrep -v grep | egrep -v \"sh -c\" | grep x264 | awk '{print $2}'") + ktmp.append(u"ps auxww | grep \""+folderpath+"\" | grep \""+tspath+u"\" | egrep -v grep | egrep -v \"sh -c\" | grep mencoder | awk '{print $2}'") + ktmp.append(u"ps auxww | grep \""+folderpath+"\" | grep \""+m2vpath+u"\" | egrep -v grep | egrep -v \"sh -c\" | grep ffmpeg | awk '{print $2}'") + recdblist.printutf8(u"エンコード処理異常終了タスク終了") + for istr in ktmp: + recdblist.printutf8(istr) + ktmt=commands.getoutput(istr.encode('utf-8')) + if len(ktmt)>0: + ktmt=ktmt[0] + try: + if int(ktmt)>0: + ktmp=u"kill -9 `"+istr+u"`" + recdblist.printutf8(ktmp) + os.system(ktmp.encode('utf-8')) + except: + "" +def deleteTmpFile(path,title,ext): + level= 0##0:b25 1:ts(del tsmix and ts.b25) 5:x264(del 2 and so on) 10:mp4/mkv + smsize= 0 + if re.search(".ts",ext): + level= 1 + smsize = 100*1000*1000 + elif re.search(".264",ext): + level= 5 + smsize = 10*1000*1000 + elif re.search(".mp4",ext): + level = 10 + smsize = 10*1000*1000 + elif re.search(".mkv",ext): + level = 15 + smsize = 10*1000*1000 + dp=[] + if level > 0 : + if os.path.exists(os.path.join(path,title+".ts")) and os.path.exists(os.path.join(path,title+".ts.b25")): + if os.path.getsize(os.path.join(path,title+".ts"))*12>os.path.getsize(os.path.join(path,title+".ts.b25")): + dp.append(os.path.join(path,title+".ts.b25")) + elif os.path.getsize(os.path.join(path,title+".ts"))>200*1000*1000: + dp.append(os.path.join(path,title+".ts.b25")) + if level > 4 : + if configreader.getConfEnv("remove_ts")=="1": + dp.append(os.path.join(path,title+".ts")) + if level > 9 : + dp.append(os.path.join(path,title+".avi")) + dp.append(os.path.join(path,title+".264")) + dp.append(os.path.join(path,title+".120.avi")) + dp.append(os.path.join(path,title+".noodml.avi")) + dp.append(os.path.join(path,title+".aac")) + dp.append(os.path.join(path,title+".m2v")) + dp.append(os.path.join(path,title+"_1.aac")) + dp.append(os.path.join(path,title+"_2.aac")) + dp.append(os.path.join(path,title+"_1.mp3")) + dp.append(os.path.join(path,title+"_2.mp3")) + dp.append(os.path.join(path,title+".srt")) + if level > 14 : + dp.append(os.path.join(path,title+".mp4")) + if os.path.exists(os.path.join(path,title+ext)): + if os.path.getsize(os.path.join(path,title+ext))>smsize: + for ip in dp: + try: + os.remove(ip) + except: + ""