OSDN Git Service

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