package com.googlecode.mp4parser;
import org.mp4parser.Container;
import org.mp4parser.muxer.Movie;
import org.mp4parser.muxer.Track;
import org.mp4parser.muxer.builder.DefaultMp4Builder;
import org.mp4parser.muxer.container.mp4.MovieCreator;
import org.mp4parser.muxer.tracks.AppendTrack;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.nio.channels.FileChannel;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
/**
*
*/
public class AppendExample {
public static void main(String[] args) throws IOException {
String[] videoUris = new String[]{
"c:\\content\\20150930_161515.mp4",
"c:\\content\\20150930_161525.mp4",
"c:\\content\\20150930_161529.mp4",
"c:\\content\\20150930_161534.mp4",
"c:\\content\\20150930_161543.mp4",
"c:\\content\\20151001_135436.mp4",
"c:\\content\\20151001_135446.mp4",
"c:\\content\\20150930_161515.mp4",
"c:\\content\\20150930_161525.mp4",
"c:\\content\\20150930_161529.mp4",
"c:\\content\\20150930_161534.mp4",
"c:\\content\\20150930_161543.mp4",
"c:\\content\\20151001_135436.mp4",
"c:\\content\\20151001_135446.mp4",
"c:\\content\\20150930_161515.mp4",
"c:\\content\\20150930_161525.mp4",
"c:\\content\\20150930_161529.mp4",
"c:\\content\\20150930_161534.mp4",
"c:\\content\\20150930_161543.mp4",
"c:\\content\\20151001_135436.mp4",
"c:\\content\\20151001_135446.mp4",
"c:\\content\\20150930_161515.mp4",
"c:\\content\\20150930_161525.mp4",
"c:\\content\\20150930_161529.mp4",
"c:\\content\\20150930_161534.mp4",
"c:\\content\\20150930_161543.mp4",
"c:\\content\\20151001_135436.mp4",
"c:\\content\\20151001_135446.mp4",
"c:\\content\\20150930_161515.mp4",
"c:\\content\\20150930_161525.mp4",
"c:\\content\\20150930_161529.mp4",
"c:\\content\\20150930_161534.mp4",
"c:\\content\\20150930_161543.mp4",
"c:\\content\\20151001_135436.mp4",
"c:\\content\\20151001_135446.mp4",
"c:\\content\\20150930_161515.mp4",
"c:\\content\\20150930_161525.mp4",
"c:\\content\\20150930_161529.mp4",
"c:\\content\\20150930_161534.mp4",
"c:\\content\\20150930_161543.mp4",
"c:\\content\\20151001_135436.mp4",
"c:\\content\\20151001_135446.mp4",
"c:\\content\\20150930_161515.mp4",
"c:\\content\\20150930_161525.mp4",
"c:\\content\\20150930_161529.mp4",
"c:\\content\\20150930_161534.mp4",
"c:\\content\\20150930_161543.mp4",
"c:\\content\\20151001_135436.mp4",
"c:\\content\\20151001_135446.mp4",
"c:\\content\\20150930_161515.mp4",
"c:\\content\\20150930_161525.mp4",
"c:\\content\\20150930_161529.mp4",
"c:\\content\\20150930_161534.mp4",
"c:\\content\\20150930_161543.mp4",
"c:\\content\\20151001_135436.mp4",
"c:\\content\\20151001_135446.mp4",
"c:\\content\\20150930_161515.mp4",
"c:\\content\\20150930_161525.mp4",
"c:\\content\\20150930_161529.mp4",
"c:\\content\\20150930_161534.mp4",
"c:\\content\\20150930_161543.mp4",
"c:\\content\\20151001_135436.mp4",
"c:\\content\\20151001_135446.mp4",
"c:\\content\\20150930_161515.mp4",
"c:\\content\\20150930_161525.mp4",
"c:\\content\\20150930_161529.mp4",
"c:\\content\\20150930_161534.mp4",
"c:\\content\\20150930_161543.mp4",
"c:\\content\\20151001_135436.mp4",
"c:\\content\\20151001_135446.mp4",
"c:\\content\\20150930_161515.mp4",
"c:\\content\\20150930_161525.mp4",
"c:\\content\\20150930_161529.mp4",
"c:\\content\\20150930_161534.mp4",
"c:\\content\\20150930_161543.mp4",
"c:\\content\\20151001_135436.mp4",
"c:\\content\\20151001_135446.mp4",
"c:\\content\\20150930_161515.mp4",
"c:\\content\\20150930_161525.mp4",
"c:\\content\\20150930_161529.mp4",
"c:\\content\\20150930_161534.mp4",
"c:\\content\\20150930_161543.mp4",
"c:\\content\\20151001_135436.mp4",
"c:\\content\\20151001_135446.mp4",
"c:\\content\\20151001_135540.mp4"
};
List<Movie> inMovies = new ArrayList<Movie>();
for (String videoUri : videoUris) {
inMovies.add(MovieCreator.build(videoUri));
}
List<Track> videoTracks = new LinkedList<Track>();
List<Track> audioTracks = new LinkedList<Track>();
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.isEmpty()) {
result.addTrack(new AppendTrack(audioTracks.toArray(new Track[audioTracks.size()])));
}
if (!videoTracks.isEmpty()) {
result.addTrack(new AppendTrack(videoTracks.toArray(new Track[videoTracks.size()])));
}
Container out = new DefaultMp4Builder().build(result);
FileChannel fc = new RandomAccessFile(String.format("output.mp4"), "rw").getChannel();
out.writeContainer(fc);
fc.close();
}
}