上传视频之后,有的需要显示缩略图,而不是仅仅显示视频名称的列表,这时候就需要对上传的视频截取缩略图。

简单粗暴点,将以下代码作为工具类复制粘贴即可;

package com.util;

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List; import com.constant.Constant; public class FfmpegUtil { /**
* 获取ffmpeg工具路径
* **/
public static String getFFmpegPath(){
String ffpath = "D:\\Video\\ffmpeg\\";
return ffpath ;
} /**
* @author wya
*2015年9月8日
*使用FFPEG命令需将ffpeg加入到环境变量PATH
*@param command 需要执行的cmd命令
*/
public void runCmd(String command) {
try {
Runtime rt = Runtime.getRuntime();
Process proc = rt.exec(command);
InputStream stderr = proc.getErrorStream();//获取错误信息
InputStreamReader isr = new InputStreamReader(stderr);
BufferedReader br = new BufferedReader(isr);
String line = null; while ( (line = br.readLine()) != null)
System.out.println(line); int exitVal = proc.waitFor();
System.out.println("Process exitValue: " + exitVal);
} catch (Throwable t) {
t.printStackTrace();
}
} private static String inputPath = ""; private static String outputPath = ""; private static String ffmpegPath = ""; private static String FFMPEG=getFFmpegPath()+Constant.TOOLS_FFMPEG;
private static String FFPLAY=getFFmpegPath()+Constant.TOOLS_FFPLAY;
private static String FFPROBE=getFFmpegPath()+Constant.TOOLS_FFPROBE;
private static String RTMPDUMP=getFFmpegPath()+Constant.TOOLS_RTMPDUMP; /**
* 测试方法
* @author wya
*2015年9月8日
*@param args
*/
public static void main(String[] args) {
String ss = getFFmpegPath();
System.out.print(ss);
boolean a2 = saveVideoImg("D:\\sp\\1.mp4","D:\\sp\\1.jpg", "3", "320x240");
} /**
* 视频截图
* @author wya
*2015年9月11日
*@param videoFile rtmp://s2pchzxmtymn2k.cloudfront.net/cfx/st/mp4:sintel.mp4
*@param imgFile
*@param 第xtime 秒
*@param pix 分辨率 320x240
*@return ffmpeg.exe -i rtmp://s2pchzxmtymn2k.cloudfront.net/cfx/st/mp4:sintel.mp4 -r 5 -ss 20 -s 150*100 c:\\video.flv
*/
public static boolean saveVideoImg(String videoFile,String imgFile,String xtime,String pix){
// String command=RTMPDUMP+" -i "+videoFile+" -y -f mjpeg -ss 3 -t 0.001 -s "+pix+" "; List<String> commend = new ArrayList<String>();
commend.add(FFMPEG);
commend.add("-i");
commend.add(videoFile);
commend.add("-y");
commend.add("-f");
commend.add("mjpeg");
commend.add("-ss");
commend.add(xtime);
commend.add("-t");
commend.add("0.001");
commend.add("-s");
commend.add(pix);
commend.add(imgFile);
try {
ProcessBuilder builder = new ProcessBuilder();
Process proc = builder.command(commend).redirectErrorStream(true).start();
InputStream stderr = proc.getErrorStream();
InputStreamReader isr = new InputStreamReader(stderr);
BufferedReader br = new BufferedReader(isr);
String line = null; while ( (line = br.readLine()) != null)
System.out.println(line); int exitVal = proc.waitFor();
System.out.println("Process exitValue: " + exitVal);
// proc.destroy();
} catch (Throwable t) {
t.printStackTrace();
return false;
}
return true;
} }

以上代码还需要在公共类中命名几个常量,代码如下:

/**
* ffmpeg相关exe名称
*/
String FFMPEG_PATH="FFMPEG_PATH";
String TOOLS_FFMPEG="ffmpeg";
String TOOLS_FFPLAY="ffplay";
String TOOLS_FFPROBE="ffprobe";
String RED5_STREAM_PATH="RED5_STREAM_PATH"; String TOOLS_RTMPDUMP="rtmpdump";

然后在这个网址https://ffmpeg.zeranoe.com/builds/下载ffmpeg,放到某个你自己认为方便的位置,并更改第一段代码中标红处,将你的exe文件的位置修改即可。

然后找一段视频,将其位置放在第二个标红处即测试代码的位置,即可。

以上代码,直接测试即可,基本上就可以用了。

如果还想找更详细的说明,请点击以下链接

http://www.tuicool.com/articles/fMRRZvY

最新文章

  1. webForm(三)——三级联动
  2. SSM环境搭建(接口编程方式)
  3. 让PHP 5.3支持MSSQL连接
  4. JavaScript要点 (三) 保留关键字
  5. ios开发——笔记篇
  6. 异步套接字基础:select函数以及FD_ZERO、FD_SET、FD_CLR、FD_ISSET
  7. shell命令实战详解
  8. Eclipse寻找JVM的机制
  9. .NET使用HttpWebRequest发送手机验证码
  10. 运行mvn install时跳过Test
  11. 小白学Maven第二篇配置Ecilpse
  12. POJ 3128 Leonardo&#39;s Notebook [置换群]
  13. System.in实现数据的键盘输入
  14. gif软件(ShareX)
  15. 【ASP.NET】System.Web.Routing - StopRoutingHandler Class
  16. SpringBoot使用Spring Initializer
  17. C++ 术语(C++ Primer)
  18. hdu 5063 操作逆推+mul每次要*2%(modo - 1)
  19. tomcat启动 报org.apache.catalina.LifecycleException异常
  20. 64_o2

热门文章

  1. java中断
  2. 使用git将本地代码传到github
  3. 笔记:Spring Cloud Zuul 快速入门
  4. c++ --&gt; 父类与子类间的继承关系
  5. 数据管理 - 每天5分钟玩转 Docker 容器技术(147)
  6. postman 简单教程-实现简单的接口测试
  7. Python3 的描述符--完整例子详细解释
  8. Java高级特性之枚举
  9. Java基础-this和super的区别
  10. JAVA委托事件处理机制