Первый магазин все 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();
}
}
Вам необходимо использовать [concat demuxer] (https://ffmpeg.org/ffmpeg-formats.html#concat-1). – Mulvya
Thanx для предложения. @ Mulvya –