我想将视频转换功能添加到我正在编写的程序中。用于执行此操作的FFmpeg命令行界面只是ffmpeg -i InputFile OutputFile
,但有没有办法将其用作库,因此我可以执行类似ffmpeg_convert(InputFile, OutputFile)
的操作?
我希望我不必直接使用libavcodec,因为我认为它将比单行函数更复杂,以便在格式之间进行转换。如果FFmpeg无法轻易改装来执行此操作,是否可能有另一个基于它的库?我听说过libvlc,但这似乎只是暴露了一个视频播放 API,而不是视频转换。
感谢。
答案 0 :(得分:23)
如果你只想调用ffmpeg作为函数而不是系统调用,你可以很容易地做到这一点。
int main(int argc, char **argv) to int ffmpeg((int argc, char **argv)
然后在你的调用中调用ffmpeg函数并传入一个模拟命令行的数组。为了更容易使用函数来创建argc,argv变量。
static int setargs(char *args, char **argv)
{
int count = 0;
while (isspace(*args)) ++args;
while (*args) {
if (argv) argv[count] = args;
while (*args && !isspace(*args)) ++args;
if (argv && *args) *args++ = '\0';
while (isspace(*args)) ++args;
count++;
}
}
char **parsedargs(char *args, int *argc)
{
char **argv = NULL;
int argn = 0;
if (args && *args
&& (args = strdup(args))
&& (argn = setargs(args,NULL))
&& (argv = malloc((argn+1) * sizeof(char *)))) {
*argv++ = args;
argn = setargs(args,argv);
}
if (args && !argv) free(args);
*argc = argn;
return argv;
}
void freeparsedargs(char **argv)
{
if (argv) {
free(argv[-1]);
free(argv-1);
}
}
return count;
}
int main()
{
char **argv;
char *cmd;
int argc;
cmd = "ffmpeg -i infile outfile";
argv = parsedargs(cmd,&argc);
ffmpeg(argc, argv);
}
答案 1 :(得分:22)
您需要libavcodec
和libavformat
。 FAQ告诉您:
4.1是否有说明如何使用FFmpeg库的示例,特别是libavcodec和libavformat?
是。阅读FFmpeg文档的开发人员指南。或者,检查已在(projects.html)中包含FFmpeg的众多开源项目之一的源代码。
可以在ffmpeg.org/documentation.html找到FFmpeg文档指南,包括Developer's guide。我建议查看libavformat/output-example.c
或者ffmpeg
命令行实用程序本身的来源。
答案 2 :(得分:6)
是的,您必须使用libavcodec和libavformat。我想你应该在ffmpeg源代码中读到关于ffplay.c的内容。我认为从这个文件开始会更容易。