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

标签 java android mp3 mp4 jcodec

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

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

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

最佳答案

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

从此链接下载JAVACV https://github.com/bytedeco/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) {

        }

关于java - 如何在 Android 中复用 mp3 和 mp4 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25202321/

相关文章:

java catch block 导致多个输出

java - 将值传递给方法 onSuccess

Android:错误:使用未声明的标识符 'fseeko'

c++ - windows mp3 解码库 c c++

java - Java 中的 MP3 编码

python - 使用python从mp3音频文件中获取振幅数据

java - 使用父类(super class)静态方法获取子类的实例

java - 根据特定单元格值划分 Excel 工作表

android - 移动 SDK 中的 oauth 2 实现

Android:自定义 View 组中不显示膨胀 View