1.自动判断格式并调用相应的转换工具,默认方法

  1. /**
  2. * 自动判断格式并调用相应的转换工具,默认方法
  3. * @param srcVideoPath
  4. * @param tarVideoPath
  5. * @return
  6. */
  7. public static boolean videoConver(String srcVideoPath,String tarVideoPath){
  8. boolean boo = true;
  9. if(StringUtils.isNotEmpty(srcVideoPath) && StringUtils.isNotEmpty(tarVideoPath)){
  10. srcVideoPath = BaseCommonUtil.replaceFliePathStr(srcVideoPath);
  11. srcVideoPath = srcVideoPath.replaceAll("//", "/");
  12. tarVideoPath = BaseCommonUtil.replaceFliePathStr(tarVideoPath);
  13. tarVideoPath = tarVideoPath.replaceAll("//", "/");
  14. String extendName = srcVideoPath.substring(srcVideoPath.lastIndexOf(".")+1,srcVideoPath.length());
  15. String extendTarName = tarVideoPath.substring(tarVideoPath.lastIndexOf(".")+1,tarVideoPath.length());
  16. //判断元资源是不是MP4格式,如果是则直接复制
  17. if("MP4".equals(extendName.toUpperCase())){
  18. try{
  19. if(!srcVideoPath.equals(tarVideoPath)){
  20. copyFile(new File(srcVideoPath),new File(tarVideoPath));
  21. }
  22. }catch(IOException e){
  23. boo=false;
  24. logger.error("文件复制失败!",e);
  25. }
  26. }else{
  27. // 直接用ffmpeg转换,如果不能转换则用mencoder转换
  28. boo = processFfmpegOther(srcVideoPath, tarVideoPath);
  29. if (!boo) {
  30. boo = processMencoderOther(srcVideoPath, tarVideoPath);
  31. if (!boo) {
  32. logger.error(" videoConver 暂不支持该格式!");
  33. boo = false;
  34. }
  35. }
  36. }
  37. if("MP4".equals(extendTarName.toUpperCase())){
  38. boo = execMp4Box(tarVideoPath);
  39. }
  40. }
  41. return boo;
  42. }

2.Mp4Box 转换MP4

  1. /**
  2. * Mp4Box 转换MP4
  3. * @param srcPath 源MP4路径
  4. * @return
  5. */
  6. public static boolean execMp4Box(String srcPath){
  7. if (!checkfile(srcPath)) {
  8. logger.error("【" + srcPath + "】  不存在 !");
  9. return false;
  10. }
  11. try {
  12. Process process = Runtime.getRuntime().exec(mp4BoxPath + " -isma " + srcPath);
  13. doWaitFor(process);
  14. process.destroy();
  15. if (!checkfile(srcPath)) {
  16. logger.error("【" + srcPath + "】 execMp4Box 转换MP4 metadata 不成功 !");
  17. return false;
  18. }
  19. return true;
  20. } catch (Exception e) {
  21. logger.error("【" + srcPath + "】execMp4Box   转换MP4 metadata 不成功 !",e);
  22. return false;
  23. }
  24. }

3.判断文件的类型,从而调用不同的解析工具

  1. /**
  2. * 判断文件的类型,从而调用不同的解析工具
  3. * @return filePath
  4. */
  5. public static int checkContentType(String filePath) {
  6. String type = filePath.substring(filePath.lastIndexOf(".") + 1, filePath.length())  .toLowerCase();
  7. // ffmpeg能解析的格式:(asx,asf,mpg,wmv,3gp,mp4,mov,avi,flv等)
  8. if (type.equals("avi")) {
  9. return 0;
  10. } else if (type.equals("mpg")) {
  11. return 0;
  12. } else if (type.equals("wmv")) {
  13. return 0;
  14. } else if (type.equals("3gp")) {
  15. return 0;
  16. } else if (type.equals("mov")) {
  17. return 0;
  18. } else if (type.equals("mp4")) {
  19. return 0;
  20. } else if (type.equals("asf")) {
  21. return 0;
  22. }else if (type.equals("asx")) {
  23. return 0;
  24. } else if (type.equals("flv")) {
  25. return 0;
  26. // 对ffmpeg无法解析的文件格式(wmv9,rm,rmvb等),
  27. // 可以先用别的工具(mencoder)转换为avi(ffmpeg能解析的)格式.
  28. } else if (type.equals("wmv9")) {
  29. return 1;
  30. } else if (type.equals("rm")) {
  31. return 1;
  32. } else if (type.equals("rmvb")) {
  33. return 1;
  34. } else if (type.equals("swf")) {
  35. return 2;
  36. }
  37. return 9;
  38. }

4.Mencoder 将源文件转换成其他格式

  1. /**
  2. * Mencoder 将源文件转换成其他格式
  3. * 如:wmv9,rm,rmvb
  4. * @param srcVideoPath 视频文件(原)
  5. * @param tarVideoPath 视频文件(新)
  6. * @return
  7. */
  8. public static boolean processMencoderOther(String srcVideoPath,String tarVideoPath) {
  9. if (!checkfile(srcVideoPath)) {
  10. logger.error("【" + srcVideoPath + "】  不存在 !");
  11. return false;
  12. }
  13. List<String> commend = new java.util.ArrayList<String>();
  14. commend.add(mencoderPath);
  15. commend.add(srcVideoPath);
  16. // 音频采用mp3编码
  17. commend.add("-oac");
  18. commend.add("mp3lame");
  19. // 采用高质DivX视频编码,视频码率为112kbps
  20. commend.add("-ovc");
  21. commend.add("lavc");
  22. commend.add("-lavcopts");
  23. commend.add("vcodec=flv:vbitrate=500:mbd=2:mv0:trell:v4mv:cbp:last_pred=3:dia=-1:cmp=3:vb_strategy=1");
  24. commend.add("-lameopts");
  25. commend.add("abr:br=56");
  26. // 声音采样频率设置,现为22K
  27. commend.add("-srate");
  28. commend.add("22050");
  29. // -sws就是用来设置品质的,默认值为2
  30. commend.add("-sws");
  31. commend.add("3");
  32. // 宽度为208,高度自动调整保持比例;
  33. // -vf scale=-3:176宽度自动调整保持比例,高度为176;如果想保持原来的大小可以不要这个参数
  34. // commend.add("-vf");
  35. //commend.add("scale=512:-3");
  36. // 帧速率设置
  37. commend.add("-ofps");
  38. commend.add("18");
  39. commend.add("-lameopts");
  40. commend.add("vbr=3:br=128");
  41. commend.add("-o");
  42. commend.add(tarVideoPath);
  43. try {
  44. ProcessBuilder builder = new ProcessBuilder();
  45. builder.command(commend);
  46. Process process = builder.start();
  47. doWaitFor(process);
  48. process.destroy();
  49. if (!checkfile(tarVideoPath)) {
  50. logger.info(srcVideoPath + " is not exit! processMencoderOther  转换不成功 !");
  51. return false;
  52. }
  53. return true;
  54. } catch (Exception e) {
  55. logger.error("【" + srcVideoPath + "】 processMencoderOther  转换不成功 !");
  56. return false;
  57. }
  58. }

5.Mencoder 将源文件转换成其他格式

  1. /**
  2. * Mencoder 将源文件转换成其他格式
  3. * 如:wmv9,rm,rmvb
  4. * @param srcVideoPath 视频文件(原)
  5. * @param tarVideoPath 视频文件(新)
  6. * @param startTime 开始时间 形如:10秒
  7. * @param endTime 结束时间 形如:120秒
  8. * @return
  9. */
  10. public static boolean processMencoderByTime(String srcVideoPath,String tarVideoPath,String startTime,String endTime) {
  11. if (!checkfile(srcVideoPath)) {
  12. logger.error("【" + srcVideoPath + "】  不存在 !");
  13. return false;
  14. }
  15. List<String> commend = new java.util.ArrayList<String>();
  16. commend.add(mencoderPath);
  17. commend.add(srcVideoPath);
  18. // 音频采用mp3编码
  19. commend.add("-oac");
  20. commend.add("mp3lame");
  21. // 采用高质DivX视频编码,视频码率为112kbps
  22. commend.add("-ovc");
  23. commend.add("lavc");
  24. commend.add("-lavcopts");
  25. commend.add("vcodec=flv:vbitrate=500:mbd=2:mv0:trell:v4mv:cbp:last_pred=3:dia=-1:cmp=3:vb_strategy=1");
  26. commend.add("-lameopts");
  27. commend.add("abr:br=56");
  28. // 声音采样频率设置,现为22K
  29. commend.add("-srate");
  30. commend.add("22050");
  31. // -sws就是用来设置品质的,默认值为2
  32. commend.add("-sws");
  33. commend.add("3");
  34. // 宽度为208,高度自动调整保持比例;
  35. // -vf scale=-3:176宽度自动调整保持比例,高度为176;如果想保持原来的大小可以不要这个参数
  36. // commend.add("-vf");
  37. //commend.add("scale=512:-3");
  38. // 帧速率设置
  39. commend.add("-ofps");
  40. commend.add("18");
  41. commend.add("-ss");
  42. if(startTime != null && !startTime.equals("")){
  43. commend.add(getSplitStr(startTime));
  44. }else{
  45. commend.add("0");//默认从开始转换
  46. }
  47. commend.add("-endpos");
  48. if(endTime != null && !endTime.equals("")){
  49. commend.add((Long.parseLong(getSplitStr(endTime))-Long.parseLong(getSplitStr(startTime)))+"");
  50. }else{
  51. //VedioInfoHelps.getVideoInfo(srcVideoPath,"playingAllTime");
  52. commend.add("600");//默认为60秒=10分钟
  53. }
  54. /*
  55. * mode=3:cbr:br=24单声道 音频码率为24kbps;-lameopts
  56. * mode=0:cbr:br=24立体声,音频码率为24kbps; 还可设置音量,-lameopts
  57. * mode=3:cbr:br=32:vol=1,设置范置为1~10,但不宜设得太高
  58. */
  59. commend.add("-lameopts");
  60. commend.add("vbr=3:br=128");
  61. commend.add("-o");
  62. commend.add(tarVideoPath);
  63. try {
  64. ProcessBuilder builder = new ProcessBuilder();
  65. builder.command(commend);
  66. Process process = builder.start();
  67. doWaitFor(process);
  68. process.destroy();
  69. if (!checkfile(tarVideoPath)) {
  70. logger.info(tarVideoPath + " is not exit!  processMencoderByTime 转换不成功 !");
  71. return false;
  72. }
  73. return true;
  74. } catch (Exception e) {
  75. logger.error("【" + srcVideoPath + "】  processMencoderByTime 转换不成功 !",e);
  76. return false;
  77. }
  78. }

6.Mencoder 将源文件转换成其他格式 (自定义执行的shell):

  1. /**
  2. * Mencoder 将源文件转换成其他格式 (自定义执行的shell):
  3. * 例如:mencoder -i 03.flv 03.avi
  4. * @param prefix 前缀
  5. * @param srcVideoPath 视频文件(原)
  6. * @param middlefix 中间的字符转
  7. * @param srcVideoPath 视频文件(转换后的路径)
  8. * @param suffix 结束的字符串
  9. * @return
  10. */
  11. public static boolean processMencoderShellScript(String prefix,String srcVideoPath,String middlefix,String tarVideoPath,String suffix) {
  12. if (!checkfile(srcVideoPath)) {
  13. logger.error("【" + srcVideoPath + "】  不存在 !");
  14. return false;
  15. }
  16. List<String> commend = new java.util.ArrayList<String>();
  17. commend.add(mencoderPath);
  18. if(prefix != null && !prefix.equals("")){
  19. commend.add(prefix);
  20. }
  21. commend.add(srcVideoPath);
  22. if(middlefix != null && !middlefix.equals("")){
  23. commend.add(middlefix);
  24. }
  25. commend.add(tarVideoPath);
  26. if(suffix != null && !suffix.equals("")){
  27. commend.add(suffix);
  28. }
  29. try {
  30. ProcessBuilder builder = new ProcessBuilder();
  31. builder.command(commend);
  32. Process process = builder.start();
  33. doWaitFor(process);
  34. process.destroy();
  35. if (!checkfile(tarVideoPath)) {
  36. logger.info(tarVideoPath + " is not exit! processMencoderShellScript 转换不成功 !");
  37. return false;
  38. }
  39. return true;
  40. } catch (Exception e) {
  41. logger.error("【" + srcVideoPath + "】 processMencoderShellScript  转换不成功 !");
  42. return false;
  43. }
  44. }
更多0

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

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

    java 实现视频转换通用工具类:获取视频元数据信息(一) java 实现视频转换通用工具类:视频相互转换-总方法及Mencoder(二) 这节主要是ffmpeg的相关方法封装,在实际调用中主要使用f ...

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

    java 实现视频转换通用工具类:获取视频元数据信息(一) java 实现视频转换通用工具类:视频相互转换-总方法及Mencoder(二) java 实现视频转换通用工具类:视频相互转换-Ffmpeg ...

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

    java 做视频转换主要用到开源的ffmpeg或者mencoder,还要有MP4Box. 注:由于平时都没有时间写博客,所以思路我就不写了,有问题问我,不一定马上回复. 详细介绍: ffmpeg:ht ...

  4. C#调用mmpeg进行各种视频转换的类实例

    本文实例讲述了C#调用mmpeg进行各种视频转换的类.分享给大家供大家参考.具体如下: 这个C#类封装了视频转换所需的各种方法,基本上是围绕着如何通过mmpeg工具来进行视频转换 using Syst ...

  5. 在java poi导入Excel通用工具类示例详解

    转: 在java poi导入Excel通用工具类示例详解 更新时间:2017年09月10日 14:21:36   作者:daochuwenziyao   我要评论   这篇文章主要给大家介绍了关于在j ...

  6. java 二进制数字符串转换工具类

    java 二进制数字符串转换工具类 将二进制转换成八进制 将二进制转换成十进制 将二进制转换成十六进制 将十进制转换成二进制 package com.iteye.injavawetrust.ad; i ...

  7. C# 利用ffmpeg 对视频转换系类操作 (1) 基本分析

    最近公司做一个项目,开发一个视频站点.项目需求中有很多视频转换的需求,如:格式转换(flv,Mp4),视频水印,视频截图,视频合成,获取视频的基本信息(时间戳,视频大小等).经过网络的收集资料以及自己 ...

  8. moviepy音视频剪辑基类VideoClip的write_gif方法opt、fuzz、dispose、colors、loop等参数的作用

    ☞ ░ 前往老猿Python博文目录 ░ moviepy音视频剪辑模块的视频剪辑基类write_gif方法用于将视频剪辑输出到gif文件,调用语法如下: def write_gif(self, fil ...

  9. JAVA字符串编码转换常用类

    无论是对程序的本地化还是国际化,都会涉及到字符编码的转换的问题.尤其在web应用中常常需要处理中文字符,这时就需要进行字符串的编码转换,将字符串编码转换为GBK或者GB2312.一.关键技术点:    ...

随机推荐

  1. POJ 1404 I-Keyboard (DP)

    http://poj.org/problem?id=1404 题意 :手机上的要发短信的话,“我”字需要先按一下9键,再按3下6键,所以,现在想要重新布局每个键上的字母数,让最后的那个值最小,也就是说 ...

  2. MongoDB实战指南(六):MongoDB复制集之复制集概述

    1. 复制集概述 数据库总是会遇到各种失败的场景,如网络连接断开.断电等,尽管journaling日志功能也提供了数据恢复的功能,但journaling通常是针对单个节点来说的,只能保证单节点数据的一 ...

  3. SPRING IN ACTION 第4版笔记-第六章RENDERING WEB VIEWS-002- Spring的JSP标签之form标签(<sf:input><sf:errors><sf:form>)

    一. Spring offers two JSP tag libraries to help define the view of your Spring MVC web views. One tag ...

  4. More on 1Password’s Components

    Stefan van As of 1Password fame sent me a more exhaustive list of the libraries and tools used in 1P ...

  5. Android TextView中的ellipsize属性

    TextView中有个ellipsize属性,作用是当文字过长时,该控件该如何显示,解释如下: android:ellipsize=”start”—–省略号显示在开头 android:ellipsiz ...

  6. 通过jQuery或ScriptManager以Ajax方式访问服务

    1.客户端和服务端 服务端对外提供服务时,可以通过handler或者webservice.handler比较轻便,但是难以对外公开,只有程序员自己知道它到底做了些什么工作.webservice可以将服 ...

  7. 在Myeclipse buildpath 加server lib

    把eclipse下的工程复制过来后,发现缺少Server Runtime.本想直接在buildpath里加lib,在Myeclipse里找了一圈,恁是没发现在哪里可以添加,虽然在preference里 ...

  8. Oracle系列之视图

    涉及到表的处理请参看原表结构与数据  Oracle建表插数据等等 创建视图,把tb_Employee表sal<1000的雇员,映射到该视图( view) create or replace vi ...

  9. [转] Java之ACM速成

    转载自:http://blog.csdn.net/skiffloveblue/article/details/7032290 相关题目:POJ 1131 1205 1220 1405 1503 160 ...

  10. iPhone手机录像步骤

    1 Open QuickTime Player on Mac 2 top menu-- New Movie Recording 3 in Movie Recording UI, click the t ...