上传视频使用ffmpeg自动截取缩略图
上传视频之后,有的需要显示缩略图,而不是仅仅显示视频名称的列表,这时候就需要对上传的视频截取缩略图。
简单粗暴点,将以下代码作为工具类复制粘贴即可;
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
上传视频使用ffmpeg自动截取缩略图的更多相关文章
- ajax 异步上传视频带进度条并提取缩略图
最近在做一个集富媒体功能于一身的项目.需要上传视频.这里我希望做成异步上传,并且有进度条,响应有状态码,视频连接,缩略图. 服务端响应 { "thumbnail": "/ ...
- java使用ffmpeg实现上传视频的转码,提取视频的截图等功能
ffmpeg视频采集功能非常强大,不仅可以采集视频采集卡或USB摄像头的图像,还可以进行屏幕录制,同时还支持以RTP方式将视频流传送给支持RTSP的流媒体服务器,支持直播应用. 1.能支持的格式 ff ...
- [.NET]c#.net程序中使用ffmpeg.exe来处理视频并生成上传视频的截图
添加如下前台代码: <asp:FileUpload ID="FileUpload1" runat="server" /> <asp:Butto ...
- 七牛云上传视频并截取第一帧为图片(js实现)
本文出自APICloud官方论坛, 感谢论坛版主 东冥羽的分享. 七牛云上传视频并截取第一帧作为视频的封面图. 使用js上传,模块videoPlayer截取第一帧(有专门的截图模块,但是我使用的有点问 ...
- ASP.NET播客(留言时间,投票IP,留言限字数,上传视频)
留言发布时间功能: 界面: 前台代码: 在Datalist控件中: 在<%#getIsDate(Convert.ToString(Eval("issuanceDate"))) ...
- 微信小程序_(校园视)开发上传视频业务
微信小程序_(校园视) 开发用户注册登陆 传送门 微信小程序_(校园视) 开发上传视频业务 传送门 微信小程序_(校园视) 开发视频的展示页-上 传送门 微信小程序_(校园视) 开发视频的展示页-下 ...
- Java上传视频
页面: 上传文件时的关键词:enctype="multipart/form-data" <%@ page language="java" import=& ...
- Java上传视频(mencoder)
页面: 上传文件时的关键词:enctype="multipart/form-data" <%@ page language="java" import=& ...
- 转:解决Onethink上传视频的问题 超棒的解决方案
用过Onethink的都知道,它是不能上传视频的. 有人想到用上传附件的方式上传视频,但是结果……就是提示没有上传文件. 要是正常上传个一两兆的图片啊,压缩文件什么的还是可以的. 所以,重点来了 怎么 ...
随机推荐
- Python sort后赋值 操作陷阱
x=[1,4,2,0] # 错误的方式,因为sort没有返回值 y=x.sort() type (y) #NoneType #正确的方式 x.sort() y=x[:]
- 关于css选择器中有小数点的标签获取
需求说明 因为项目中章节配置的时候有小数点,1,1.1,1.2,1.11的标题,这个时候每一行标题的id,class设置成标题号是独一无二的标记.但是,直接用js获取是获取不到的,例如$('#3.22 ...
- Tomact高并发&Servlet线程处理
Servlet/JSP技术和ASP.PHP等相比,由于其多线程运行而具有很高的执行效率.由于Servlet/JSP默认是以多线程模式执行的,所以,在编写代码时需要非常细致地考虑多线程的安全性问题.然而 ...
- Webpack的加载器
一.什么是加载器(loaders)loaders 用于转换应用程序的资源文件,他们是运行在nodejs下的函数 使用参数来获取一个资源的来源并且返回一个新的来源(资源的位置),例如:你可以使用load ...
- 【Flask】 网站的用户管理
网站用户管理 不知道为什么很多学习Flask的人都是从搭博客开始的(大概是因为那本书的案例是博客,同时对bootstrap支持良好,bootstrap又是twitter开发的吧..)既然是搭建博客,就 ...
- Python打包工具setuptools的使用
将我们写的Python程序发布成包后,可以使其能够安装使用. 在项目上测试的时候,某些情况下,可以将Python打包,然后上传到测试服务器,安装测试. setuptools是常用的打包工具. 一个简单 ...
- [BZOJ 3813]奇数国
3813: 奇数国 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 736 Solved: 416[Submit][Status][Discuss] ...
- 【java并发系列】Fork/Join任务(转)
原文链接 当我们需要执行大量的小任务时,有经验的Java开发人员都会采用线程池来高效执行这些小任务.然而,有一种任务,例如,对超过1000万个元素的数组进行排序,这种任务本身可以并发执行,但如何拆解成 ...
- 构造函数与析构函数(construction undergoing)
构造函数和析构函数 一.构造函数: 1.普通构造函数:在对象被创建时利用特定的值构造对象,将对象初始化到一个特定的状态. 特性:构造函数的函数名和类名相同:没有返回值:在对象被创建时被自动调用:如果有 ...
- alpha冲刺第八天
一.合照 二.项目燃尽图 三.项目进展 首页文章显示部分 首页小功能福大地图完成 四.明日规划 发现爬取的数据是一整个网页的内容,而我们需要的仅仅是教务处通知的文章,在筛选方面还需要改进,查找如何进行 ...