如何在android中以编程方式录制具有特定声音的视频?

时间:2016-02-18 07:46:40

标签: android audio audio-recording video-recording

我已经创建了在我的应用中录制视频的功能。

播放歌曲时,该歌曲会录制视频并创建视频文件,类似于dubshmash应用程序。

现在我面临的问题是其他声音,例如附近的声音也被记录下来。歌曲文件记录在视频录制屏幕中,我在视频录制活动启动时播放歌曲。

如何让我的应用程序只记录带有视频的歌曲?

 mediaRecorder.setAudioSource(MediaRecorder.AudioSource.CAMCORDER);
  mediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
  mediaRecorder.setProfile(CamcorderProfile.get(CamcorderProfile.QUALITY_HIGH));

音频源中是否有任何解决方案设置为扬声器,因为歌曲声音通过扬声器?如果是另一种可能的方式请回复我。

4 个答案:

答案 0 :(得分:6)

您可以录制没有音频的视频,稍后使用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'

答案 1 :(得分:2)

您可以在不调用setAudio *的情况下使用MediaRecorder。 删除此行

mediaRecorder.setAudioSource(MediaRecorder.AudioSource.CAMCORDER);

请参阅this link

答案 2 :(得分:1)

目前没有办法直接记录没有"背景噪音"。

的android输出

请注意,限制访问其他应用音频输出是一个安全问题,因此不太可能直接实现。

请参阅this answer

答案 3 :(得分:1)

如果您想使用视频,那么您必须使用FFMPEG

这可以是你可以使用视频。

我已经回答了如何在android studio中使用ffmpeg?请参阅此LINK。一步一步地导入项目