Apparently the code to forestall Tk eating events was too aggressive (Tk user input...
[python/dscho.git] / Demo / sgi / video / rgb2video.py
blobb6c34ebc35bd1e81daa835a147286649742d9fec
1 import sys
2 import VFile
3 import getopt
4 import imgfile
5 import string
6 import imgconv
8 def main():
9 format = None
10 interval = 40
11 outfile = 'film.video'
13 try:
14 opts, args = getopt.getopt(sys.argv[1:], 'f:i:o:')
15 except getopt.error:
16 usage()
17 sys.exit(1)
18 for opt, arg in opts:
19 if opt == '-f':
20 format = arg
21 elif opt == '-i':
22 interval = string.atoi(arg)
23 elif opt == '-o':
24 outfile = arg
25 else:
26 usage()
27 sys.exit(1)
28 if not args:
29 usage()
30 sys.exit(1)
32 xsize, ysize, zsize = imgfile.getsizes(args[0])
33 nxsize = xsize
35 if zsize == 3:
36 oformat = 'rgb'
37 elif zsize == 1:
38 oformat = 'grey'
39 if xsize % 4:
40 addbytes = 4-(xsize%4)
41 nxsize = xsize + addbytes
42 print 'rgb2video: add',addbytes,'pixels per line'
43 else:
44 print 'rgb2video: incorrect number of planes:',zsize
45 sys.exit(1)
47 if format == None:
48 format = oformat
49 cfunc = imgconv.getconverter(oformat, format)
51 vout = VFile.VoutFile(outfile)
52 vout.format = format
53 vout.width = nxsize
54 vout.height = ysize
55 vout.writeheader()
56 t = 0
57 sys.stderr.write('Processing ')
58 for img in args:
59 sys.stderr.write(img + ' ')
60 if imgfile.getsizes(img) <> (xsize, ysize, zsize):
61 print 'rgb2video: Image is different size:', img
62 sys.exit(1)
63 data = imgfile.read(img)
64 if xsize <> nxsize:
65 ndata = ''
66 for i in range(0,len(data), xsize):
67 curline = data[i:i+xsize]
68 ndata = ndata + curline + ('\0'*(nxsize-xsize))
69 data = ndata
70 vout.writeframe(t, cfunc(data, nxsize, ysize), None)
71 t = t + interval
72 sys.stderr.write('\n')
73 vout.close()
75 def usage():
76 print 'Usage: rgb2video [-o output] [-i frameinterval] [-f format] rgbfile ...'
78 main()