FFmpegのではなく、スタンドアロンのプログラムで、ライブラリとして使用することはできますか?

StackOverflow https://stackoverflow.com/questions/2401764

質問

私は私が書いているプログラムにビデオ変換機能を追加したいと思います。これを行うためのFFmpegのコマンドライン・インタフェースは、単にffmpeg -i InputFile OutputFileですが、ライブラリとして、それを利用する方法があるので、私はffmpeg_convert(InputFile, OutputFile)ような何かを行うことができますか?

私はそれがフォーマット間の変換するために1ライン機能よりもはるかに複雑になります想像して、私は、直接libavcodecの使用する必要はありません願っています。 FFmpegのは簡単にこれを行うために改造することができない場合は、おそらく別のライブラリはありません、それに基づいてありますか?私はlibvlcを聞いたが、それは唯一ののAPIではなく、ビデオ変換を再生するビデオを公開しているようだ。

感謝します。

役に立ちましたか?

解決

あなたはlibavcodeclibavformatを必要としています。 よくある質問のは、あなたに伝えます:

  

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のための呼び出しを作りたい場合は、

、あなたはかなり簡単に行うことができます。

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について読むべきだと思います。私はあなたがそのファイルを起動することが容易になるだろうと思います。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top