diff --git a/Demo/sgi/video/Vtime.py b/Demo/sgi/video/Vtime.py
new file mode 100755
index 0000000..3096ce1
--- /dev/null
+++ b/Demo/sgi/video/Vtime.py
@@ -0,0 +1,117 @@
+#! /ufs/guido/bin/sgi/python
+
+# Manipulate the time base of CMIF movies
+
+
+# Possibilities:
+#
+# - resample at a fixed rate
+# - divide the time codes by a speed factor (to make it go faster/slower)
+# - drop frames that are less than n msec apart (to accomodate slow players)
+
+
+# Usage:
+#
+# Vtime [-m msec] [-r msec] [-s speed] [infile [outfile]]
+
+
+# Options:
+#
+# -m n       : drop frames closer than n msec (default 0)
+# -r n       : regenerate input time base n msec apart
+# -s speed   : speed change factor after other processing (default 1.0)
+# infile     : input file (default film.video)
+# outfile    : output file (default out.video)
+
+
+import sys
+sys.path.append('/ufs/guido/src/video')
+import VFile
+import getopt
+import string
+
+
+# Global options
+
+speed = 1.0
+mindelta = 0
+regen = None
+
+
+# Main program -- mostly command line parsing
+
+def main():
+	global speed, mindelta
+	opts, args = getopt.getopt(sys.argv[1:], 'm:r:s:')
+	for opt, arg in opts:
+		if opt == '-m':
+			mindelta = string.atoi(arg)
+		elif opt == '-r':
+			regen = string.atoi(arg)
+		elif opt == '-s':
+			speed = float(eval(arg))
+	if len(args) < 1:
+		args.append('film.video')
+	if len(args) < 2:
+		args.append('out.video')
+	if len(args) > 2:
+		sys.stderr.write('usage: Vtime [options] [infile [outfile]]\n')
+		sys.exit(2)
+	sts = process(args[0], args[1])
+	sys.exit(sts)
+
+
+# Copy one file to another
+
+def process(infilename, outfilename):
+	try:
+		vin = VFile.VinFile().init(infilename)
+	except IOError, msg:
+		sys.stderr.write(infilename + ': I/O error: ' + `msg` + '\n')
+		return 1
+	except VFile.Error, msg:
+		sys.stderr.write(msg + '\n')
+		return 1
+	except EOFError:
+		sys.stderr.write(infilename + ': EOF in video file\n')
+		return 1
+
+	try:
+		vout = VFile.VoutFile().init(outfilename)
+	except IOError, msg:
+		sys.stderr.write(outfilename + ': I/O error: ' + `msg` + '\n')
+		return 1
+
+	vout.setinfo(vin.getinfo())
+	vout.writeheader()
+	
+	told = 0
+	nin = 0
+	nout = 0
+	tin = 0
+	tout = 0
+
+	while 1:
+		try:
+			tin, data, cdata = vin.getnextframe()
+		except EOFError:
+			break
+		nin = nin + 1
+		if regen:
+			tout = nin * regen
+		else:
+			tout = tin
+		tout = int(tout / speed)
+		if tout - told < mindelta:
+			continue
+		told = tout
+		vout.writeframe(tout, data, cdata)
+		nout = nout + 1
+
+	vout.close()
+	vin.close()
+
+
+# Don't forget to call the main program
+
+main()
