OSDN Git Service

add some ch.
[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 re
7 import commands
8 import os
9 import re
10 import shutil
11 import time
12 import os.path
13 import subprocess
14 import signal
15
16 import configreader
17 import recdblist
18
19 def wav2aac_nero(pin,pout):
20     os.environ['LANG']="ja_JP.UTF-8"
21     neroaac=configreader.getpath('NeroAAC')
22     exe=neroaac+" -br 128000 -2pass -if \""+pin+"\" -of \""+pout+"\""
23     try:
24         txt=commands.getoutput(exe.encode('utf-8'))
25         recdblist.addlog(pin, exe, u"Wav2aac_Neroログ-コマンド")
26         recdblist.addlog(pin, txt, u"Wav2aac_Neroログ-詳細")
27     except:
28         if not os.path.exists(pout):
29             lame="lame"
30             exe=lame+" -b 128 \""+pin+"\" \""+pout+"\""
31             txt=commands.getoutput(exe.encode('utf-8'))
32             recdblist.addlog(pin, exe, u"Wav2aac_Lameログ-コマンド")
33             recdblist.addlog(pin, txt, u"Wav2aac_Lameログ-詳細")
34 def wav2mp3_lame(pin,pout):
35     os.environ['LANG']="ja_JP.UTF-8"
36     lame="lame"
37     exe=lame+" -b 128 \""+pin+"\" \""+pout+"\""
38     try:
39         txt=commands.getoutput(exe.encode('utf-8'))
40     except:
41         ""
42     recdblist.addlog(pin, exe, u"Wav2aac_Lameログ-コマンド")
43     recdblist.addlog(pin, txt, u"Wav2aac_Lameログ-詳細")
44 def ts2single_audio(pts,opts):
45     paac=pts.replace(".ts",".aac")
46     ffmpeg=configreader.getpath("ffmpeg")
47     e0=ffmpeg+" -i \""+pts+"\" -y -vn -f aac -acodec copy \""+paac+"\""
48     p0=subprocess.Popen(e0,shell=True)
49     os.waitpid(p0.pid, 0)
50     if p0.poll==None:#実行中
51         if os.path.exists(paac):
52             if os.path.getsize(paac)<1000:#1mで1kb以下の場合自動で終了
53                 try:
54                     logt=unicode(p0.communicate()[0], "UTF-8")
55                     recdblist.addlog(pts,e0, "FFmpeg音声取り出しログ-コマンド")
56                     recdblist.addlog(pts,logt, "FFmpeg音声取り出しログ-詳細")
57                 except:
58                     ""
59                 recdblist.Commonlogex("[Error]", "ffmpeg aac getting. (ts2single_audio@tv2audio.py)", u"AAC demux error(ffmpeg)", "", verbose_level=200, log_level=200)
60                 os.kill(p0.pid,signal.SIGKILL)
61                 os.remove(paac)
62                 ts2single_mp3_ffmpeg(pts)
63                 if not os.path.exists(pts.replace(".ts",".mp3")):
64                     ts2single_fp_BonTsDemux(pts,opts)
65             else:
66                 logt=unicode(p0.communicate()[0], "UTF-8")
67                 recdblist.addlog(pts,e0, "FFmpeg音声取り出しログ-コマンド")
68                 recdblist.addlog(pts,logt, "FFmpeg音声取り出しログ-詳細")
69         else:
70             try:
71                 logt=unicode(p0.communicate()[0], "UTF-8")
72                 recdblist.addlog(pts,e0, "FFmpeg音声取り出しログ-コマンド")
73                 recdblist.addlog(pts,logt, "FFmpeg音声取り出しログ-詳細")
74             except:
75                 ""
76             recdblist.Commonlogex("[Error]", "ffmpeg aac getting. (ts2single_audio@tv2audio.py)", u"AAC demux error(ffmpeg)", "", verbose_level=200, log_level=200)
77             try:
78                 os.kill(p0.pid,signal.SIGKILL)
79             except:
80                 ""
81             ts2single_mp3_ffmpeg(pts)
82             if not os.path.exists(pts.replace(".ts",".mp3")):
83                 ts2single_fp_BonTsDemux(pts,opts)
84     else:
85         if os.path.exists(paac):
86             if os.path.getsize(paac)<1000:#1mで1kb以下の場合自動で終了
87                 try:
88                     logt=unicode(p0.communicate()[0], "UTF-8")
89                     recdblist.addlog(pts,e0, "FFmpeg音声取り出しログ-コマンド")
90                     recdblist.addlog(pts,logt, "FFmpeg音声取り出しログ-詳細")
91                 except:
92                     ""
93                 recdblist.Commonlogex("[Error]", "ffmpeg aac getting. (ts2single_audio@tv2audio.py)", u"AAC demux error(ffmpeg)", "", verbose_level=200, log_level=200)
94                 os.remove(paac)
95                 ts2single_mp3_ffmpeg(pts)
96                 if not os.path.exists(pts.replace(".ts",".mp3")):
97                     ts2single_fp_BonTsDemux(pts,opts)
98             else:
99                 try:
100                     logt=unicode(p0.communicate()[0], "UTF-8")
101                     recdblist.addlog(pts,e0, "FFmpeg音声取り出しログ-コマンド")
102                     recdblist.addlog(pts,logt, "FFmpeg音声取り出しログ-詳細")
103                 except:
104                     ""
105         else:
106             try:
107                 logt=unicode(p0.communicate()[0], "UTF-8")
108                 recdblist.addlog(pts,e0, "FFmpeg音声取り出しログ-コマンド")
109                 recdblist.addlog(pts,logt, "FFmpeg音声取り出しログ-詳細")
110             except:
111                 ""
112             recdblist.Commonlogex("[Error]", "ffmpeg aac getting. (ts2single_audio@tv2audio.py)", u"AAC demux error(ffmpeg)", "", verbose_level=200, log_level=200)
113             ts2single_mp3_ffmpeg(pts)
114             if not os.path.exists(pts.replace(".ts",".mp3")):
115                 ts2single_fp_BonTsDemux(pts,opts)
116 def ts2singlewav(pts,opts):
117     bontsdemux = configreader.getpath('bontsdemux')
118     bonpin = "Z:\\" + pts[1:]
119     outf = os.path.splitext(pts)[0]
120     bonpout = "Z:\\" + outf[1:]
121     delayt=""
122     exe = 'wine ' + bontsdemux + " -i \"" + bonpin + "\" "+delayt+" -nd -sound 0 -o \"" + bonpout + "\""
123     #recdblist.printutf8(exe)
124     recdblist.printutf8(exe)
125     p=subprocess.Popen(exe.encode('utf-8'),shell=True)
126     os.waitpid(p.pid, 0)
127     logt=unicode(p.communicate()[0], "UTF-8")
128     recdblist.addCommandLog(ots, u"BonTsDemux 音声取り出し", exe, logt)
129 def ts2single_mp3_ffmpeg(pts):
130     pmp3=pts.replace(".ts",".mp3")
131     ffmpeg=configreader.getpath("ffmpeg")
132     e0=ffmpeg+" -i \""+pts+"\" -y -vn -ab 128k \""+pmp3+"\""
133     p0=subprocess.Popen(e0,shell=True)
134     os.waitpid(p0.pid, 0)
135     try:
136         logt=unicode(p0.communicate()[0], "UTF-8")
137         recdblist.addlog(pts,e0, "FFmpeg_mp3音声取り出しログ-コマンド")
138         recdblist.addlog(pts,logt, "FFmpeg_mp3音声取り出しログ-詳細")
139     except:
140         ""
141 def ts2single_fp_BonTsDemux(pts,opts):
142     useNero=0
143     try:
144         if configreader.getpath("useNeroAAC")=="1" and os.path.exists(configreader.getpath("NeroAAC")):
145             useNero=1
146     except:
147         useNero=0
148     if useNero==1:
149         ts2single_aac_BonTsDemux_Nero(pts,opts)
150     else:
151         ts2single_mp3_BonTsDemux(pts,opts)
152 def ts2single_aac_BonTsDemux_Nero(pts,opts):
153     ts2singlewav(pts,opts)
154     aout=pts.replace(".ts",".aac")
155     ain=pts.replace(".ts",".wav")
156     wav2aac_nero(ain,aout)
157 def ts2single_mp3_BonTsDemux(pts,opts):
158     ts2singlewav(pts,opts)
159     aout=pts.replace(".ts",".mp3")
160     ain=pts.replace(".ts",".wav")
161     wav2mp3_lame(ain,aout)
162 def ts2dualaudio_BonTsDemux(pin, delay,opts):
163     """
164     delay is string
165     """
166     bontsdemux = configreader.getpath('bontsdemux')
167     wine = configreader.getpath('wine')
168     bonpin = "Z:\\" + pin[1:]
169     outf = os.path.splitext(pin)[0]
170     bonpout = "Z:\\" + outf[1:]
171     exe = wine + ' ' + bontsdemux + " -i \"" + bonpin + "\" -delay " + delay + " -nd -sound 1 -o \"" + bonpout + "\""
172     recdblist.printutf8(exe)
173     txt=commands.getoutput(exe.encode('utf-8'))
174     try:
175         recdblist.addCommandLog(pin, u"BonTsDemux 第一音声取り出し", exe, txt)
176     except:
177         ""
178     ffpin = pin.replace(".ts", "")
179     ffpin1 = pin.replace("ts", "wav")
180     ffpin2 = pin.replace("ts", "m2v")
181     ffpout1 = ffpin + "_1.wav"
182     ffpout2 = ffpin + "_2.wav"
183     ffpout3 = ffpin + ".m2v"
184     shutil.move(ffpin1, ffpout1)
185     exe = 'wine ' + bontsdemux + " -i \"" + bonpin + "\" -delay " + delay + " -nd  -sound 2 -encode Demux\(wav\) -o \"" + bonpout + "\""
186     recdblist.printutf8(exe)
187     txt=commands.getoutput(exe.encode('utf-8'))
188     try:
189         recdblist.addCommandLog(pin, u"BonTsDemux 第二音声取り出し", exe, txt)
190     except:
191         ""
192     #os.system(exe)
193     shutil.move(ffpin1, ffpout2)
194     shutil.move(ffpin2, ffpout3)
195     ffpout21=ffpout1.replace(".wav",".mp3")
196     ffpout22=ffpout2.replace(".wav",".mp3")
197     useNero=0
198     try:
199         if configreader.getpath("useNeroAAC")=="1" and os.path.exists(configreader.getpath("NeroAAC")):
200             useNero=1
201     except:
202         useNero=0
203     if useNero==1:
204         ffpout21=ffpout1.replace(".wav",".aac")
205         ffpout22=ffpout2.replace(".wav",".aac")
206         wav2aac_nero(ffpout1, ffpout21)
207         wav2aac_nero(ffpout2, ffpout22)
208     else:
209         wav2mp3_lame(ffpout1, ffpout21)
210         wav2mp3_lame(ffpout2, ffpout22)
211     time.sleep(3)
212     os.remove(ffpout1)
213     os.remove(ffpout2)
214 def ts2pentaaudio_BonTsDemux(pin, delay,opts):
215     bontsdemux = configreader.getpath('bontsdemux')
216     wine = configreader.getpath('wine')
217     bonpin = "Z:\\" + pin[1:]
218     outf = os.path.splitext(pin)[0]
219     bonpout = "Z:\\" + outf[1:]
220     exe = wine + ' ' + bontsdemux + " -i \"" + bonpin + "\" -delay "+delay+" -nd -sound 3 -o \"" + bonpout + "\""
221     recdblist.printutf8(exe)
222     txt=commands.getoutput(exe.encode('utf-8'))
223     try:
224         recdblist.addCommandLog(pin, u"BonTsDemux5.1ch 第一音声取り出し", exe, txt)
225     except:
226         ""
227     ffpin = pin.replace(".ts", "")
228     ffpin1 = pin.replace("ts", "wav")
229     ffpin2 = pin.replace("ts", "m2v")
230     ffpout1 = ffpin + "_1.wav"
231     ffpout2 = ffpin + "_2.aac"
232     shutil.move(ffpin1, ffpout1)
233     exe = "ffmpeg -i '"+pin+"' -vn -f aac -acodec copy '"+ffpout2+"'"
234     recdblist.printutf8(exe)
235     txt=commands.getoutput(exe.encode('utf-8'))
236     try:
237         recdblist.addCommandLog(pin, u"FFmpeg 5.1ch 第二音声(raw AAC)取り出し", exe, txt)
238     except:
239         ""
240     ffpout21=ffpout1.replace(".wav",".mp3")
241     useNero=0
242     try:
243         if configreader.getpath("useNeroAAC")=="1" and os.path.exists(configreader.getpath("NeroAAC")):
244             useNero=1
245     except:
246         useNero=0
247     if useNero==1:
248         ffpout21=ffpout1.replace(".wav",".aac")
249         wav2aac_nero(ffpout1, ffpout21)
250     else:
251         wav2mp3_lame(ffpout1, ffpout21)
252     if not os.path.exists(ffpout21):
253         exe = wine + ' ' + bontsdemux + " -i \"" + bonpin + "\" -delay "+delay+" -nd -sound 0 -o \"" + bonpout + "\""
254         recdblist.printutf8(exe)
255         txt=commands.getoutput(exe.encode('utf-8'))
256         try:
257             recdblist.addCommandLog(pin, u"BonTsDemux 修正版第二音声(2chDownmix)取り出し", exe, txt)
258         except:
259             ""
260         shutil.move(ffpin1, ffpout1)
261         if useNero==1:
262             ffpout21=ffpout1.replace(".wav",".aac")
263             wav2aac_nero(ffpout1, ffpout21)
264         else:
265             wav2mp3_lame(ffpout1, ffpout21)
266         time.sleep(3)
267     ffpout21=ffpout1.replace(".wav",".aac")
268     if os.path.exists(ffpout21):
269         if os.path.getsize(ffpout21)>10*1000*1000:
270             os.remove(ffpout1)