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

时间:2014-08-08 11:19:53

标签: java android mp3 mp4 jcodec

问题陈述: 我正在设计一个Android应用程序,我必须从用户的图库中获取图像,将它们组合成一个视频文件并添加背景音乐。我使用jcodec库使用我的图像资源创建mp4视频文件(我知道如何从图库中获取图像并在ImageViews中显示它们并从中创建位图)。我有一个mp4文件。现在,我想使用mp3文件在其中添加背景音乐。

请有人帮我这个吗?我无法使用jcodec或至少添加它我不知道该怎么做。我可以使用任何可以完成这项工作的库,但它应该是Java,因为我不想使用ndk。我尝试使用ffmpeg和opencv for java但它增加了我的应用程序的大小超过15MB并且jcodec已经完成了制作mp4文件的一半工作。

我可以给你用来制作mp4文件的代码。提前谢谢。

1 个答案:

答案 0 :(得分:1)

我认为JCODEC不支持在 MP4 中添加 mp3 。但是JAVACV支持在 mp3 > MP4

从此链接https://github.com/bytedeco/javacv下载JAVACV

此库支持从图像创建视频,并在mp4中添加mp3

在mp4中添加mp3的代码。

注意:它可能不适用于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) {

        }