OSDN Git Service

add 2010 copyright.
[rec10/rec10-git.git] / rec10 / trunk / src / tv2mkv.py
index d9e7cd9..f2995f8 100644 (file)
@@ -1,13 +1,16 @@
 #!/usr/bin/python
 # coding: UTF-8
 # Rec10 TS Recording Tools
-# Copyright (C) 2009 Yukikaze
-import sys
+# Copyright (C) 2009-2010 Yukikaze
+import status
+import os
 import commands
 import tv2avi
 import os.path
 import time
-import shutil
+import re
+import recdblist
+import configreader
 def ts2mkv(pin, pout, opt):
     dir=os.path.split(pout)[0]
     title=os.path.split(pout)[1]
@@ -16,21 +19,106 @@ def ts2mkv(pin, pout, opt):
     tpmkv=os.path.join(dir, title+".mkv")
     tv2avi.ts2avi(pin, tpavi, opt)
     time.sleep(10)
-    avi2mkv(tpavi,tpmkv)
-    #shutil.move(tpavi,pout.replace(".mkv",".avi"))
-    #shutil.move(tpmkv,pout)
-def avi2mkv(pin,pout):
-    exe = "mkvmerge"
-    #doexe = exe.encode('utf-8') + u' \"' + pin.encode('utf-8') + u'\" \"' + pout.encode('utf-8') + u'\"'
-    doexe = exe + u" -o '" + pout + u"' --cues 0:all --forced-track 0:no --forced-track 1:no -a 1 -d 0 -S '" + pin + u"' --track-order 0:0,0:1"
-    doexe = "nice -n 17 " + doexe
-    print doexe
-    logo=pout.replace(".mkv",".log")
+    avi2mkv(tpavi,tpmkv,opt)
+def avi2mkv(pin,pout,opt):
+    dir=os.path.split(pout)[0]
+    title=os.path.split(pout)[1]
+    title=os.path.splitext(title)[0]
+    isvfr=0
+    if re.search("v", opt):
+        isvfr=1
+    if re.search("d",opt):
+        isvfr=0
+    elif re.search("5",opt):
+        isvfr=0
+    exe = configreader.getpath("mkvmerge")
+    txt=""
     os.environ['LANG']="ja_JP.UTF-8"
-    txt= doexe+"\n"
-    txt = txt+commands.getoutput(doexe.encode('utf-8'))
+    if isvfr==1:
+        wineexe=configreader.getpath("wine")
+        cfr2tc=configreader.getpath("cfr2tc")
+        cap2ass=configreader.getpath("Caption2Ass")
+        pin120=pin.replace(".avi",".120.avi")
+        pints=pin.replace(".avi",".ts")
+        pintimecode=pin.replace(".avi",".timecode.txt")
+        pincap=pin.replace(".avi",".srt")
+        pinaac=pin.replace(".avi",".aac")
+        e0="ffmpeg -i '"+pints+"' -vn -f aac -acodec copy '"+pinaac+"'"
+        e1=wineexe+u" "+cfr2tc+u" '"+"Z:\\"+pin+"' '"+"Z:\\"+pin120+u"' '"+"Z:\\"+pintimecode+u"' 2"
+        e2=wineexe+u" "+cap2ass+u" -format srt \"Z:\\"+pints+"\" \"Z:\\"+pincap+"\""
+        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"
+        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"
+        txt=txt+execcomd(e0)
+        txt=txt+execcomd(e1)
+        txt=txt+execcomd(e2)
+        if os.path.exists(pincap) and (os.path.getsize(pincap)>1000):
+            txt=txt+execcomd(e3s)
+        else:
+            txt=txt+execcomd(e3)
+        if (not os.path.exists(pin.replace(".avi",".120.avi"))and (not os.path.exists(pout))):
+            txt=txt+"CFR2TC error. maybe avi file is over 1GB.(ODML error would have happend.)"
+            ptmp=pin.replace(".avi",".noodml.avi")
+            e1="mencoder -noodml -forceidx -oac copy -ovc copy -o \'"+ptmp+"\'"+" \'"+pin+"\'"
+            e2=wineexe+u" "+cfr2tc+u" '"+"Z:\\"+ptmp+"' '"+"Z:\\"+pin120+u"' '"+"Z:\\"+pintimecode+u"' 2"
+            e3=wineexe+u" "+cap2ass+u" -format srt \"Z:\\"+pints+"\" \"Z:\\"+pincap+"\""
+            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"
+            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"
+            cmdt=execcomd(e1)
+            cmdt=cmdt+execcomd(e2)
+            cmdt=cmdt+execcomd(e3)
+            if os.path.exists(pincap) and (os.path.getsize(pincap)>1000):
+                execcomd(e4s)
+            else:
+                execcomd(e4)
+            try:
+                os.remove(ptmp)
+            except:
+                ""
+            txt=txt+cmdt+"\n"
+    else:
+        wineexe=configreader.getpath("wine")
+        pincap=pin.replace(".avi",".srt")
+        cap2ass=configreader.getpath("Caption2Ass")
+        pints=pin.replace(".avi",".ts")
+        e0=wineexe+u" "+cap2ass+u" -format srt \"Z:\\"+pints+"\" \"Z:\\"+pincap+"\""
+        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"
+        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"
+        txt=txt+execcomd(e0)
+        if os.path.exists(pincap) and (os.path.getsize(pincap)>1000):
+            txt=txt+execcomd(e1s)
+        else:
+            txt=txt+execcomd(e1)
+    logo=pout.replace(".mkv",".log")
+    if status.getSettings_auto_del_tmp()==1:
+        deltitle(dir,title)
     txt = "\n####mkvmerge-log####\n"+txt
     f=open(logo,'a')
     f.write(txt.encode('utf-8'))
     f.close()
-    sys.stdout.flush()
\ No newline at end of file
+def execcomd(cmd):
+    txt=""
+    cmdt=u"nice -n 17 "+cmd
+    try:
+        txt=u"Cmd : "+cmd+"\n"
+        txt2=commands.getoutput(cmdt.encode('utf-8'))
+        txt=txt+unicode(txt2,"utf-8")+"\n"
+    except:
+        ""
+    return txt
+def deltitle(path,title):
+    dp=[]
+    dp.append(os.path.join(path,title+".avi"))
+    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+".srt"))
+    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"))*10>os.path.getsize(os.path.join(path,title+".ts.b25")):
+            if os.path.getsize(os.path.join(path,title+".ts"))>1000*1000*100:
+                dp.append(os.path.join(path,title+".ts.b25"))
+    for ip in dp:
+        try:
+            os.remove(ip)
+        except:
+            ""
+    
\ No newline at end of file