Android 更改视频';将声带复制到相同长度的音频文件
我有两个变量,Android 更改视频';将声带复制到相同长度的音频文件,android,audio,video,mediarecorder,android-mediarecorder,Android,Audio,Video,Mediarecorder,Android Mediarecorder,我有两个变量,uriaudiouri和urivideouri,分别指向音频文件(用户拥有的任何格式)和视频文件(mp4)的位置。视频和音频的长度相同 我想创建一个与视频文件具有相同视频/帧的视频文件,但将音频文件用作配乐。我最终使用了该库。API 16和API 18分别引入了MediaExtractor和MediaMuxer类,因此它们对于我的项目来说太新了 此方法的警告是,在编写时,音频源必须是aac或mp3文件,视频文件必须是mp4文件 使用Android Studio和Gradle,您可以
uriaudiouri
和urivideouri
,分别指向音频文件(用户拥有的任何格式)和视频文件(mp4)的位置。视频和音频的长度相同
我想创建一个与视频文件具有相同视频/帧的视频文件,但将音频文件用作配乐。我最终使用了该库。API 16和API 18分别引入了MediaExtractor
和MediaMuxer
类,因此它们对于我的项目来说太新了
此方法的警告是,在编写时,音频源必须是aac或mp3文件,视频文件必须是mp4文件
使用Android Studio和Gradle,您可以像这样安装和使用它:
打开Gradle脚本->build.Gradle(模块:app)
并添加到依赖项
块的末尾
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
开头的一种
由您处理异常并定义自解释字符串
outputFile
、audioFile
和videoFile
您是否尝试过使用该类提取视频曲目,然后使用该类将其与音频曲目混合?@Michael MediaMuxer类是在API 18中添加的,我的应用程序是针对API 10+的。我想你应该看看第三方解决方案,比如ffmpeg。@Michael我是用mp4parser
开发的,我正忙着写答案。