수요 우선, 배경
우리는 (썸네일)도 커버를 업로드 파일로 비디오에서 프레임을 차단해야
항아리의 둘째, 도입
1.maven 아래에 소개
<- 시작 :! 비디오 화상 프레임을 획득 ->
<의존성>
<의 groupId> org.bytedeco </의 groupId>
<artifactId를> javacv </ artifactId를>
<version>은 1.4.3 </ 버전>
</ 의존성>
<의존성>
<의 groupId> org.bytedeco.javacpp - 사전 </를의 groupId>
<artifactId를>는 FFmpeg 플랫폼 </를 artifactId를>
<버전> 4.0.2-1.4.3 </ 버전>
</ 의존성>
<! - 끝 : 비디오 화상 프레임을 획득 ->
2.gradle하에 도입
/ * 시작 : 비디오 프레임 * / 영상의 획득
grab_video_1 = "javacv : org.bytedeco 1.4.3"]
grab_video_2 = "org.bytedeco.javacpp-설정 : FFmpeg은 플랫폼 : 4.0.2-1.4. 3 ']
/ * 끝 : 영상 획득 픽처 프레임 * /
종속 {
grab_video_1, grab_video_2 컴파일
}
세 가지 도구
1 개 가이드 패키지
수입 org.bytedeco.javacv.FFmpegFrameGrabber;
수입 org.bytedeco.javacv.Frame;
수입 org.bytedeco.javacv.Java2DFrameConverter;
수입 javax.imageio.ImageIO;
수입 java.awt.image.BufferedImage;
java.util.UUID 가져 오기;
java.io.File에 가져 오기;
2. 코드
/ **
* 추출 사진 : 지정 프레임
*
* @param적인 filePath 비디오 파일 주소
파라미터 : tempPath 임시 파일 주소
* /
공공 문자열 grabImg (문자열적인 filePath, 문자열 temppath) {
IF (StringUtils.isBlank (적인 filePath)) {
는 null;
}
TEMPFILE = 새로운 새로운 파일 (파일 경로를) 파일;
IF {(tempFile.exists ()!)
는 null을;
}
// 경로 마지막으로 획득 한 썸네일
문자열 appointFramePicture = "";
// 개체 프레임
프레임 프레임 = NULL을;
/ / 식별 : 처음 몇 프레임
깃발 = 0에서 int로,
은 try {
// 가져 오기 비디오 파일
= 새 새 FFmpegFrameGrabber fFmpegFrameGrabber FFmpegFrameGrabber (적인 filePath);
fFmpegFrameGrabber.start은 ();
// 프레임의 총 수를 가져옵니다
INT = fFmpegFrameGrabber.getLengthInFrames FTP를 ();
그동안을 (플래그 <= FTP) {
프레임 fFmpegFrameGrabber.grabImage = ();
//위한 다섯 번째 비디오 프레임이 처리 된
IF (프레임! = NULL을 && 플래그 ==. 5) {
// 이미지 파일 경로
appointFramePicture = tempPath + Win32 시스템 + UUID.randomUUID ( ). toString () + "_"+ 한 String.valueOf을 ( + ".JPG") 플래그;
// 파일 저장 오브젝트
파일 출력 = 새로운 파일 (appointFramePicture) ;
ImageIO.write (frameToBufferedImage (프레임), "JPG", 출력);
단절;
}
플래그 ++;
}
fFmpegFrameGrabber.stop ();
fFmpegFrameGrabber.close ();
} 캐치 (예외 전자) {
e.printStackTrace ();
}
appointFramePicture를 반환;
}
공용 static BufferedImage의 frameToBufferedImage (프레임 프레임) {
//创建BufferedImage의对象
Java2DFrameConverter 변환기 = 새로운 Java2DFrameConverter ();
BufferedImage의 BufferedImage의 converter.getBufferedImage = (프레임);
BufferedImage를 반환;
}