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. C# winform 弹出输入框

    Microsoft.VisualBasic.dll   引用using Microsoft.VisualBasic; string PM = Interaction.InputBox("提示 ...

  2. PHP漏洞全解(九)-文件上传漏洞

    本文主要介绍针对PHP网站文件上传漏洞.由于文件上传功能实现代码没有严格限制用户上传的文件后缀以及文件类型,导致允许攻击者向某个可通过 Web 访问的目录上传任意PHP文件,并能够将这些文件传递给 P ...

  3. Apache CXF 例子

    来自:http://www.cnblogs.com/frankliiu-java/articles/1641949.html Apache CXF 是一个开放源代码框架,是在Xfire 跟Celtix ...

  4. 精通phthon的条件

    1. 熟知主流硬件体系(x86, x64)2. 熟知 CPython 的具体实现,如若可能至少通读源码三遍以上3. 熟知每条 Python bytecode 如何被解释执行4. 熟知每条 Python ...

  5. BS软件注册

    关于BS软件注册问题,目前的方式有通过加密狗访问的方式比较安全,本人为了节省使用成本,采用注册码的形式对每个客户端采用注册码的形式进行认证,防止用户使用同一账号在不同地方登陆使用,也可以防止一个账号, ...

  6. C#排序算法的比较

    首先通过图表比较不同排序算法的时间复杂度和稳定性. 排序方法 平均时间 最坏情况 最好情况 辅助空间 稳定性 直接插入排序 O(n2) O(n2) O(n) O(1) 是 冒泡排序 O(n2) O(n ...

  7. Oracle MySQL Server 安全漏洞

    漏洞名称: Oracle MySQL Server 安全漏洞 CNNVD编号: CNNVD-201401-317 发布时间: 2014-01-22 更新时间: 2014-01-22 危害等级: 中危  ...

  8. linux下的X server:linux图形界面原理

    linux下的X server:linux图形界面原理   Moblin Core是在Gnome Mobile的平台上建立.我以前玩Linux,提交的都和图像没有关系,连Xwindows都不用启动,开 ...

  9. Ubuntu 安装Chrome步骤

    一.添加PPA 从Google Linux Repository(http://www.google.com/linuxrepositories/)下载安装Key,或把下面的代码复制进终端,回车,需要 ...

  10. WebService的优点和基本原理

    WebService简介(1)WebService是一个SOA(面向服务的编程)的架构,它是不依赖于语言,不依赖于平台,可以实现不同的语言间的相互调用,通过Internet进行基于Http协议的网络应 ...