FFmpegのではなく、スタンドアロンのプログラムで、ライブラリとして使用することはできますか?
-
18-09-2019 - |
質問
私は私が書いているプログラムにビデオ変換機能を追加したいと思います。これを行うためのFFmpegのコマンドライン・インタフェースは、単にffmpeg -i InputFile OutputFile
ですが、ライブラリとして、それを利用する方法があるので、私はffmpeg_convert(InputFile, OutputFile)
ような何かを行うことができますか?
私はそれがフォーマット間の変換するために1ライン機能よりもはるかに複雑になります想像して、私は、直接libavcodecの使用する必要はありません願っています。 FFmpegのは簡単にこれを行うために改造することができない場合は、おそらく別のライブラリはありません、それに基づいてありますか?私はlibvlcを聞いたが、それは唯一のののAPIではなく、ビデオ変換を再生するビデオを公開しているようだ。
感謝します。
解決
あなたはlibavcodec
とlibavformat
を必要としています。 よくある質問のは、あなたに伝えます:
4.1、特にlibavcodecのとはlibavformat、FFmpegのライブラリを使用する方法を示す例がありますか?
はい。 FFmpegのドキュメントの開発者ガイドをお読みください。あるいは、既に( projects.html からのFFmpegを組み込む多くのオープンソースプロジェクトのためのソースコードを調べます)。
FFmpegのドキュメントガイドは、 ffmpeg.org/documentation.html から見出すことができますhref = "http://ffmpeg.org/developer.html" のrel = "noreferrer">開発者ガイドを。私はlibavformat/output-example.c
またはffmpeg
コマンドラインユーティリティ自体のおそらくソースを見てお勧めします。
他のヒント
、あなたはかなり簡単に行うことができます。
ffmpeg.cで、変更:
int main(int argc, char **argv) to int ffmpeg((int argc, char **argv)
次に、あなたの呼び出しでffmpegの機能とコマンドラインを模倣配列で渡します。それをさらに容易にするためには、argvの変数、ARGCを作成する機能を使用します。
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について読むべきだと思います。私はあなたがそのファイルを起動することが容易になるだろうと思います。