将变量放入"quotation marks"

Getting variables into "quotation marks"

本文关键字:quotation marks 变量      更新时间:2023-10-16

我目前正在努力获取"quatation marks"内的变量
我的代码如下:

const char* cmd = "ffmpeg -r 25 -f rawvideo -pix_fmt rgba -s 1280x720 -i - "
"-threads 0 -preset fast -y -pix_fmt yuv420p -crf 21 -vf vflip output.mp4";

现在我得到了两个名为"previewWidth"answers"previewHeight"的int变量,我希望它们取代"1280x720"。但我不知道怎么做

谢谢,
Marco

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);

并调用CCD_ 1以使原始CCD_。

请注意,这不是最快的解决方案,但您即将调用一个外部进程来进行音频文件操作(可能是写入磁盘),因此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();
}();

如果我认为这个任务不应该有一个助手函数,那么就在那里构建字符串,而不是创建助手函数。以上是一种有用的技术,可以创建跟踪消息等,或者在将字符串构建操作重构为自己的函数之前进行简单的"临时"工作。

使用sprintf。

在您的情况下:

unsigned int previewWidth = /* init */;
unsigned int previewHeight = /* init */;
const char* raw_cmd = "ffmpeg -r 25 -f rawvideo -pix_fmt rgba -s %ux%u -i - "
"-threads 0 -preset fast -y -pix_fmt yuv420p -crf 21 -vf vflip output.mp4";
char result_cmd[256];
sprintf(result_cmd, raw_cmd, previewWidth, previewHeight);

现在,result_cmd包含result命令,但这两个%u分别替换为previewWidthpreviewHeight

空终止符由sprintf()自动附加。

还有一件事,我假设cmd.c_str()0和height不可能是负的。如果可以,将%uunsigned)替换为%ddecimal)。

有关可用于C(++)中许多打印函数的说明符的完整列表,请参阅此页。

int previewWidth, previewHeight;
// ...
char cmd[1024];
sprintf (cmd, "ffmpeg -r 25 -f rawvideo -pix_fmt rgba -s %dx%d -i - "
    "-threads 0 -preset fast -y -pix_fmt yuv420p -crf 21 -vf vflip output.mp4",
    previewWidth, previewHeight);

由于这是C++,您最好使用std::string