In [16]:
#Create mp4 movie from png files in a folder, using ffmpeg encoder.
import os, random, sys, fnmatch #glob

#The new data location
if sys.platform == 'darwin': BASEDIR='/Volumes/PLUME/MWA_DATA/'
if sys.platform == 'linux2': BASEDIR='/mnt/MWA_DATA/'
#--------------------------USER INPUT--------------------------------
#

OBSIDS=['1130642640','1130642936','1130643240','1130643536','1130643840','1130644136','1130644440','1130644736','1130645040']
OBSIDS=['1130643840']

CHANNELS=['062-063','069-070','076-077','084-085','093-094','103-104']
CHANNELS= ['062-063','069-070','076-077','084-085','093-094','103-104','113-114','125-126','139-140','153-154','169-170','187-188']
CHANNELS=['093-094']
polarization='XX'
fps='8' #FRAMES PER SECOND
vv=0
force=0
bdiff=0
rdiff=1
#
#-----------------------END USER INPUT--------------------------------

In [17]:
process = 'ffmpeg -y -f image2 -r '
path_call = ' -i '
ffmpeg_params1 = ' -an -pix_fmt "yuv420p" -vcodec "libx264" -level 41 -crf 18.0 -b "28311k" -r '
#OLD version 
#ffmpeg_params2 = ' -bufsize "28311k" -maxrate "28311k" -g "100" -coder 1 -profile main -preset faster -qdiff 4 -qcomp 0.7 -directpred 3 -flags +loop+mv4 -cmp +chroma -partitions +parti4x4+partp8x8+partb8x8 -subq 7 -me_range 16 -keyint_min 1 -sc_threshold 40 -i_qfactor 0.71 -rc_eq ''blurCplx^(1-qComp)'' -b_strategy 1 -bidir_refine 1 -refs 6 -deblockalpha 0 -deblockbeta 0 -trellis 1 -x264opts keyint=10:min-keyint=1:bframes=1 -threads 2 '
#NEW version
ffmpeg_params2 = ' -bufsize "28311k" -maxrate "28311k" -g "100" -coder 1 -profile main -preset faster -qdiff 4 -qcomp 0.7 -direct-pred 3 -flags +loop+mv4 -cmp +chroma -partitions +parti4x4+partp8x8+partb8x8 -subq 7 -me_range 16 -keyint_min 1 -sc_threshold 40 -i_qfactor 0.71 -rc_eq ''blurCplx^\(1-qComp\)'' -b_strategy 1 -bidir_refine 1 -refs 6 -deblock 0:0 -trellis 1 -x264opts keyint=10:min-keyint=1:bframes=1 -threads 2 '

random.seed()

In [19]:
for CHANNEL in CHANNELS:
    for OBSID in OBSIDS:
        err=0
        datadir=BASEDIR+CHANNEL+'/'+OBSID+'/'
        savedir=datadir
        moviefname=savedir+CHANNEL+'_'+polarization+'.mp4'
        #if vv > 0: moviefname=savedir+CHANNEL+'_vv.mp4'
        if bdiff > 0:
            moviefname=savedir+CHANNEL+'_'+polarization+'_bdiff.mp4'
        if rdiff > 0:
            moviefname=savedir+CHANNEL+'_'+polarization+'_rdiff.mp4'
        if os.path.isfile(moviefname) and force == 0:
            print '#### File '+moviefname +' already exists.'
            err+=1
            continue
        #FIND THE PNG FILES
        print datadir
        #img_list = glob.glob(datadir+'*[0-9]_c'+CHANNEL+'*_'+polarization+'_d*.png')
        #if vv > 0: img_list = glob.glob(datadir+'*vv_c'+CHANNEL+'*_'+polarization+'_d*.png')
    
        #FIND THE FILES!
        img_list=[]
        searchstr=OBSID+'_c'+CHANNEL+'*_'+polarization+'_d???'
        print searchstr
        if vv > 0: searchstr='*vv_c'+CHANNEL+'*_'+polarization+'_d???'
        if bdiff > 0: searchstr=OBSID+'_c'+CHANNEL+'*_'+polarization+'_d???_bdiff'
        if rdiff > 0: searchstr=OBSID+'_c'+CHANNEL+'*_'+polarization+'_d???_rdiff'
        searchstr=searchstr+'.png'
        
        for root,dirnames,filenames in os.walk(datadir):
            for filename in fnmatch.filter(filenames,searchstr):
                img_list.append(os.path.join(root,filename))
            img_list.sort()
            
        if len(img_list)==0:
            print "#### Found NO image matching the search criterion";
            err+=1
        if len(img_list) < 6:
            print "#### Not enough frames to make movie "+moviefname;
            err+=1
        
        if err == 0:
            randint=random.randint(10000,50000)
            tmpdir=savedir+'tmpdir_'+str(randint)+'/'
            os.system('mkdir -m 0777 '+tmpdir)
            for ii in range(len(img_list)):
                img=img_list[ii]
                iistr=str(ii+1)
                if ii+1 < 100: iistr='0'+iistr
                if ii+1 < 10: iistr='0'+iistr
                os.system('cp '+img+' '+tmpdir+'tmpim_'+iistr+'.png')
            imgfnames=tmpdir+'tmpim_%03d.png'
            print imgfnames
            
     
            command = process + fps + path_call + imgfnames + ffmpeg_params1 + fps + ffmpeg_params2 + moviefname
            print command
            os.system(command)
            os.system('rm -rf '+tmpdir)


/Volumes/PLUME/MWA_DATA/093-094/1130643840/
1130643840_c093-094*_XX_d???
/Volumes/PLUME/MWA_DATA/093-094/1130643840/tmpdir_35291/tmpim_%03d.png
ffmpeg -y -f image2 -r 8 -i /Volumes/PLUME/MWA_DATA/093-094/1130643840/tmpdir_35291/tmpim_%03d.png -an -pix_fmt "yuv420p" -vcodec "libx264" -level 41 -crf 18.0 -b "28311k" -r 8 -bufsize "28311k" -maxrate "28311k" -g "100" -coder 1 -profile main -preset faster -qdiff 4 -qcomp 0.7 -direct-pred 3 -flags +loop+mv4 -cmp +chroma -partitions +parti4x4+partp8x8+partb8x8 -subq 7 -me_range 16 -keyint_min 1 -sc_threshold 40 -i_qfactor 0.71 -rc_eq blurCplx^\(1-qComp\) -b_strategy 1 -bidir_refine 1 -refs 6 -deblock 0:0 -trellis 1 -x264opts keyint=10:min-keyint=1:bframes=1 -threads 2 /Volumes/PLUME/MWA_DATA/093-094/1130643840/093-094_XX_rdiff.mp4

In [ ]: