OSDN Git Service

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