简体   繁体   English

如何在Android中多路复用mp3和mp4文件

[英]How to multiplex mp3 and mp4 files in Android

Problem statement: I am designing an android app in which I have to get images from the user's gallery, combine them to make a video file and add background music. 问题陈述:我正在设计一个Android应用程序,在该应用程序中,我必须从用户的图库中获取图像,将其组合以制作视频文件并添加背景音乐。 I have used jcodec library to create mp4 video file using my image resources (I know how to get images from gallery and show them in ImageViews and create bitmaps from them). 我已经使用jcodec库使用图像资源来创建mp4视频文件(我知道如何从图库中获取图像并将其显示在ImageViews中并从中创建位图)。 I have a mp4 file. 我有一个mp4文件。 Now, I want to add background music in it using a mp3 file. 现在,我想使用mp3文件在其中添加背景音乐。

Please can anybody help me with this? 请有人可以帮助我吗? I cannot add it using jcodec or atleast I don't know how to do that. 我不能使用jcodec或至少添加它,我不知道该怎么做。 I can use any library that can do this job but it should be in Java because I don't want to use ndk. 我可以使用任何可以完成此工作的库,但是应该使用Java,因为我不想使用ndk。 I tried ffmpeg and opencv for java but it increased the size of my app by more than 15MB and jcodec has already done half job of making a mp4 file. 我为Java尝试了ffmpeg和opencv,但它使我的应用程序的大小增加了15MB以上,并且jcodec已经完成了制作mp4文件的一半工作。

I can give you the code that I used to make mp4 file. 我可以给你我用来制作mp4文件的代码。 Thanks in advance. 提前致谢。

I think JCODEC not support add mp3 in MP4 .But JAVACV Support add mp3 in mp4 . 我认为JCODEC不支持在MP4中添加mp3 ,但是JAVACV支持在mp4中添加mp3

download JAVACV from this link https://github.com/bytedeco/javacv . 从此链接https://github.com/bytedeco/javacv下载JAVACV

this library support Create video from Images and also add mp3 in mp4 . 该库支持从图像创建视频,并在mp4中添加mp3

code for add mp3 in mp4. 在mp4中添加mp3的代码。

Note: it's may not work for create mp4 from JCODEC, create mp4 using JAVACV 注意:它可能不适用于从JCODEC创建mp4,使用JAVACV创建mp4

FrameGrabber grabber1 = new FFmpegFrameGrabber(videoPath);
            FrameGrabber grabber2 = new FFmpegFrameGrabber(audioPath);
            grabber1.start();
            grabber2.start();
            FrameRecorder recorder = new FFmpegFrameRecorder(OutputPath,
                    grabber1.getImageWidth(), grabber1.getImageHeight(), 2);
            recorder.setFormat("mp4");
            recorder.setVideoQuality(1);
            recorder.setFrameRate(grabber1.getFrameRate());
            recorder.setSampleRate(grabber2.getSampleRate());
            recorder.start();
            Frame frame1, frame2 = null;
            long timestamp = -2;
            int count = 0;
            boolean isFirstTime = false;
            boolean isFirstCheck = true;
            while ((frame1 = grabber1.grabFrame())!=null) {
                //frame1 = grabber1.grabFrame();
                frame2 = grabber2.grabFrame();
                recorder.record(frame1);
                recorder.record(frame2);

                }
            recorder.stop();
            grabber1.stop();
            grabber2.stop();
    } catch (org.bytedeco.javacv.FrameGrabber.Exception e) {
            e.printStackTrace();
        } catch (Exception e1) {

        }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM