.dat
反復ごとに粒子座標を含むファイルを生成する粒子システム プログラムがあります。最終的な目標は、異なるパラメーターを持つスクリプトを介してプログラムを複数回実行することです。そのため、実行ごとに、関連するすべてのデータがフォルダーに保存されるようにプログラムをセットアップしようとしています。
私がやっていることは、 でファイルから生成PNGs
し.dat
、Gnuplot
を呼び出しffmpeg
て からビデオを作成しPNGs
、 を使用WinRAR
してファイルを圧縮し.dat
、最終的にすべての中間ファイルを削除してクリーンアップすることです。これは、作業ディレクトリで行うと機能します。
今、新しいディレクトリを作成して、そこで同じことをしようとしています。私のコード:
// Load the proper library to use chdir() function
#ifdef _WIN32
#include <direct.h>
#elif defined __linux__ || defined __APPLE__&&__MACH__
#include <unistd.h>
#endif
// Make output directory and change working directory to new directory
ostringstream dirCommand;
dirCommand << "mkdir " << folderName_str;
system(dirCommand.str().c_str());
const char* test = folderName_str.c_str();
#ifdef _WIN32
if(_chdir(test))
{
printf( "Unable to locate the directory: %s\n",test);
return;
}
#elif defined __linux__ || defined __APPLE__&&__MACH__
if(chdir(test))
{
printf( "Unable to locate the directory: %s\n",test);
return;
}
#endif
else
printf("Created output directory...\n");
この部分については、異論があることはわかっています。私は SO を広範囲に調べましたが、多くの人SetCurrentDirectory()
が Windows を好むか、または .NET の使用に懐疑的system()
です。私の弁護では、私は初心者のプログラマーであり、私の知識は本当に限られています...
FFMpeg
ここで、ビデオを作成してからファイルを rar/tarしようとすると、次のようになります。
// Make video
std::cout << "Generating Video..." << endl;
ostringstream command;
command << "ffmpeg -f image2 -r 1/0.1 -i output_%01d.png -vcodec mpeg4 " << videoName_str << ".avi -loglevel quiet";
std::system(command.str().c_str());
// Clean Up!
std::cout << "Cleaning up!" << endl;
ostringstream command2;
#ifdef _WIN32
command2 << "rar -inul a " << videoName_str << ".rar *.dat settings.gp loadfile.gp";
#elif defined __linux__ || defined __APPLE__&&__MACH__
command2 << "tar cf " << videoName_str << ".tar *.dat settings.gp loadfile.gp";
#endif
std::system(command2.str().c_str());
Win/Linux では非常に異なる動作をします。
Win 7 x64、Visual Studio 2010/12
Windows では、フォルダーが作成されます。.dat
ファイルは正しく生成され、同様にプロットgnuplot
さPNGs
れます。がffmpeg
呼び出されると、何も起こりません。からのエラーメッセージFFMpeg
も何もありません。についても同様ですWinRAR
。最後に、7z
無料のコマンド ライン ユーティリティを使用することもできます。
Linux ミント 14 x64、Qt 4.8.1
不思議なことに、Windows とは動作が逆になっています。ディレクトリが変更されるとすぐに、最初の.dat
ファイルのみが生成されます。ファイル生成のために行う後続のすべての呼び出しfprintf()
が機能しないか、どこかで失われたかのようです。とGnuplot
同様に動作します!!ffmpeg
tar
私は本当に困惑しています。どんな助けでも、本当に感謝します。