mirror of
				https://github.com/python/cpython.git
				synced 2025-10-29 17:38:56 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			174 lines
		
	
	
	
		
			3.4 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable file
		
	
	
	
	
			
		
		
	
	
			174 lines
		
	
	
	
		
			3.4 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable file
		
	
	
	
	
| #! /usr/bin/env python
 | |
| 
 | |
| # Print some info about a CMIF movie file
 | |
| 
 | |
| 
 | |
| # Usage:
 | |
| #
 | |
| # Vinfo [-d] [-q] [-s] [-t] [file] ...
 | |
| 
 | |
| 
 | |
| # Options:
 | |
| #
 | |
| # -d       : print deltas between frames instead of frame times
 | |
| # -q       : quick: don't read the frames
 | |
| # -s       : don't print times (but do count frames and print the total)
 | |
| # -t       : terse (one line/file, implies -s)
 | |
| # file ... : file(s) to inspect; default film.video
 | |
| 
 | |
| 
 | |
| import sys
 | |
| sys.path.append('/ufs/guido/src/video')
 | |
| import VFile
 | |
| import getopt
 | |
| import string
 | |
| 
 | |
| 
 | |
| # Global options
 | |
| 
 | |
| short = 0
 | |
| quick = 0
 | |
| delta = 0
 | |
| terse = 0
 | |
| maxwidth = 10
 | |
| 
 | |
| 
 | |
| # Main program -- mostly command line parsing
 | |
| 
 | |
| def main():
 | |
| 	global short, quick, delta, terse, maxwidth
 | |
| 	try:
 | |
| 		opts, args = getopt.getopt(sys.argv[1:], 'dqst')
 | |
| 	except getopt.error, msg:
 | |
| 		sys.stdout = sys.stderr
 | |
| 		print msg
 | |
| 		print 'usage: Vinfo [-d] [-q] [-s] [-t] [file] ...'
 | |
| 		sys.exit(2)
 | |
| 	for opt, arg in opts:
 | |
| 		if opt == '-q':
 | |
| 			quick = 1
 | |
| 		if opt == '-d':
 | |
| 			delta = 1
 | |
| 		if opt == '-s':
 | |
| 			short = 1
 | |
| 		if opt == '-t':
 | |
| 			terse = short = 1
 | |
| 	if not args:
 | |
| 		args = ['film.video']
 | |
| 	for filename in args:
 | |
| 		maxwidth = max(maxwidth, len(filename))
 | |
| 	sts = 0
 | |
| 	for filename in args:
 | |
| 		if process(filename):
 | |
| 			sts = 1
 | |
| 	sys.exit(sts)
 | |
| 
 | |
| 
 | |
| # Process one file
 | |
| 
 | |
| def process(filename):
 | |
| 	try:
 | |
| 		vin = VFile.RandomVinFile(filename)
 | |
| 	except IOError, msg:
 | |
| 		sys.stderr.write(filename + ': I/O error: ' + `msg` + '\n')
 | |
| 		return 1
 | |
| 	except VFile.Error, msg:
 | |
| 		sys.stderr.write(msg + '\n')
 | |
| 		return 1
 | |
| 	except EOFError:
 | |
| 		sys.stderr.write(filename + ': EOF in video file\n')
 | |
| 		return 1
 | |
| 
 | |
| 	if terse:
 | |
| 		print string.ljust(filename, maxwidth),
 | |
| 		kbytes = (VFile.getfilesize(filename) + 1023) / 1024
 | |
| 		print string.rjust(`kbytes`, 5) + 'K',
 | |
| 		print ' ', string.ljust(`vin.version`, 5),
 | |
| 		print string.ljust(vin.format, 8),
 | |
| 		print string.rjust(`vin.width`, 4),
 | |
| 		print string.rjust(`vin.height`, 4),
 | |
| 		if type(vin.packfactor) == type(()):
 | |
| 			xpf, ypf = vin.packfactor
 | |
| 			s = string.rjust(`xpf`, 2) + ',' + \
 | |
| 				  string.rjust(`ypf`, 2)
 | |
| 		else:
 | |
| 			s = string.rjust(`vin.packfactor`, 2)
 | |
| 			if type(vin.packfactor) == type(0) and \
 | |
| 				  vin.format not in ('rgb', 'jpeg') and \
 | |
| 				  (vin.width/vin.packfactor) % 4 <> 0:
 | |
| 				s = s + '!  '
 | |
| 			else:
 | |
| 				s = s + '   '
 | |
| 		print s,
 | |
| 		sys.stdout.flush()
 | |
| 	else:
 | |
| 		vin.printinfo()
 | |
| 
 | |
| 	if quick:
 | |
| 		if terse:
 | |
| 			print
 | |
| 		vin.close()
 | |
| 		return 0
 | |
| 
 | |
| 	try:
 | |
| 		vin.readcache()
 | |
| 		if not terse:
 | |
| 			print '[Using cached index]'
 | |
| 	except VFile.Error:
 | |
| 		if not terse:
 | |
| 			print '[Constructing index on the fly]'
 | |
| 
 | |
| 	if not short:
 | |
| 		if delta:
 | |
| 			print 'Frame time deltas:',
 | |
| 		else:
 | |
| 			print 'Frame times:',
 | |
| 
 | |
| 	n = 0
 | |
| 	t = 0
 | |
| 	told = 0
 | |
| 	datasize = 0
 | |
| 	while 1:
 | |
| 		try:
 | |
| 			t, ds, cs = vin.getnextframeheader()
 | |
| 			vin.skipnextframedata(ds, cs)
 | |
| 		except EOFError:
 | |
| 			break
 | |
| 		datasize = datasize + ds
 | |
| 		if cs: datasize = datasize + cs
 | |
| 		if not short:
 | |
| 			if n%8 == 0:
 | |
| 				sys.stdout.write('\n')
 | |
| 			if delta:
 | |
| 				sys.stdout.write('\t' + `t - told`)
 | |
| 				told = t
 | |
| 			else:
 | |
| 				sys.stdout.write('\t' + `t`)
 | |
| 		n = n+1
 | |
| 
 | |
| 	if not short: print
 | |
| 
 | |
| 	if terse:
 | |
| 		print string.rjust(`n`, 6),
 | |
| 		if t: print string.rjust(`int(n*10000.0/t)*0.1`, 5),
 | |
| 		print
 | |
| 	else:
 | |
| 		print 'Total', n, 'frames in', t*0.001, 'sec.',
 | |
| 		if t: print '-- average', int(n*10000.0/t)*0.1, 'frames/sec',
 | |
| 		print
 | |
| 		print 'Total data', 0.1 * int(datasize / 102.4), 'Kbytes',
 | |
| 		if t:
 | |
| 			print '-- average',
 | |
| 			print 0.1 * int(datasize / 0.1024 / t), 'Kbytes/sec',
 | |
| 		print
 | |
| 
 | |
| 	vin.close()
 | |
| 	return 0
 | |
| 
 | |
| 
 | |
| # Don't forget to call the main program
 | |
| 
 | |
| try:
 | |
| 	main()
 | |
| except KeyboardInterrupt:
 | |
| 	print '[Interrupt]'
 | 
