Skip to content

JavaCV

Java interface to OpenCV and more.

Merging 2 videos using JavaCV, second video has no sound

아래의 예제는, 하나의 MP3, 세 개의 비디오를 JavaCV를 사용하여 연결하는 방법이다.

try {
    FrameGrabber mp3Grabber = new FFmpegFrameGrabber(MOVIE_INTRO_BGM_PATH);
    mp3Grabber.start();

    FrameGrabber grabber1 = new FFmpegFrameGrabber(kIntroMoviePath);
    grabber1.start();
    FrameGrabber grabber2 = new FFmpegFrameGrabber(kMainMoviePath);
    grabber2.start();
    FrameGrabber grabber3 = new FFmpegFrameGrabber(kEndingMoviePath);
    grabber3.start();

    int audioChannels = mp3Grabber.getAudioChannels();
    int sampleFormat = mp3Grabber.getSampleFormat();
    int sampleRate = mp3Grabber.getSampleRate();

    FrameRecorder recorder2 = new FFmpegFrameRecorder(kMergeVideoPath, grabber2.getImageWidth(), grabber2.getImageHeight(),
            mp3Grabber.getAudioChannels());
    recorder2.setFrameRate(grabber2.getFrameRate());
    // recorder2.setSampleFormat(mp3Grabber.getSampleFormat());
    // recorder2.setSampleFormat(grabber2.getSampleFormat());
    recorder2.setFormat("mp4");
    recorder2.setSampleRate(mp3Grabber.getSampleRate());

    recorder2.start();

    Frame frame;
    Frame frame2;

    IplImage image;
    Buffer[] buffer;

    while ((frame = grabber1.grabFrame()) != null) {
        frame2 = mp3Grabber.grabFrame();
        recorder2.record(frame2);
        recorder2.record(frame);
        grabber1.getFrameNumber());
    }
    Log.i("mergeVideo", "after while1");
    while ((frame = grabber2.grabFrame()) != null) {
        frame2 = mp3Grabber.grabFrame();
        recorder2.record(frame2);
        recorder2.record(frame);
        Log.i("mergeVideo", "while2");
    }
    Log.i("mergeVideo", "Recorder.stop");
    while ((frame = grabber3.grabFrame()) != null) {
        frame2 = mp3Grabber.grabFrame();
        recorder2.record(frame2);
        recorder2.record(frame);
        Log.i("mergeVideo", "while3");
    }
    Log.i("mergeVideo", "Recorder.stop");
    recorder2.stop();
    grabber3.stop();
    grabber2.stop();
    grabber1.stop();

    mp3Grabber.stop();
    Log.i("mergeVideo", "end concatenate");
    successMerge = true;
} catch (com.googlecode.javacv.FrameRecorder.Exception e) {
    Log.i("mergeVideo", "FrameRecorder exception: " + e.toString());
} catch (Exception e) {
    Log.i("mergeVideo", "Unknown exception: " + e.toString());
}

See also

Favorite site