OSDN Git Service

add 2010 copyright.
[rec10/rec10-git.git] / rec10 / trunk / src / tv2mkv.py
1 #!/usr/bin/python
2 # coding: UTF-8
3 # Rec10 TS Recording Tools
4 # Copyright (C) 2009-2010 Yukikaze
5 import status
6 import os
7 import commands
8 import tv2avi
9 import os.path
10 import time
11 import re
12 import recdblist
13 import configreader
14 def ts2mkv(pin, pout, opt):
15     dir=os.path.split(pout)[0]
16     title=os.path.split(pout)[1]
17     title=os.path.splitext(title)[0]
18     tpavi=os.path.join(dir,title+".avi")
19     tpmkv=os.path.join(dir, title+".mkv")
20     tv2avi.ts2avi(pin, tpavi, opt)
21     time.sleep(10)
22     avi2mkv(tpavi,tpmkv,opt)
23 def avi2mkv(pin,pout,opt):
24     dir=os.path.split(pout)[0]
25     title=os.path.split(pout)[1]
26     title=os.path.splitext(title)[0]
27     isvfr=0
28     if re.search("v", opt):
29         isvfr=1
30     if re.search("d",opt):
31         isvfr=0
32     elif re.search("5",opt):
33         isvfr=0
34     exe = configreader.getpath("mkvmerge")
35     txt=""
36     os.environ['LANG']="ja_JP.UTF-8"
37     if isvfr==1:
38         wineexe=configreader.getpath("wine")
39         cfr2tc=configreader.getpath("cfr2tc")
40         cap2ass=configreader.getpath("Caption2Ass")
41         pin120=pin.replace(".avi",".120.avi")
42         pints=pin.replace(".avi",".ts")
43         pintimecode=pin.replace(".avi",".timecode.txt")
44         pincap=pin.replace(".avi",".srt")
45         pinaac=pin.replace(".avi",".aac")
46         e0="ffmpeg -i '"+pints+"' -vn -f aac -acodec copy '"+pinaac+"'"
47         e1=wineexe+u" "+cfr2tc+u" '"+"Z:\\"+pin+"' '"+"Z:\\"+pin120+u"' '"+"Z:\\"+pintimecode+u"' 2"
48         e2=wineexe+u" "+cap2ass+u" -format srt \"Z:\\"+pints+"\" \"Z:\\"+pincap+"\""
49         e3=exe +" -o '"+pout+u"'  --forced-track 0:no --timecodes '0:"+pintimecode+"' -d 0 -A -S '"+pin120+"' --sync 0:-225 --forced-track 0:no -a 0 -D -S '"+pinaac+"' --track-order 0:0,1:0"
50         e3s=exe +" -o '"+pout+u"'  --forced-track 0:no --timecodes '0:"+pintimecode+"' -d 0 -A -S '"+pin120+"' --sync 0:-225 --forced-track 0:no -a 0 -D -S '"+pinaac+"' --forced-track 0:no -s 0 -D -A '"+pincap+"' --track-order 0:0,1:0,2:0"
51         txt=txt+execcomd(e0)
52         txt=txt+execcomd(e1)
53         txt=txt+execcomd(e2)
54         if os.path.exists(pincap) and (os.path.getsize(pincap)>1000):
55             txt=txt+execcomd(e3s)
56         else:
57             txt=txt+execcomd(e3)
58         if (not os.path.exists(pin.replace(".avi",".120.avi"))and (not os.path.exists(pout))):
59             txt=txt+"CFR2TC error. maybe avi file is over 1GB.(ODML error would have happend.)"
60             ptmp=pin.replace(".avi",".noodml.avi")
61             e1="mencoder -noodml -forceidx -oac copy -ovc copy -o \'"+ptmp+"\'"+" \'"+pin+"\'"
62             e2=wineexe+u" "+cfr2tc+u" '"+"Z:\\"+ptmp+"' '"+"Z:\\"+pin120+u"' '"+"Z:\\"+pintimecode+u"' 2"
63             e3=wineexe+u" "+cap2ass+u" -format srt \"Z:\\"+pints+"\" \"Z:\\"+pincap+"\""
64             e4=exe +" -o '"+pout+u"'  --forced-track 0:no --timecodes '0:"+pintimecode+"' -d 0 -A -S '"+pin120+"' --sync 0:-225 --forced-track 0:no -a 0 -D -S '"+pinaac+"' --track-order 0:0,1:0"
65             e4s=exe +" -o '"+pout+u"'  --forced-track 0:no --timecodes '0:"+pintimecode+"' -d 0 -A -S '"+pin120+"' --sync 0:-225 --forced-track 0:no -a 0 -D -S '"+pinaac+"' --forced-track 0:no -s 0 -D -A '"+pincap+"' --track-order 0:0,1:0,2:0"
66             cmdt=execcomd(e1)
67             cmdt=cmdt+execcomd(e2)
68             cmdt=cmdt+execcomd(e3)
69             if os.path.exists(pincap) and (os.path.getsize(pincap)>1000):
70                 execcomd(e4s)
71             else:
72                 execcomd(e4)
73             try:
74                 os.remove(ptmp)
75             except:
76                 ""
77             txt=txt+cmdt+"\n"
78     else:
79         wineexe=configreader.getpath("wine")
80         pincap=pin.replace(".avi",".srt")
81         cap2ass=configreader.getpath("Caption2Ass")
82         pints=pin.replace(".avi",".ts")
83         e0=wineexe+u" "+cap2ass+u" -format srt \"Z:\\"+pints+"\" \"Z:\\"+pincap+"\""
84         e1=exe + u" -o '" + pout + u"' --forced-track 0:no --forced-track 1:no -a 1 -d 0 -S '" + pin + u"' --track-order 0:0,0:1"
85         e1s=exe + u" -o '" + pout + u"' --forced-track 0:no --forced-track 1:no -a 1 -d 0 -S '" + pin + u"' --forced-track 0:no -s 0 -A -D '"+pincap+"' --track-order 0:0,0:1,1:0"
86         txt=txt+execcomd(e0)
87         if os.path.exists(pincap) and (os.path.getsize(pincap)>1000):
88             txt=txt+execcomd(e1s)
89         else:
90             txt=txt+execcomd(e1)
91     logo=pout.replace(".mkv",".log")
92     if status.getSettings_auto_del_tmp()==1:
93         deltitle(dir,title)
94     txt = "\n####mkvmerge-log####\n"+txt
95     f=open(logo,'a')
96     f.write(txt.encode('utf-8'))
97     f.close()
98 def execcomd(cmd):
99     txt=""
100     cmdt=u"nice -n 17 "+cmd
101     try:
102         txt=u"Cmd : "+cmd+"\n"
103         txt2=commands.getoutput(cmdt.encode('utf-8'))
104         txt=txt+unicode(txt2,"utf-8")+"\n"
105     except:
106         ""
107     return txt
108 def deltitle(path,title):
109     dp=[]
110     dp.append(os.path.join(path,title+".avi"))
111     dp.append(os.path.join(path,title+".120.avi"))
112     dp.append(os.path.join(path,title+".noodml.avi"))
113     dp.append(os.path.join(path,title+".aac"))
114     dp.append(os.path.join(path,title+".srt"))
115     if os.path.exists(os.path.join(path,title+".ts"))and os.path.exists(os.path.join(path,title+".ts.b25")):
116         if os.path.getsize(os.path.join(path,title+".ts"))*10>os.path.getsize(os.path.join(path,title+".ts.b25")):
117             if os.path.getsize(os.path.join(path,title+".ts"))>1000*1000*100:
118                 dp.append(os.path.join(path,title+".ts.b25"))
119     for ip in dp:
120         try:
121             os.remove(ip)
122         except:
123             ""
124