如何在iOS中将命令行参数传递给FFMpeg

时间:2013-01-09 13:02:38

标签: ios ffmpeg

这是一个初学者的问题,因为我是iOS的新手(我今天就开始了),所以请原谅我的无知和缺乏iOS知识。

在构建并成功使用FFMpeg for Android之后,我想为iOS做同样的事情。 所以我按照这个link成功地为iOS构建了FFMpeg,但是经过这么多的痛苦我很困惑如何在iOS中使用FFMpeg,我的意思是如何将命令行参数传递给libffmpeg.a文件? / p>

我假设必须有一种方法可以将.a文件作为可执行文件运行,然后传递命令行参数,并希望FFMpeg能够做到这一点,我在Android中做了同样的事情并且工作得很漂亮。

我也知道我可以使用ffmpeg.c类并使用它的main方法,但问题仍然存在;如何传递这些命令行参数?

我在这里应该注意些什么,我现在正在做的事情是正确的,还是我的方法不足?

我想混合两个音频文件,因此执行此操作的命令为ffmpeg -i firstSound.wav -i secondSound.wav -filter_complex amix=inputs=2:duration=longest finalOutput.wav,我该如何在iOS中执行相同操作?

有人可以对此有所了解吗?

2 个答案:

答案 0 :(得分:2)

您不会将参数传递给.a文件,因为它是库文件。这是您构建应用程序的功能,使您可以访问ffmpeg库提供的功能。我不确定Android的播放状态是什么,但它可能会生成命令行可执行文件。

看看ffmpeg文档,可能有一种方法可以用库来做你想要的,但是建立和运行ffmpeg作为独立的传递参数,二进制文件是不太可能的。

答案 1 :(得分:2)

您可以在main.c中执行此操作,当然您也不会硬编码args这些只是为了说明

我假设您在玩ffmpeg后使用iframeextractor进行播放,实际上是您尝试做什么的目标。

/* Called from the main */
int main(int argc, char **argv)

int flags, i;
/*
argv[1] = "-fs";
argv[2] = "-skipframe";
argv[3] = "30";
argv[4] = "-fast";
argv[5] = "-sync";
argv[6] = "video";
argv[7] = "-drp";
argv[8] = "-skipidct";
argv[9] = "10";
argv[10] = "-skiploop";
argv[11] = "50";
argv[12] = "-threads";
argv[13] = "5";
//argv[14] = "-an";
argv[15] = "http://172.16.1.33:63478/hulu-f4fa0821-767a-490a-8cb5-f03788760e31/1-hulu-f4fa0821-767a-490a-8cb5-f03788760e31.mpg";
argc += 14;
*/


/* register all codecs, demux and protocols */
avcodec_register_all();
avdevice_register_all();
av_register_all();


parse_options(argc, argv, options, opt_input_file);

. .. mo
}