Pracuję nad aplikacją, która łączy klipy mp4 przy użyciu biblioteki mp4parser (isoparser-1.0-RC-27.jar i aspectjrt-1.8.0.jar). Kiedy dwa klipy są scalane, stają się pojedynczym klipem, ale wraz z dodawaniem do niego kolejnych klipów, wyjście mp4 ma dźwięk za wideo.Scalanie klipów MP4 z mp4parser sprawia, że audio kryje się za wideo
Oto kod:
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);
}
Domyślam się, że im więcej klipów są dodawane, synchronizacja wideo do audio jest pomieszane, ponieważ jeśli dwie dłuższe klipy są połączone wówczas audio/wideo jest w porządku. Czy jest jednak tak, aby zapobiec tej słabej synchronizacji wideo i audio w wielu mniejszych klipach, czy ktoś znalazł rozwiązanie tego przy użyciu mp4parser ?? FFMpeg to kolejne rozwiązanie, które rozważam, ale nie znalazłem nikogo innego, kto użyłby go do wykonania tej czynności.
EDYCJA: Odkryłem, że dźwięk jest zwykle dłuższy niż wideo, dlatego właśnie to powoduje powstanie końcowego wideo tak bardzo się skompensować, gdy coraz więcej klipów jest dodawanych, aby utworzyć jeden klip. Mam zamiar rozwiązać przez odcięcie próbek audio
Należy dodać kod do przycinania ścieżek audio dla innych osób, które znajdują swoje rozwiązanie. Dzięki! – Episodex
Napisałem to jakiś czas temu, pozwól mi wykopać moje rozwiązanie –
Dzięki za zainteresowanie :). Dowiedziałem się, jak technicznie przyciąć dźwięk, ale wciąż mam problem z wyborem odpowiedniej liczby próbek do usunięcia. Zastanawiam się, czy znalazłeś rozwiązanie tego problemu. – Episodex