summaryrefslogtreecommitdiffstats
path: root/Demo/sgi/video/rgb2video.py
blob: 040c1e52ac588aa259316ba7f1500f935342f9f1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
import sys
import VFile
import getopt
import imgfile
import string

def main():
	format = None
	interval = 40
	outfile = 'film.video'

	try:
		opts, args = getopt.getopt(sys.argv[1:], 'f:i:o:')
	except getopt.error:
		usage()
		sys.exit(1)
	for opt, arg in opts:
		if opt == '-f':
			format = arg
		elif opt == '-i':
			interval = string.atoi(arg)
		elif opt == '-o':
			outfile = arg
		else:
			usage()
			sys.exit(1)
	if not args:
		usage()
		sys.exit(1)
	
	xsize, ysize, zsize = imgfile.getsizes(args[0])
	nxsize = xsize
	
	if not format:
		if zsize == 3:
			format = 'rgb'
		elif zsize == 1:
			format = 'grey'
			if xsize % 4:
				addbytes = 4-(xsize%4)
				nxsize = xsize + addbytes
				print 'rgb2video: add',addbytes,'pixels per line'
		else:
			print 'rgb2video: incorrect number of planes:',zsize
			sys.exit(1)

	vout = VFile.VoutFile().init(outfile)
	vout.format = format
	vout.width = nxsize
	vout.height = ysize
	vout.writeheader()
	t = 0
	sys.stderr.write('Processing ')
	for img in args:
		sys.stderr.write(img + ' ')
		if imgfile.getsizes(img) <> (xsize, ysize, zsize):
			print 'rgb2video: Image is different size:', img
			sys.exit(1)
		data = imgfile.read(img)
		if xsize <> nxsize:
			ndata = ''
			for i in range(0,len(data), xsize):
				curline = data[i:i+xsize]
				ndata = ndata + curline + ('\0'*(nxsize-xsize))
			data = ndata
		vout.writeframe(t, data, None)
		t = t + interval
	sys.stderr.write('\n')
	vout.close()

def usage():
	print 'Usage: rgb2video [-o output] [-i frameinterval] [-f format] rgbfile ...'
	
main()