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()
以获取原始const char*
数据以传递给任何 API。
请注意,这不是最快的解决方案,但您即将调用外部进程来进行音频文件操作(可能写入磁盘),因此相对缓慢stringstream
应该无关紧要。
stringstream
使建立字符串变得非常容易,并且非常安全。与替代品相比,它的速度相当慢,但轻松和安全往往胜过速度。
先进技术:
在 C++11 中,我有时会使用 lambda:
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();
}();
如果我认为这个任务不应该有一个辅助函数,那么就在那里构建我的字符串而不是创建辅助函数。在我将字符串构建操作重构为它自己的函数之前,以上是创建跟踪消息等的有用技术,或者用于简单的“临时”工作。