cpython/Demo/sgi/video/rgb2video.py

80 lines
1.6 KiB
Python
Raw Normal View History

import sys
import VFile
import getopt
import imgfile
import string
import imgconv
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 zsize == 3:
oformat = 'rgb'
elif zsize == 1:
oformat = '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)
if format == None:
format = oformat
cfunc = imgconv.getconverter(oformat, format)
vout = VFile.VoutFile(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, cfunc(data, nxsize, ysize), None)
t = t + interval
sys.stderr.write('\n')
vout.close()
def usage():
print 'Usage: rgb2video [-o output] [-i frameinterval] [-f format] rgbfile ...'
main()