FFmpeg可以作为一个库,而不是一个独立的程序?

我想为我正在编写的程序添加video转换function。 FFmpeg的命令行界面是这样做的,只不过是ffmpeg -i InputFile OutputFile ,但是有没有办法把它作为一个库来使用,所以我可以做一些像ffmpeg_convert(InputFile, OutputFile)

我希望我不会直接使用libavcodec,因为我想它比单行函数在格式间转换要复杂得多。 如果FFmpeg不能轻易改装,那么可能还有另外一个基于它的库吗? 我听说过libvlc,但是这似乎只暴露了一个video播放 API,而不是video转换。

谢谢。

你需要libavcodeclibavformat 。 常见问题解答告诉你:

4.1是否有例子说明如何使用FFmpeg库,特别是libavcodec和libavformat?

是。 阅读FFmpeg文档的开发人员指南。 或者,检查已经在( projects.html )中包含FFmpeg的许多开源项目之一的源代码。

FFmpeg文档指南可以在ffmpeg.org/documentation.htmlfind,包括开发人员指南 。 我build议看看libavformat/output-example.c或者ffmpeg命令行工具本身的来源。

如果你只是打电话给ffmpeg作为函数而不是系统调用,你可以很容易地做到这一点。

在ffmpeg.c中,更改:

 int main(int argc, char **argv) to int ffmpeg((int argc, char **argv) 

然后在你调用ffmpeg函数并传入一个模仿命令行的数组。 为了更容易使用一个函数来创buildargc,argvvariables。

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

是的,你必须使用libavcodec和libavformat。 我想你应该读一下关于ffmpeg源代码中的ffplay.c。 我认为你从这个文件开始会更容易。 无论如何,我已经做了一些使用这些库的应用程序,请查看rtstegvideo.sourceforge.net。

希望这个帮助…