博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java将视频转为缩略图--ffmpeg
阅读量:6687 次
发布时间:2019-06-25

本文共 3312 字,大约阅读时间需要 11 分钟。

Java生成视频缩略图

对于上传视频生成缩略图使用的是ffmpeg进行生成的。

自己在网上找了如何进行编译ffmpeg的方法

但是感觉太复杂了

就到csdn上找到了编译好的ffmpeg文件

体会到ffmpeg非常强大,大部分流行的视频格式的都能生成缩略图

 

现在开始

首先下载ffmpeg解压

方法一:

建立一个bat文件

start

E:/ffmpeg/bin/ffmpeg.exe -i %1 -ss 20 -vframes 1 -r 1 -ac 1 -ab 2 -s 160*120 -f image2 %2

exit

说明下使用红色吧标记的意义

 

 

E:/ffmpeg/bin/ffmpeg.exe ffmpeg的路径

%1 %2 和C语言有点相似是为传参数保留位置

20 要截取多少秒后的图片

打开MyEclipse,建立一个工程 ,以及一个java文件

package test;

import java.io.IOException;

public class Ffmpeg {

public static void main(String[] args) {
// 视频文件
String videoRealPath = "F://ffmpeg//Wildlife.wmv";
// 截图的路径(输出路径)
String imageRealPath = "F://ffmpeg//a.jpg";
String basePath = "F://ffmpeg";
try {
// 调用批处理文件
Runtime.getRuntime().exec(
"cmd /c start " + basePath + "//ffmpeg.bat " + basePath + " " + videoRealPath + " "
+ imageRealPath);
} catch (IOException e) {
e.printStackTrace();
}
}

}

 

方法二: 

不需建立bat文件

/**

* 将视频转为缩略图 成功返回true,失败返回false
* @param exePath 可执行程序路径
* @param videoPath 视频路径
* @param imagepath 转换后图片路径
* @return
*/
public static boolean videoToImg(String exePath,String videoPath,String imagepath) {
File file = new File(videoPath);
if (!file.exists()) {
System.err.println("路径[" + videoPath + "]对应的视频文件不存在!");
return false;
}
List<String> commands = new java.util.ArrayList<String>();
commands.add(exePath);
commands.add("-i");
commands.add(videoPath);
commands.add("-ss");
// 要截取多少秒后的图片(在此截取1秒后的图片)
commands.add("1");
commands.add("-vframes");
commands.add("1");
commands.add("-r");
commands.add("1");
commands.add("-ac");
commands.add("1");
commands.add("-ab");
commands.add("2");
commands.add("-s");
commands.add("320*240");
commands.add("-f");
commands.add("image2");
commands.add(imagepath);
try {
ProcessBuilder builder = new ProcessBuilder();
builder.command(commands);
builder.start();
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}

 

 

 
public
static
void
main(String[] args)
throws
Exception{
        
//1.获取当前工程目录,获取ffmpeg.exe
        
File directory =
new
File(
"."
);
        
String root = directory.getCanonicalPath();
        
String ffmpegPath = root +
"\\ffmpeg\\ffmpeg.exe"
;
         
        
//2.看不懂的童鞋们去读幼儿园吧(执行了后,刷新一下工程,注意观察你的工程目录中的image文件夹里,和控制台打印内容,成功了吧!)
        
String videoPath=root +
"\\video\\demo.mp4"
;
        
String imagePath=root +
"\\image\\ceshi.jpg"
;
         
        
System.out.println(
"执行结果"
+getVideoImage(ffmpegPath,videoPath,imagePath));
         
    
}

 

/**
     
* 获得视频缩略图,获取成功返回true,获取失败返回false
     
* @param ffmpegPath  是ffmpeg.exe存放的路径
     
* @param path   是视频文件的存放路径
     
* @param outImagePath 输出缩略图的保存路径
     
* @return
     
*/
    
public
static
boolean
getVideoImage(String ffmpegPath,String path,String outImagePath) {
        
File file =
new
File(path);
        
if
(!file.exists()) {
//判断视频文件是否存在
            
System.err.println(
"路径["
+ path +
"]对应的视频文件不存在!"
);
            
return
false
;
        
}
        
//设置参数
        
List<string> commands =
new
java.util.ArrayList<string>();
        
commands.add(ffmpegPath);
//这里设置ffmpeg.exe存放的路径
        
commands.add(
"-i"
);
        
commands.add(path);
//这里是设置要截取缩略图的视频的路径
        
commands.add(
"-y"
);
        
commands.add(
"-f"
);
        
commands.add(
"image2"
);
        
commands.add(
"-ss"
);
        
commands.add(
"2"
);
//这里设置的是要截取视频开始播放多少秒后的图,可以自己设置时间
        
commands.add(
"-t"
);
        
commands.add(
"0.001"
);
        
commands.add(
"-s"
);
        
commands.add(
"320x240"
);
//这里设置输出图片的大小
        
commands.add(outImagePath);
//这里设置输出的截图的保存路径
     
        
try
{
            
//截取缩略图并保存 
            
ProcessBuilder builder =
new
ProcessBuilder();
            
builder.command(commands);
            
builder.start();
            
return
true
;
        
}
catch
(Exception e) {
            
e.printStackTrace();
            
return
false
;
        
}
    
}
}

转载地址:http://srhao.baihongyu.com/

你可能感兴趣的文章
我的Java学习笔记 java11-面向对象
查看>>
图解Git命令
查看>>
数组去除重复的几个方法
查看>>
XJOI NOIP模拟题1
查看>>
os._exit(), sys.exit(), exit()
查看>>
集合框架之Arrays工具类的asList()方法的使用
查看>>
Excel导入数据库,兼容Excel2003,2007
查看>>
如何创建只读权限oracle账户
查看>>
性能测试--测试流程、APDEX、linux性能知识
查看>>
win7安装virtualbox遇到的问题
查看>>
新闻发布项目——业务逻辑层(UserServiceImpl)
查看>>
PHP开发中比较容易记错的几个重要知识
查看>>
两个科幻短篇观后感
查看>>
C# 随机数类
查看>>
C# 数据类型及转换
查看>>
Linux 远程和本地的一些解决方式
查看>>
如何判断手机收有几张SIM卡
查看>>
repo简介
查看>>
转行啦,转几本.net的书。。。
查看>>
运算符 and or ont
查看>>