我正在开发一个应用程序,使用mp4parser库(isoparser-1.0-RC-27.jar和aspectjrt-1.8.0.jar)合并mp4剪辑。当两个剪辑合并时,它们变成了一个单一的剪辑,但是当更多的剪辑添加到其中时,输出的mp4文件会出现音频落后于视频的情况。
以下是代码:
我的猜测是随着越来越多的剪辑被添加,视频和音频的同步会被搞乱。因为如果两个较长的剪辑合并,那么音频/视频就没有问题。有没有办法防止在多个小剪辑中出现这种糟糕的音视频同步问题,或者有没有人使用mp4parser找到了解决方案?另一个我正在考虑的解决方案是FFMpeg,但是我还没有找到其他人用它来完成这个问题的方法。
编辑: 我已经发现音频通常比视频长,因此当越来越多的剪辑被添加到一个剪辑中时,这就导致最终生成的视频偏移很多。我将通过裁剪音频样本来解决这个问题。
以下是代码:
Movie[] clips = new Movie[2];
//location of the movie clip storage
File mediaStorageDir = new File(Environment.getExternalStoragePublicDirectory(
Environment.DIRECTORY_PICTURES), "TestMerge");
//Build the two clips into movies
Movie firstClip = MovieCreator.build(first);
Movie secondClip = MovieCreator.build(second);
//Add both movie clips
clips[0] = firstClip;
clips[1] = secondClip;
//List for audio and video tracks
List<Track> videoTracks = new LinkedList<Track>();
List<Track> audioTracks = new LinkedList<Track>();
//Iterate all the movie clips and find the audio and videos
for (Movie movie: clips) {
for (Track track : movie.getTracks()) {
if (track.getHandler().equals("soun"))
audioTracks.add(track);
if (track.getHandler().equals("vide"))
videoTracks.add(track);
}
}
//Result movie from putting the audio and video together from the two clips
Movie result = new Movie();
//Append all audio and video
if (videoTracks.size() > 0)
result.addTrack(new AppendTrack(videoTracks.toArray(new Track[videoTracks.size()])));
if (audioTracks.size() > 0)
result.addTrack(new AppendTrack(audioTracks.toArray(new Track[audioTracks.size()])));
//Output the resulting movie to a new mp4 file
String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
String outputLocation = mediaStorageDir.getPath()+timeStamp;
Container out = new DefaultMp4Builder().build(result);
FileChannel fc = new RandomAccessFile(String.format(outputLocation), "rw").getChannel();
out.writeContainer(fc);
fc.close();
//Now set the active URL to play as the combined videos!
setURL(outputLocation);
}
我的猜测是随着越来越多的剪辑被添加,视频和音频的同步会被搞乱。因为如果两个较长的剪辑合并,那么音频/视频就没有问题。有没有办法防止在多个小剪辑中出现这种糟糕的音视频同步问题,或者有没有人使用mp4parser找到了解决方案?另一个我正在考虑的解决方案是FFMpeg,但是我还没有找到其他人用它来完成这个问题的方法。
编辑: 我已经发现音频通常比视频长,因此当越来越多的剪辑被添加到一个剪辑中时,这就导致最终生成的视频偏移很多。我将通过裁剪音频样本来解决这个问题。