OSDN Git Service

implement traceback.
[rec10/rec10-git.git] / rec10 / trunk / src / tv2audio.py
1 #!/usr/bin/python
2 # coding: UTF-8
3 # Rec10 TS Recording Tools
4 # Copyright (C) 2009-2010 Yukikaze
5 import os
6 import configreader
7 import recdblist
8 import commands
9 import os.path
10 import tv2audio
11 import subprocess
12 import signal
13 import traceback
14 def wav2aac_nero(pin,pout):
15     os.environ['LANG']="ja_JP.UTF-8"
16     neroaac=configreader.getpath('NeroAAC')
17     exe=neroaac+" -br 128000 -2pass -if \""+pin+"\" -of \""+pout+"\""
18     try:
19         txt=commands.getoutput(exe.encode('utf-8'))
20         recdblist.addlog(pin, exe, u"Wav2aac_Neroログ-コマンド")
21         recdblist.addlog(pin, txt, u"Wav2aac_Neroログ-詳細")
22     except:
23         if not os.path.exists(pout):
24             lame="lame"
25             exe=lame+" -b 128 \""+pin+"\" \""+pout+"\""
26             txt=commands.getoutput(exe.encode('utf-8'))
27             recdblist.addlog(pin, exe, u"Wav2aac_Lameログ-コマンド")
28             recdblist.addlog(pin, txt, u"Wav2aac_Lameログ-詳細")
29 def wav2mp3_lame(pin,pout):
30     os.environ['LANG']="ja_JP.UTF-8"
31     lame="lame"
32     exe=lame+" -b 128 \""+pin+"\" \""+pout+"\""
33     try:
34         txt=commands.getoutput(exe.encode('utf-8'))
35     except:
36         ""
37     recdblist.addlog(pin, exe, u"Wav2aac_Lameログ-コマンド")
38     recdblist.addlog(pin, txt, u"Wav2aac_Lameログ-詳細")
39 def ts2single_audio(pts):
40     paac=pts.replace(".ts",".aac")
41     ffmpeg=configreader.getpath("ffmpeg")
42     e0=ffmpeg+" -i \""+pts+"\" -y -vn -f aac -acodec copy \""+paac+"\""
43     p0=subprocess.Popen(e0,shell=True)
44     os.waitpid(p0.pid, 0)
45     if p0.poll==None:#実行中
46         if os.path.exists(paac):
47             if os.path.getsize(paac)<1000:#1mで1kb以下の場合自動で終了
48                 try:
49                     logt=unicode(p0.communicate()[0], "UTF-8")
50                     recdblist.addlog(pts,e0, "FFmpeg音声取り出しログ-コマンド")
51                     recdblist.addlog(pts,logt, "FFmpeg音声取り出しログ-詳細")
52                 except:
53                     ""
54                 recdblist.Commonlogex("[Error]", "ffmpeg aac getting. (ts2single_audio@tv2audio.py)", u"AAC demux error(ffmpeg)", "", verbose_level=200, log_level=200)
55                 os.kill(p0.pid,signal.SIGKILL)
56                 os.remove(paac)
57                 ts2single_mp3_ffmpeg(pts)
58                 if not os.path.exists(pts.replace(".ts",".mp3")):
59                     ts2single_fp_BonTsDemux(pts)
60             else:
61                 logt=unicode(p0.communicate()[0], "UTF-8")
62                 recdblist.addlog(pts,e0, "FFmpeg音声取り出しログ-コマンド")
63                 recdblist.addlog(pts,logt, "FFmpeg音声取り出しログ-詳細")
64         else:
65             try:
66                 logt=unicode(p0.communicate()[0], "UTF-8")
67                 recdblist.addlog(pts,e0, "FFmpeg音声取り出しログ-コマンド")
68                 recdblist.addlog(pts,logt, "FFmpeg音声取り出しログ-詳細")
69             except:
70                 ""
71             recdblist.Commonlogex("[Error]", "ffmpeg aac getting. (ts2single_audio@tv2audio.py)", u"AAC demux error(ffmpeg)", "", verbose_level=200, log_level=200)
72             os.kill(p0.pid,signal.SIGKILL)
73             os.remove(paac)
74             ts2single_mp3_ffmpeg(pts)
75             if not os.path.exists(pts.replace(".ts",".mp3")):
76                 ts2single_fp_BonTsDemux(pts)
77 def ts2singlewav(pts):
78     bontsdemux = configreader.getpath('bontsdemux')
79     bonpin = "Z:\\" + pts[1:]
80     outf = os.path.splitext(pts)[0]
81     bonpout = "Z:\\" + outf[1:]
82     xvfb = configreader.getpath('xvfb-run')
83     exe = 'wine ' + bontsdemux + " -i \"" + bonpin + "\" -delay 167 -nd -sound 0 -o \"" + bonpout + "\" -start -quit"
84     #recdblist.printutf8(exe)
85     exe = xvfb + ' -a ' + exe
86     recdblist.printutf8(exe)
87     p=subprocess.Popen(exe.encode('utf-8'),shell=True)
88     os.waitpid(p.pid, 0)
89     logt=unicode(p.communicate()[0], "UTF-8")
90     recdblist.addCommandLog(ots, u"BonTsDemux 音声取り出し", exe, logt)
91 def ts2single_mp3_ffmpeg(pts):
92     pmp3=pts.replace(".ts",".mp3")
93     ffmpeg=configreader.getpath("ffmpeg")
94     e0=ffmpeg+" -i \""+pts+"\" -y -vn -ab 128 \""+pmp3+"\""
95     p0=subprocess.Popen(e0,shell=True)
96     os.waitpid(p0.pid, 0)
97     try:
98         logt=unicode(p0.communicate()[0], "UTF-8")
99         recdblist.addlog(pts,e0, "FFmpeg_mp3音声取り出しログ-コマンド")
100         recdblist.addlog(pts,logt, "FFmpeg_mp3音声取り出しログ-詳細")
101     except:
102         ""
103 def ts2single_fp_BonTsDemux(pts):
104     useNero=0
105     try:
106         if configreader.getpath("useNeroAAC")=="1" and os.path.exists(configreader.getpath("NeroAAC")):
107             useNero=1
108     except:
109         useNero=0
110     if useNero==1:
111         ts2single_aac_BonTsDemux_Nero(pts)
112     else:
113         ts2single_mp3_BonTsDemux(pts)
114 def ts2single_aac_BonTsDemux_Nero(pts):
115     ts2singlewav(pts)
116     aout=pts.replace(".ts",".aac")
117     ain=pts.replace(".ts",".wav")
118     tv2audio.wav2aac_nero(ain,aout)
119 def ts2single_mp3_BonTsDemux(pts):
120     ts2singlewav(pts)
121     aout=pts.replace(".ts",".mp3")
122     ain=pts.replace(".ts",".wav")
123     tv2audio.wav2mp3_lame(ain,aout)