help wantedquestion
Repository metrics
- Stars
- (6,985 stars)
- PR merge metrics
- (No merged PRs in 30d)
Description
A JVM crash occurred when I extracted the webm video and mp4 video frame by frame, and then merged and recorded them into a new video.This error only occurs when the program is deployed in a docker container and has never appeared on Windows. Here is my code `String inputWebmFile = "C:\Users\viruser.v-desktop\Desktop\1webm.mp4"; String inputMp4File = "C:\Users\viruser.v-desktop\Desktop\1mp4.mp4"; String outputMp4File = "output.mp4";
FFmpegFrameGrabber grabberMp4 = new FFmpegFrameGrabber(inputMp4File);
grabberMp4.setPixelFormat(AV_PIX_FMT_RGBA);
grabberMp4.setVideoCodec(avcodec.AV_CODEC_ID_H264);
FFmpegFrameGrabber grabberWebm = new FFmpegFrameGrabber(inputWebmFile);
grabberWebm.setVideoCodecName("libvpx-vp9");
grabberWebm.setPixelFormat(AV_PIX_FMT_BGRA);
try (OpenCVFrameConverter.ToMat webmConverter = new OpenCVFrameConverter.ToMat();
OpenCVFrameConverter.ToMat mp4Converter = new OpenCVFrameConverter.ToMat();) {
grabberMp4.start();
grabberWebm.start();
FrameRecorder recorder = new FFmpegFrameRecorder(outputMp4File, grabberMp4.getImageWidth(), grabberMp4.getImageHeight());
recorder.setVideoCodec(avcodec.AV_CODEC_ID_H264);
recorder.setVideoBitrate(grabberMp4.getVideoBitrate());
recorder.setFrameRate(grabberMp4.getFrameRate());
recorder.setFormat("mp4");
recorder.start();
Frame frameMp4;
Frame frameWebm;
while ((frameMp4 = grabberMp4.grabImage()) != null) {
frameWebm = grabberWebm.grabImage();
Mat matMp4 = mp4Converter.convert(frameMp4);
if (matMp4 == null) {
continue;
}
Mat matWebm = webmConverter.convert(frameWebm);
while (Objects.isNull(matWebm) && (frameWebm = grabberWebm.grabImage()) != null) {
matWebm = webmConverter.convert(frameWebm);
}
opencv_imgproc.resize(matWebm, matWebm, new Size(300, 300));
Rect roi = new Rect(0, 0, 300, 300);
Mat back = new Mat(matMp4, roi);
matWebm.copyTo(back, matWebm);
Frame convert = webmConverter.convert(matMp4);
recorder.record(convert);
back.close();
}
grabberMp4.close();
grabberWebm.close();
recorder.close();
} catch (FrameGrabber.Exception | FrameRecorder.Exception e) {
e.printStackTrace();
}`
Here is the log