我正在尝试使用MP4Parser将两个视频(mp4文件)(一个带音频,一个不带音频)合并为一个视频。最终生成的视频始终从头开始就有音频。例如第一个视频长度为20秒,没有音频。第二个视频长度为10秒,并有音频。生成的最终视频长度为30秒,但是音频将在视频开始播放10秒钟(剩下的20秒将没有任何音频),而开始播放的音频应在没有音频的情况下播放20秒,并在播放结束时的10秒钟结束音频。
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()])));
}
我尝试通过如下更改几行来添加静音轨道
//List for audio and video tracks
List<Track> videoTracks = new LinkedList<Track>();
List<Track> audioTracks = new LinkedList<Track>();
Track audioSourceTrack = null;
for (final Movie movie : inMovies) {
for (final Track t : movie.getTracks()) {
if (isAudioTrack(t)) {
audioSourceTrack = t;
break;
}
}
if (audioSourceTrack != null) break;
}
//Iterate all the movie clips and find the audio and videos
for (Movie movie: clips) {
if (movie.getTracks().size() == 1) {
videoTracks.add(movie.getTracks().get(0));
audioTracks.add(new SilenceTrackImpl(audioSourceTrack, movie.getTracks().get(0).getDuration() / 2));
} else {
for (final Track t : movie.getTracks()) {
if (isAudioTrack(t)) {
audioTracks.add(t);
}
if (isVideoTrack(t)) {
videoTracks.add(t);
}
}
}
}
我能够通过在静音片段上附加静音轨道来做到这一点。问题在于,react-native视频不能像Q播放器那样正确播放静音轨道。我必须对视频进行转码才能看到附加的静音正常工作。