将视频的音轨更改为相同长度的音频文件

时间:2015-01-10 09:20:43

标签: android audio video mediarecorder android-mediarecorder

我有两个变量,Uri audioUriUri videoUri分别指向音频文件(用户拥有的任何格式)和视频文件(mp4)的位置。视频和音频的长度相同。

我想创建一个与视频文件具有相同视频/帧的视频文件,但使用音频文件作为音轨。

1 个答案:

答案 0 :(得分:2)

我最终使用了mp4parser库。 {16}和18分别引入了MediaExtractorMediaMuxer类,因此它们对我的项目来说太新了。

这种方法的警告是,在编写时音频源必须是aac或mp3文件,视频文件必须是mp4文件。

使用Android Studio和Gradle,您可以像这样安装和使用它:

打开Gradle Scripts -> build.gradle (Module: app)并添加到dependencies

的末尾
compile 'com.googlecode.mp4parser:isoparser:1.0.+'

点击进行此更改后显示的黄色横幅中的“立即同步”按钮。

现在在你的Java文件中写:

try
{
    H264TrackImpl h264Track = new H264TrackImpl(new FileDataSourceImpl(videoFile);
    MP3TrackImpl mp3Track = new MP3TrackImpl(new FileDataSourceImpl(audioFile);
    Movie movie = new Movie();
    movie.addTrack(h264Track);
    movie.addTrack(mp3Track);
    Container mp4file = new DefaultMp4Builder().build(movie);
    FileChannel fileChannel = new FileOutputStream(new File(outputFile)).getChannel();
    mp4file.writeContainer(fileChannel);
    fileChannel.close();
}
catch (Exception e)
{
    Toast.makeText(this, "An error occurred: " + e.getMessage(), Toast.LENGTH_SHORT).show();
}

使用Alt + Enter工具导入所有类。 Movie课程有多种选择,因此请务必选择以com.googlecode.mp4parser开头的课程。

由您来处理异常并定义不言自明的字符串outputFileaudioFilevideoFile