您的位置:首页 > 编程语言 > Java开发

java 实现视频转换通用工具类:视频截图-Ffmpeg(四)

2013-09-12 10:02 786 查看


java 实现视频转换通用工具类:获取视频元数据信息(一)


java 实现视频转换通用工具类:视频相互转换-总方法及Mencoder(二)



java 实现视频转换通用工具类:视频相互转换-Ffmpeg(三)



1.ffmpeg 截图,自定义命令行

/**
*  ffmpeg 截图,自定义命令行
* @param srcVideoPath 源文件
* @param shellLine 自定义shell命令行
* @param tarImagePath 目标文件
* @return
*/
public static boolean processFfmpegImage(String srcVideoPath,String shellLine,String tarImagePath) {
if (!checkfile(srcVideoPath)) {
logger.error("【" + srcVideoPath + "】  不存在 !");
return false;
}
List<String> commend = new java.util.ArrayList<String>();

commend.add(ffmpegPath);

commend.add("-i");

commend.add(srcVideoPath);

commend.add(shellLine);

commend.add(tarImagePath);

try {
ProcessBuilder builder = new ProcessBuilder();
builder.command(commend);
Process process = builder.start();
InputStream is = process.getErrorStream();
InputStreamReader inputStreamReader = new InputStreamReader(is);
BufferedReader inputBufferedReader = new BufferedReader(
inputStreamReader);
String line = null;
StringBuilder stringBuilder = new StringBuilder();
while ((line = inputBufferedReader.readLine()) != null) {
stringBuilder.append(line);
}
inputBufferedReader.close();
inputBufferedReader = null;
inputStreamReader.close();
inputStreamReader = null;
is.close();
is = null;
if (!checkfile(tarImagePath)) {
logger.info(tarImagePath + " is not exit! processFfmpegImage 转换不成功 !");
return false;
}
return true;
} catch (Exception e) {
logger.error("【" + srcVideoPath + "】  processFfmpegImage 转换不成功 !");
return false;
}
}


2.ffmpeg 截图,并指定图片的大小

/**
* ffmpeg 截图,并指定图片的大小
* @param srcVideoPath
* @param tarImagePath 截取后图片路径
* @param width 截图的宽
* @param hight 截图的高
* @param offsetValue 表示相对于文件开始处的时间偏移值 可以是分秒
* @param vframes 表示截图的桢数
*
* @return
*/
public static boolean processFfmpegImage(String srcVideoPath,String tarImagePath,int width,int hight,float offsetValue,float vframes) {
if (!checkfile(srcVideoPath)) {
logger.error("【" + srcVideoPath + "】  不存在 !");
return false;
}
List<String> commend = new java.util.ArrayList<String>();

commend.add(ffmpegPath);

commend.add("-i");

commend.add(srcVideoPath);

commend.add("-y");

commend.add("-f");

commend.add("image2");

commend.add("-ss");

commend.add(offsetValue+"");  //在视频的某个插入时间截图,例子为5秒后

commend.add("-vframes");

commend.add(vframes + "");  //截图的桢数

commend.add("-s");

commend.add(width + "x" +hight); //截图的的大小

commend.add(tarImagePath);

try {
ProcessBuilder builder = new ProcessBuilder();
builder.command(commend);
Process process = builder.start();
doWaitFor(process);
process.destroy();
if (!checkfile(tarImagePath)) {
logger.info(tarImagePath + " is not exit!  processFfmpegImage 转换不成功 !");
return false;
}
return true;
} catch (Exception e) {
logger.error("【" + srcVideoPath + "】 processFfmpegImage  转换不成功 !");
return false;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: