如何在 android 中以编程方式录制带有特定声音的视频?
How to video record with specific sound programmatically in android?
我已经在我的应用程序中创建了录制视频的功能。
当我播放一首歌曲时,该歌曲会与视频一起录制并创建一个视频文件,类似于 dubshmash 应用程序。
现在我面临的问题是附近的声音等其他声音也被记录下来。歌曲文件记录在视频录制屏幕中,我在视频录制 activity 启动时播放歌曲。
如何让我的应用程序只录制带有视频的歌曲?
mediaRecorder.setAudioSource(MediaRecorder.AudioSource.CAMCORDER);
mediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
mediaRecorder.setProfile(CamcorderProfile.get(CamcorderProfile.QUALITY_HIGH));
有没有办法把音源设置成喇叭,因为歌曲是通过喇叭发出来的?如果有其他可能的方式请回复我。
您可以在不调用 setAudio* 的情况下使用 MediaRecorder。
删除此行
mediaRecorder.setAudioSource(MediaRecorder.AudioSource.CAMCORDER);
见this link
目前没有办法在没有"background noise"的情况下直接记录android输出。
请注意,这是限制访问其他应用程序音频输出的安全问题,因此不太可能直接实现。
见this answer
您可以录制没有音频的视频,稍后使用 mp4 解析器合并音频:
/*
* @param videoFile path to video file
* @param audioFile path to audiofile
*/
public String mux(String videoFile, String audioFile) {
Movie video = null;
try {
video = new MovieCreator().build(videoFile);
} catch (RuntimeException e) {
e.printStackTrace();
return null;
} catch (IOException e) {
e.printStackTrace();
return null;
}
Movie audio = null;
try {
audio = new MovieCreator().build(audioFile);
} catch (IOException e) {
e.printStackTrace();
return null;
} catch (NullPointerException e) {
e.printStackTrace();
return null;
}
int size = audio.getTracks().size();
Track audioTrack = audio.getTracks().get((size - 1));
video.addTrack(audioTrack);
Container out = new DefaultMp4Builder().build(video);
File myDirectory = new File(Environment.getExternalStorageDirectory(), "/Folder Name");
if (!myDirectory.exists()) {
myDirectory.mkdirs();
}
filePath = myDirectory + "/video" + System.currentTimeMillis() + ".mp4";
try {
RandomAccessFile ram = new RandomAccessFile(String.format(filePath), "rw");
FileChannel fc = ram.getChannel();
out.writeContainer(fc);
ram.close();
} catch (IOException e) {
e.printStackTrace();
return null;
}
return filePath;
}
在build.gradle中添加如下依赖
compile 'com.googlecode.mp4parser:isoparser:1.0.5.4'
如果您想使用视频,则必须使用 FFMPEG
库
那就是您可以使用视频。
因为我已经回答了 How to use ffmpeg in android studio? 请参阅此 LINK。一步步导入你的项目
我已经在我的应用程序中创建了录制视频的功能。
当我播放一首歌曲时,该歌曲会与视频一起录制并创建一个视频文件,类似于 dubshmash 应用程序。
现在我面临的问题是附近的声音等其他声音也被记录下来。歌曲文件记录在视频录制屏幕中,我在视频录制 activity 启动时播放歌曲。
如何让我的应用程序只录制带有视频的歌曲?
mediaRecorder.setAudioSource(MediaRecorder.AudioSource.CAMCORDER);
mediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
mediaRecorder.setProfile(CamcorderProfile.get(CamcorderProfile.QUALITY_HIGH));
有没有办法把音源设置成喇叭,因为歌曲是通过喇叭发出来的?如果有其他可能的方式请回复我。
您可以在不调用 setAudio* 的情况下使用 MediaRecorder。 删除此行
mediaRecorder.setAudioSource(MediaRecorder.AudioSource.CAMCORDER);
见this link
目前没有办法在没有"background noise"的情况下直接记录android输出。
请注意,这是限制访问其他应用程序音频输出的安全问题,因此不太可能直接实现。
见this answer
您可以录制没有音频的视频,稍后使用 mp4 解析器合并音频:
/*
* @param videoFile path to video file
* @param audioFile path to audiofile
*/
public String mux(String videoFile, String audioFile) {
Movie video = null;
try {
video = new MovieCreator().build(videoFile);
} catch (RuntimeException e) {
e.printStackTrace();
return null;
} catch (IOException e) {
e.printStackTrace();
return null;
}
Movie audio = null;
try {
audio = new MovieCreator().build(audioFile);
} catch (IOException e) {
e.printStackTrace();
return null;
} catch (NullPointerException e) {
e.printStackTrace();
return null;
}
int size = audio.getTracks().size();
Track audioTrack = audio.getTracks().get((size - 1));
video.addTrack(audioTrack);
Container out = new DefaultMp4Builder().build(video);
File myDirectory = new File(Environment.getExternalStorageDirectory(), "/Folder Name");
if (!myDirectory.exists()) {
myDirectory.mkdirs();
}
filePath = myDirectory + "/video" + System.currentTimeMillis() + ".mp4";
try {
RandomAccessFile ram = new RandomAccessFile(String.format(filePath), "rw");
FileChannel fc = ram.getChannel();
out.writeContainer(fc);
ram.close();
} catch (IOException e) {
e.printStackTrace();
return null;
}
return filePath;
}
在build.gradle中添加如下依赖
compile 'com.googlecode.mp4parser:isoparser:1.0.5.4'
如果您想使用视频,则必须使用 FFMPEG
库
那就是您可以使用视频。
因为我已经回答了 How to use ffmpeg in android studio? 请参阅此 LINK。一步步导入你的项目