使用c语言的.exe文件命令

时间:2013-12-05 09:02:58

标签: c batch-file encoding ffmpeg exe

几个月前我写了一个批处理(windows批处理文件.bat)代码,它获取一些.exe文件并使用它们的命令来做不同的事情。例如编码音频,视频等...... 现在我想要同样的东西,但想用C语言来做。

set var = "Video"
ffmpeg -i %var%.mkv -f wav -| neroAacEnc -ignorelength -lc -q 0.4 -if - -of %var%-Audio.aac

此代码在Windows批处理文件中正常工作(假设我在同一文件夹中指定了文件。)

但现在我想通过C语言做到这一点。我知道使用

system("ffmpeg -i Video.mkv -f wav -| neroAacEnc -ignorelength -lc -q 0.4 -if - -of Video-Audio.aac");

将适用于C语言,但缺点是我在使用ffmpeg和neroAacEnc的命令/参数时无法使用变量。 那么无论如何都要绕过它? (另外,我将使用其他.exe文件以及x264.exe和mkvmerge.exe,所以如果有人能告诉我如何在C语言中自由使用外部.exe文件参数,我会很感激。)

3 个答案:

答案 0 :(得分:1)

char *var="Video"
char cmd[512];
sprintf(cmd, "ffmpeg -i Video.mkv -f wav -| neroAacEnc -ignorelength -lc -q 0.4 -if - -of %s-Audio.aac", var);
system(cmd);

你可以制作超过1个变量

char *var="Video"
char *app="ffmpeg";
char cmd[512];
sprintf(cmd, "%s -i Video.mkv -f wav -| neroAacEnc -ignorelength -lc -q 0.4 -if - -of %s-Audio.aac", app, var);
system(cmd);

答案 1 :(得分:0)

试试这个:

char var[50];
char command[256];
sprintf(var,"%s","Video");
sprintf(command,"ffmpeg -i %s.mkv -f wav -| neroAacEnc -ignorelength -lc -q 0.4 -if - -of %s-Audio.aac",var,var);
system(command);

答案 2 :(得分:0)

使用snprintf。它是sprintf的更安全的替代品。

/* Construct command */
#define MAX_CMD_LEN 32
char command[MAX_CMD_LEN];
const char * param1 = "abc";
int param2 = 6;
int len = snprintf(command, MAX_CMD_LEN, "ffmpeg %s %d", param1, param2);
/* Run command if all went well */
if(len > 0 && len < MAX_CMD_LEN) {
    system(command);  /* Runs 'ffmpeg abc 6' */
}
else {
    /* Command didn't fit our buffer */
}