2016-08-29 61 views
2

複数の.mp4ファイルを1つの.mp4にマージする最初の.mp4のみが正しく表示され、他のビデオは表示されません。複数の.mp4ファイルを1つの.mp4ファイルに統合するffmpeg android

私が最初に店に

ffmpeg -f concat -i " + strTextPath + " -c copy " + strFinalMergedVideoPath; 
+2

[concat demuxer](https://ffmpeg.org/ffmpeg-formats.html#concat-1)を使用する必要があります。 – Mulvya

+0

提案のためのThanx @ Mulvya –

答えて

0

あなたは以下のようにArrayListの中にマージしたいすべてのMP4ファイルを、このffmpegコマンドを使用していました。

private ArrayList<String> arrFilePaths = new ArrayList<>(); 

arrFilePaths .add(file1path); 

arrFilePaths .add(file2path); 

arrFilePaths .add(file3path); 

出力ファイルのパスを次のように設定します。

String strVideoFolderPath = Environment.getExternalStorageDirectory().getAbsolutePath(); 

その後、Asynctaskクラスの下で実行します。

public class MergeVideo extends AsyncTask<String, Integer, String> { 
     ProgressDialog progressDialog;  

     @Override 
     protected void onPreExecute() { 
      progressDialog = ProgressDialog.show(MotionFlyerTabActivity.this,"", 
        "Please wait...", true); 
      // do initialization of required objects objects here 
     } 

     @Override 
     protected String doInBackground(String... params) { 
      try { 
       Movie[] inMovies = new Movie[arrFilePaths.size()]; 
       ArrayList<Movie> _clips = new ArrayList<>(); 
       for (int i = 0; i < arrFilePaths.size(); i++) { 
        inMovies[i] = MovieCreator.build(
          arrFilePaths.get(i)); 
       } 
       List<Track> videoTracks = new LinkedList<>(); 
       List<Track> audioTracks = new LinkedList<>(); 
       for (Movie m : inMovies) { 
        for (Track t : m.getTracks()) { 
         if (t.getHandler().equals("soun")) { 
          audioTracks.add(t); 
         } 
         if (t.getHandler().equals("vide")) { 
          videoTracks.add(t); 
         } 
        } 
       } 

       Movie result = new Movie(); 

       if (audioTracks.size() > 0) { 
        result.addTrack(new AppendTrack(audioTracks 
          .toArray(new Track[audioTracks.size()]))); 
       } 
       if (videoTracks.size() > 0) { 
        result.addTrack(new AppendTrack(videoTracks 
          .toArray(new Track[videoTracks.size()]))); 
       } 

       BasicContainer out = (BasicContainer) new DefaultMp4Builder() 
         .build(result); 



       FileChannel fc = new RandomAccessFile(String.format(strVideoFolderPath + "/output.mp4"), "rw").getChannel(); 
       out.writeContainer(fc); 
       fc.close(); 

       File file = new File(strVideoFolderPath + "/output.mp4"); 
       String mFileName = file.getAbsolutePath(); 

       return mFileName; 


      } catch (Exception e) { 
       // TODO: handle exception 
       e.printStackTrace(); 
      } 
      return null; 
     } 

     @Override 
     protected void onPostExecute(String value) { 
      super.onPostExecute(value); 
      progressDialog.dismiss(); 

     } 
    } 
関連する問題