2016-10-19 8 views
1

私はFFmpegを使ってAndroidアプリでいくつかの動画を編集しようとしていますが、動画の一部だけを撮ろうとしたときにいくつかの問題に直面しています。Android ffmpeg video cut

- 私はこのffmpegのコンパイル/ libにhttps://github.com/WritingMinds/ffmpeg-android-java

を使用して、私はビデオ

"-y -i input.mp4 -ss 00:00:01.00 -t 00:00:15.000 -c copy output.mp4" 

しかし、いくつかのビデオ - 私は、黒い画面を取得したりして

をカット/トリミングするには、このコマンドを使用しようとしましたビデオはちょうどフリーズします。サウンドはすべてのテストでうまく動作します。このコマンドで

"-y -i input.mp4 -ss 00:00:01.000 -t 00:00:15.000 -async 1 output.mp4" 

すべてがすべての私のテスト(ビデオ/サウンド)で正常に動作しますが、出力ファイルを生成するために時間がかかりすぎる、この15Sファイルが生成されるように2分以上かかります。

私はこれらのコマンドの他のバリエーションを試しましたが、私は常にビデオストリーム(黒い画面または凍結)で問題を起こすか、出力を生成するのに時間がかかります(ユーザーは送信するビデオを15私のサーバー)

助けてくれてありがとう!

EDIT:[https://drive.google.com/file/d/0BzqJL_nNetbRYmxvcTljanJwR00/view?usp=sharing][1]

そして、この出力:0BzqJL_nNetbReENjRGMtVXQ5VHM /ビュー

これはビデオ

String[] cmd = new String[]{"-y","-i",input,"-ss","00:00:05.000","-vcodec","copy", 
      "-acodec","copy","-t","00:00:15.00","-strict","-2",output }; 

    final FFmpeg ffmpeg = FFmpeg.getInstance(this); 
    try { 
     ffmpeg.execute(cmd, new FFmpegExecuteResponseHandler() { 
      @Override 
      public void onSuccess(String message) { 
       Log.i("VideoEditActivity", "Success " + message); 
       is_video_generated_ = true; 
      } 

      @Override 
      public void onProgress(String message) { 
       Log.i("VideoEditActivity", "Progress updated " + message); 
      } 

      @Override 
      public void onFailure(String message) { 
       Log.e("VideoEditActivity", "ERROR! " + message); 
      } 

      @Override 
      public void onStart() { 
       progress_dialog_.setMessage(getString(R.string.str_video_generating)); 
       progress_dialog_.show(); 
      } 

      @Override 
      public void onFinish() { 
       Log.i("VideoEditActivity", "Finished"); 
       progress_dialog_.hide(); 

       Intent intent = new Intent(getApplicationContext(), VideoPlayActivity.class); 
       intent.putExtra("media", edited_video_path_); 
       startActivity(intent); 
      } 
     }); 
    } catch (FFmpegCommandAlreadyRunningException e) { 
     e.printStackTrace(); 
    } 

これは、元のファイルでトリミングされたコードの一部ですか? usp = sharing(スタックオーバーフローでは2つ以上のリンクを追加できません)

+0

ストリームをコピーすると、ビデオはキーフレームでのみトリミングできます。したがって、 '-ss'が' 12'でキーフレームが '10'の場合、次のキーフレームが現れるまで、出力ビデオはフリーズ/ブラックになります。 – Mulvya

+0

OK、-ssの順序を変更すると、ビデオフレームの開始点(https://trac.ffmpeg.org/wiki/Seeking)が修正されますが、キーフレームでビデオの最後をトリムする簡単な方法がありますビデオは私が必要とするより少し大きくなります)?私はこれについて少し読んで、一部の人はffprobeを使ってキーフレームのタイムスタンプを取得していますが、今日のAndroidビルドではそれを持っていません。 – Raupp

答えて

0

try:

-y -i -ss 00:00:00:00 -t -vcodecコピー-acodecコピーinput_path 00.00 00.00 -strict -2 output_path

-ssはSTARTTIMEであり、時間を-t。 HH:MM:SS.SS

これは地獄です。再エンコーディングなしでトリミングを行います

+0

私はこれを試してもう少しうまくいったが、まだいくつかのビデオに問題があり、もう少し勉強して、私がこの問題を抱えていたほとんどすべてのファイルがWhatsAPPによって処理され、なぜこれが起こっているのかあなたは考えていますか? – Raupp

+0

いくつかのコードを提供できますか?上記のコマンドラインの指示に厳密に従わなければなりません。ところで、ビデオにはどのフォーマットがありますか? –

+0

私は魔法のコードとコマンドで私の質問を編集し、元のファイルと出力ファイルにもリンクを追加しました。あなたの助けをありがとう! – Raupp