Domanda

Mi piacerebbe aggiungere funzionalità di conversione video in un programma che sto scrivendo. l'interfaccia a riga di comando di FFmpeg per fare questo è semplicemente ffmpeg -i InputFile OutputFile, ma c'è un modo per fare uso di esso come una libreria, così posso fare qualcosa di simile ffmpeg_convert(InputFile, OutputFile)?

Spero di non dover usare libavcodec direttamente, come immagino sarà molto più complesso di una funzione di una sola riga per la conversione tra formati. Se FFmpeg non può essere facilmente montata per fare questo, c'è forse un'altra libreria basati su di esso che fa? Ho sentito parlare di libvlc, ma che sembra solo esporre un video giocare API, non la conversione video.

Grazie.

È stato utile?

Soluzione

È necessario libavcodec e libavformat. Il FAQ ti dice:

  

4.1 Vi sono esempi che illustrano come utilizzare le librerie FFmpeg, particolarmente libavcodec e libavformat?

     

Sì. Leggi la Guida sviluppatori della documentazione FFmpeg. In alternativa, esaminare il codice sorgente per uno dei molti progetti open source che già incorporano FFmpeg a ( projects.html ).

La guida documentazione di FFmpeg è disponibile all'indirizzo ffmpeg.org/documentation.html , compreso il guida per gli sviluppatori . Suggerisco guardando libavformat/output-example.c o forse l'origine della linea di comando ffmpeg stessa.

Altri suggerimenti

Se si voleva solo fare una chiamata a ffmpeg come funzione piuttosto che una chiamata di sistema, è possibile farlo abbastanza facilmente.

in ffmpeg.c, modificare:

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

Poi nella chiamata della funzione ffmpeg e passare una matrice che imita la riga di comando. Per rendere ancora più facile utilizzare una funzione per creare l'argc, argv variabili.

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

Sì, bisogna usare libavcodec e libavformat. Penso che si dovrebbe leggere su ffplay.c all'interno del codice sorgente ffmpeg. Penso che sarebbe più facile per voi di iniziare con quel file.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top