【问题标题】:Combine Audio with Video - Android将音频与视频相结合 - Android
【发布时间】:2015-03-25 23:12:35
【问题描述】:

我正在开发一个应用程序来捕捉视频和下载音频。我可以单独保存这些文件,但找不到将这些文件组合起来制作带音频的新视频的方法。

视频文件为 .mp4 格式,音频文件为 .mp3 格式。它们的长度完全相同。

有没有办法合并这些文件?我已经尝试过,但找不到合并两个文件的方法。

我也可以用 FFMPEG 做到这一点,但没有得到任何最好的方法来实现它。请帮帮我,我是android新手。

【问题讨论】:

    标签: android


    【解决方案1】:

    我认为MP4Parser 库很适合这种情况。我在此链接 Video Recording And Processing In Android 中找到了将音频和视频合并为单个 mp4 文件的以下示例代码。

    public class Mp4ParserAudioMuxer implements AudioMuxer {
        @Override
        public boolean mux(String videoFile, String audioFile, String outputFile) {
            Movie video;
            try {
                video = new MovieCreator().build(videoFile);
            } catch (RuntimeException e) {
                e.printStackTrace();
                return false;
            } catch (IOException e) {
                e.printStackTrace();
                return false;
            }
    
            Movie audio;
            try {
                audio = new MovieCreator().build(audioFile);
            } catch (IOException e) {
                e.printStackTrace();
                return false;
            } catch (NullPointerException e) {
                e.printStackTrace();
                return false;
            }
    
            Track audioTrack = audio.getTracks().get(0);
            video.addTrack(audioTrack);
    
            Container out = new DefaultMp4Builder().build(video);
    
            FileOutputStream fos;
    
            try {
                fos = new FileOutputStream(outputFile);
            } catch (FileNotFoundException e) {
                e.printStackTrace();
                return false;
            }
    
            BufferedWritableFileByteChannel byteBufferByteChannel = 
                new BufferedWritableFileByteChannel(fos);
    
            try {
                out.writeContainer(byteBufferByteChannel);
                byteBufferByteChannel.close();
                fos.close();
            } catch (IOException e) {
                e.printStackTrace();
                return false;
            }
    
            return true;
        }
    }
    

    如果你想通过 ffmpeg 来做,你可以使用static ffmpeg binariesyou need to build it

    【讨论】:

    • 我没有正确理解,如何合并两个文件以创建新的 mp4。还有一件事,我认为 FFMPEG 只能通过 NDK 工作,或者我们也可以通过 SDK 在 Eclipse 中集成它?请帮助我,因为我只是 Android 开发的新手。
    • @AndrewRyan 你试过代码了吗?关于 FFMpeg,我们也可以通过 SDK 进行集成。看看这个链接stackoverflow.com/questions/9605757/…
    • 是的,我已经尝试了所有这些东西,我将相机中的文件保存为 .mp4 现在我有两个文件 1 是 .mp4 和另一个 1 .mp3,现在我还需要做什么来创建新的mp4?即使我使用了上面的代码,但无法转换或创建新的 mp4 文件。
    • @AndrewRyan :- 你有结果吗?,实际上我想创建新的 mp4 文件,当合并 1 是 mp4 和另一个 1 .mp3 ..
    • @b1izzard 在这段代码中我得到了这样的异常.. :-"java.lang.NullPointerException: Attempt to invoke virtual method 'java.util.List com.coremedia.iso.boxes.MovieBox. getBoxes(java.lang.Class)' 在空对象引用上——“我该如何解决?
    猜你喜欢
    • 2016-06-13
    • 1970-01-01
    • 1970-01-01
    • 2023-01-08
    • 1970-01-01
    • 1970-01-01
    • 2019-10-07
    • 2015-03-28
    • 1970-01-01
    相关资源
    最近更新 更多