¿Cómo ejecutar los comandos ffmpeg de línea de comandos en el android?

He construido con éxito ffmpeg para android usando el bambuser . Ahora tengo que construir una aplicación de conversión de ejemplo como mp4 a 3gp. Sé que hay comandos de línea de comandos ffmpeg -i video_origine.avi video_finale.mpg . Pero no sé cómo ejecutar estos comandos mediante programación. Tengo código de ejemplo como

 jint Java_com_example_ndklearning1_MainActivity_logFileInfo(JNIEnv * env, jobject this, jstring filename) { av_register_all(); AVFormatContext *pFormatCtx; const jbyte *str; str = (*env)->GetStringUTFChars(env, filename, NULL); if(av_open_input_file(&pFormatCtx, str, NULL, 0, NULL)!=0) { LOGE("Can't open file '%s'\n", str); return 1; } else { LOGI("File was opened\n"); LOGI("File '%s', Codec %s", pFormatCtx->filename, pFormatCtx->iformat->name ); } return 0; } 

Este código abre un archivo y extrae la información del códec. Todo lo que quiero es que, para convertir el archivo abierto en un formato deseado. Cualquier tipo de ayuda como fragmento de código o pasos a seguir será muy apreciada.

¿Puede ffmpeg API servir a mi propósito? Si existe una API disponible, será más útil

Recientemente me encontré con el problema similar. Mi solución es simular una línea de comandos en el programa Java.

En primer lugar, agrego una función al archivo "ffmpeg.c":

 int cmd_simulation(int argc, const char** argv) { OptionsContext o = { 0 }; // int64_t ti; reset_options(&o, 0); av_log_set_flags(AV_LOG_SKIP_REPEATED); parse_loglevel(argc, argv, options); if(argc>1 && !strcmp(argv[1], "-d")){ run_as_daemon=1; av_log_set_callback(log_callback_null); argc--; argv++; } avcodec_register_all(); avfilter_register_all(); av_register_all(); avformat_network_init(); //show_banner(argc, argv, options); term_init(); parse_cpuflags(argc, argv, options); /* parse options */ parse_options(&o, argc, argv, options, opt_output_file); if (nb_output_files <= 0 && nb_input_files == 0) { show_usage(); av_log(NULL, AV_LOG_WARNING, "Use -h to get full help or, even better, run 'man %s'\n", program_name); exit_program(1); } if (nb_output_files <= 0) { av_log(NULL, AV_LOG_FATAL, "At least one output file must be specified\n"); exit_program(1); } if (transcode() < 0) exit_program(1); //exit_program(0); return 7; } 

De hecho, esta función es sólo una copia de la función principal con una pequeña modificación.

A continuación, cree una función nativa:

 extern const char* cmd_simulation(int, const char**); JNIEXPORT int JNICALL Java_com_test_videowatermark_VideoUtil_test(JNIEnv * env, jobject object, jobjectArray strArray); JNIEXPORT int JNICALL Java_com_test_videowatermark_VideoUtil_test(JNIEnv * env, jobject object, jobjectArray strArray) { int arrayLength = (*env)->GetArrayLength(env, strArray); const char* args[arrayLength]; int i; for(i = 0; i < arrayLength; i++){ jstring jstr = (jstring)((*env)->GetObjectArrayElement(env, strArray, i)); args[i] = (*env)->GetStringUTFChars(env, jstr, 0); //strcpy(args[i], arg); //env->ReleaseStringUTFChars(jstr, arg); } const char** argv = args; return cmd_simulation(arrayLength, argv); } 

Después de la compilación con ffmpeg, puede simular comandos excuting ffmpeg como:

 private void executeCommand(){ String[] command = {"ffmpeg", "-i", "some video file name",}; int result = test(command); } 

¡Espero que esto ayude!

EDITAR: Android.mk

 LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_WHOLE_STATIC_LIBRARIES := libavformat libavcodec libavutil libpostproc libswscale libswresample libavfilter LOCAL_MODULE := VideoUtilLib LOCAL_SRC_FILES := NativeVideoUtil.c ffmpeg.c ffmpeg_opt.c cmdutils.c ffmpeg_filter.c LOCAL_LDLIBS := -lz -llog include $(BUILD_SHARED_LIBRARY) include $(call all-makefiles-under,$(LOCAL_PATH)) 

Reemplace NativeVideoUtil.c con su archivo nativo.

  • Servicio de Android que controla MediaPlayer
  • Subir archivos no funciona con TransferUtility Amazon S3 en Android
  • Phonegap Media API - Grabar y reproducir audio - Android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.