安卓-合并两个MP4文件

6

我正在编写一个Android项目,其中我正在录制多个音频文件。因此,我设置了以下参数。录音正常运行。

recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
recorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);

我的问题是每次录制时,输出都会写入一个单独的文件。现在,我需要将这些文件合并为一个文件。有人知道如何在Android项目中合并多个MPEG 4文件吗?
谢谢你的帮助...

你想要合并MP4文件或者将音频与MP4文件合并吗? - Dinesh
https://dev59.com/zGsy5IYBdhLWcg3w3Rvc - Venky
https://dev59.com/h13Va4cB1Zd3GeqPBo4m - Venky
我想将从MediaRecorder获取的mp4文件合并。 - user1463683
你好朋友,我有一个问题,需要合并两个MPEG_4文件。你有解决方案吗?请帮帮我。 - M.A.Murali
2个回答

8
我建议使用我的mp4parser库,这样您就不必处理本地库。请查看AppendExample,它可以完全实现您想要做的事情。请注意最新版本。请参考下面的AppendExample以了解其工作原理。
    Movie[] inMovies = new Movie[]{MovieCreator.build(Channels.newChannel(AppendExample.class.getResourceAsStream("/count-deutsch-audio.mp4"))),
            MovieCreator.build(Channels.newChannel(AppendExample.class.getResourceAsStream("/count-english-audio.mp4")))};

    List<Track> videoTracks = new LinkedList<Track>();
    List<Track> audioTracks = new LinkedList<Track>();

    for (Movie m : inMovies) {
        for (Track t : m.getTracks()) {
            if (t.getHandler().equals("soun")) {
                audioTracks.add(t);
            }
            if (t.getHandler().equals("vide")) {
                videoTracks.add(t);
            }
        }
    }

    Movie result = new Movie();

    if (audioTracks.size() > 0) {
        result.addTrack(new AppendTrack(audioTracks.toArray(new Track[audioTracks.size()])));
    }
    if (videoTracks.size() > 0) {
        result.addTrack(new AppendTrack(videoTracks.toArray(new Track[videoTracks.size()])));
    }

    IsoFile out = new DefaultMp4Builder().build(result);

    FileChannel fc = new RandomAccessFile(String.format("output.mp4"), "rw").getChannel();
    fc.position(0);
    out.getBox(fc);
    fc.close();

1
我已经放置了isoviewer-2.0-RC-22.jar库,但在复制代码后,它显示AppendExample.class不存在。我需要创建它吗?还是这个类是从库中获取的? - rosu alin
1
你只需要将类路径添加到程序中,我会用它来访问。 - Sebastian Annies
mp4parser 库在 Android 上无法处理超过 2 个文件! - Alin
@SebastianAnnies 我尝试使用你的代码,但卡在了一个点上,真的希望你能帮我完成这个任务... 请问你能否帮我解释一下如何使用你的API编写代码来连接两个视频文件?例如,我有两个文件 vid_1.mp4 和 vid_2.mp4,它们会合并成一个名为 vid_3.mp4 的文件。 - Kumar Vivek Mitra
不错。包含isoparser有点繁琐,但目前我所见过的非本地解决方案只有这个。 - njzk2
显示剩余2条评论

1
在Android中,没有任何内置功能可以合并两个音频文件。如果你通过文件操作来完成它,那也不会起作用,因为音频文件的头部不同。
我建议你在Android应用中使用一个外部库FFMPEG

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接