X-Git-Url: http://git.osdn.net/view?a=blobdiff_plain;f=rec10%2Ftrunk%2Fsrc%2Fts2x264.py;h=98003676efa41df57f745e63624872ae64a262bd;hb=b0df1e8ad32a253f41a9e6a45ba991ebd7bb31bf;hp=d71059e77063060bf5d7f82ece8a1ace8c8ac6fb;hpb=96eeb10b5193b0f38c154895acc015504ef47af0;p=rec10%2Frec10-git.git diff --git a/rec10/trunk/src/ts2x264.py b/rec10/trunk/src/ts2x264.py index d71059e..9800367 100644 --- a/rec10/trunk/src/ts2x264.py +++ b/rec10/trunk/src/ts2x264.py @@ -1,69 +1,200 @@ #!/usr/bin/python # coding: UTF-8 # Rec10 TS Recording Tools -# Copyright (C) 2009 Yukikaze -import status +# Copyright (C) 2009-2010 Yukikaze +import commands +import configreader import os -import time +import os.path import re +import random -def ts2x264(pin,pout,opts):#sizeは"HD"か"SD" - pout = pout.encode('utf-8') - pin = pin.encode('utf-8') +import recdblist +def ts2x264(pin, pout, opts):#sizeは"HD"か"SD" """ pinで指定されたファイルをpoutにx264でエンコードして書き出す """ - - status.setEncoding(status.getEncoding()+1) - isAnime=0 - size="SD" - - makemini=0 - if re.search("a",opts): - isAnime=1 - #print "isAnime" - dualpass=0 - if re.search("2",opts): - dualpass=1 - if re.search("Q",opts): - size="WQVGA" - if re.search("F",opts): - size="FHD" - if re.search("H",opts): - size="HD" - if re.search("S",opts): - size="SD" - if isAnime==1: - encvf="-vf pullup,softskip,pp=l5," + dualpass = 0 + is24fps=0 + size="HD" + crf=18 + quality=4 + quality=int(configreader.getenv("x264_preset")) + crf=int(configreader.getenv("crf")) + if re.search("H", opts): + size = "HD" + if re.search("S", opts): + size = "SD" + if re.search("F", opts): + size = "FullHD" + if re.search("W",opts): + size = "WVGA" + if re.search("v", opts): + is24fps=1 + crf=int(configreader.getenv("animation_crf")) + if re.search("a", opts): + is24fps=1 + crf=int(configreader.getenv("animation_crf")) + if re.search("q",opts): + quality=quality-2 + if re.search("w",opts): + quality=quality-1 + if re.search("e",opts): + quality=quality+1 + if re.search("r",opts): + quality=quality+2 + if re.search("u",opts): + crf=crf+2 + if re.search("i",opts): + crf=crf+1 + if re.search("o",opts): + crf=crf-1 + if re.search("p",opts): + crf=crf-2 + if re.search("d",opts): + encode_ffmpeg(pin,pout,size,is24fps,quality,crf) + elif re.search("5",opts): + encode_ffmpeg(pin,pout,size,is24fps,quality,crf) else: - encvf="-vf pp=l5," - if size=="SD": - encvf=encvf+"scale=720:480,harddup" - bitrate="bitrate=1250" - elif size=="HD": - encvf=encvf+"scale=1280:720,harddup" - bitrate="bitrate=2000" - elif size=="FHD": - encvf=encvf+"scale=1920:1080,harddup" - bitrate="bitrate=2500" - elif size=="WQVGA": - encvf=encvf+"scale=400:240,harddup" - bitrate="bitrate=200" + try: + encode(pin, pout,size,is24fps,quality,crf) + except Exception, inst: + print "error occures in ts2x264.py encode" + print type(inst) + print inst +def encode(pin,pout,size,is24fps,quality,crf): + mencoder=configreader.getpath("mencoder") + x264=configreader.getpath("x264") + encvf="" + txt="" + encvf="-vf yadif=0,pp=l5" + harddup=",hqdn3d=2:1:2,unsharp=l3x3:0.75:c3x3:0.75,harddup" + ofps="-ofps 30000/1001" + fps="-fps 30000/1001" + x264fps="--fps 30000/1001" + x264streamsize="" + x264preset="" + x264tune="" + x264_maxrate="10000" + x264_addline=configreader.getenv("x264_addline") + if is24fps==1: + ofps="-ofps 24000/1001" + fps="-fps 30000/1001" + x264fps="--fps 24000/1001" + x264tune="--tune animation" + encvf="-vf pullup,softskip" + harddup=",pp=l5,unsharp=l3x3:0.75:c3x3:0.75,hqdn3d=2:1:2,harddup" + if size == "HD": + encvf = encvf + ",scale=1280:720::0:3"+harddup + x264streamsize=u"1280x720" + x264_maxrate="7500" + elif size == "WVGA": + encvf = encvf + ",scale=854:480::0:3"+harddup + x264streamsize=u"854x480" + x264_maxrate="2500" + elif size == "FullHD": + encvf = encvf + ",scale=1920:1080::0:3"+harddup + x264streamsize=u"1920x1080" + x264_maxrate="10000" + elif size == "SD": + encvf = encvf + ",scale=720:480::0:3"+harddup + x264streamsize=u"720x480" + x264_maxrate="2500" else: - encvf=encvf+"scale=1280:720,harddup" - bitrate="bitrate=2000" + encvf = encvf + ",scale=1280:720::0:3"+harddup + x264streamsize=u"1280x720" + x264_maxrate="7500" + if quality==1: + x264preset=u"--preset ultrafast" + elif quality==2: + x264preset=u"--preset veryfast" + elif quality==3: + x264preset=u"--preset fast" + elif quality==4: + x264preset=u"--preset medium" + elif quality==5: + x264preset=u"--preset slow" + elif quality==6: + x264preset=u"--preset slower" + x264crf=u"--crf "+str(crf) + os.environ['LANG']="ja_JP.UTF-8" + random.seed(pin) + random.jumpahead(10) + streampath=os.path.join(os.path.dirname(pin),str(random.randint(10000, 999999))) + os.system(u"mkfifo "+streampath) + encexe=mencoder+u" \""+pin+u"\" -vfm ffmpeg -quiet -sws 9 "+encvf+u",format=i420 "+fps+" "+ofps+" -oac mp3lame -ovc raw -of rawvideo -o \""+streampath+"\" &" + encexe=encexe+u" nice -n 19 "+x264+" "+x264crf+u" "+x264_addline+u" "+u" --vbv-bufsize "+str(int(x264_maxrate)*2)+u" --vbv-maxrate "+x264_maxrate+u" --level 41 --profile high "+x264preset+" "+x264tune+" "+x264fps+" -o \""+pout+"\" "+streampath+" "+x264streamsize + encexe=u"nice -n 19 " +encexe + recdblist.printutf8(encexe) + txt=txt+"Cmd : "+encexe+"\n" + txtt="" + try: + txtt=unicode(commands.getoutput(encexe.encode('utf-8')),'utf-8') + except: + "" + os.system("rm "+streampath) + txt=txt+txtt + recdblist.addlog( pin, txt, "mencoder-log") - if dualpass==1: - pas1exe="mencoder \'"+pin+"\' -ovc x264 "+encvf+" -x264encopts "+bitrate+":threads=auto:pass=1:turbo=2 -passlogfile "+pin+".log "+"-oac mp3lame -lameopts cbr:br=128 -o /dev/null" - pas2exe="mencoder \'"+pin+"\' -ovc x264 "+encvf+" -x264encopts "+bitrate+":threads=auto:pass=2 -passlogfile "+pin+".log "+"-oac mp3lame -lameopts cbr:br=128 -o \'"+pout+"\'" - pas1exe="/usr/bin/nice -n 19 "+pas1exe - pas2exe="/usr/bin/nice -n 19 "+pas2exe - print pas2exe - os.system(pas1exe) - print "1pass終了" - time.sleep(5) - os.system(pas2exe) +def encode_ffmpeg(pin,pout,size,is24fps,quality,crf): + """ + + """ + ffmpeg=configreader.getpath("ffmpeg") + x264=configreader.getpath("x264") + fps=u"-r 29.970030 " + x264fps="--fps 30000/1001" + x264streamsize="" + x264preset="" + x264tune="" + x264_maxrate="10000" + x264_addline=configreader.getenv("x264_addline") + if size == "HD": + s = "-s 1280x720 " + x264streamsize=u"1280x720" + x264_maxrate="7500" + elif size == "WVGA": + s = "-s 854x480 " + x264streamsize=u"854x480" + x264_maxrate="2500" + elif size == "FullHD": + s = "-s 1920x1080 " + x264streamsize=u"1920x1080" + x264_maxrate="10000" + elif size == "SD": + s = "-s 720x480 " + x264streamsize=u"720x480" + x264_maxrate="2500" else: - pas1exe="mencoder \'"+pin+"\' -ovc x264 "+encvf+" -x264encopts "+bitrate+":threads=auto -oac mp3lame -lameopts cbr:br=128 -o \'"+pout+"\'" - os.system(pas1exe) - status.setEncoding(status.getEncoding()-1) \ No newline at end of file + s = "-s 1280x720 " + x264streamsize=u"1280x720" + x264_maxrate="7500" + if quality==1: + x264preset=u"--preset ultrafast" + elif quality==2: + x264preset=u"--preset veryfast" + elif quality==3: + x264preset=u"--preset fast" + elif quality==4: + x264preset=u"--preset medium" + elif quality==5: + x264preset=u"--preset slow" + elif quality==6: + x264preset=u"--preset slower" + x264crf=u"--crf "+str(crf) + txt="" + os.environ['LANG']="ja_JP.UTF-8" + exe=ffmpeg+u" -y -i \""+pin+"\" -vsync 400 -vcodec rawvideo -pix_fmt yuv420p "+s+fps+"-deinterlace -an -f rawvideo - |" + exe=exe+u" nice -n 19 "+x264+" "+x264crf+u" "+x264_addline+u" --vbv-bufsize "+str(int(x264_maxrate)*2)+u" --vbv-maxrate "+x264_maxrate+u" --level 41 --profile high "+x264preset+" "+x264tune+" "+x264fps+" -o \""+pout+"\" - "+x264streamsize + txt=txt+"Cmd : "+exe+"\n" + exe = "nice -n 19 " + exe + txt=txt+"Cmd : "+exe+"\n" + txtt="" + recdblist.printutf8(exe) + try: + txtt=unicode(commands.getoutput(exe.encode('utf-8')),'utf-8') + except: + "" + txt=txt+txtt + recdblist.addlog( pin, txt, "dual audio ffmpeg-log") + \ No newline at end of file