OSDN Git Service

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