diff --git a/Demo/sgi/video/Vb.py b/Demo/sgi/video/Vb.py
index da868f1..e6fecdf 100755
--- a/Demo/sgi/video/Vb.py
+++ b/Demo/sgi/video/Vb.py
@@ -228,6 +228,8 @@
 		self.rebindvideo()
 
 	def cb_vmode(self, *args):
+		if self.vcr:
+			self.vcr = None
 		self.vmode = self.c_vmode.get_choice()
 		self.form.freeze_form()
 		self.g_cont.hide_object()
@@ -433,7 +435,10 @@
 			import VCR
 			try:
 				self.vcr = VCR.VCR().init()
+				self.vcr.wait()
+				self.vcr.fmmode('dnr')
 			except VCR.error, msg:
+				self.vcr = None
 				self.b_capture.set_button(0)
 				fl.show_message('VCR error', str(msg), '')
 				return
@@ -615,7 +620,7 @@
 			value = float(eval(field.get_input()))
 		except:
 			value = float(default)
-		field.set_input(value)
+		field.set_input(`value`)
 		return value
 
 	# Audio stuff
diff --git a/Demo/sgi/video/Vrecb.py b/Demo/sgi/video/Vrecb.py
index ef7bc37..f726fe3 100755
--- a/Demo/sgi/video/Vrecb.py
+++ b/Demo/sgi/video/Vrecb.py
@@ -48,6 +48,7 @@
 	print '-M value      : monochrome tresholded with value'
 	print '-f            : Capture fields (instead of frames)'
 	print '-n number     : Capture this many frames (default 60)'
+	print '-N memsize    : Capture frames fitting in this many kbytes'
 	print 'moviefile     : here goes the movie data (default film.video)'
 
 def help():
@@ -75,10 +76,11 @@
 	greybits = 0
 	monotreshold = -1
 	fields = 0
-	number = 60
+	number = 0
+	memsize = 0
 
 	try:
-		opts, args = getopt.getopt(sys.argv[1:], 'ar:w:dg:mM:Gfn:')
+		opts, args = getopt.getopt(sys.argv[1:], 'ar:w:dg:mM:Gfn:N:')
 	except getopt.error, msg:
 		sys.stdout = sys.stderr
 		print 'Error:', msg, '\n'
@@ -117,11 +119,24 @@
 				fields = 1
 			elif opt == '-n':
 				number = string.atoi(arg)
+			elif opt == '-N':
+				memsize = string.atoi(arg)
+				if 0 < memsize < 1024:
+					memsize = memsize * 1024
+				if 0 < memsize < 1024*1024:
+					memsize = memsize * 1024
+				print 'memsize', memsize
 	except string.atoi_error:
 		sys.stdout = sys.stderr
 		print 'Option', opt, 'requires integer argument'
 		sys.exit(2)
 
+	if number <> 0 and memsize <> 0:
+		sys.stderr.write('-n and -N are mutually exclusive\n')
+		sys.exit(2)
+	if number == 0 and memsize == 0:
+		number = 60
+
 	if not fields:
 		print '-f option assumed until somebody fixes it'
 		fields = 1
@@ -180,7 +195,9 @@
 		gl.winconstraints()
 	x, y = gl.getsize()
 	print x, 'x', y
-
+	if memsize:
+		number = calcnumber(x, y, grey or mono, memsize)
+		print number, 'frames'
 	v.SetSize(x, y)
 
 	if drop:
@@ -215,6 +232,9 @@
 			# Window resize (or move)
 			x, y = gl.getsize()
 			print x, 'x', y
+			if memsize:
+			    number = calcnumber(x, y, grey or mono, memsize)
+			    print number, 'frames'
 			v.SetSize(x, y)
 			v.BindGLWindow(win, SV.IN_REPLACE)
 		elif dev in (DEVICE.ESCKEY, DEVICE.WINQUIT, DEVICE.WINSHUT):
@@ -224,6 +244,14 @@
 			break
 
 
+def calcnumber(x, y, grey, memsize):
+	pixels = x*y
+	pixels = pixels/2		# XXX always assume fields
+	if grey: n = memsize/pixels
+	else: n = memsize/(4*pixels)
+	return max(1, n)
+
+
 # Record until the mouse is released (or any other GL event)
 # XXX audio not yet supported
 
@@ -318,11 +346,22 @@
 		nskipped = 0
 		realframeno = 0
 		tpf = 1000 / 50.0     #XXXX
+		# Trying to find the pattern in frame skipping
+		okstretch = 0
+		skipstretch = 0
 		for frameno in range(0, number*2):
 			if frameno <> 0 and \
 				  bitvec[frameno] == bitvec[frameno-1]:
 				nskipped = nskipped + 1
+				if okstretch:
+					print okstretch, 'ok',
+					okstretch = 0
+				skipstretch = skipstretch + 1
 				continue
+			if skipstretch:
+				print skipstretch, 'skipped'
+				skipstretch = 0
+			okstretch = okstretch + 1
 			#
 			# Save field.
 			# XXXX Works only for fields and top-to-bottom
@@ -337,9 +376,11 @@
 			elif mono:
 				field = imageop.dither2mono( \
 					  field, len(field), 1)
-			vout.writeframe(int(realframeno*tpf), field, None)
 			realframeno = realframeno + 1
-		print 'Skipped',nskipped,'duplicate frames'
+			vout.writeframe(int(realframeno*tpf), field, None)
+		print okstretch, 'ok',
+		print skipstretch, 'skipped'
+		print 'Skipped', nskipped, 'duplicate frames'
 		vout.close()
 			
 	gl.wintitle('(done) ' + filename)
