合并两个带有和不带有音频的剪辑会导致音频从生成的视频开始播放

问题描述 投票:0回答:1

我正在尝试使用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);
                }
            }
        }
    }
java android recording mp4parser
1个回答
0
投票

我能够通过在静音片段上附加静音轨道来做到这一点。问题在于,react-native视频不能像Q播放器那样正确播放静音轨道。我必须对视频进行转码才能看到附加的静音正常工作。

© www.soinside.com 2019 - 2024. All rights reserved.