java 实现视频转换通用工具类:视频相互转换-总方法及Mencoder(二)
- /**
- * 自动判断格式并调用相应的转换工具,默认方法
- * @param srcVideoPath
- * @param tarVideoPath
- * @return
- */
- public static boolean videoConver(String srcVideoPath,String tarVideoPath){
- boolean boo = true;
- if(StringUtils.isNotEmpty(srcVideoPath) && StringUtils.isNotEmpty(tarVideoPath)){
- srcVideoPath = BaseCommonUtil.replaceFliePathStr(srcVideoPath);
- srcVideoPath = srcVideoPath.replaceAll("//", "/");
- tarVideoPath = BaseCommonUtil.replaceFliePathStr(tarVideoPath);
- tarVideoPath = tarVideoPath.replaceAll("//", "/");
- String extendName = srcVideoPath.substring(srcVideoPath.lastIndexOf(".")+1,srcVideoPath.length());
- String extendTarName = tarVideoPath.substring(tarVideoPath.lastIndexOf(".")+1,tarVideoPath.length());
- //判断元资源是不是MP4格式,如果是则直接复制
- if("MP4".equals(extendName.toUpperCase())){
- try{
- if(!srcVideoPath.equals(tarVideoPath)){
- copyFile(new File(srcVideoPath),new File(tarVideoPath));
- }
- }catch(IOException e){
- boo=false;
- logger.error("文件复制失败!",e);
- }
- }else{
- // 直接用ffmpeg转换,如果不能转换则用mencoder转换
- boo = processFfmpegOther(srcVideoPath, tarVideoPath);
- if (!boo) {
- boo = processMencoderOther(srcVideoPath, tarVideoPath);
- if (!boo) {
- logger.error(" videoConver 暂不支持该格式!");
- boo = false;
- }
- }
- }
- if("MP4".equals(extendTarName.toUpperCase())){
- boo = execMp4Box(tarVideoPath);
- }
- }
- return boo;
- }
2.Mp4Box 转换MP4
- /**
- * Mp4Box 转换MP4
- * @param srcPath 源MP4路径
- * @return
- */
- public static boolean execMp4Box(String srcPath){
- if (!checkfile(srcPath)) {
- logger.error("【" + srcPath + "】 不存在 !");
- return false;
- }
- try {
- Process process = Runtime.getRuntime().exec(mp4BoxPath + " -isma " + srcPath);
- doWaitFor(process);
- process.destroy();
- if (!checkfile(srcPath)) {
- logger.error("【" + srcPath + "】 execMp4Box 转换MP4 metadata 不成功 !");
- return false;
- }
- return true;
- } catch (Exception e) {
- logger.error("【" + srcPath + "】execMp4Box 转换MP4 metadata 不成功 !",e);
- return false;
- }
- }
3.判断文件的类型,从而调用不同的解析工具
- /**
- * 判断文件的类型,从而调用不同的解析工具
- * @return filePath
- */
- public static int checkContentType(String filePath) {
- String type = filePath.substring(filePath.lastIndexOf(".") + 1, filePath.length()) .toLowerCase();
- // ffmpeg能解析的格式:(asx,asf,mpg,wmv,3gp,mp4,mov,avi,flv等)
- if (type.equals("avi")) {
- return 0;
- } else if (type.equals("mpg")) {
- return 0;
- } else if (type.equals("wmv")) {
- return 0;
- } else if (type.equals("3gp")) {
- return 0;
- } else if (type.equals("mov")) {
- return 0;
- } else if (type.equals("mp4")) {
- return 0;
- } else if (type.equals("asf")) {
- return 0;
- }else if (type.equals("asx")) {
- return 0;
- } else if (type.equals("flv")) {
- return 0;
- // 对ffmpeg无法解析的文件格式(wmv9,rm,rmvb等),
- // 可以先用别的工具(mencoder)转换为avi(ffmpeg能解析的)格式.
- } else if (type.equals("wmv9")) {
- return 1;
- } else if (type.equals("rm")) {
- return 1;
- } else if (type.equals("rmvb")) {
- return 1;
- } else if (type.equals("swf")) {
- return 2;
- }
- return 9;
- }
4.Mencoder 将源文件转换成其他格式
- /**
- * Mencoder 将源文件转换成其他格式
- * 如:wmv9,rm,rmvb
- * @param srcVideoPath 视频文件(原)
- * @param tarVideoPath 视频文件(新)
- * @return
- */
- public static boolean processMencoderOther(String srcVideoPath,String tarVideoPath) {
- if (!checkfile(srcVideoPath)) {
- logger.error("【" + srcVideoPath + "】 不存在 !");
- return false;
- }
- List<String> commend = new java.util.ArrayList<String>();
- commend.add(mencoderPath);
- commend.add(srcVideoPath);
- // 音频采用mp3编码
- commend.add("-oac");
- commend.add("mp3lame");
- // 采用高质DivX视频编码,视频码率为112kbps
- commend.add("-ovc");
- commend.add("lavc");
- commend.add("-lavcopts");
- commend.add("vcodec=flv:vbitrate=500:mbd=2:mv0:trell:v4mv:cbp:last_pred=3:dia=-1:cmp=3:vb_strategy=1");
- commend.add("-lameopts");
- commend.add("abr:br=56");
- // 声音采样频率设置,现为22K
- commend.add("-srate");
- commend.add("22050");
- // -sws就是用来设置品质的,默认值为2
- commend.add("-sws");
- commend.add("3");
- // 宽度为208,高度自动调整保持比例;
- // -vf scale=-3:176宽度自动调整保持比例,高度为176;如果想保持原来的大小可以不要这个参数
- // commend.add("-vf");
- //commend.add("scale=512:-3");
- // 帧速率设置
- commend.add("-ofps");
- commend.add("18");
- commend.add("-lameopts");
- commend.add("vbr=3:br=128");
- commend.add("-o");
- commend.add(tarVideoPath);
- try {
- ProcessBuilder builder = new ProcessBuilder();
- builder.command(commend);
- Process process = builder.start();
- doWaitFor(process);
- process.destroy();
- if (!checkfile(tarVideoPath)) {
- logger.info(srcVideoPath + " is not exit! processMencoderOther 转换不成功 !");
- return false;
- }
- return true;
- } catch (Exception e) {
- logger.error("【" + srcVideoPath + "】 processMencoderOther 转换不成功 !");
- return false;
- }
- }
5.Mencoder 将源文件转换成其他格式
- /**
- * Mencoder 将源文件转换成其他格式
- * 如:wmv9,rm,rmvb
- * @param srcVideoPath 视频文件(原)
- * @param tarVideoPath 视频文件(新)
- * @param startTime 开始时间 形如:10秒
- * @param endTime 结束时间 形如:120秒
- * @return
- */
- public static boolean processMencoderByTime(String srcVideoPath,String tarVideoPath,String startTime,String endTime) {
- if (!checkfile(srcVideoPath)) {
- logger.error("【" + srcVideoPath + "】 不存在 !");
- return false;
- }
- List<String> commend = new java.util.ArrayList<String>();
- commend.add(mencoderPath);
- commend.add(srcVideoPath);
- // 音频采用mp3编码
- commend.add("-oac");
- commend.add("mp3lame");
- // 采用高质DivX视频编码,视频码率为112kbps
- commend.add("-ovc");
- commend.add("lavc");
- commend.add("-lavcopts");
- commend.add("vcodec=flv:vbitrate=500:mbd=2:mv0:trell:v4mv:cbp:last_pred=3:dia=-1:cmp=3:vb_strategy=1");
- commend.add("-lameopts");
- commend.add("abr:br=56");
- // 声音采样频率设置,现为22K
- commend.add("-srate");
- commend.add("22050");
- // -sws就是用来设置品质的,默认值为2
- commend.add("-sws");
- commend.add("3");
- // 宽度为208,高度自动调整保持比例;
- // -vf scale=-3:176宽度自动调整保持比例,高度为176;如果想保持原来的大小可以不要这个参数
- // commend.add("-vf");
- //commend.add("scale=512:-3");
- // 帧速率设置
- commend.add("-ofps");
- commend.add("18");
- commend.add("-ss");
- if(startTime != null && !startTime.equals("")){
- commend.add(getSplitStr(startTime));
- }else{
- commend.add("0");//默认从开始转换
- }
- commend.add("-endpos");
- if(endTime != null && !endTime.equals("")){
- commend.add((Long.parseLong(getSplitStr(endTime))-Long.parseLong(getSplitStr(startTime)))+"");
- }else{
- //VedioInfoHelps.getVideoInfo(srcVideoPath,"playingAllTime");
- commend.add("600");//默认为60秒=10分钟
- }
- /*
- * mode=3:cbr:br=24单声道 音频码率为24kbps;-lameopts
- * mode=0:cbr:br=24立体声,音频码率为24kbps; 还可设置音量,-lameopts
- * mode=3:cbr:br=32:vol=1,设置范置为1~10,但不宜设得太高
- */
- commend.add("-lameopts");
- commend.add("vbr=3:br=128");
- commend.add("-o");
- commend.add(tarVideoPath);
- try {
- ProcessBuilder builder = new ProcessBuilder();
- builder.command(commend);
- Process process = builder.start();
- doWaitFor(process);
- process.destroy();
- if (!checkfile(tarVideoPath)) {
- logger.info(tarVideoPath + " is not exit! processMencoderByTime 转换不成功 !");
- return false;
- }
- return true;
- } catch (Exception e) {
- logger.error("【" + srcVideoPath + "】 processMencoderByTime 转换不成功 !",e);
- return false;
- }
- }
6.Mencoder 将源文件转换成其他格式 (自定义执行的shell):
- /**
- * Mencoder 将源文件转换成其他格式 (自定义执行的shell):
- * 例如:mencoder -i 03.flv 03.avi
- * @param prefix 前缀
- * @param srcVideoPath 视频文件(原)
- * @param middlefix 中间的字符转
- * @param srcVideoPath 视频文件(转换后的路径)
- * @param suffix 结束的字符串
- * @return
- */
- public static boolean processMencoderShellScript(String prefix,String srcVideoPath,String middlefix,String tarVideoPath,String suffix) {
- if (!checkfile(srcVideoPath)) {
- logger.error("【" + srcVideoPath + "】 不存在 !");
- return false;
- }
- List<String> commend = new java.util.ArrayList<String>();
- commend.add(mencoderPath);
- if(prefix != null && !prefix.equals("")){
- commend.add(prefix);
- }
- commend.add(srcVideoPath);
- if(middlefix != null && !middlefix.equals("")){
- commend.add(middlefix);
- }
- commend.add(tarVideoPath);
- if(suffix != null && !suffix.equals("")){
- commend.add(suffix);
- }
- try {
- ProcessBuilder builder = new ProcessBuilder();
- builder.command(commend);
- Process process = builder.start();
- doWaitFor(process);
- process.destroy();
- if (!checkfile(tarVideoPath)) {
- logger.info(tarVideoPath + " is not exit! processMencoderShellScript 转换不成功 !");
- return false;
- }
- return true;
- } catch (Exception e) {
- logger.error("【" + srcVideoPath + "】 processMencoderShellScript 转换不成功 !");
- return false;
- }
- }
java 实现视频转换通用工具类:视频相互转换-总方法及Mencoder(二)的更多相关文章
- java 实现视频转换通用工具类:视频相互转换-Ffmpeg(三)
java 实现视频转换通用工具类:获取视频元数据信息(一) java 实现视频转换通用工具类:视频相互转换-总方法及Mencoder(二) 这节主要是ffmpeg的相关方法封装,在实际调用中主要使用f ...
- java 实现视频转换通用工具类:视频截图-Ffmpeg(四)
java 实现视频转换通用工具类:获取视频元数据信息(一) java 实现视频转换通用工具类:视频相互转换-总方法及Mencoder(二) java 实现视频转换通用工具类:视频相互转换-Ffmpeg ...
- java 实现视频转换通用工具类:获取视频元数据信息(一)
java 做视频转换主要用到开源的ffmpeg或者mencoder,还要有MP4Box. 注:由于平时都没有时间写博客,所以思路我就不写了,有问题问我,不一定马上回复. 详细介绍: ffmpeg:ht ...
- C#调用mmpeg进行各种视频转换的类实例
本文实例讲述了C#调用mmpeg进行各种视频转换的类.分享给大家供大家参考.具体如下: 这个C#类封装了视频转换所需的各种方法,基本上是围绕着如何通过mmpeg工具来进行视频转换 using Syst ...
- 在java poi导入Excel通用工具类示例详解
转: 在java poi导入Excel通用工具类示例详解 更新时间:2017年09月10日 14:21:36 作者:daochuwenziyao 我要评论 这篇文章主要给大家介绍了关于在j ...
- java 二进制数字符串转换工具类
java 二进制数字符串转换工具类 将二进制转换成八进制 将二进制转换成十进制 将二进制转换成十六进制 将十进制转换成二进制 package com.iteye.injavawetrust.ad; i ...
- C# 利用ffmpeg 对视频转换系类操作 (1) 基本分析
最近公司做一个项目,开发一个视频站点.项目需求中有很多视频转换的需求,如:格式转换(flv,Mp4),视频水印,视频截图,视频合成,获取视频的基本信息(时间戳,视频大小等).经过网络的收集资料以及自己 ...
- moviepy音视频剪辑基类VideoClip的write_gif方法opt、fuzz、dispose、colors、loop等参数的作用
☞ ░ 前往老猿Python博文目录 ░ moviepy音视频剪辑模块的视频剪辑基类write_gif方法用于将视频剪辑输出到gif文件,调用语法如下: def write_gif(self, fil ...
- JAVA字符串编码转换常用类
无论是对程序的本地化还是国际化,都会涉及到字符编码的转换的问题.尤其在web应用中常常需要处理中文字符,这时就需要进行字符串的编码转换,将字符串编码转换为GBK或者GB2312.一.关键技术点: ...
随机推荐
- StatsD!次世代系统监控的核心
在互联网业务蒸蒸日上的今时今日,系统架构日渐复杂,随着软件产品和工程团队的变革,许多开源的监控工具应运而生,其中有一些相当出名,比如 Zabbix.Nagios 还有 StatsD.也有一些问题被大家 ...
- 徐汉彬:Web系统大规模并发——电商秒杀与抢购
[导读]徐汉彬曾在阿里巴巴和腾讯从事4年多的技术研发工作,负责过日请求量过亿的Web系统升级与重构,目前在小满科技创业,从事SaaS服务技术建设. 电商的秒杀和抢购,对我们来说,都不是一个陌生的东西. ...
- Rails 撤销操作
即使再小心,在开发 Rails 应用程序过程中仍然可能犯错.幸运的是,Rails 提供了一些工具能够帮助你进行复原. 举例来说,一个常见的情况是,你想更改控制器的名字,这时你就要撤销生成的代码.生成控 ...
- Co-variant array conversion from x to y may cause run-time exception
http://stackoverflow.com/questions/8704332/co-variant-array-conversion-from-x-to-y-may-cause-run-tim ...
- 查找Form的文件名
我们经常会要在ORACLE EBS中寻找我们正在浏览的form页面的执行文件,我们都会直接在Help中的菜单里点击"About Oracle Application",然后查看当前 ...
- Sublime Text修改显示图标
选择喜欢的图片 首先你需要选择一个中意的图片做为新的图标,格式可以是png,jpg,gif的 转为ico格式 我们需要ico格式的图片,所以需要将上述的图片转换一下格式.同样,转ico格式的软件很多, ...
- Import data from SQLServer with Sqoop
author: luciuz date: 2013/11/15 -------------------------------------------------------------------- ...
- [转] 舞蹈链(Dancing Links)——求解精确覆盖问题
转载自:http://www.cnblogs.com/grenet/p/3145800.html 精确覆盖问题的定义:给定一个由0-1组成的矩阵,是否能找到一个行的集合,使得集合中每一列都恰好包含一个 ...
- [转] ICPC2013 World Finals赛后感
原文地址:http://blog.sina.com.cn/s/blog_6c7729450101lmll.html Orz... 26号考完最后一科计网,27号准备了一下各种材料,28号凌晨就踏上旅程 ...
- nvidia gpu fan speed control
nvidia在linux上控制风扇速度,需要起X,在无显示器链接的服务器上显得有点坑,这里汇总一下整个流程 1.nvidia-xconfig --cool-bits=4 生成xorg.conf 2.在 ...