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)
In [ ]: