--- dpgconv-9.py.old 2009-10-28 19:33:46.000000000 +1030 +++ dpgconv-9.py 2009-10-28 19:28:01.000000000 +1030 @@ -49,9 +49,12 @@ --width xxx destination video width (default: 256) --keep-aspect - try to keep aspect ratio + try to keep aspect ratio by letterboxing + --keep-aspect-panscan + try to keep aspect ratio by cropping original NOTE: width/height have no effect when --keep-aspect is set + --keep-aspect-panscan overrides --keep-aspect --mv additional parameters for mencoder for video @@ -150,8 +153,38 @@ v_pf = "format=rgb24," options.pf = 3 - if options.aspect: - aspect = commands.getoutput( MPLAYER + " -frames 1 -vo null -ao null -identify \"" + file + "\" | grep -E \"^ID_VIDEO_ASPECT\"") + crop="" + if options.panscan: + options.width=256 + options.height=192 + + aspect = commands.getoutput( MPLAYER + " -frames 1 -vo null -ao null -identify \"" + file + "\" | grep -E \"^ID_VIDEO_ASPECT\" | tail -1") + p1 = re.compile ("ID_VIDEO_ASPECT=(.*)") + m1 = p1.search( aspect ) + width = commands.getoutput( MPLAYER + " -frames 1 -vo null -ao null -identify \"" + file + "\" | grep -E \"^ID_VIDEO_WIDTH\" | tail -1") + p2 = re.compile ("ID_VIDEO_WIDTH=(.*)") + m2 = p2.search( width ) + height = commands.getoutput( MPLAYER + " -frames 1 -vo null -ao null -identify \"" + file + "\" | grep -E \"^ID_VIDEO_HEIGHT\" | tail -1") + p3 = re.compile ("ID_VIDEO_HEIGHT=(.*)") + m3 = p3.search( height ) + if m1 and m2 and m3: + print "Input Aspect %s" % m1.group(1) + print "Input Width %s" % m2.group(1) + print "Input Height %s" % m3.group(1) + ar = float (m1.group(1)) + iw = int (m2.group(1)) + ih = int (m3.group(1)) + if aspect > 1.333333: + cropw=int(round(iw / ar * 4 / 3, 0)) + croph=ih + else: + cropw=iw + croph=int(round(ih * ar * 3 / 4, 0)) + crop="crop="+`cropw`+":"+`croph`+"," + print crop + + elif options.aspect: + aspect = commands.getoutput( MPLAYER + " -frames 1 -vo null -ao null -identify \"" + file + "\" | grep -E \"^ID_VIDEO_ASPECT\" | tail -1") p = re.compile ("ID_VIDEO_ASPECT=(.*)") m = p.search( aspect ) if m: @@ -169,13 +202,13 @@ if options.fps < 24: print "mencoder won't work with double pass and fps < 24, forcing fps = 24" options.fps = 24 - v_cmd = ( " \""+ file +"\" -v -ofps " + `options.fps` + " -sws 9 -vf " + v_pf + "scale=" + `options.width` + ":" + `options.height` +":::3,harddup -nosound -ovc lavc -lavcopts vcodec=mpeg1video:vstrict=-2:mbd=2:trell:cbp:mv0:vmax_b_frames=2:cmp=6:subcmp=6:precmp=6:dia=4:predia=4:bidir_refine=4:mv0_threshold=0:last_pred=3:vbitrate=" + `options.vbps` ) + v_cmd = ( " \""+ file +"\" -v -ofps " + `options.fps` + " -sws 9 -vf " + v_pf + crop + "scale=" + `options.width` + ":" + `options.height` +":::3,harddup -nosound -ovc lavc -lavcopts vcodec=mpeg1video:vstrict=-2:mbd=2:trell:cbp:mv0:vmax_b_frames=2:cmp=6:subcmp=6:precmp=6:dia=4:predia=4:bidir_refine=4:mv0_threshold=0:last_pred=3:vbitrate=" + `options.vbps` ) elif options.hq: - v_cmd = ( " \""+ file +"\" -v -ofps " + `options.fps` + " -sws 9 -vf " + v_pf + "scale=" + `options.width` + ":" + `options.height` +":::3,harddup -nosound -ovc lavc -lavcopts vcodec=mpeg1video:vstrict=-2:mbd=2:trell:cbp:mv0:cmp=6:subcmp=6:precmp=6:dia=3:predia=3:last_pred=3:vbitrate=" + `options.vbps` + " -o " + MPGTMP + " -of rawvideo" ) + v_cmd = ( " \""+ file +"\" -v -ofps " + `options.fps` + " -sws 9 -vf " + v_pf + crop + "scale=" + `options.width` + ":" + `options.height` +":::3,harddup -nosound -ovc lavc -lavcopts vcodec=mpeg1video:vstrict=-2:mbd=2:trell:cbp:mv0:cmp=6:subcmp=6:precmp=6:dia=3:predia=3:last_pred=3:vbitrate=" + `options.vbps` + " -o " + MPGTMP + " -of rawvideo" ) elif options.lq: - v_cmd = ( " \"" + file + "\" -v -ofps " + `options.fps` + " -vf " + v_pf + "scale=" + `options.width` + ":" + `options.height` + ",harddup -nosound -ovc lavc -lavcopts vcodec=mpeg1video:vstrict=-2:vbitrate=" + `options.vbps` + " -o " + MPGTMP + " -of rawvideo" ) + v_cmd = ( " \"" + file + "\" -v -ofps " + `options.fps` + " -vf " + v_pf + crop + "scale=" + `options.width` + ":" + `options.height` + ",harddup -nosound -ovc lavc -lavcopts vcodec=mpeg1video:vstrict=-2:vbitrate=" + `options.vbps` + " -o " + MPGTMP + " -of rawvideo" ) else : - v_cmd = ( " \""+ file +"\" -v -ofps " + `options.fps` + " -sws 9 -vf " + v_pf + "scale=" + `options.width` + ":" + `options.height` + ":::3,harddup -nosound -ovc lavc -lavcopts vcodec=mpeg1video:vstrict=-2:mbd=2:trell:cbp:mv0:cmp=2:subcmp=2:precmp=2:vbitrate=" + `options.vbps` + " -o " + MPGTMP + " -of rawvideo") + v_cmd = ( " \""+ file +"\" -v -ofps " + `options.fps` + " -sws 9 -vf " + v_pf + crop + "scale=" + `options.width` + ":" + `options.height` + ":::3,harddup -nosound -ovc lavc -lavcopts vcodec=mpeg1video:vstrict=-2:mbd=2:trell:cbp:mv0:cmp=2:subcmp=2:precmp=2:vbitrate=" + `options.vbps` + " -o " + MPGTMP + " -of rawvideo") if options.nosub: if options.sub != None: @@ -459,6 +492,7 @@ parser.add_option("-a","--abps", type="int", dest="abps", default=128) parser.add_option("--volnorm", action="store_true", dest="volnorm", default=False) parser.add_option("--keep-aspect", action="store_true", dest="aspect", default=False) +parser.add_option("--keep-aspect-panscan", action="store_true", dest="panscan", default=False) parser.add_option("--height", type="int", dest="height", default=192) parser.add_option("--width", type="int", dest="width", default=256) parser.add_option("-z","--hz", type="int", dest="hz", default=32000)