Como multiplexar arquivos mp3 e mp4 no Android

Declaração do problema: Estou desenvolvendo um aplicativo para Android no qual preciso obter imagens da galeria do usuário, combiná-las para criar um arquivo de vídeo e adicionar música de fundo. Eu usei a biblioteca jcodec para criar o arquivo de vídeo mp4 usando meus resources de imagem (eu sei como obter imagens da galeria e mostrá-las no ImageViews e criar bitmaps a partir delas). Eu tenho um arquivo mp4. Agora, quero adicionar música de fundo usando um arquivo mp3.

Por favor, alguém pode me ajudar com isso? Eu não posso adicioná-lo usando jcodec ou pelo menos eu não sei como fazer isso. Eu posso usar qualquer biblioteca que possa fazer este trabalho, mas deve estar em Java, porque eu não quero usar o ndk. Eu tentei ffmpeg e opencv para java mas aumentou o tamanho do meu aplicativo em mais de 15MB e jcodec já fez meio trabalho de fazer um arquivo mp4.

Eu posso te dar o código que eu usei para fazer o arquivo mp4. Desde já, obrigado.

Eu acho que JCODEC não suporta adicionar mp3 em MP4 .Mas o Suporte JAVACV adiciona mp3 em mp4 .

faça o download do JAVACV neste link https://github.com/bytedeco/javacv .

este suporte de biblioteca Criar vídeo a partir de imagens e também adicionar mp3 em mp4 .

código para adicionar mp3 em mp4.

Nota: pode não funcionar para criar mp4 de JCODEC, criar mp4 usando JAVACV

 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) { }