2016-08-29 4 views
2

Я слияние несколько файлов .mp4 в один .mp4 после слияния только первого .mp4 отображается правильно, а другое видео не отображается.Как слить несколько файлов .mp4 в один .mp4 ffmpeg android

Я использовал эту ffmpeg команду

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

Вам необходимо использовать [concat demuxer] (https://ffmpeg.org/ffmpeg-formats.html#concat-1). – Mulvya

+0

Thanx для предложения. @ Mulvya –

ответ

0

Первый магазин все MP4-файл, который вы хотите объединить в Arraylist, как показано ниже.

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

     } 
    } 

 Смежные вопросы

  • Нет связанных вопросов^_^