前⾔
只是最近碰到有这⽅⾯的项⽬需求,所以简单 Mark 下本⽂。下⾯的⽰例是参考过他⼈分享的⽂章,之后本⼈再⾃⾏实践、调整和测试过的,希望对有这⽅⾯需求的⼈有所帮助。⽰例添加依赖
上述这段 maven 依赖包含了完整的 javacv 功能 (⾮常多,依赖Jar就占⼤概有500MB),由于这⾥只使⽤到了其中 ffmpeg 这块的特性,因此也可以像下⾯这样排除掉⽆关的部分
核⼼代码获取视频时长
/**
* 获取视频时长,单位为秒 *
* @param video 源视频⽂件 * @return 时长(s) */
public static long getVideoDuration(File video) { long duration = 0L;
FFmpegFrameGrabber ff = new FFmpegFrameGrabber(video); try {
ff.start();
duration = ff.getLengthInTime() / (1000 * 1000); ff.stop();
} catch (FrameGrabber.Exception e) {
e.printStackTrace(); }
return duration; }
截取视频指定帧为图⽚
/**
* 截取视频获得指定帧的图⽚ *
* @param video 源视频⽂件 * @param picPath 截图存放路径 */
public static void getVideoPic(File video, String picPath) {
FFmpegFrameGrabber ff = new FFmpegFrameGrabber(video); try {
ff.start();
// 截取中间帧图⽚(具体依实际情况⽽定) int i = 0;
int length = ff.getLengthInFrames(); int middleFrame = length / 2; Frame frame = null; while (i < length) {
frame = ff.grabFrame();
if ((i > middleFrame) && (frame.image != null)) { break; } i++; }
// 截取的帧图⽚
Java2DFrameConverter converter = new Java2DFrameConverter(); BufferedImage srcImage = converter.getBufferedImage(frame); int srcImageWidth = srcImage.getWidth(); int srcImageHeight = srcImage.getHeight(); // 对截图进⾏等⽐例缩放(缩略图) int width = 480;
int height = (int) (((double) width / srcImageWidth) * srcImageHeight);
BufferedImage thumbnailImage = new BufferedImage(width, height, BufferedImage.TYPE_3BYTE_BGR);
thumbnailImage.getGraphics().drawImage(srcImage.getScaledInstance(width, height, Image.SCALE_SMOOTH), 0, 0, null); File picFile = new File(picPath);
ImageIO.write(thumbnailImage, \"jpg\ ff.stop();
} catch (IOException e) { e.printStackTrace(); } }
测试⽤例
public static void main(String[] args) {
String videoPath = ResourceUtils.CLASSPATH_URL_PREFIX + \"video.mp4\"; File video = null; try {
video = ResourceUtils.getFile(videoPath); } catch (FileNotFoundException e) { e.printStackTrace(); }
String picPath = \"video.jpg\"; getVideoPic(video, picPath);
long duration = getVideoDuration(video);
System.out.println(\"videoDuration = \" + duration); }
以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持。
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- yrrf.cn 版权所有 赣ICP备2024042794号-2
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务