読者です 読者をやめる 読者になる 読者になる

gnupotの出力から動画作成

splotで3次元の出力をしたら見にくかったので,
2次元に切った画像を動画にしてみたときの操作メモ.

まずは,c++などでデータを出力

double func(double c, double d){
  return 0;//適当な関数
}
void outputC(int i, int n){
  double c = 1.0*i/n;
  char fname[256];
  sprintf(fname,"dat/c%03d.dat", i);
  std::ofstream out(fname);
  for(int j=1;j<=n;++j){
    double d = 1.0*j/n;
    out << c << ' ' << d << ' ' << func(c,d) << "\n";
  }
}
int main(int,char**){
  int n = 128;
  for(int i=1;i<=n;++i){
    outputC(i,n);
  }
  return 0;
}

生成したデータをgnuplotpng画像に変換し,ffmpegでaviファイルに変換

#!/bin/sh                                                                                                                        
ls dat/*.dat | while read FILE
do
NAME=`basename $FILE .dat`
echo "$NAME"
gnuplot <<EOF                                                                                                                    
set xrange [0:1.0]                                                                                                               
set yrange [1.0:10.0]                                                                                                            
set term png                                                                                                                     
set output "dat/$NAME.png"                                                                                                       
plot "dat/$NAME.dat" using 2:3 w l                                                                                               
EOF                                                                                                                              
done
ffmpeg -r 10 -i "dat/%3d.png" -vcodec mjpeg -sameq out.avi