diff options
author | Guido van Rossum <guido@python.org> | 1992-08-20 11:53:14 (GMT) |
---|---|---|
committer | Guido van Rossum <guido@python.org> | 1992-08-20 11:53:14 (GMT) |
commit | 99e237f809b7e74ccb495f2847f058bc800c8e82 (patch) | |
tree | c925b15af35c24d4beebae7fcd15b3cb8d24a12c /Demo | |
parent | 78aab86201b9515147fee8aaa056d29699da5931 (diff) | |
download | cpython-99e237f809b7e74ccb495f2847f058bc800c8e82.zip cpython-99e237f809b7e74ccb495f2847f058bc800c8e82.tar.gz cpython-99e237f809b7e74ccb495f2847f058bc800c8e82.tar.bz2 |
new Vtime.py: manipulate time codes.
Diffstat (limited to 'Demo')
-rwxr-xr-x | Demo/sgi/video/Vtime.py | 117 |
1 files changed, 117 insertions, 0 deletions
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() |