2016-08-29 7 views
2

verschmelzen Ich füge multiple .mp4-Datei in einzelne .mp4 nach dem Zusammenführen nur erste. Mp4 wird ordnungsgemäß angezeigt und andere Video wird nicht angezeigt.Wie mehrere mp4-Datei in einzelne .mp4 ffmpeg android

ich verwendet, um dieses ffmpeg Befehl

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

Sie benötigen den [concat demuxer] (https://ffmpeg.org/ffmpeg-formats.html#concat-1). – Mulvya

+0

Danke für den Vorschlag. @ Mulvya –

Antwort

0

Zuerst speichern alle die MP4-Datei, die Sie wie unten in Arraylist zusammenführen möchten.

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

arrFilePaths .add(file1path); 

arrFilePaths .add(file2path); 

arrFilePaths .add(file3path); 

Legen Sie den Pfad für die Ausgabedatei wie folgt fest.

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

Nach diesem Run unter AsyncTask Klasse.

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

     } 
    } 
Verwandte Themen