--- 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)