package com.googlecode.mp4parser.stuff; 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.LinkedList; import java.util.List; /** * Created with IntelliJ IDEA. * User: sannies * Date: 3/7/12 * Time: 12:25 AM * To change this template use File | Settings | File Templates. */ public class DavidAppend { public static void main(String[] args) throws IOException { List<Movie> movies = new LinkedList<Movie>(); movies.add(MovieCreator.build(DavidAppend.class.getProtectionDomain().getCodeSource().getLocation().getFile() + "/davidappend/v1.mp4")); movies.add(MovieCreator.build(DavidAppend.class.getProtectionDomain().getCodeSource().getLocation().getFile() + "/davidappend/v2.mp4")); movies.add(MovieCreator.build(DavidAppend.class.getProtectionDomain().getCodeSource().getLocation().getFile() + "/davidappend/v2.mp4")); List<Track> videoTracks = new LinkedList<Track>(); List<Track> audioTracks = new LinkedList<Track>(); for (Movie m : movies) { for (Track track : m.getTracks()) { if (track.getHandler().equals("vide")) { videoTracks.add(track); } if (track.getHandler().equals("soun")) { audioTracks.add(track); } } } Movie concatMovie = new Movie(); concatMovie.addTrack(new AppendTrack(videoTracks.toArray(new Track[videoTracks.size()]))); concatMovie.addTrack(new AppendTrack(audioTracks.toArray(new Track[audioTracks.size()]))); Container out2 = new DefaultMp4Builder().build(concatMovie); FileChannel fc = new RandomAccessFile(String.format("output.mp4"), "rw").getChannel(); fc.position(0); out2.writeContainer(fc); fc.close(); } }