std::string get_command(int previewWidth, int previewHeight) {
std::stringstream ss;
ss << "ffmpeg -r 25 -f rawvideo -pix_fmt rgba -s ";
ss << previewWidth << 'x' << previewHeight;
ss << "-i - -threads 0 -preset fast -y -pix_fmt yuv420p -crf 21 -vf vflip output.mp4";
return ss.str();
}
次に、使用時に:
const std::string cmd = get_command(previewWidth, previewHeight);
呼び出しcmd.c_str()
て raw を取得し、const char*
任意の API に渡します。
これは最速の解決策ではありませんが、外部プロセスを呼び出してオーディオ ファイル操作 (おそらくディスクへの書き込み) を実行しようとしているので、 の相対的な遅さはstringstream
あまり問題にならないことに注意してください。
stringstream
文字列を構築するのが非常に簡単になり、非常に安全です。他の方法に比べてかなり遅いですが、使いやすさと安全性がスピードよりも優先されることがよくあります。
高度なテクニック:
C++11 では、ラムダを使用することがあります。
const std::string cmd = [&]{
std::stringstream ss;
ss << "ffmpeg -r 25 -f rawvideo -pix_fmt rgba -s ";
ss << previewWidth << 'x' << previewHeight;
ss << "-i - -threads 0 -preset fast -y -pix_fmt yuv420p -crf 21 -vf vflip output.mp4";
ss.str();
}();
このタスクがヘルパー関数に値しないと思われる場合は、ヘルパー関数を作成するのではなく、そこで文字列を構築します。上記は、トレース メッセージなどを作成したり、文字列構築操作を独自の関数にリファクタリングする前の単純な「スクラッチ」作業に役立つ手法です。