2016-06-01 10 views
0

Während der Wiedergabe Geschwindigkeit des Videos (Video langsam) folgende Ausnahme auftritt mit FFMPEG android Java-Bibliothek.Encoder 'aac' nicht Ausnahme während der Verarbeitung von Video für die Verlangsamung

[aac @ 0x416c26f0] The encoder 'aac' is experimental but experimental codecs are not enabled, add '-strict -2' if you want to use it. 
+0

Sie verwenden eine ältere Version von ffmpeg. Füge '-strict -2' hinzu – Mulvya

+0

wo es hinzufügen? im befehl? –

+0

Ja, im Befehl. – Mulvya

Antwort

0

Hier ist ein Befehl Wiedergabe der Geschwindigkeit

VideoIn = getInternalDirectoryPath() + "/Download/input.mp4"; 
VideoOut = getInternalDirectoryPath() + "/Download/output.mp4"; 
cmd = "-i "+VideoIn+" -vf setpts=2*PTS -strict -2 "+VideoOut; 

Hinzufügen -strict Kommando vermeiden Encoders aac 'enable Ausnahme nicht zu ändern. Sie können diesem Link folgen, um ffmpeg-Videobefehle zu implementieren.

Dies ist die komplette Beispielcode

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