web展示視訊,如果通過直接展示,視訊是黑色照片顯示,此方法可以通過背景截取擷取到的視訊第一幀,擷取到視訊的照片,代碼如下,寫的是main方法,友善大家進行測試與修改。如果對大家有用,請留言支援!
pom檔案
<!-- javacv start -->
<dependency>
<groupId>org.bytedeco</groupId>
<artifactId>javacpp</artifactId>
<version>1.4.1</version>
</dependency>
<dependency>
<groupId>org.bytedeco</groupId>
<artifactId>javacv</artifactId>
<version>1.4.1</version>
</dependency>
<dependency>
<groupId>org.bytedeco.javacpp-presets</groupId>
<artifactId>opencv-platform</artifactId>
<version>3.4.1-1.4.1</version>
</dependency>
<dependency>
<groupId>org.bytedeco.javacpp-presets</groupId>
<artifactId>ffmpeg-platform</artifactId>
<version>3.4.2-1.4.1</version>
</dependency>
<!-- javacv end -->
<dependency>
<groupId>org.bytedeco.javacpp-presets</groupId>
<artifactId>opencv-platform</artifactId>
<version>3.4.1-1.4.1</version>
</dependency>
java代碼
package com.zifeng.check.utils;
import org.bytedeco.javacv.FFmpegFrameGrabber;
import org.bytedeco.javacv.Frame;
import org.bytedeco.javacv.Java2DFrameConverter;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.awt.image.RenderedImage;
import java.io.File;
public class videoText {
public static final Logger log = LoggerFactory.getLogger(videoText.class);
public static String getTempPath(String tempPath, String filePath) throws Exception {
// String tempPath=" ";//儲存的目标路徑
File targetFile = new File(tempPath);
if (!targetFile.getParentFile().exists()) {
targetFile.getParentFile().mkdirs();
}
File file2 = new File(filePath);
if (file2.exists()) {
log.info("檔案存在,路徑正确!");
FFmpegFrameGrabber ff = new FFmpegFrameGrabber(file2);
ff.start();
int ftp = ff.getLengthInFrames();
int flag=0;
Frame frame = null;
while (flag <= ftp) {
//擷取幀
frame = ff.grabImage();
//過濾前3幀,避免出現全黑圖檔
if ((flag>3)&&(frame != null)) {
break;
}
flag++;
}
ImageIO.write(FrameToBufferedImage(frame), "jpg", targetFile);
ff.close();
ff.stop();
}
return null;
}
private static RenderedImage FrameToBufferedImage(Frame frame) {
//建立BufferedImage對象
Java2DFrameConverter converter = new Java2DFrameConverter();
BufferedImage bufferedImage = converter.getBufferedImage(frame);
return bufferedImage;
}
public static void main(String[] args) {
try {
// getTempPath("http://jyt.fty.pw:8080/videos/guoyifang/a2966518-03dd-4a31-b05b-5c52db6baf73.mp4", "D:\\test.jpg");
getTempPath("D:\\test.jpg", "D:/videoText/1.mp4");
} catch (Exception e) {
e.printStackTrace();
}
}
}