mirror of
				https://github.com/python/cpython.git
				synced 2025-10-30 01:47:38 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			134 lines
		
	
	
	
		
			2.8 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable file
		
	
	
	
	
			
		
		
	
	
			134 lines
		
	
	
	
		
			2.8 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable file
		
	
	
	
	
| # Copy a video file, interactively, frame-by-frame.
 | |
| 
 | |
| import sys
 | |
| import getopt
 | |
| from gl import *
 | |
| from DEVICE import *
 | |
| import VFile
 | |
| import string
 | |
| import imageop
 | |
| 
 | |
| def report(time, iframe):
 | |
| 	print 'Frame', iframe, ': t =', time
 | |
| 
 | |
| def usage():
 | |
| 	sys.stderr.write('usage: vcopy [-t type] [-m treshold] [-a] infile outfile\n')
 | |
| 	sys.stderr.write('-t Convert to other type\n')
 | |
| 	sys.stderr.write('-a Automatic\n')
 | |
| 	sys.stderr.write('-m Convert grey to mono with treshold\n')
 | |
| 	sys.stderr.write('-d Convert grey to mono with dithering\n')
 | |
| 	sys.exit(2)
 | |
| 
 | |
| def help():
 | |
| 	print 'Command summary:'
 | |
| 	print 'n   get next image from input'
 | |
| 	print 'w   write current image to output'
 | |
| 
 | |
| def main():
 | |
| 	foreground()
 | |
| 	opts, args = getopt.getopt(sys.argv[1:], 't:am:d')
 | |
| 	if len(args) <> 2:
 | |
| 		usage()
 | |
| 	[ifile, ofile] = args
 | |
| 	print 'open film ', ifile
 | |
| 	ifilm = VFile.VinFile().init(ifile)
 | |
| 	print 'open output ', ofile
 | |
| 	ofilm = VFile.VoutFile().init(ofile)
 | |
| 	
 | |
| 	ofilm.setinfo(ifilm.getinfo())
 | |
| 
 | |
| 	use_grabber = 0
 | |
| 	continuous = 0
 | |
| 	tomono = 0
 | |
| 	tomonodither = 0
 | |
| 	for o, a in opts:
 | |
| 		if o == '-t':
 | |
| 			ofilm.format = a
 | |
| 			use_grabber = 1
 | |
| 		if o == '-a':
 | |
| 			continuous = 1
 | |
| 		if o == '-m':
 | |
| 			if ifilm.format <> 'grey':
 | |
| 				print '-m only supported for greyscale'
 | |
| 				sys.exit(1)
 | |
| 			tomono = 1
 | |
| 			treshold = string.atoi(a)
 | |
| 			ofilm.format = 'mono'
 | |
| 		if o == '-d':
 | |
| 			if ifilm.format <> 'grey':
 | |
| 				print '-m only supported for greyscale'
 | |
| 				sys.exit(1)
 | |
| 			tomonodither = 1
 | |
| 			ofilm.format = 'mono'
 | |
| 			
 | |
| 	ofilm.writeheader()
 | |
| 	#
 | |
| 	prefsize(ifilm.width, ifilm.height)
 | |
| 	w = winopen(ifile)
 | |
| 	qdevice(KEYBD)
 | |
| 	qdevice(ESCKEY)
 | |
| 	qdevice(WINQUIT)
 | |
| 	qdevice(WINSHUT)
 | |
| 	print 'qdevice calls done'
 | |
| 	#
 | |
| 	help()
 | |
| 	#
 | |
| 	time, data, cdata = ifilm.getnextframe()
 | |
| 	ifilm.showframe(data, cdata)
 | |
| 	iframe = 1
 | |
| 	report(time, iframe)
 | |
| 	#
 | |
| 	while 1:
 | |
| 		if continuous:
 | |
| 			dev = KEYBD
 | |
| 		else:
 | |
| 			dev, val = qread()
 | |
| 		if dev in (ESCKEY, WINQUIT, WINSHUT):
 | |
| 			break
 | |
| 		if dev == REDRAW:
 | |
| 			reshapeviewport()
 | |
| 		elif dev == KEYBD:
 | |
| 			if continuous:
 | |
| 				c = '0'
 | |
| 			else:
 | |
| 				c = chr(val)
 | |
| 			#XXX Debug
 | |
| 			if c == 'R':
 | |
| 				c3i(255,0,0)
 | |
| 				clear()
 | |
| 			if c == 'G':
 | |
| 				c3i(0,255,0)
 | |
| 				clear()
 | |
| 			if c == 'B':
 | |
| 				c3i(0,0,255)
 | |
| 				clear()
 | |
| 			if c == 'w' or continuous:
 | |
| 				if use_grabber:
 | |
| 					data, cdata = ofilm.grabframe()
 | |
| 				if tomono:
 | |
| 					data = imageop.grey2mono(data, \
 | |
| 						  ifilm.width, ifilm.height, \
 | |
| 						  treshold)
 | |
| 				if tomonodither:
 | |
| 					data = imageop.dither2mono(data, \
 | |
| 						  ifilm.width, ifilm.height)
 | |
| 				ofilm.writeframe(time, data, cdata)
 | |
| 				print 'Frame', iframe, 'written.'
 | |
| 			if c == 'n' or continuous:
 | |
| 				try:
 | |
| 					time,data,cdata = ifilm.getnextframe()
 | |
| 					ifilm.showframe(data, cdata)
 | |
| 					iframe = iframe+1
 | |
| 					report(time, iframe)
 | |
| 				except EOFError:
 | |
| 					print 'EOF'
 | |
| 					if continuous:
 | |
| 						break
 | |
| 					ringbell()
 | |
| 		elif dev == INPUTCHANGE:
 | |
| 			pass
 | |
| 		else:
 | |
| 			print '(dev, val) =', (dev, val)
 | |
| 	ofilm.close()
 | |
| 
 | |
| main()
 | 
