[C] هل يمكن استخدام FFmpeg كمكتبة ، بدلاً من برنامج مستقل؟


Answers

إذا أردت فقط إجراء مكالمة إلى 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);
}
Question

أود إضافة إمكانيات تحويل الفيديو إلى برنامج أقوم بكتابته. واجهة سطر الأوامر FFmpeg للقيام بذلك هو ببساطة ffmpeg -i InputFile OutputFile ، ولكن هل هناك طريقة للاستفادة منه كمكتبة ، حتى أتمكن من القيام بشيء مثل ffmpeg_convert(InputFile, OutputFile) ؟

أنا على أمل أنني لن أستخدم libavcodec مباشرة ، كما أتصور أنه سيكون أكثر تعقيدًا بكثير من وظيفة سطر واحد للتحويل بين الصيغ. إذا كان FFmpeg لا يمكن تحديثه بسهولة للقيام بذلك ، فهل هناك ربما مكتبة أخرى تقوم على ذلك؟ لقد سمعت عن libvlc ، ولكن يبدو أن ذلك لا يعرض إلا واجهة برمجة تطبيقات لتشغيل الفيديو ، وليس تحويل الفيديو.

شكر.