上传视频使用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的都知道,它是不能上传视频的. 有人想到用上传附件的方式上传视频,但是结果……就是提示没有上传文件. 要是正常上传个一两兆的图片啊,压缩文件什么的还是可以的. 所以,重点来了 怎么 ...
随机推荐
- Unity3D项目程序加密-VirboxProtector加壳工具
各位Unity3D的开发者,你还为你的代码被反编译而头疼, 混淆和加密已经失效,为内存dump代码而烦恼?是否辛苦制作的游戏被盗版被抄袭而烦恼? 是否害怕算法被别人参考要把算法写成C++而费劲周折? ...
- zabbix添加自定义监控项
zabbix添加自定义监控项 author:headsen chen 2017-10-16 17:23:17 个人原创,转载请注明作者,出处,否则依法追究法律责任 主机端配置: 首先安装好za ...
- Mycat 分片规则详解--日期范围 hash 分片
实现方式:其思想和范围取模分片一样,由于日期取模会出现数据热点问题,所以先根据日期分组,再根据时间 hash 使得短期数据分布跟均匀. 优点:避免扩容时的数据迁移,可以在一定程度上避免范围分片的热点问 ...
- 关于Spring注解@Async引发其他注解失效
概述 在前面一篇文章中,介绍,在一个Bean中注入自己,如果有@Async和@Transaction,如果使用@Autowire注入自身,会报循环依赖,如果使用BeanFactoryAware注入自己 ...
- 设计模式 --> (3)策略模式
策略模式 策略模式是指定义一系列的算法,把它们一个个封装起来,并且使它们可相互替换.本模式使得算法可独立于使用它的客户而变化.也就是说这些算法所完成的功能一样,对外的接口一样,只是各自实现上存在差异. ...
- Java基础-this和super的区别
package com.cn.This; /** * this与super的区别: * 1.this相当于指向本类的对象的指针,调用本类的另一种类型的构造方法 * 2.super调用的是父类中形参相同 ...
- C#,一份超简单的数据库帮助类,SqlHelp
简单,实用,留存. using System; using System.Collections.Generic; using System.Configuration; using System.D ...
- centos 安装atom 笔记
一.安装atom "To install Atom on Linux, you can download a Debian package or RPM package either fr ...
- 听翁恺老师mooc笔记(10)--结构
定义结构: 在程序里,如果想要表达一个数据就需要一个变量,而每个变量又都需要一个类型,之前学过C语言中有int.double.float.char等这些基础类型,还有指针.数组等.如果你要表达的数据比 ...
- Beta冲刺第七天
一.昨天的困难 没有困难. 二.今天进度 1.林洋洋:MD图片上传,修复权限问题,修复本地存储判空问题,修复协作申请没有过滤问题. 2.黄腾达:添加文件链接和邀请链接复制功能,协作树界面优化. 3.张 ...