Question

Je voudrais ajouter des fonctionnalités de conversion vidéo à un programme que je vous écris. L'interface de ligne de commande de FFmpeg pour ce faire est tout simplement ffmpeg -i InputFile OutputFile, mais est-il un moyen d'utiliser comme une bibliothèque, donc je peux faire quelque chose comme ffmpeg_convert(InputFile, OutputFile)?

J'espère que je ne vais pas avoir à utiliser libavcodec directement, comme je l'imagine que ce sera beaucoup plus complexe qu'une fonction d'une ligne pour convertir entre les formats. Si FFmpeg ne peut pas être facilement adapté pour ce faire, il est peut-être une autre bibliothèque en fonction de ce qui fait? Je l'ai entendu parler de libvlc, mais cela semble exposer seulement une vidéo jouer API, pas de conversion vidéo.

Merci.

Était-ce utile?

Autres conseils

Si vous voulez juste faire un appel à ffmpeg en fonction plutôt qu'un appel système, vous pouvez le faire assez facilement.

ffmpeg.c, changement:

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

Ensuite, dans votre appel, la fonction ffmpeg et passer dans un tableau qui imite la ligne de commande. Pour le rendre encore plus facile d'utiliser une fonction pour créer l'ARGC, les variables 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);
}

Oui, vous devez utiliser libavcodec et libavformat. Je pense que vous devriez lire ffplay.c à l'intérieur du code source ffmpeg. Je pense que ce serait plus facile pour vous de commencer avec ce fichier.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top