Я создаю видео через последовательность изображений.5 изображений, продолжительность видео 10 секунд, а длина аудиофайла 4 минуты.когда я сливаю аудио на видео.Продолжительность видео 4 минуты.Я хочу, чтобы длиться всего 10 секунд.если я добавлю и включу в цикл while, то будут показаны только изображения, но здесь нет звукового голоса.заранее спасибо.
private String createMovie() {
folder = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM);
path = folder.getAbsolutePath() + "/Camera";
millis = System.currentTimeMillis();
videoFilePath = path + "/" + "test_sham_" + /*millis +*/ ".3gp";
audioFilePath = path + "/qe.mp3";
finalVideoPath = path + "/" + "test_shamm_" + /*millis +*/ ".3gp";
try {
FFmpegFrameRecorder recorder = new FFmpegFrameRecorder(videoFilePath, 1280, 720);
OpenCVFrameConverter converter = new OpenCVFrameConverter() {
@Override
public Frame convert(Object o) {
return null;
}
@Override
public Object convert(Frame frame) {
return null;
}
};
recorder.setVideoCodec(avcodec.AV_CODEC_ID_MPEG4);
recorder.setVideoBitrate(10 * 1024 * 1024);
recorder.setFrameRate(1);
recorder.setVideoQuality(0);
//recorder.setPixelFormat(avutil.AV_PIX_FMT_YUV420P);
recorder.setFormat("mp4");
recorder.start();
// publishProgress(0);
int time = 2;
int number_images = imagesEncodedList.size();
// number_images = number_images * 2;
for (int i = 0; i < number_images; i++) {
for (int j = 0; j < time; j++) {
// opencv_core.IplImage image = cvLoadImage(path + "/Camera/image" + i + ".jpg");
opencv_core.IplImage image = cvLoadImage(imagesEncodedList.get(i));
Frame frame = converter.convert(image);
recorder.record(frame);
// publishProgress(25*(i+1));
}
}
recorder.stop();
// publishProgress(76);
mergeAudioAndVideo(videoFilePath, audioFilePath, finalVideoPath);
// publishProgress(100);
} catch (Exception e) {
Log.e("problem", "problem", e);
}
return /*videoFilePath; */ finalVideoPath;
}
private boolean mergeAudioAndVideo(String videoPath, String audioPath, String outPut)
throws Exception {
boolean isCreated = true;
File file = new File(videoPath);
if (!file.exists()) {
return false;
}
try {
FrameGrabber grabber1 = new FFmpegFrameGrabber(videoPath);
FrameGrabber grabber2 = new FFmpegFrameGrabber(audioPath);
grabber1.start();
grabber2.start();
FrameRecorder recorder = new FFmpegFrameRecorder(outPut, grabber1.getImageWidth(), grabber1.getImageHeight(), grabber2.getAudioChannels());
recorder.setFrameRate(grabber1.getFrameRate());
recorder.setFormat("mp4");
// recorder.setSampleFormat(grabber2.getSampleFormat());
recorder.setSampleRate(grabber2.getSampleRate());
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();
} catch (Exception e) {
e.printStackTrace();
}
return isCreated;
}