Frage

Ich möchte Video-Konvertierungs-Fähigkeiten zu einem Programm hinzufügen, ich schreibe. FFmpegs Befehlszeilenschnittstelle dafür ist einfach ffmpeg -i InputFile OutputFile, aber ist es eine Möglichkeit Gebrauch davon als Bibliothek zu machen, so kann ich so etwas wie ffmpeg_convert(InputFile, OutputFile) tun?

Ich hoffe, ich werde libavcodec nicht direkt verwenden müssen, wie ich mir vorstellen, wird es viel komplexer als eine einzeilige Funktion sein, um zwischen verschiedenen Formaten zu konvertieren. Wenn FFmpeg nicht leicht, dies zu tun nachgerüstet werden, ist es vielleicht eine andere Bibliothek auf ihr basiert, das tut? Ich habe von libvlc gehört, aber das scheint nur ein Video aussetzen spielt API, nicht Video-Konvertierung.

Danke.

War es hilfreich?

Lösung

Sie müssen libavcodec und libavformat. Die FAQ sagt Ihnen:

  

4.1 Gibt es Beispiele veranschaulichen, wie die FFmpeg-Bibliotheken verwenden, insbesondere libavcodec und libavformat?

     

Ja. Lesen Sie den Developers Guide der FFmpeg-Dokumentation. Alternativ untersuchen den Quellcode für eine der vielen Open-Source-Projekte, die bereits FFmpeg bei ( projects.html integrieren ).

Die Dokumentation Leitfaden FFmpeg können unter ffmpeg.org/documentation.html gefunden werden, einschließlich der Entwicklerhandbuch . Ich schlage vor, bei libavformat/output-example.c suchen oder vielleicht die Quelle des ffmpeg Befehlszeilenprogramm selbst.

Andere Tipps

Wenn Sie gerade einen Anruf ffmpeg als Funktion eher als ein Systemaufruf machen wollen, kann man das ziemlich leicht tun.

in ffmpeg.c ändern:

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

Dann in Ihrem Anruf der ffmpeg-Funktion und übergeben Sie in einem Array, das die Befehlszeile nachahmt. Um es einfacher, auch eine Funktion verwenden, um die argc, argv Variablen zu erstellen.

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

Ja müssen Sie libavcodec und libavformat verwenden. Ich glaube, Sie über ffplay.c innerhalb ffmpeg Quellcode lesen sollte. Ich denke, es wäre einfacher für Sie, mit dieser Datei zu starten.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top