2016-06-02 22 views
1

Ich verarbeite Video in Android mit FFMPEG Android Java-Bibliothek, um die Wiedergabe der Geschwindigkeit zu ändern. für 6 Sekunden Video, um es langsam um 0,5 Setpts abzuspielen, dauert es mehr als 1 Minute. Hier ist mein CodeÄndern der Video-Wiedergabe ist wirklich sehr langsam Prozess mit FFMPEG Android Java kompilierte Bibliothek

public class TestFFMpegActivity { 
     private static String cmd, 
     private static FFmpeg ffmpeg; 
     private static Context mContext; 


     public static String getInternalDirectoryPath() { 
      return Environment.getExternalStorageDirectory().getAbsolutePath(); 
     } 

     public static void initiateFFmpeg(Context context, String path) { 
      mContext = context; 
      ffmpeg = FFmpeg.getInstance(context); 
      VideoIn = getInternalDirectoryPath() + "/Download/input.mp4"; 
      VideoOut = getInternalDirectoryPath() + "/Download/output.mp4"; 
      cmd = "-i "+VideoIn+" -vf setpts=2*PTS -strict -2 "+VideoOut; 
      try { 
       ffmpeg.loadBinary(new LoadBinaryResponseHandler() { 

        @Override 
        public void onStart() { 
        } 

        @Override 
        public void onFailure() { 
        } 

        @Override 
        public void onSuccess() { 
        } 

        @Override 
        public void onFinish() { 
         processVideo(); 
        } 
       }); 
      } catch (FFmpegNotSupportedException e) { 
       // Handle if FFmpeg is not supported by device 
      } 
     } 
     private static void processVideo(){ 
     try { 
      ffmpeg.execute(cmd , 
        new ExecuteBinaryResponseHandler() { 

         @Override 
         public void onStart() { 
          //for logcat 
          Log.w(null,"processing started"); 
         } 

         @Override 
       public void onProgress(String message) { 
        //for logcat 
        Log.w(null, "onProgress"); 
       } 

       @Override 
       public void onFailure(String message) { 
        Log.w(null, message.toString()); 
       } 

       @Override 
       public void onSuccess(String message) { 
        Log.w(null, message.toString()); 
       } 

       @Override 
       public void onFinish() { 

       } 
      }); 
     } catch (FFmpegCommandAlreadyRunningException e) { 
      Toast.makeText(mContext, "Video processing failed due to exception", Toast.LENGTH_LONG).show(); 

      // Handle if FFmpeg is already running 
      e.printStackTrace(); 
      Log.w(null, e.toString()); 
     } 
    } 
} 

Dies ist der gradle Build-Pfad für oben Bibliothek

compile 'com.github.hiteshsondhi88.libffmpeg:FFmpegAndroid:0.2.5' 

Antwort

1

Für die Wiedergabe Befehl Ändern hinzufügen in it "-ultrafast" Parameter. Jetzt wird cmd wie sein

cmd= "-i " + VideoIn+ " -vf setpts=2*PTS -c:v libx264 -c:a aac -strict experimental -vcodec libx264 -preset ultrafast -b:a 128k " + VideoOut; 

dieser Parameter magische Wirkung auf die Verarbeitung hat. Die Videoverarbeitungszeit verringert sich von 1 Minute 6 Sek. Auf 13 Sek. Bei gleicher Umgebung.