
PRO WRITE_MPEG, mpegFileName, image_array

movieSize = SIZE(image_array)
xSize = movieSize(1)
ySize = movieSize(2)
nFrames = movieSize(3)

nDigits = 1+FIX(ALOG10(nFrames))
formatString = STRCOMPRESS('(i'+STRING(nDigits)+'.'+STRING(nDigits)$
             +             ')', /REMOVE_ALL)
; Load current color table into byte arrays
TVLCT, red, green, blue, /GET
red = BYTE(red)
green = BYTE(green)
blue = BYTE(blue)

ON_IOERROR, badWrite

; Make a temporary directory if necessary or clear it otherwise'
TMPDIR = '/tmp/idl2mpeg.frames'
SPAWN, 'if (-d ' + TMPDIR + ') echo "exists"', result
dirExists = result(0) EQ 'exists'
IF dirExists THEN command = 'rm ' + TMPDIR + '/*' $
  ELSE command = 'mkdir ' + TMPDIR 
SPAWN, command 

; Write each frame into TMPDIR as an 8-bit .gif image file
FOR frameNum = 0, nFrames-1 DO BEGIN
  fileName = TMPDIR + '/frame.' + STRING(frameNum,FORMAT=formatString)$
           + '.gif'
  WRITE_GIF, fileName, image_array(*,*,frameNum), red, green, blue
ENDFOR

; Build the mpeg parameter file
paramFile = TMPDIR + '/idl2mpeg.params'
OPENW, unit, paramFile, /GET_LUN
PRINTF, unit, 'PATTERN		IBBBBBBBBBBP'
PRINTF, unit, 'OUTPUT		' + mpegFileName
PRINTF, unit, 'GOP_SIZE	12'
PRINTF, unit, 'SLICES_PER_FRAME	5'
PRINTF, unit, 'BASE_FILE_FORMAT	PPM'
PRINTF, unit, 'INPUT_CONVERT	giftoppm *'
PRINTF, unit, 'INPUT_DIR	/tmp/idl2mpeg.frames'
PRINTF, unit, 'INPUT'
PRINTF, unit, '`ls *.gif`'
PRINTF, unit, 'END_INPUT'
PRINTF, unit, 'PIXEL		FULL'
PRINTF, unit, 'RANGE		5'
PRINTF, unit, 'PSEARCH_ALG	LOGARITHMIC'
PRINTF, unit, 'BSEARCH_ALG	SIMPLE'
PRINTF, unit, 'IQSCALE		8'
PRINTF, unit, 'PQSCALE		8'
PRINTF, unit, 'BQSCALE		8'
PRINTF, unit, 'REFERENCE_FRAME	DECODED'
PRINTF, unit, 'FORCE_ENCODE_LAST_FRAME'
FREE_LUN, unit

; spawn a shell to process the mpeg_encode command        
SPAWN, 'mpeg_encode ' + paramFile 

RETURN

badWrite:
alert, 'Unable to write MPEG file!'

END

