Java截取視頻文件縮略圖

 2023-12-25 阅读 25 评论 0

摘要:/** * 截取視頻第0幀的圖片 */public static void videoImage(String filePath, String fileName,int widthdist, int heightdist) throws FrameGrabber.Exception { File targetDir = new File(filePath + FS_FILE_APP_PATH); if (!targetDir.exists()) { targetDir.
/**
* 截取視頻第0幀的圖片
*/
public static void videoImage(String filePath, String fileName,int widthdist, int heightdist) throws FrameGrabber.Exception {
File targetDir = new File(filePath + FS_FILE_APP_PATH);
if (!targetDir.exists()) {
targetDir.mkdirs();
}
FFmpegFrameGrabber ff = FFmpegFrameGrabber.createDefault(filePath + fileName);

ff.start();
int ffLength = ff.getLengthInFrames();
org.bytedeco.javacv.Frame f;
int i = 0;
while (i < ffLength) {
f = ff.grabImage();
//截取第0幀
if(i==0){
//執行截圖并放入指定位置
doExecuteFrame(f, filePath + FS_FILE_APP_PATH + fileName.substring(0,fileName.lastIndexOf(".")) + ".jpg",widthdist,heightdist);
break;
}
i++;
}
ff.stop();

}
/**
* 截取縮略圖
*/
private static void doExecuteFrame(org.bytedeco.javacv.Frame f, String targerFilePath,int widthdist, int heightdist) {
String imagemat = "jpg";
if (null == f ) {
return;
}
Java2DFrameConverter converter = new Java2DFrameConverter();
BufferedImage bi = converter.getBufferedImage(f);
try {
ByteArrayOutputStream os = new ByteArrayOutputStream();
ImageIO.write(bi, imagemat, os);
InputStream is = new ByteArrayInputStream(os.toByteArray());
// 開始讀取文件并進行壓縮
Image src = ImageIO.read(is);

// 構造一個類型為預定義圖像類型之一的 BufferedImage
BufferedImage tag = new BufferedImage((int) widthdist, (int) heightdist, BufferedImage.TYPE_INT_RGB);

//繪制圖像 getScaledInstance表示創建此圖像的縮放版本,返回一個新的縮放版本Image,按指定的width,height呈現圖像
//Image.SCALE_SMOOTH,選擇圖像平滑度比縮放速度具有更高優先級的圖像縮放算法。
tag.getGraphics().drawImage(src.getScaledInstance(widthdist, heightdist, Image.SCALE_SMOOTH), 0, 0, null);

//創建文件輸出流
FileOutputStream out = new FileOutputStream(targerFilePath);
//將圖片按JPEG壓縮,保存到out中
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
encoder.encode(tag);
//關閉文件輸出流
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}

//調用
videoImage(bootdoConfig.getUploadPath()+floderPath, fileName,100,100);

//pom文件添加依賴
<!--javacv 精簡版本 ffmpeg -->
<dependency>
<groupId>org.bytedeco</groupId>
<artifactId>javacv</artifactId>
<version>1.3.1</version>
<exclusions>
<exclusion>
<groupId>org.bytedeco.javacpp-presets</groupId>
<artifactId>*</artifactId>
</exclusion>
</exclusions>
</dependency>

<dependency>
<groupId>org.bytedeco.javacpp-presets</groupId>
<artifactId>ffmpeg</artifactId>
<version>3.2.1-1.3</version>
</dependency>
<dependency>
<groupId>org.bytedeco.javacpp-presets</groupId>
<artifactId>ffmpeg</artifactId>
<version>3.2.1-1.3</version>
<classifier>windows-x86_64</classifier>
</dependency>
<dependency>
<groupId>org.bytedeco.javacpp-presets</groupId>
<artifactId>ffmpeg</artifactId>
<version>3.2.1-1.3</version>
<classifier>linux-x86_64</classifier>
</dependency>

轉載于:https://www.cnblogs.com/liw66/p/10190149.html

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/5/194909.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息