我想用javacv生成缩略图,但是这有个问题让人很恼火:程序运行时没有问题,但是当程序结束时就会打印如下视频信息,从九点多研究到现在,还没搞清楚是啥情况,求告知!!
错误信息如下:
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'C:\Users\24686\Videos\Captures\QQ录屏20211219201536.mp4':
Metadata:
major_brand : isom
minor_version : 512
compatible_brands: isomiso2mp41
encoder : Lavf57.83.100
Duration: 00:03:16.92, start: 0.000000, bitrate: 42727 kb/s
Stream #0:0(und): Video: mpeg4 (Simple Profile) (mp4v / 0x7634706D), yuv420p, 1918x1078 [SAR 1:1 DAR 137:77], 42394 kb/s, 21.33 fps, 24.67 tbr, 90k tbn, 25 tbc (default)
Metadata:
handler_name : VideoHandler
Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 328 kb/s (default)
Metadata:
handler_name : SoundHandler
程序如下:
public static void main(String[] args) {
String dir = "C:\\Users\\24686\\Videos\\Captures\\";
try {
VideoImgUtil.createVideoImg(
new File(dir,"QQ录屏20211219201536.mp4"),
new File(dir,"QQ录屏20211219201536.png"),
7);
} catch (FrameGrabber.Exception e) {
System.out.println("xxxxxxxxxx");
}
}
/**
* 创建视频缩略图
* @param video 视频文件
* @param target 存放地址
* @param offset 偏移帧数,从offset开始
*/
public static void createVideoImg(File video, File target, int offset) throws FrameGrabber.Exception {
FFmpegFrameGrabber ff = FFmpegFrameGrabber.createDefault(video);
ff.start();
int ffLength = ff.getLengthInFrames();
int i = 0;
Frame f;
while (i < ffLength) {
i++;
f = ff.grabImage();
if((i>offset) && (f.image != null)){
doExecuteFrame(f,target);
break;
}
}
ff.close();
}
/**
* 截取缩略图
*/
private static void doExecuteFrame(Frame f, File target) {
if (null == f || null == f.image) {
return;
}
Java2DFrameConverter converter = new Java2DFrameConverter();
BufferedImage bi = converter.getBufferedImage(f);
try {
ImageIO.write(bi, "png", target);
} catch (IOException e) {
e.printStackTrace();
}
}