Java使用ffmpeg和mencoder实现视频转码

  

本文为大家分享了Java使用ffmpeg和mencoder实现视频转码的具体代码,供大家参考,具体内容如下
  

  

<强>准备:

  

需要下载ffmpeg和mencoder,百度一搜就有了,请自行下载。

  

不墨迹,上代码:

  

1)首先需要定义几个量:Contants.java

        公开课作{   公共静态最终字符串ffmpegpath=" D: \ \ DevTools \ \ ffmpeg \ \ bin \ \ ffmpeg.exe”;//ffmpeg的安装位置   公共静态最终字符串mencoderpath=" D: \ \ DevTools \ \ mencoder \ \ ";//mencoder的目录      公共静态最终字符串videofolder=" D: \ \工具\ \视频\ \ ";//需要被转换格式的视频目录   公共静态最终字符串targetfolder=" D: \ \ \ \ \ \工具目标”;//转换后视频的目录      公共静态最终字符串videoRealPath=" D: \ \ \ \ \ \工具目标”;//需要被截图的视频目录;   公共静态最终字符串imageRealPath=" D: \ \工具\ \一个\ \ ";//截图的存放目录   }   之前      

2)其次,就是跑龙套类了,具体里面有注释:ConverVideoUtils。java
  

        进口java.io.File;   进口java.io.IOException;   进口java.io.InputStream;   进口java.util.Date;   进口并不知道;      进口com.wdy.common.Contants;      公开课ConverVideoUtils {   私人约会dt;   私人长begintime;   私人字符串sourceVideoPath;//源视频路径   私人字符串filerealname;//文件名不包括扩展名   私人字符串文件名;//包括扩展名   私人字符串videofolder=Contants.videofolder;//别的格式视频的目录   私人字符串targetfolder=Contants.targetfolder;//flv视频的目录   私人字符串ffmpegpath=Contants.ffmpegpath;//ffmpeg.exe的目录   私人字符串mencoderpath=Contants.mencoderpath;//mencoder的目录   私人字符串imageRealPath=Contants.imageRealPath;//截图的存放目录      公共ConverVideoUtils () {   }      公共ConverVideoUtils (String路径){   sourceVideoPath=路径;   }      公共字符串getPATH () {   返回sourceVideoPath;   }      公共空间setPATH (String路径){   sourceVideoPath=路径;   }/* *   *转换视频格式   * @param字符串targetExtension目标视频扩展名xxx”   * @param isDelSourseFile转换完成后是否删除源文件   * @return   */公共布尔beginConver(字符串targetExtension,布尔isDelSourseFile) {   文件fi=新文件(sourceVideoPath);   文件名=fi.getName ();   filerealname=文件名。substring (0, filename.lastIndexOf (“。”)) .toLowerCase ();   system . out。println(“——接收到文件(“+ sourceVideoPath +”)需要转换- - - - - - - - - - - - - - - - - - - - - - - - - - - -”);   如果(! checkfile (sourceVideoPath)) {   system . out。println (sourceVideoPath +“文件不存在" + " ");   返回错误;   }   dt=新的日期();   begintime=dt.getTime ();   system . out。println(“- - - - -开始转文件(“+ sourceVideoPath +”) - - - - - - - - - - - - - - - - - - - - - - - - - - -”);   如果(流程(targetExtension isDelSourseFile)) {   日期dt2=new日期();   system . out。println(“转换成功”);   长endtime=dt2.getTime ();   长timecha=(endtime - begintime);   字符串totaltime=sumTime (timecha);   system . out。println(“转换视频格式共用了:”+ totaltime + " ");   如果(processImg (sourceVideoPath)) {   system . out。println(“截图成功了!”);   其他}{   system . out。println(“截图失败了!”);   }   如果(isDelSourseFile) {   deleteFile (sourceVideoPath);   }   sourceVideoPath=零;   返回true;   其他}{   sourceVideoPath=零;   返回错误;   }   }/* *   *对视频进行截的图   * @param sourceVideoPath需要被截图的视频路径(包含文件名和扩展名)   * @return   */公共布尔processImg(字符串sourceVideoPath) {   如果(! checkfile (sourceVideoPath)) {   system . out。println (sourceVideoPath +“不是文件”);   返回错误;   }   文件fi=新文件(sourceVideoPath);   文件名=fi.getName ();   filerealname=文件名。substring (0, filename.lastIndexOf (“。”)) .toLowerCase ();   List推荐=new java.util.ArrayList ();//第一帧:00:00:01//时间ffmpeg党卫军00:00:01 test1 - i。flv - f image2 - y test1.jpg   commend.add (ffmpegpath);//commend.add(“我”);//推荐。添加(videoRealPath + filerealname +“。”);//commend.add(“是”);//commend.add (“- f”);//commend.add (“image2”);//commend.add (“s”);//commend.add (38);//commend.add (- t);//commend.add (" 0.001 ");//commend.add (“s”);//commend.add (“320 x240”);   commend.add (“s”);   commend.add (“00:00:01”);   commend.add(“我”);   commend.add (sourceVideoPath);   commend.add (“- f”);   commend.add (“image2”);   commend.add(“是”);   赞扬。添加(imageRealPath + filerealname + " . jpg ");   尝试{   ProcessBuilder builder=new ProcessBuilder ();   builder.command(推荐);   builder.start ();   返回true;   }捕捉(异常e) {   e.printStackTrace ();   返回错误;   }   }/* *   *实际转换视频格式的方法   * @param targetExtension目标视频扩展名   * @param isDelSourseFile转换完成后是否删除源文件   * @return   */私人布尔过程(字符串targetExtension,布尔isDelSourseFile) {   int类型=checkContentType ();   布尔状态=false;   如果(type==0) {//如果类型为0用ffmpeg直接转换   状态=processVideoFormat (sourceVideoPath targetExtension isDelSourseFile);   }else if (type==1) {//如果类型为1,将其他文件先转换为avi,然后在用ffmpeg转换为指定格式   字符串avifilepath=processAVI(类型);   如果(avifilepath==null) {//avi文件没有得到   返回错误;   其他}{   System.out.println(“开始转换:”);   状态=processVideoFormat (avifilepath targetExtension isDelSourseFile);   }   }   返回状态;   }/* *   *检查文件类型   * @return   */私人int checkContentType () {   字符串类型=sourceVideoPath.substring (sourceVideoPath.lastIndexOf (“。”) + 1, sourceVideoPath.length ()) .toLowerCase ();//ffmpeg能解析的格式:(asx asf,英里/加仑,对wmv, 3 gp、mp4、mov, avi, flv等)   如果(type.equals (avi)) {   返回0;   }else if (type.equals (mpg)) {   返回0;   }else if (type.equals (wmv)) {   返回0;   }else if (type.equals (3 gp)) {   返回0;   }else if (type.equals (mov)) {   返回0;   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null

Java使用ffmpeg和mencoder实现视频转码