0

問題文: ユーザーのギャラリーから画像を取得し、それらを結合してビデオ ファイルを作成し、バックグラウンド ミュージックを追加する必要がある Android アプリを設計しています。jcodec ライブラリを使用して、画像リソースを使用して mp4 ビデオ ファイルを作成しました (ギャラリーから画像を取得して ImageViews に表示し、それらからビットマップを作成する方法を知っています)。私はmp4ファイルを持っています。ここで、mp3 ファイルを使用してバックグラウンド ミュージックを追加したいと考えています。

誰でもこれで私を助けることができますか?jcodecを使用して追加できないか、少なくともその方法がわかりません。このジョブを実行できる任意のライブラリを使用できますが、ndk を使用したくないため、Java にする必要があります。Java用にffmpegとopencvを試しましたが、アプリのサイズが15MB以上増加し、jcodecはすでにmp4ファイルを作成する作業の半分を完了しています。

mp4 ファイルの作成に使用したコードを提供できます。前もって感謝します。

4

1 に答える 1

1

MP4にmp3JCODEC追加することはサポートしていないと思いますが、mp4にmp3を追加することはサポートしていますJAVACV

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

        }
于 2014-08-08T11:32:35.473 に答える