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     xvfb = configreader.getpath('xvfb-run')
122     vf=""
123     delayt=""
124     exe = 'wine ' + bontsdemux + " -i \"" + bonpin + "\" "+delayt+" -nd "+vf+"-sound 0 -o \"" + bonpout + "\" -start -quit"
125     #recdblist.printutf8(exe)
126     exe = xvfb + ' -a ' + exe
127     recdblist.printutf8(exe)
128     p=subprocess.Popen(exe.encode('utf-8'),shell=True)
129     os.waitpid(p.pid, 0)
130     logt=unicode(p.communicate()[0], "UTF-8")
131     recdblist.addCommandLog(ots, u"BonTsDemux 音声取り出し", exe, logt)
132 def ts2single_mp3_ffmpeg(pts):
133     pmp3=pts.replace(".ts",".mp3")
134     ffmpeg=configreader.getpath("ffmpeg")
135     e0=ffmpeg+" -i \""+pts+"\" -y -vn -ab 128k \""+pmp3+"\""
136     p0=subprocess.Popen(e0,shell=True)
137     os.waitpid(p0.pid, 0)
138     try:
139         logt=unicode(p0.communicate()[0], "UTF-8")
140         recdblist.addlog(pts,e0, "FFmpeg_mp3音声取り出しログ-コマンド")
141         recdblist.addlog(pts,logt, "FFmpeg_mp3音声取り出しログ-詳細")
142     except:
143         ""
144 def ts2single_fp_BonTsDemux(pts,opts):
145     useNero=0
146     try:
147         if configreader.getpath("useNeroAAC")=="1" and os.path.exists(configreader.getpath("NeroAAC")):
148             useNero=1
149     except:
150         useNero=0
151     if useNero==1:
152         ts2single_aac_BonTsDemux_Nero(pts,opts)
153     else:
154         ts2single_mp3_BonTsDemux(pts,opts)
155 def ts2single_aac_BonTsDemux_Nero(pts,opts):
156     ts2singlewav(pts,opts)
157     aout=pts.replace(".ts",".aac")
158     ain=pts.replace(".ts",".wav")
159     wav2aac_nero(ain,aout)
160 def ts2single_mp3_BonTsDemux(pts,opts):
161     ts2singlewav(pts,opts)
162     aout=pts.replace(".ts",".mp3")
163     ain=pts.replace(".ts",".wav")
164     wav2mp3_lame(ain,aout)
165 def ts2dualaudio_BonTsDemux(pin, delay,opts):
166     """
167     delay is string
168     """
169     bontsdemux = configreader.getpath('bontsdemux')
170     wine = configreader.getpath('wine')
171     bonpin = "Z:\\" + pin[1:]
172     outf = os.path.splitext(pin)[0]
173     bonpout = "Z:\\" + outf[1:]
174     exe = wine + ' ' + bontsdemux + " -i \"" + bonpin + "\" -delay " + delay + " -nd -sound 1 -o \"" + bonpout + "\" -start -quit"
175     recdblist.printutf8(exe)
176     txt=commands.getoutput(exe.encode('utf-8'))
177     try:
178         recdblist.addCommandLog(pin, u"BonTsDemux 第一音声取り出し", exe, txt)
179     except:
180         ""
181     ffpin = pin.replace(".ts", "")
182     ffpin1 = pin.replace("ts", "wav")
183     ffpin2 = pin.replace("ts", "m2v")
184     ffpout1 = ffpin + "_1.wav"
185     ffpout2 = ffpin + "_2.wav"
186     ffpout3 = ffpin + ".m2v"
187     shutil.move(ffpin1, ffpout1)
188     exe = 'wine ' + bontsdemux + " -i \"" + bonpin + "\" -delay " + delay + " -nd  -sound 2 -encode Demux\(wav\) -o \"" + bonpout + "\""
189     recdblist.printutf8(exe)
190     exe = xvfb + ' -a ' + exe
191     txt=commands.getoutput(exe.encode('utf-8'))
192     try:
193         recdblist.addCommandLog(pin, u"BonTsDemux 第二音声取り出し", exe, txt)
194     except:
195         ""
196     #os.system(exe)
197     shutil.move(ffpin1, ffpout2)
198     shutil.move(ffpin2, ffpout3)
199     ffpout21=ffpout1.replace(".wav",".mp3")
200     ffpout22=ffpout2.replace(".wav",".mp3")
201     useNero=0
202     try:
203         if configreader.getpath("useNeroAAC")=="1" and os.path.exists(configreader.getpath("NeroAAC")):
204             useNero=1
205     except:
206         useNero=0
207     if useNero==1:
208         ffpout21=ffpout1.replace(".wav",".aac")
209         ffpout22=ffpout2.replace(".wav",".aac")
210         wav2aac_nero(ffpout1, ffpout21)
211         wav2aac_nero(ffpout2, ffpout22)
212     else:
213         wav2mp3_lame(ffpout1, ffpout21)
214         wav2mp3_lame(ffpout2, ffpout22)
215     time.sleep(3)
216     os.remove(ffpout1)
217     os.remove(ffpout2)
218 def ts2pentaaudio_BonTsDemux(pin, delay,opts):
219     bontsdemux = configreader.getpath('bontsdemux')
220     wine = configreader.getpath('wine')
221     bonpin = "Z:\\" + pin[1:]
222     outf = os.path.splitext(pin)[0]
223     bonpout = "Z:\\" + outf[1:]
224     exe = wine + ' ' + bontsdemux + " -i \"" + bonpin + "\" -delay "+delay+" -nd -sound 3 -o \"" + bonpout + "\""
225     recdblist.printutf8(exe)
226     txt=commands.getoutput(exe.encode('utf-8'))
227     try:
228         recdblist.addCommandLog(pin, u"BonTsDemux5.1ch 第一音声取り出し", exe, txt)
229     except:
230         ""
231     ffpin = pin.replace(".ts", "")
232     ffpin1 = pin.replace("ts", "wav")
233     ffpin2 = pin.replace("ts", "m2v")
234     ffpout1 = ffpin + "_1.wav"
235     ffpout2 = ffpin + "_2.aac"
236     shutil.move(ffpin1, ffpout1)
237     exe = "ffmpeg -i '"+pin+"' -vn -f aac -acodec copy '"+ffpout2+"'"
238     recdblist.printutf8(exe)
239     txt=commands.getoutput(exe.encode('utf-8'))
240     try:
241         recdblist.addCommandLog(pin, u"FFmpeg 5.1ch 第二音声(raw AAC)取り出し", exe, txt)
242     except:
243         ""
244     ffpout21=ffpout1.replace(".wav",".mp3")
245     useNero=0
246     try:
247         if configreader.getpath("useNeroAAC")=="1" and os.path.exists(configreader.getpath("NeroAAC")):
248             useNero=1
249     except:
250         useNero=0
251     if useNero==1:
252         ffpout21=ffpout1.replace(".wav",".aac")
253         wav2aac_nero(ffpout1, ffpout21)
254     else:
255         wav2mp3_lame(ffpout1, ffpout21)
256     if not os.path.exists(ffpout21):
257         exe = wine + ' ' + bontsdemux + " -i \"" + bonpin + "\" -delay "+delay+" -nd -sound 0 -o \"" + bonpout + "\""
258         exe = xvfb + ' -a ' + exe
259         recdblist.printutf8(exe)
260         txt=commands.getoutput(exe.encode('utf-8'))
261         try:
262             recdblist.addCommandLog(pin, u"BonTsDemux 修正版第二音声(2chDownmix)取り出し", exe, txt)
263         except:
264             ""
265         shutil.move(ffpin1, ffpout1)
266         if useNero==1:
267             ffpout21=ffpout1.replace(".wav",".aac")
268             wav2aac_nero(ffpout1, ffpout21)
269         else:
270             wav2mp3_lame(ffpout1, ffpout21)
271         time.sleep(3)
272     ffpout21=ffpout1.replace(".wav",".aac")
273     if os.path.exists(ffpout21):
274         if os.path.getsize(ffpout21)>10*1000*1000:
275             os.remove(ffpout1)