I didnt compiled FFMPEG, simply I used javacv for android and resolved my problem to combine audio and image and make it as video file.
Steps:
First Follow the steps provided here and then place the below code in your activity and make sure that to change the path of input files and output file.
new AsyncTask<Void, Void, Void>() {
ProgressDialog dialog;
FFmpegFrameRecorder recorder;
protected void onPreExecute() {
dialog = new ProgressDialog(RecordActivity.this);
dialog.setMessage("Genrating video, Please wait.........");
dialog.setCancelable(false);
dialog.show();
};
@Override
protected Void doInBackground(Void... arg0) {
File folder = Environment.getExternalStorageDirectory();
String path = folder.getAbsolutePath() + "/DCIM/Camera";
// ArrayList<String> paths = (ArrayList<String>) getListOfFiles(path, "jpg");
long millis = System.currentTimeMillis();
videoPath = path + "/" + "test_sham_"+millis+".3gp";
try {
//audio grabber
FrameGrabber grabber2 = new FFmpegFrameGrabber(folder.getAbsolutePath()+"/Samsung/Music/Over_the_horizon.mp3");
//video grabber
FrameGrabber grabber1 = new FFmpegFrameGrabber(path+"/20140527_133034.jpg");
grabber1.start();
grabber2.start();
recorder = new FFmpegFrameRecorder(path
+ "/" + "test_sham_"+millis+".3gp", grabber1.getImageWidth(), grabber1.getImageHeight(),2);
//recorder.setVideoCodec(5);
recorder.setVideoCodec(avcodec.AV_CODEC_ID_MPEG4);
// recorder.setVideoCodec(avcodec.AV_CODEC_ID_MP4ALS);
recorder.setFormat("3gp");
// recorder.setFormat("mp4");
recorder.setFrameRate(frameRate);
recorder.setSampleRate(grabber2.getSampleRate());
recorder.setVideoBitrate(30);
startTime = System.currentTimeMillis();
recorder.start();
Frame frame1, frame2 = null;
while ((frame1 = grabber1.grabFrame()) != null ||
(frame2 = grabber2.grabFrame()) != null) {
recorder.record(frame1);
recorder.record(frame2);
}
recorder.stop();
grabber1.stop();
grabber2.stop();
System.out.println("Total Time:- " + recorder.getTimestamp());
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
protected void onPostExecute(Void result) {
dialog.dismiss();
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(Uri.parse(videoPath), "video/3gp");
startActivity(intent);
Toast.makeText(RecordActivity.this, "Done:::"+videoPath, Toast.LENGTH_SHORT)
.show();
};
}.execute();
For references:ref1, ref2