Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在c语言中使用.exe文件的命令_C_Batch File_Encoding_Ffmpeg_Exe - Fatal编程技术网

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

在c语言中使用.exe文件的命令,c,batch-file,encoding,ffmpeg,exe,C,Batch File,Encoding,Ffmpeg,Exe,几个月前,我编写了一个批处理(windows batch file.bat)代码,用于获取一些.exe文件,并使用它们的命令执行不同的操作。e、 g编码音频、视频等。。。 现在我想做同样的事情,但想用C语言来做。 set var = "Video"ffmpeg -i %var%.mkv -f wav -| neroAacEnc -ignorelength -lc -q 0.4 -if - -of %var%-Audio.aac 设置var=“Video”ffmpeg-i%var%.mkv-f w

几个月前,我编写了一个批处理(windows batch file.bat)代码,用于获取一些.exe文件,并使用它们的命令执行不同的操作。e、 g编码音频、视频等。。。 现在我想做同样的事情,但想用C语言来做。

set var = "Video"
ffmpeg -i %var%.mkv -f wav -| neroAacEnc -ignorelength -lc -q 0.4 -if - -of %var%-Audio.aac 设置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"); 系统(“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文件参数,我将不胜感激。)

您可以创建多个变量

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);
您可以创建多个变量

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);
试试这个:

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);
试试这个:

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

使用
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 */
}
/*构造命令*/
#定义最大值命令长度32
char命令[MAX_CMD_LEN];
常量字符*param1=“abc”;
int参数2=6;
int len=snprintf(命令,MAX_CMD_len,“ffmpeg%s%d”,参数1,参数2);
/*如果一切顺利,运行命令*/
如果(len>0&&len
使用
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 */
}
/*构造命令*/
#定义最大值命令长度32
char命令[MAX_CMD_LEN];
常量字符*param1=“abc”;
int参数2=6;
int len=snprintf(命令,MAX_CMD_len,“ffmpeg%s%d”,参数1,参数2);
/*如果一切顺利,运行命令*/
如果(len>0&&len
用于创建命令字符串吗?如果您指的是环境变量,请参见。用于创建命令字符串?如果你指的是环境变量,那么也可以看到。很好。简单易懂。不过,只有一个问题。我假设您将数组
cmd[512]
的大小设置为任意大,足以累积命令行,对吗?或者选择
512
有什么特别的原因吗?@Light是的,我选择了512任意大到足以累积命令行好的后续问题!理论上:。实际上,“足够长”。原始帖子中的示例命令行长度为89个字符,我认为您甚至不会使用两倍于该长度的命令行。512差不多长六倍:)不错。简单易懂。不过,只有一个问题。我假设您将数组
cmd[512]
的大小设置为任意大,足以累积命令行,对吗?或者选择
512
有什么特别的原因吗?@Light是的,我选择了512任意大到足以累积命令行好的后续问题!理论上:。实际上,“足够长”。原始帖子中的示例命令行长度为89个字符,我认为您甚至不会使用两倍于该长度的命令行。512的长度几乎是原来的六倍:)