c - que - ffmpeg tutorial español
¿Se puede usar FFmpeg como biblioteca, en lugar de un programa independiente? (3)
Me gustaría agregar capacidades de conversión de video a un programa que estoy escribiendo. La interfaz de línea de comandos de FFmpeg para hacer esto es simplemente ffmpeg -i InputFile OutputFile
, pero ¿hay alguna forma de utilizarlo como biblioteca, así que puedo hacer algo como ffmpeg_convert(InputFile, OutputFile)
?
Espero no tener que usar libavcodec directamente, ya que imagino que será mucho más complejo que una función de una línea para convertir formatos. Si FFmpeg no se puede actualizar fácilmente para hacer esto, ¿existe tal vez otra biblioteca basada en él que sí lo haga? He oído hablar de libvlc, pero parece que solo expone un video que reproduce la API, no la conversión de video.
Gracias.
Necesita libavcodec
y libavformat
. Las FAQ te dicen:
4.1 ¿Hay ejemplos que ilustran cómo usar las librerías FFmpeg, particularmente libavcodec y libavformat?
Sí. Lea la guía de desarrolladores de la documentación de FFmpeg. Alternativamente, examine el código fuente de uno de los muchos proyectos de código abierto que ya incorporan FFmpeg en ( projects.html ).
La guía de documentación de FFmpeg se puede encontrar en ffmpeg.org/documentation.html , incluida la guía del desarrollador . Sugiero consultar libavformat/output-example.c
o quizás el origen de la utilidad de línea de comandos ffmpeg
.
Sí, tienes que usar libavcodec y libavformat. Creo que deberías leer sobre ffplay.c dentro del código fuente de ffmpeg. Creo que sería más fácil para ti comenzar con ese archivo. De todos modos, he hecho alguna aplicación usando esa biblioteca, échale un vistazo a rtstegvideo.sourceforge.net.
Espero que esto ayude...
Si solo desea hacer una llamada a ffmpeg como función en lugar de una llamada al sistema, puede hacerlo con bastante facilidad.
en ffmpeg.c, cambio:
int main(int argc, char **argv) to int ffmpeg((int argc, char **argv)
Luego, llama a la función ffmpeg y pasa una matriz que imita la línea de comando. Para hacerlo aún más fácil, use una función para crear las variables 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);
}