Intereting Posts

Как объединить несколько файлов .mp4 в один .mp4 ffmpeg android

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

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

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

Сначала сохраните весь файл 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(); } }