計算結果の簡単なチェックには「ncview」が便利です.論文やプレゼンに使用する図面や動画は「Matlab」で作ります.
$ ncview SCB2_avg.1770.nc
あるいは連番ファイルを一気に表示させることもできる.
$ ncview SCB2_avg.*.nc # ディレクトリ内にある全ファイル $ ncview SCB2_avg.0???.nc # 0000から0999まで $ ncview SCB2_avg.0[0-2]??.nc # 0000から0299まで
$ convert filename.ps filename.jpg
などを使って好きなファイルフォーマットに変換する。
編集したい場合は、例えば「gimp」を使う。
$ gimp filename.jpg
$ ncview -frames roms_out.????.nc
ncviewでアニメーションを表示させると,frames.00000.ppmのような連番ファイルが作成される.
$ ffmpeg -threads 8 -r 10 -i frame.%05d.ppm -sameq output.avi
これで「output.avi」というムービーファイルが作成される.このとき,-threads 8はコアの数,-r 10はフレームレート(ここでは毎秒10フレームという意味)である.ffmpegのオプションはググれば色々出てくるので,出力フォーマットを変更したりしてみても良い.
注意点:出力フォーマットによってはWindowsやMacでは再生できない可能性もあるので,必ず使用したいマシン上で再生テストを行うこと.
Windows XP + Powerpoint 2000の組み合わせでは、以下のようにもう一度動画を変換すると、スライドショーでうまく再生できるようである。
$ mencoder input.avi -ovc lavc -lavcopts vcodec=msmpeg4v2:vbitrate=5000000 -vf scale=640:640 -o output.avi
あるいは,
$ mencoder input.avi -o output.wmv -of lavf -oac lavc -ovc lavc -lavcopts vcodec=wmv2:vbitrate=5000
ここで、input.aviは入力ファイル(ncviewからの.ppmファイルをつなげて作った無圧縮.aviファイル)、 output.aviは変換後の動画、msmpeg4v2はWindows標準のmp4フォーマット、vbitrateはビデオのビットレートで、 5000000ならば5M bit/secという意味。この数字を大きくすれば圧縮率の低いきれいな動画が作成され、小さくすればファイルサイズ重視の動画ファイルが作成される。 scale=640:640は変換後の動画のピクセル数で、8の倍数でなければいけない。もしオリジナルの動画のピクセル数が8の倍数でなければ、なるべくもとのピクセル数に近い数にするか、アスペクト比を変えないように適宜調整する。この方法はMatlabで作成した動画ファイルにも適用可能。
なお,上記はmencoderのオプションのほんの一例であるので,色々と調べて綺麗な動画を作りましょう.
再生する時は,例えば「mplayer」を使う.
$ mplayer -loop 0 output.avi
Matlabも参照のこと.
>> nc=netcdf('output_file','r'); % open netcdf file with read-only mode >> tind=10; N=32; % tind: record number in the nc file, N: number in vertical layer (32 means surface in this case) >> zeta=squeeze(nc{'zeta'}(tind,:,:)); >> sst=squeeze(nc{'temp'}(tind,N,:,:)); % temp(time,z,y,x) or zeta(time,y,x) >> close(nc); % close netcdf file >> >> nc=netcdf('grid_file','r'); >> lon=nc{'lon_rho'}(:); % (:) means (y,x) (or get everything) >> lat=nc{'lat_rho'}(:); >> mask=nc{'mask_rho'}(:); >> close(nc); >> >> mask(mask==0)=NaN; % make land points NaN >> cax=[10 30]; % min & max of the data to display >> figure; pcolor(lon,lat,sst.*mask); caxis(cax); shading flat; colorbar;
アニメーションを作成する場合は,Matlabで作成したFigureをhoge.00001.jpgのような連番ファイルで保存し,
$ ffmpeg -threads 8 -r 10 -i frame.%05d.jpg -sameq output.avi
のようにすれば動画ファイルが作成できる.
% start plotting % clear all; close all; % iframe=0; % initialize counter % for nfile=0:12:120; % start loop on nfile % snum=sprintf('%04g',nfile); % convert nfile into snum (4-digit character strings. ex: nfile=10 --> snum = '0010') roms=['/home/foo/ROMS/project1/roms_his' snum '.nc']; nc=netcdf(roms,'r'); ntime=length(nc{'ocean_time'}(:)); % get number of records in the file % for tind=1:ntime; % start loop on tind % sfig=sprintf('%05g',iframe); fname=['../figure/jpg/fig_' sfig '.jpg']; % define output figure name of the current counter sst=nc{'temp'}(tind,N,:,:); % % you can play around the following portion % figure; pcolor(lon,lat,sst.*mask); shading flat; caxis(cax); colorbar; % print('-djpeg60',fname); close all; % close all of figures iframe=iframe+1; % counter increment end; % end loop on tind % close(nc); % end; % end loop on nfile %