I am attempting to combine an Audio source with Buffered images to create a video like so:
public static void compileVideo(BufferedImage[] bufferedImages, String audioPath , String savePath) throws FFmpegFrameRecorder.Exception, FrameGrabber.Exception {
FrameGrabber grabber = new FFmpegFrameGrabber(audioPath); // need this for audio
FFmpegFrameRecorder recorder = new FFmpegFrameRecorder(savePath, 316, 100, grabber.getAudioChannels());
FFmpegLogCallback.set();
//grabber.setAudioChannels(grabber.getAudioChannels());
System.out.println(grabber.getAudioChannels());
// set up the recorder video info
recorder.setFrameRate(60);
recorder.setFormat("mp4");
recorder.setVideoQuality(0); // highest quality
// set recorder audio info
recorder.setSampleFormat(grabber.getSampleFormat());
recorder.setSampleRate(grabber.getSampleRate());
recorder.setAudioQuality(0); // highest quality
grabber.start();
recorder.start();
for (BufferedImage image: bufferedImages) {
recorder.record(Java2DFrameUtils.toFrame(image)); // convert buffered image to frame and record it
recorder.record(grabber.grabFrame()); //TODO: Grab multiple audio frames because there are more audio frames than video frames (BufferedImages)
}
recorder.stop();
grabber.stop();
}
However, it throws the following error:
Exception in thread "main" org.bytedeco.javacv.FFmpegFrameRecorder$Exception: No audio output stream (Is audioChannels > 0 and has start() been called?) (For more details, make sure FFmpegLogCallback.set() has been called.)
at org.bytedeco.javacv.FFmpegFrameRecorder.recordSamples(FFmpegFrameRecorder.java:1154)
at org.bytedeco.javacv.FFmpegFrameRecorder.record(FFmpegFrameRecorder.java:1021)
at org.bytedeco.javacv.FFmpegFrameRecorder.record(FFmpegFrameRecorder.java:1010)
at com.Lazzza.imageToVideo.compileVideo(imageToVideo.java:31)
at com.Lazzza.Main.main(Main.java:22)
grabber.getAudioChannels returns 2.
Will also note that the file format I am using is .wav
Any help would be appreciated thanks