OSDN Git Service

add tar log.(alpha)
[rec10/rec10-git.git] / rec10 / trunk / src / ts2x264.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 import commands\r
6 import configreader\r
7 import os\r
8 import os.path\r
9 import re\r
10 import random\r
11 import time\r
12 import traceback\r
13 import zip\r
14 \r
15 import recdblist\r
16 def ts2x264(pin, pout, opts):#sizeは"HD"か"SD"\r
17     """\r
18     pinで指定されたファイルをpoutにx264でエンコードして書き出す\r
19     """\r
20     dualpass = 0\r
21     is24fps=0\r
22     size="HD"\r
23     crf=18\r
24     quality=4\r
25     quality=int(configreader.getConfEnv("x264_preset"))\r
26     crf=int(configreader.getConfEnv("crf"))\r
27     deinterlace=1\r
28     if re.search("H", opts):\r
29         size = "HD"\r
30     if re.search("S", opts):\r
31         size = "WVGA"\r
32     if re.search("F", opts):\r
33         size = "FullHD"\r
34     if re.search("W",opts):\r
35         size = "WVGA"\r
36     if re.search("MW1",opts):\r
37         size = "QVGA_BASE"\r
38         crf=crf+4\r
39     if re.search("MW2", opts):\r
40         size = "WVGA_BASE"\r
41         crf=crf+2\r
42     if re.search("v", opts):\r
43         is24fps=1\r
44         crf=int(configreader.getConfEnv("animation_crf"))\r
45     if re.search("a", opts):\r
46         is24fps=1\r
47         crf=int(configreader.getConfEnv("animation_crf"))\r
48     if re.search("I", opts):\r
49         deinterlace=0\r
50     if re.search("q",opts):\r
51         quality=quality-2\r
52     if re.search("w",opts):\r
53         quality=quality-1\r
54     if re.search("e",opts):\r
55         quality=quality+1\r
56     if re.search("r",opts):\r
57         quality=quality+2\r
58     if re.search("u",opts):\r
59         crf=crf+2\r
60     if re.search("i",opts):\r
61         crf=crf+1\r
62     if re.search("o",opts):\r
63         crf=crf-1\r
64     if re.search("p",opts):\r
65         crf=crf-2\r
66     if re.search("d",opts):#二カ国語放送の場合\r
67         tm2v=pin.replace(".ts",".m2v")\r
68         encodeFfmpegSar(tm2v,pout,size,is24fps,quality,crf,deinterlace)\r
69     elif re.search("5",opts):#5.1chの場合\r
70         encodeFfmpegSar(pin,pout,size,is24fps,quality,crf,deinterlace)\r
71     else:\r
72         try:\r
73             encodeMencoderSar(pin, pout,size,is24fps,quality,crf,deinterlace)\r
74         except Exception, inst:\r
75             recdblist.addCommonlogEX("Error", "ts2x264(ts2x264.py)", str(type(inst)), str(inst)+traceback.format_exc(),log_level=200)\r
76 def encodeMencoderSar(pin,pout,size,is24fps,quality,crf,deinterlace=1):\r
77     mencoder=configreader.getConfPath("mencoder")\r
78     tee=configreader.getConfPath("tee")\r
79     encvf=""\r
80     txt=""\r
81     encvf="-sws 9 -vf yadif=0,pp=l5"\r
82     harddup=",hqdn3d=2:1:2,unsharp=l3x3:0.75:c3x3:0.75,harddup"\r
83     ofps="-ofps 30000/1001"\r
84     fps="-fps 30000/1001"\r
85     x264fps="30000/1001"\r
86     x264streamsize=""\r
87     x264preset=""\r
88     x264tune=""\r
89     x264_bitrate="5000"\r
90     tsar=getMoviePAR2(pin)\r
91     x264sar=str(tsar[0])+":"+str(tsar[1])\r
92     if is24fps==1:\r
93         ofps="-ofps 24000/1001"\r
94         fps="-fps 30000/1001"\r
95         x264fps="24000/1001"\r
96         x264tune="--tune animation"\r
97         encvf="-sws 9 -vf pullup,softskip"\r
98         harddup=",pp=l5,unsharp=l3x3:0.75:c3x3:0.75,hqdn3d=2:1:2,harddup"\r
99     if size == "HD":\r
100         tsize=getParSize(pin,720)\r
101         encvf = encvf + ",scale=-3:720::0:3"+harddup\r
102         x264streamsize=str(tsize[0])+u"x720"\r
103         x264_bitrate="2500"\r
104     elif size == "WVGA":\r
105         tsize=getParSize(pin,480)\r
106         encvf = encvf + ",scale=-3:480::0:3"+harddup\r
107         x264streamsize=str(tsize[0])+u"x480"\r
108         x264_bitrate="1500"\r
109     elif size == "FullHD":\r
110         tsize=getParSize(pin,1080)\r
111         encvf = encvf + ",scale=-3:1080::0:3"+harddup\r
112         x264streamsize=str(tsize[0])+u"x1080"\r
113         x264_bitrate="5000"\r
114     elif size == "QVGA_BASE":\r
115         tsize=getParSize(pin,240)\r
116         encvf = encvf + ",scale=-3:240::0:3"+harddup\r
117         x264streamsize=str(tsize[0])+u"x240"\r
118         x264_bitrate="300"\r
119     elif size == "WVGA_BASE":\r
120         tsize=getParSize(pin,480)\r
121         encvf = encvf + ",scale=-3:480::0:3"+harddup\r
122         x264streamsize=str(tsize[0])+u"x480"\r
123         x264_bitrate="1500"\r
124     else:\r
125         tsize=getParSize(pin,720)\r
126         encvf = encvf + ",scale=-3:720::0:3"+harddup\r
127         x264streamsize=str(tsize[0])+u"x720"\r
128         x264_bitrate="2500"\r
129     if deinterlace==0:\r
130         tsize=getMovieBaseSize2(pin)\r
131         ofps="-ofps 30000/1001"\r
132         #fps="-fps 30000/1001"\r
133         fps=""\r
134         x264fps="30000/1001"\r
135         x264tune=x264tune+" --tff --nal-hrd vbr"\r
136         encvf="-vf hqdn3d=2:1:2"\r
137         harddup=",harddup"\r
138         encvf=encvf+harddup\r
139         x264streamsize=str(tsize[0])+u"x"+str(tsize[1])\r
140     if tsize[0] <= 0 or tsize[1] <= 0:\r
141         encvf="-sws 9 -vf yadif=0,pp=l5"\r
142         harddup=",hqdn3d=2:1:2,unsharp=l3x3:0.75:c3x3:0.75,harddup"\r
143         ofps="-ofps 30000/1001"\r
144         fps="-fps 30000/1001"\r
145         x264fps="30000/1001"\r
146         tsize=[1280,720]\r
147         encvf = encvf + ",scale=-2:720::0:3,expand=1280:720"+harddup\r
148         x264streamsize=u"1280x720"\r
149         x264_bitrate="2500"\r
150     if quality==1:\r
151         x264preset=u"ultrafast"\r
152     elif quality==2:\r
153         x264preset=u"veryfast"\r
154     elif quality==3:\r
155         x264preset=u"fast"\r
156     elif quality==4:\r
157         x264preset=u"medium"\r
158     elif quality==5:\r
159         x264preset=u"slow"\r
160     elif quality==6:\r
161         x264preset=u"slower"\r
162     else:\r
163         x264preset=u"medium"\r
164     if size == "WVGA_BASE" or size == "QVGA_BASE":\r
165         x264profile=" --level 32 --profile baseline "\r
166     else:\r
167         x264profile=" --level 41 --profile high "\r
168     x264crf=str(crf)\r
169     os.environ['LANG']="ja_JP.UTF-8"\r
170     random.seed(pin)\r
171     random.jumpahead(10)\r
172     temptime=int(time.time())\r
173     temptime=temptime % 9697\r
174     random.jumpahead(temptime)\r
175     streampath=os.path.join(os.path.dirname(pin),str(random.randint(10000, 99999999)))\r
176     unicode(commands.getoutput(u"mkfifo "+streampath),'utf-8','ignore')\r
177     logmencoder=recdblist.getLogTitle(pin)+".mencoder.log"\r
178     logx264=recdblist.getLogTitle(pin)+".x264.log"\r
179     encexe=mencoder+u" \""+pin+u"\" -vfm ffmpeg "+encvf+u",format=i420 "+fps+" "+ofps+" -oac mp3lame -ovc raw -of rawvideo -o \""+streampath+"\" 2>&1 | "+tee+" \""+logmencoder+"\" & "\r
180     encexe=encexe+getX264Commandline(x264preset, x264sar, x264fps, x264profile, x264tune, pout, streampath, x264streamsize, crf=x264crf)\r
181     #encexe=encexe+u" nice -n 19 "+x264+" "+x264_sar+" "+x264crf+u" "+x264_addline+u"  --threads "+x264_thread+" "+x264profile+x264preset+" "+x264tune+" "+x264fps+" -o \""+pout+"\" "+streampath+" "+x264streamsize\r
182     encexe=u"nice -n 19 " +encexe+" 2>&1 | "+tee+" \""+logx264+"\""\r
183     try:\r
184         recdblist.addCommandSelfLog(pin, encexe)\r
185     except Exception, inst:\r
186         print type(inst)\r
187         print str(inst)\r
188         print traceback.print_exc(file=sys.stdout)\r
189     recdblist.printutf8(encexe)\r
190     txt=""\r
191     try:\r
192         txt=unicode(commands.getoutput(encexe.encode('utf-8')),'utf-8','ignore')\r
193     except:\r
194         ""\r
195     os.remove(streampath)\r
196     zip.addFile2FileZip(logmencoder, recdblist.getLogTitle(pin)+".log.zip")\r
197     zip.addFile2FileZip(logx264, recdblist.getLogTitle(pin)+".log.zip")\r
198     os.remove(logmencoder)\r
199     os.remove(logx264)\r
200     recdblist.addCommandLog(pin, u"Mencoder", encexe, txt)\r
201 #    recdblist.addCommandLogTar(pin,u"Mencoder","mencoder", encexe,txt)\r
202 def encodeFfmpegSar(pin,pout,size,is24fps,quality,crf,deinterlace=1):\r
203     """\r
204 \r
205     """\r
206     ffmpeg=configreader.getConfPath("ffmpeg")\r
207     tee=configreader.getConfPath("tee")\r
208     fps=u"-r 29.970030 "\r
209     x264fps="30000/1001"\r
210     x264streamsize=""\r
211     x264preset=""\r
212     x264tune=""\r
213     x264_bitrate="2500"\r
214     x264_thread="auto"\r
215     tsar=getMoviePAR2(pin)\r
216     filter="-deinterlace"\r
217     x264sar=str(tsar[0])+":"+str(tsar[1])\r
218     if size == "HD":\r
219         tsize=getParSize(pin,720)\r
220         s = "-s "+str(tsize[0])+"x720 "\r
221         x264streamsize=str(tsize[0])+u"x720"\r
222         x264_bitrate="2500"\r
223     elif size == "WVGA":\r
224         tsize=getParSize(pin,480)\r
225         s = "-s "+str(tsize[0])+"x480 "\r
226         x264streamsize=str(tsize[0])+u"x480"\r
227         x264_bitrate="1500"\r
228     elif size == "FullHD":\r
229         tsize=getParSize(pin,1080)\r
230         s = "-s "+str(tsize[0])+"x1080 "\r
231         x264streamsize=str(tsize[0])+u"x1080"\r
232         x264_bitrate="5000"\r
233     elif size == "SD":\r
234         tsize=getParSize(pin,480)\r
235         s = "-s "+str(tsize[0])+"x480 "\r
236         x264streamsize=str(tsize[0])+u"x480"\r
237         x264_bitrate="1250"\r
238     elif size == "QVGA_BASE":\r
239         tsize=getParSize(pin,240)\r
240         s = "-s "+str(tsize[0])+"x240 "\r
241         x264streamsize=str(tsize[0])+u"x240"\r
242         x264_bitrate="300"\r
243     elif size == "WVGA_BASE":\r
244         tsize=getParSize(pin,480)\r
245         s = "-s "+str(tsize[0])+"x480 "\r
246         x264streamsize=str(tsize[0])+u"x480"\r
247         x264_bitrate="1500"\r
248     else:\r
249         tsize=getParSize(pin,720)\r
250         s = "-s "+str(tsize[0])+"x720 "\r
251         x264streamsize=str(tsize[0])+u"x720"\r
252         x264_bitrate="2500"\r
253     if deinterlace==0:\r
254         tsize=getMovieBaseSize2(pin)\r
255         fps=""\r
256         s = "-s "+str(tsize[0])+"x"+str(tsize[1])+" "\r
257         x264fps="30000/1001"\r
258         x264tune=x264tune+" --tff --nal-hrd vbr"\r
259         filter=""\r
260         x264streamsize=str(tsize[0])+u"x"+str(tsize[1])\r
261     if quality==1:\r
262         x264preset=u"ultrafast"\r
263     elif quality==2:\r
264         x264preset=u"veryfast"\r
265     elif quality==3:\r
266         x264preset=u"fast"\r
267     elif quality==4:\r
268         x264preset=u"medium"\r
269     elif quality==5:\r
270         x264preset=u"slow"\r
271     elif quality==6:\r
272         x264preset=u"slower"\r
273     else:\r
274         x264preset=u"medium"\r
275     if size == "WVGA_BASE" or size == "QVGA_BASE":\r
276         x264profile=" --level 32 --profile baseline "\r
277     else:\r
278         x264profile=" --level 41 --profile high "\r
279     x264crf=str(crf)\r
280     txt=""\r
281     os.environ['LANG']="ja_JP.UTF-8"\r
282     log_ffmpeg=recdblist.getLogTitle(pin)+".ffmpeg.log"\r
283     log_x264=recdblist.getLogTitle(pin)+".x264.log"\r
284     exe=ffmpeg+u" -y -i \""+pin+"\" -vsync 400 -vcodec rawvideo -pix_fmt yuv420p "+s+fps+" "+filter+" -an -f rawvideo - 2> \""+log_ffmpeg+"\" | "\r
285     exe=exe+getX264Commandline(x264preset, x264sar, x264fps, x264profile, x264tune, pout,"-", x264streamsize, crf=x264crf)\r
286     exe = "nice -n 19 " + exe+" 2>&1 | "+tee+" \""+log_x264+"\""\r
287     txt=""\r
288     print "test"\r
289     #recdblist.addCommandSelfLog(log_ffmpeg,recdblist.getLogTitle(pin)+".log.zip")\r
290     #recdblist.addCommandSelfLog(log_x264,recdblist.getLogTitle(pin)+".log.zip")\r
291     recdblist.printutf8(exe)\r
292     print exe\r
293     recdblist.addCommandSelfLog(tspath,exe)\r
294     print "test2"\r
295     try:\r
296         txt=unicode(commands.getoutput(exe.encode('utf-8')),'utf-8','ignore')\r
297     except:\r
298         ""\r
299     recdblist.addCommandLog(pin, u"FFmpeg動画エンコード", exe, txt)\r
300     zip.addFile2FileZip(log_ffmpeg, recdblist.getLogTitle(tspath+".log.zip"))\r
301     zip.addFile2FileZip(log_x264, recdblist.getLogTitle(tspath+".log.zip"))\r
302     os.remove(log_ffmpeg)\r
303     os.remove(log_x264)\r
304 def getMovieBaseSize(pin):\r
305     ffmpeg=configreader.getConfPath("ffmpeg")\r
306     os.environ['LANG']="ja_JP.UTF-8"\r
307     exe=ffmpeg+u" -i \""+pin+"\" 2>&1"\r
308     txts=unicode(commands.getoutput(exe.encode('utf-8')),'utf-8','ignore')\r
309     rT=re.compile(u".*Stream.*#.*:.*\D+([\d]+x[\d]+)\D+PAR\D+(\d+:\d+)\D+.*\Z")\r
310     sizeMaxX=0\r
311     sizeMaxY=0\r
312     txtls=txts.split("\n")\r
313     for t in txtls:\r
314         rM=rT.match(t)\r
315         if rM:\r
316             sizetxt=rM.group(1)\r
317             partxt=rM.group(2)\r
318             tX=int(sizetxt.split("x")[0])\r
319             tY=int(sizetxt.split("x")[1])\r
320             tEX=int(partxt.split(":")[0])\r
321             tEY=int(partxt.split(":")[1])\r
322             if sizeMaxX<tX:\r
323                 sizeMaxX=tX\r
324                 sizeMaxY=tY\r
325     return [sizeMaxX,sizeMaxY]\r
326 def getMovieBaseSize2(pin):##動画開始後すぐに解像度が変更されたときに対処\r
327     ffmpeg=configreader.getConfPath("ffmpeg")\r
328     os.environ['LANG']="ja_JP.UTF-8"\r
329     exe=ffmpeg+u" -ss 5 -fs 1 -i \""+pin+"\" \""+pin+".size.ts\" 2>&1"\r
330     txts=unicode(commands.getoutput(exe.encode('utf-8')),'utf-8','ignore')\r
331     rT=re.compile(u"Stream.*#.*:.*\D+([\d]+x[\d]+)\D+PAR\D+(\d+:\d+)\D+.*\Z")\r
332     sizeMaxX=0\r
333     sizeMaxY=0\r
334     txtls=txts.split("\n")\r
335     for t in txtls:\r
336         rM=rT.search(t)\r
337         if rM:\r
338             sizetxt=rM.group(1)\r
339             partxt=rM.group(2)\r
340             tX=int(sizetxt.split("x")[0])\r
341             tY=int(sizetxt.split("x")[1])\r
342             tEX=int(partxt.split(":")[0])\r
343             tEY=int(partxt.split(":")[1])\r
344             if sizeMaxX<tX:\r
345                 sizeMaxX=tX\r
346                 sizeMaxY=tY\r
347     os.remove(pin+".size.ts")\r
348     return [sizeMaxX,sizeMaxY]\r
349 def getMoviePAR(pin):\r
350     ffmpeg=configreader.getConfPath("ffmpeg")\r
351     os.environ['LANG']="ja_JP.UTF-8"\r
352     exe=ffmpeg+u" -i \""+pin+"\" 2>&1"\r
353     txts=unicode(commands.getoutput(exe.encode('utf-8')),'utf-8','ignore')\r
354     rT=re.compile(u".*Stream.*#.*:.*\D+([\d]+x[\d]+)\D+PAR\D+(\d+:\d+)\D+.*\Z")\r
355     sizeMaxX=0\r
356     parx=0\r
357     pary=0\r
358     txtls=txts.split("\n")\r
359     for t in txtls:\r
360         rM=rT.match(t)\r
361         if rM:\r
362             sizetxt=rM.group(1)\r
363             dartxt=rM.group(2)\r
364             tX=int(sizetxt.split("x")[0])\r
365             tY=int(sizetxt.split("x")[1])\r
366             tEX=int(dartxt.split(":")[0])\r
367             tEY=int(dartxt.split(":")[1])\r
368             if sizeMaxX<tX:\r
369                 sizeMaxX=tX\r
370                 if tX==1920 and tY==1080:\r
371                     parx=1\r
372                     pary=1\r
373                 else:\r
374                     parx=tEX\r
375                     pary=tEY\r
376     return [parx,pary]\r
377 def getMoviePAR2(pin):\r
378     ffmpeg=configreader.getConfPath("ffmpeg")\r
379     os.environ['LANG']="ja_JP.UTF-8"\r
380     exe=ffmpeg+u" -ss 5 -fs 1 -i \""+pin+"\" \""+pin+".size.ts\" 2>&1"\r
381     txts=unicode(commands.getoutput(exe.encode('utf-8')),'utf-8','ignore')\r
382     rT=re.compile(u".*Stream.*#.*:.*\D+([\d]+x[\d]+)\D+PAR\D+(\d+:\d+)\D+.*\Z")\r
383     sizeMaxX=0\r
384     parx=0\r
385     pary=0\r
386     txtls=txts.split("\n")\r
387     for t in txtls:\r
388         rM=rT.match(t)\r
389         if rM:\r
390             sizetxt=rM.group(1)\r
391             dartxt=rM.group(2)\r
392             tX=int(sizetxt.split("x")[0])\r
393             tY=int(sizetxt.split("x")[1])\r
394             tEX=int(dartxt.split(":")[0])\r
395             tEY=int(dartxt.split(":")[1])\r
396             if sizeMaxX<tX:\r
397                 sizeMaxX=tX\r
398                 if tX==1920 and tY==1080:\r
399                     parx=1\r
400                     pary=1\r
401                 else:\r
402                     parx=tEX\r
403                     pary=tEY\r
404     os.remove(pin+".size.ts")\r
405     return [parx,pary]\r
406 def getMovieDAR(pin):\r
407     ffmpeg=configreader.getConfPath("ffmpeg")\r
408     os.environ['LANG']="ja_JP.UTF-8"\r
409     exe=ffmpeg+u" -i \""+pin+"\" 2>&1"\r
410     txts=unicode(commands.getoutput(exe.encode('utf-8')),'utf-8','ignore')\r
411     rT=re.compile(u".*Stream.*#.*:.*\D+([\d]+x[\d]+)\D+.*DAR\D+(\d+:\d+)\D+.*\Z")\r
412     sizeMaxX=0\r
413     darx=0\r
414     dary=0\r
415     txtls=txts.split("\n")\r
416     for t in txtls:\r
417         rM=rT.match(t)\r
418         if rM:\r
419             sizetxt=rM.group(1)\r
420             dartxt=rM.group(2)\r
421             tX=int(sizetxt.split("x")[0])\r
422             tY=int(sizetxt.split("x")[1])\r
423             tEX=int(dartxt.split(":")[0])\r
424             tEY=int(dartxt.split(":")[1])\r
425             if sizeMaxX<tX:\r
426                 sizeMaxX=tX\r
427                 if tX==1920 and tY==1080:\r
428                     darx=16\r
429                     dary=9\r
430                 else:\r
431                     darx=tEX\r
432                     dary=tEY\r
433     return [darx,dary]\r
434 def getMovieDAR2(pin):\r
435     ffmpeg=configreader.getConfPath("ffmpeg")\r
436     os.environ['LANG']="ja_JP.UTF-8"\r
437     exe=ffmpeg+u" -ss 5 -fs 1 -i \""+pin+"\" \""+pin+".size.ts\" 2>&1"\r
438     txts=unicode(commands.getoutput(exe.encode('utf-8')),'utf-8','ignore')\r
439     rT=re.compile(u".*Stream.*#.*:.*\D+([\d]+x[\d]+)\D+.*DAR\D+(\d+:\d+)\D+.*\Z")\r
440     sizeMaxX=0\r
441     darx=0\r
442     dary=0\r
443     txtls=txts.split("\n")\r
444     for t in txtls:\r
445         rM=rT.match(t)\r
446         if rM:\r
447             sizetxt=rM.group(1)\r
448             dartxt=rM.group(2)\r
449             tX=int(sizetxt.split("x")[0])\r
450             tY=int(sizetxt.split("x")[1])\r
451             tEX=int(dartxt.split(":")[0])\r
452             tEY=int(dartxt.split(":")[1])\r
453             if sizeMaxX<tX:\r
454                 sizeMaxX=tX\r
455                 if tX==1920 and tY==1080:\r
456                     darx=16\r
457                     dary=9\r
458                 else:\r
459                     darx=tEX\r
460                     dary=tEY\r
461     os.remove(pin+".size.ts")\r
462     return [darx,dary]\r
463 def getParSize(pin,y):\r
464     tSize=getMovieBaseSize2(pin)\r
465     if tSize[1] != 0 :\r
466         tX=tSize[0]*10*y/tSize[1]\r
467         tY=y\r
468         if tX>int(tX/10)*10:\r
469             tX=tX/10+1\r
470         else:\r
471             tX=tX/10\r
472     else:\r
473         tX=-1\r
474         tY=-1\r
475     return [tX,tY]\r
476 def getX264CoreVersion():\r
477     x264=configreader.getConfPath("x264")\r
478     t1=commands.getoutput(x264+" --help|grep core")\r
479     rT=re.compile(u"x264 core:(\d*)[\d]*.*\Z")\r
480     rM=rT.match(t1)\r
481     v=-1\r
482     if rM:\r
483         v=int(rM.group(1))\r
484     return v\r
485 def getX264Commandline(preset,sar,fps,x264profile,x264tune,pout,pin,x264streamsize,crf=-1,bitrate=0):\r
486     x264=configreader.getConfPath("x264")\r
487     os.environ['LANG']="ja_JP.UTF-8"\r
488     x264_sar="--sar "+sar\r
489     x264preset=u"--preset "+preset\r
490     x264fps="--fps "+fps\r
491     if crf==-1:\r
492         x264bitrate=u"--bitrate "+str(bitrate)\r
493     else:\r
494         x264crf=u"--crf "+str(crf)\r
495     x264_addline=configreader.getConfEnv("x264_addline")\r
496     x264_thread="auto"\r
497     try:\r
498         xtt=configreader.getConfEnv("x264_thread")\r
499         xtt=int(xtt)\r
500         if xtt>0:\r
501             x264_thread=str(xtt)\r
502     except:\r
503         x264_thread="auto"\r
504     x264_addline=configreader.getConfEnv("x264_addline")\r
505     if getX264CoreVersion()>103:\r
506         x264res=u"--input-res "+x264streamsize\r
507         exe=u"nice -n 19 "+x264+" "+x264_sar+" "+x264crf+u" "+x264_addline+u" --colormatrix bt709 --threads "+x264_thread+" "+x264profile+x264preset+" "+x264tune+" "+x264fps+" "+x264res+" -o \""+pout+"\" "+pin\r
508     else:\r
509         exe=u"nice -n 19 "+x264+" "+x264_sar+" "+x264crf+u" "+x264_addline+u" --colormatrix bt709 --threads "+x264_thread+" "+x264profile+x264preset+" "+x264tune+" "+x264fps+" -o \""+pout+"\" "+pin+" "+x264streamsize\r
510     return exe\r