2015-07-30 4 views
1

Я пытаюсь сжать видео с помощью FFMPEG и эта библиотека: https://github.com/guardianproject/android-ffmpeg-javaСжатие видео FFMPEG не работает

Я импортировал ffmpeglib как модуль в моем проекте. Этот код используется для сжатия:

public class MainActivity extends Activity { 

    private ArrayList<Object> listVideoPaths = new ArrayList<>(); 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     getGalleryVideos(); 

     File videoFolderFile = new File("/storage/emulated/0/DCIM/Camera/"); 

     if(videoFolderFile.exists()) 
      Log.e("TEST FFMPEG", "video folder exist"); 
     else 
      Log.e("TEST FFMPEG", "video folder DON'T exist"); 


     File videoInputFile = new File(listVideoPaths.get(0).toString()); 

     if(videoInputFile.exists()) 
      Log.e("TEST FFMPEG", "video input file exist"); 
     else 
      Log.e("TEST FFMPEG", "video input file DON'T exist"); 

     File videoOutputFile = new File(videoFolderFile,"output.mp4"); 

     if(videoOutputFile.exists()) 
      Log.e("TEST FFMPEG", "video output file exist"); 
     else 
      Log.e("TEST FFMPEG", "video output file DON'T exist"); 

     FfmpegController ffmpegController; 

     try { 
      ffmpegController = new FfmpegController(this,videoFolderFile); 

      Clip mediaIn = new Clip(); 

      mediaIn.path = videoInputFile.getAbsolutePath(); 

      mediaIn.videoFps = "25"; 

      ffmpegController.convertToMPEG(mediaIn, videoOutputFile.getAbsolutePath(), new ShellUtils.ShellCallback() { 

       @Override 
       public void shellOut(String shellLine) { 
        Log.e("TEST FFMPEG", "shellOut - " + shellLine); 
       } 

       @Override 
       public void processComplete(int exitValue) { 
        Log.e("TEST FFMPEG", "proccess complete - " + exitValue); 
       } 
      }); 


     } catch (IOException e) { 
      e.printStackTrace(); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     }finally { 

      if(videoOutputFile.exists()) 
       Log.e("TEST FFMPEG", "finished ffmpeg ---> video output file exist"); 
      else 
       Log.e("TEST FFMPEG", "finished ffmpeg ---> video output file DON'T exist"); 

     } 
    } 

    private void getGalleryVideos(){ 

     Cursor videoCursor = null; 

     try { 

      final String[] columns = { Media.DATA, 
        Media._ID, 
        Media.DATE_ADDED }; 

      final String orderBy = Media.DATE_ADDED; 

      videoCursor = getContentResolver().query(
        MediaStore.Video.Media.EXTERNAL_CONTENT_URI, columns, 
        null, null, orderBy); 

      if (videoCursor != null && videoCursor.getCount() > 0) { 

       while (videoCursor.moveToNext()) { 

        int dataColumnIndex = videoCursor 
          .getColumnIndex(Media.DATA); 

        listVideoPaths.add(videoCursor 
          .getString(dataColumnIndex)); 

       } 

      } 

      Collections.sort(listVideoPaths,new Comparator()); 

     } catch (Exception e) { 

      e.printStackTrace(); 

     } finally { 

      if (videoCursor != null) { 

       if (!videoCursor.isClosed()) { 

        videoCursor.close(); 

       } 

      } 

     } 

    } 

} 

У меня нет ошибки, но видео не воспроизводится. Файл журнала:

3096-3096/douglasanunciacao.androidffmpegjavateste E/TESTE FFMPEG: папка видео существует 07-30 14: 31: 57,389
3096-3096/douglasanunciacao.androidffmpegjavateste E/TESTE FFMPEG: входной файл видео существует 07-30 14: 31: 57.389
3096-3096/douglasanunciacao.androidffmpegjavateste E/Teste FFMPEG: вывода видео файл не существует 07-30 14: 31: 58,363
3096-3096/douglasanunciacao. androidffmpegjavateste E/TESTE FFMPEG: shellOut - /data/data/douglasanunciacao.androidffmpegjav ateste/app_bin/ffmpeg -y -i /storage/emulated/0/DCIM/Camera/VID_20150730_142330563.mp4 -f mpeg /storage/emulated/0/DCIM/Camera/output.mp4 07-30 14: 31: 58.385
3096-3182/douglasanunciacao.androidffmpegjavateste E/TESTE FFMPEG: shellOut - ПРЕДУПРЕЖДЕНИЕ: линкер: /data/data/douglasanunciacao.androidffmpegjavateste/app_bin/ffmpeg имеет текст переездов. Это растрачивает память и предотвращает затвердение. упрочнение. Пожалуйста исправьте. 07-30 14: 31: 58,390
3096-3182/douglasanunciacao.androidffmpegjavateste E/TESTE FFMPEG: shellOut - FFmpeg версия 0.11.1 Copyright (с) 2000-2012 в FFmpeg разработчики 07-30 14: 31: 58,391
3096-3182/douglasanunciacao.androidffmpegjavateste Е/TESTE FFMPEG: shellOut - построен на 22 декабря 2014 12:52:34 с GCC 4.6 20120106 (07-30) предварительной 14: 31: 58,391
3096-3182/douglasanunciacao. androidffmpegjavateste E/TESTE FFMPEG: shellOut - конфигурация: --arch = arm --cpu = cortex-a8 --target-os = linux --enable-runtime-cpudetect --prefix =/data/data/info.guardianproject .ffmpeg/app_opt --enable-pic --disable-shared --enable-static --cros s-prefix =/home/n8fr8/dev/android/ndk/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86_64/bin/arm-linux-androideabi- --sysroot =/home/n8fr8/dev/android/ndk/platform/android-16/arch-arm --extra-cflags = '- I ../ x264 -mfloat-abi = softfp -mfpu = neon -fPIE -pie' --extra-ldflags = '- L ../ x264 -fPIE -pie '--enable-version3 --enable-gpl --disable-doc --enable-yasm --enable-decoders --enable-encoders --enable-muxers --enable-demuxers --enable-parsers --enable-protocols --enable-filters --enable-avresample --enable-libfreetype --disable-indevs --enable-indev = lavfi --disable-outdevs --enable-hwaccels --enable -ffmpeg --disable-ffplay --disable-ffprobe --disable-ffserver --disable-network --enable-libx264 --enable-zlib 07-30 14: 31: 58.391
3096-3182/douglasanunciacao.androidffmpegjavateste E/TESTE FFMPEG: shellOut - libavutil 51. 54.100/51. 54.100 07-30 14: 31: 58.391-3182/douglasanunciacao.androidffmpegjavateste Е/TESTE FFMPEG: shellOut - кодек 54. 23.100/23.100 54. 07-30 14: 31: 58,391 3096-3182/douglasanunciacao.androidffmpegjavateste Е/TESTE FFMPEG: shellOut - libavformat 54 6.100/54. 6.100 07-30 14: 31: 58.391 3096-3182/douglasanunciacao.androidffmpegjavateste E/TESTE FFMPEG: shellOut - libavdevice 54. 0.100/54. 0.100 07-30 14: 31: 58.391 3096-3182/douglasanunciacao.androidffmpegjavateste Е/TESTE FFMPEG: shellOut - libavfilter 2. 77,100/77,100 2. 07-30 14: 31: 58,391 3096-3182/douglasanunciacao.androidffmpegjavateste Е/TESTE FFMPEG: shellOut - libswscale 2. 1.100/1.100 2. 07 -30 14: 31: 58,391 3096-3182/douglasanunciacao.androidffmpegjavateste Е/TESTE FFMPEG: shellOut - libswresample 0. 15,100/15,100 0. 07-30 14: 31: 58.391 3096-3182/douglasanunciacao.androidffmpegjavateste E/Teste FFMPEG: shellOut - libpostproc 52. 0,100/0,100 52. 07-30 14: 31: 58,868 3096-3182/douglasanunciacao.androidffmpegjavateste Е/TESTE FFMPEG: shellOut - вход # 0, MOV, MP4, M4A, 3gp, 3g2 , mj2, от '/ storage/emulated/0/DCIM/Camera/VID_20150730_142330563 .mp4' : 07-30 14: 31: 58,869 3096-3182/douglasanunciacao.androidffmpegjavateste Е/TESTE FFMPEG: shellOut - Метаданные: 07-30 14: 31: 58,869
3096-3182/douglasanunciacao.androidffmpegjavateste Е/TESTE FFMPEG: shellOut - major_brand: MP42 07-30 14: 31: 58,870
3096-3182/douglasanunciacao.androidffmpegjavateste Е/TESTE FFMPEG: shellOut - minor_version: 0 07-30 14: 31: 58,871
3096-3182/douglasanunciacao.androidffmpegjavateste Е/TESTE FFMPEG: shellOut - compatible_brands: isommp42 07-30 14: 31: 58,872
3096-3182/douglasanunciacao.androidffmpegjavateste Е/TESTE FFMPEG: shellOut - creation_time: 2015-07-30 17:23:34 07-30 14: 31: 58.873 3096-3182/douglasanunciacao.androidffmpegjavateste E/TESTE FFMPEG: shellOut - Продолжительность: 00: 00: 01.89, начало: 0.000000 , битрейт: 17571 кб/с 07-30 14: 31: 58,874
3096-3182/douglasanunciacao.androidffmpegjavateste E/TESTE FFMPEG: shellOut - поток # 0: 0 (рус): Видео: h264 (High) (AVC1/ ), yuv420p, 1920x1080, 15874 kb/s, SAR 65536: 65536 DAR 16: 9, 23.90 fps, 23.92 tbr, 90k tbn, 180k tbc 07-30 14: 31: 58.875 3096-3182/douglasanunciacao.androidffmpegjavateste E/TESTE FFMPEG: shellOut - Метаданные: 07-30 14: 31: 58.876
3096-3182/douglasanunciacao.androidffmpegjavateste E/TES TE FFMPEG: shellOut - поворот: 270 07-30 14: 31: 58,877
3096-3182/douglasanunciacao.androidffmpegjavateste E/TESTE FFMPEG: shellOut - CREATION_TIME: 2015-07-30 17:23:34 07-30 14: 31: 58,878 3096-3182/douglasanunciacao.androidffmpegjavateste Е/TESTE FFMPEG: shellOut - handler_name: VideoHandle 07-30 14: 31: 58,878 3096-3182/douglasanunciacao.androidffmpegjavateste Е/TESTE FFMPEG: shellOut - поток # 0 : 1 (рус): Аудио: AAC (mp4a/ 0x6134706D), 48000 Гц, стерео, s16, 127 кб/с 07-30 14: 31: 58,878
3096-3182/douglasanunciacao.androidffmpegjavateste Е/TESTE FFMPEG: shellOut - Метаданные: 07-30 14: 31: 58.878 3096-3182/douglasanunciacao.androidffmpegjavateste Е/TESTE FFMPEG: shellOut - CREATION_TIME: 2015-07-30 17:23:34 07-30 14: 31: 58,878 3096-3182/douglasanunciacao.androidffmpegjavateste Е/TESTE FFMPEG : shellOut - handler_name: SoundHandle 07-30 14: 31: 58,882 3096-3182/douglasanunciacao.androidffmpegjavateste Е/TESTE FFMPEG: shellOut - [буфера @ 0xb5cce0a0] ш: 1920 ч: 1080 pixfmt: yuv420p ТБ: 1/90000 сар: 65536/65536 sws_param: флаги = 2 07-30 14: 31: 58,882 3096-3182/douglasanunciacao.androidffmpegjavateste Е/TESTE FFMPEG: shellOut - [buffersink @ 0xb5cce0d0] нет непрозрачной поле не предусмотрено 07-30 14:31 : 58,891
3096-3182/douglasanunciacao.androidffmpegjavateste Е/TESTE FFMPEG: shellOut - [MPEG @ 0xb5c3df00] VBV размер буфера не установлен, муксинга может неудачу 07-30 14: 31: 58,892
3096-3182/douglasanunciacao.androidffmpegjavateste Е/TESTE FFMPEG: shellOut - Выходной # 0, MPEG, чтобы '/storage/emulated/0/DCIM/Camera/output.mp4': 07-30 14: 31: 58,894
3096-3182/douglasanunciacao.androidffmpegjavateste Е/TESTE FFMPEG: shellOut - Метаданные : 07-30 14: 31: 58,895
3096-3182/douglasanunciacao.androidffmpegjavateste Е/TESTE FFMPEG: shellOut - major_brand: MP42 07-30 14: 31: 58,896
3096-3182/douglasanunciacao.androidffm pegjavateste Е/TESTE FFMPEG: shellOut - minor_version: 0 07-30 14: 31: 58.896
3096-3182/douglasanunciacao.androidffmpegjavateste Е/TESTE FFMPEG: shellOut - compatible_brands: isommp42 07-30 14: 31: 58,897
3096-3182/douglasanunciacao.androidffmpegjavateste Е/TESTE FFMPEG: shellOut - CREATION_TIME: 2015-07-30 17:23:34 07-30 14: 31: 58,898 3096-3182/douglasanunciacao.androidffmpegjavateste Е/TESTE FFMPEG: shellOut - кодер: Lavf54.6.100 07-30 14: 31: 58,898 3096-3182/douglasanunciacao.androidffmpegjavateste Е/TESTE FFMPEG: shellOut - поток # 0: 0 (рус): Видео: mpeg1video, yuv420p, 1920x1080 [SAR, 65536 : 65536 ДАР 16: 9], д = 2-31, 200 кб/с, 90k TBN, 23.98 TBC 07-30 14: 31: 58,899
3096-3182/douglasanunciacao.androidffmpegjavateste Е/TESTE FFMPEG: shellOut - Метаданные: 07-30 14: 31: 58,899
3096-3182/douglasanunciacao.androidffmpegjavateste Е/TESTE FFMPEG: shellOut - вращение: 270 07-30 14: 31: 58.900
3096-3182/douglasanunciacao.androidffmpegjavateste E/Teste FFMPEG: shellOut - CREATION_TIME: 2015-07-30 17:23:34 07-30 14: 31: 58,901 3096-3182/douglasanunciacao.androidffmpegjavateste Е/TESTE FFMPEG: shellOut - handler_name: VideoHandle 07-30 14:31: 58.906 3096-3182/douglasanunciacao.androidff mpegjavateste E/TESTE FFMPEG: shellOut - Stream # 0: 1 (eng): Аудио: mp2, 48000 Гц, stereo, s16, 128 kb/s 07-30 14: 31: 58.906
3096-3182/douglasanunciacao. androidffmpegjavateste Е/TESTE FFMPEG: shellOut - Метаданные: 07-30 14: 31: 58,906
3096-3182/douglasanunciacao.androidffmpegjavateste Е/TESTE FFMPEG: shellOut - CREATION_TIME: 2015-07-30 17:23:34 07- 30 14: 31: 58,906 3096-3182/douglasanunciacao.androidffmpegjavateste Е/TESTE FFMPEG: shellOut - handler_name: SoundHandle 07-30 14: 31: 58,906 3096-3182/douglasanunciacao.androidffmpegjavateste Е/TESTE FFMPEG: shellOut - поток картирование: 07-30 14: 31: 58.906
3096-3182/douglasanunciacao.androidffmpegjavateste Е/TESTE FFMPEG: shellOut - поток # 0: 0 -> # 0: 0 (H264 -> mpeg1video) 07-30 14: 31: 58,906 3096-3182/douglasanunciacao.androidffmpegjavateste E/TESTE FFMPEG: shellOut - Stream # 0: 1 -> # 0: 1 (aac -> mp2) 07-30 14: 31: 58.906 3096-3182/douglasanunciacao.androidffmpegjavateste E/TESTE FFMPEG: shellOut - Press [q] для остановки, [?] для справки 07-30 14: 31: 59.824 3096-3182/douglasanunciacao.androidffmpegjavateste E/TESTE FFMPEG: shellOut - frame = 4 fps = 0.0 q = 2.0 size = 0kB time = 00: 00: 00,08 bitrate = 0,0kbits/s 07-30 14: 32: 02.029
3096-3182/douglasanunciacao.androidffmpegjavateste Е/TESTE FFMPEG: shellOut - кадр = 8 кадров в секунду = 2,7 кв = 10.5 размер = 4kB время = 00: 00: 00,25 битрейт = 130.9kbits/с 07-30 14: 32: 02,536
3096-3182/douglasanunciacao .androidffmpegjavateste Е/TESTE FFMPEG: shellOut - кадр = 13 кадров в секунду = 3,7 кв = 25,2 размер = 696kB время = 00: 00: 00,45 битрейт = 12427.3kbits/с 07-30 14: 32: 03,045
3096-3182/douglasanunciacao.androidffmpegjavateste Е/TESTE FFMPEG: shellOut - кадр = 18 кадров в секунду = 4,4 кв = 31,0 размер = 750KB время = 00: 00: 00,66 битрейт = 9206.8kbits/с 07-30 14: 32: 03,582
3096-3182 /douglasanunciacao.androidffmpegjavateste E/TESTE FFMPEG: shellOut - frame = 23 fps = 5 0,0 кв = 31,0 размер = 786kB время = 00: 00: 00,87 битрейт = 7351.4kbits/с 07-30 14: 32: 04,140
3096-3182/douglasanunciacao.androidffmpegjavateste Е/TESTE FFMPEG: shellOut - рамка = 28 кадров в секунду = 5,5 кв = 31,0 размер = 862kB время = 00: 00: 01.08 битрейт = 6511.8kbits/с 07-30 14: 32: 05,239
3096-3182/douglasanunciacao.androidffmpegjavateste Е/TESTE FFMPEG: shellOut - кадр = 30 кадров в секунду = 4,8 ц = 31,0 размер = 876kB время = 00: 00: 01.16 битрейт = 6144.9kbits/с 07-30 14: 32: 05,746
3096-3182/douglasanunciacao.androidffmpegjavateste Е/TESTE FFMPEG: shellOut - рамка = 35 fps = 5.2 q = 31.0 size = 910kB time = 00: 00: 01.37 bitrate = 5416.2kbits/s 07- 30 14: 32: 06,317
3096-3182/douglasanunciacao.androidffmpegjavateste Е/TESTE FFMPEG: shellOut - кадр = 41 кадров в секунду = 5,6 ц = 31,0 размер = 972kB время = 00: 00: 01,62 битрейт = 4895.2kbits/с 07 -30 14: 32: 06,832
3096-3182/douglasanunciacao.androidffmpegjavateste Е/TESTE FFMPEG: shellOut - кадр = 45 кадров в секунду = 5,7 ц = 31,0 Lsize = 1022kB время = 00: 00: 01,83 битрейт = 4562.1kbits/с 07-30 14: 32: 06,832
3096-3182/douglasanunciacao.androidffmpegjavateste Е/TESTE FFMPEG: shellOut - видео: 984kB аудио: 30kb глобальные заголовки: 0kb муксинга накладные 0,756932% 07-30 14: 32: 06,858 3096- 3096/douglasanunciacao.androidffmpegjavateste E/TESTE FFMPEG: proccess полный - 0 07-30 14: 32: 06,858
3096-3096/douglasanunciacao.androidffmpegjavateste E/TESTE FFMPEG: terminou о FFmpeg ---> выход видео файл существует

Кто-нибудь знает, как решите эту проблему? Заранее спасибо.

ответ

0

мне удалось решить эту проблему, заменив этот код:

Clip mediaIn = new Clip(); 

      mediaIn.path = videoInputFile.getAbsolutePath(); 

      mediaIn.videoFps = "30"; 

      mediaIn.videoCodec = "mpeg4"; 

      mediaIn.width = 640; 

      mediaIn.height = 352; 

      mediaIn.videoBitrate = 1000; 

//   "ffmpeg -y -i /sdcard/DCIM/Camera/VID_20150728_150045662.mp4 " + 
//     "-strict experimental -s 640x352 -r 30 -vcodec mpeg4 -ab 48000 " + 
//     "-ac 2 -ar 22050 -b 1000k /sdcard/DCIM/Camera/output2.mp4"; 

      ffmpegController.convertToMPEG(mediaIn, videoOutputFile.getAbsolutePath(), new ShellUtils.ShellCallback() { 

       @Override 
       public void shellOut(String shellLine) { 
        Log.e("TEST FFMPEG", "shellOut - " + shellLine); 
       } 

       @Override 
       public void processComplete(int exitValue) { 
        Log.e("TEST FFMPEG", "proccess complete - " + exitValue); 
       } 
      }); 

К этому коду:

Clip clipIn = new Clip(videoInputFile.getAbsolutePath()); 
      Clip clipOut = new Clip(videoOutputFile.getAbsolutePath()); 
      clipOut.videoCodec = "mpeg4"; 
      clipOut.videoFps = "30"; // tailor this to your needs 
      clipOut.videoBitrate = 512; // 512 kbps - tailor this to your needs 
      clipOut.audioChannels = 1; 
      clipOut.width = 640; 
      clipOut.height = 352; 
      clipOut.duration = 2; 
      ffmpegController.processVideo(clipIn, clipOut, true, new ShellUtils.ShellCallback() { 
       @Override 
       public void shellOut(String shellLine) { 
        Log.e("TEST FFMPEG", "shellOut - " + shellLine); 
       } 

       @Override 
       public void processComplete(int exitValue) { 
        Log.e("TEST FFMPEG", "proccess complete - " + exitValue); 
       } 
      }); 
Смежные вопросы