49

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

libavcodec を直接使用する必要がないことを願っています。フォーマット間の変換は 1 行の関数よりもはるかに複雑になると思います。これを行うためにFFmpegを簡単に改造できない場合、それをベースにした別のライブラリがおそらくありますか? libvlc について聞いたことがありますが、それはビデオ変換ではなく、ビデオ再生API のみを公開しているようです。

ありがとう。

4

3 に答える 3

28

libavcodecとが必要ですlibavformatFAQには次のように記載されています。

4.1 FFmpeg ライブラリ、特に libavcodec と libavformat の使用方法を示す例はありますか?

はい。FFmpeg ドキュメントの開発者ガイドを読んでください。または、( projects.html )で FFmpeg を既に組み込んでいる多くのオープン ソース プロジェクトの 1 つのソース コードを調べます。

FFmpeg ドキュメント ガイドは、開発者ガイドを含むffmpeg.org/documentation.htmlにあります。コマンドラインユーティリティ自体のソースを見ることをお勧めします。libavformat/output-example.cffmpeg

于 2010-03-08T16:07:01.700 に答える
26

システム コールではなく関数として ffmpeg を呼び出したい場合は、非常に簡単に実行できます。

ffmpeg.c で、次のように変更します。

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);
}
于 2010-07-02T15:30:11.647 に答える
8

はい、libavcodec と libavformat を使用する必要があります。ffmpeg ソース コード内の ffplay.c について読む必要があると思います。そのファイルから始める方が簡単だと思います。

于 2010-03-17T09:33:08.580 に答える