2019独角兽企业重金招聘Python工程师标准>>>

以前做的一个基于ffmpeg的视频格式转换的程序,现在抽空整理一下,很多地方都是从别的大神那借鉴的,只是把自己的觉得有用的,对别人有帮助的拿出来分享分享,下面是代码

package video;

import it.sauronsoftware.jave.AudioAttributes;
import it.sauronsoftware.jave.DefaultFFMPEGLocator;
import it.sauronsoftware.jave.Encoder;
import it.sauronsoftware.jave.EncoderException;
import it.sauronsoftware.jave.EncodingAttributes;
import it.sauronsoftware.jave.FFMPEGLocator;
import it.sauronsoftware.jave.InputFormatException;
import it.sauronsoftware.jave.VideoAttributes;
import it.sauronsoftware.jave.VideoSize;

import java.io.File;
import java.util.List;

public class ConvertVideo {
 
 private static File inFolder;//需要转换的文件夹
 
 private static File outFolder;//保存avi文件的文件夹地址
 
 private static File inFile;//每个文件的file对象
 
 private static String name;//文件名称,用在保存avi文件,name.avi,不带扩展名的
 
 private static String Name;//文件名称,(带扩展名的)
 
 public ConvertVideo(File inFolder,File outFolder){//构造函数,进行测试时传入两个文件夹地址
  this.inFolder=inFolder;
  this.outFolder=outFolder;
 }
 
 public static void Test(){
  String[] fileList=inFolder.list();
  for(int i=0;i<fileList.length;i++){
   inFile=new File(inFolder.getAbsolutePath()+"\\"+fileList[i]);
   Name=inFile.getName();
   name=getFileNameNoEx(Name);//获得没有扩展名的文件名
   System.out.println(name);
   File txtFile=new File(inFolder.getAbsolutePath()+"\\"+name+".txt");//视频上传完毕会生成一个同名的txt文件
   if(txtFile.exists()){//判断是否上传完毕
    convert();
   }
  }
 }
 /**
  * 截取不带扩展名的文件名
  * @param : String
  * @return : String
  *
  */
 public static String getFileNameNoEx(String filename) {
     if ((filename != null) && (filename.length() > 0)) {
         int dot = filename.lastIndexOf('.');
         if ((dot >-1) && (dot < (filename.length()))) {
             return filename.substring(0, dot);
         }
     }
     return filename;
 }
 /**
  * 视频转换调用函数 
  *@return : void
  *
  */
 public static void convert() {
        if(!checkfile(inFile)){
         System.out.println(inFile+" is not file");
         return;
        }    
        if (process()) {    
         System.out.println("ok");
        }
 }
/**
 *视频转换函数
 * @return : boolean
 *
 *
 */
 private static boolean process() { 
 
   int type = checkContentType();
        boolean status = false;
        System.out.println("name="+name+"  "+"Name="+Name+"  "+"type="+type);
        if (type==0) {
          status = processFLV(inFile);// 直接将文件转为avi文件          
        } else if (type==1) {
            processAVI(inFile);
            status=true;
        }else if(type==2){
         System.out.println("你的文件已经是avi格式,无须转换!");
        }
        return status;
    }
 /**
  *检查视频类型
  * @param : void
  * @return : int
  *
  */
    private static int checkContentType() {
     String path=inFile.getName();//path是绝对路径
        String type = path.substring(path.lastIndexOf(".") + 1,
          path.length()).toLowerCase();
        //ffmpeg能解析的格式:(asx,asf,mpg,wmv,3gp,mp4,mov,avi,flv等)
        if (type.equals("avi")) {
            return 2;
        } 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;
        } else if(type.equals("mpeg")){
         return 0;
        }else if(type.equals("mkv")){
         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;
        }      
        return 9;
    }
   /**
    * 检查文件是不是File对象
    * @param : File
    * @return : boolean
    *
    */
    private static boolean checkfile(File path){
    
     if(!path.isFile()){
      return false;
     }
     return true;
    }
    /**
     *对于ffmpeg无法解析的wmv9,rm,rmvb视频类型,利用mencoder进行解析,menconder视频转换
     * @param : File
     * @return : String
     *
     *
     */ 
    private static String processAVI(File inFile) {
     String inpath=inFile.getAbsolutePath();//PATH为file对象,先获得绝对路径,赋值给path
     String outpath =outFolder.getAbsolutePath()+"\\"+name+".avi";//为输出的绝对路径
     File Test=new File(outpath);
     if(Test.exists()){
      System.out.println("视频已经转换,无须再次转换!");
      return null;
     }else{
       List<String> commend=new java.util.ArrayList<String>();
             commend.add("e:\\mencoder");
             commend.add(inpath);
             commend.add("-o");
             commend.add(outpath);
             commend.add("-oac");
             commend.add("mp3lame");
             commend.add("-lameopts");
             commend.add("cbr:br=32");
             commend.add("-ovc");
             commend.add("xvid");
             commend.add("-xvidencopts");
             commend.add("bitrate=1024");
             commend.add("-vf");
             commend.add("scale=720:-3");
             //commend.add("-o");
         
             StringBuffer sb=new StringBuffer();
             for(int i=0;i<commend.size();i++){
              sb.append(commend.get(i)+" ");
             }
             try{
              ProcessBuilder builder = new ProcessBuilder();
                 builder.command(commend);
                 builder.start();
                 return "ok";
             }catch(Exception e){
              e.printStackTrace();
              return null;
             }
           
     }
      
    }
/**
 *
 * 对于ffmpeg可以解析的格式(asx,asf,mpg,wmv,3gp,mp4,mov,avi,flv等) ,用ffmpeg进行解析,ffmpeg视频转换
 * @param : File
 * @return : loolean
 *
 */
    private static boolean processFLV(File oldfilepath) {
     FFMPEGLocator locator = new FFMPEGLocator() {
   
   @Override
   protected String getFFMPEGExecutablePath() {
    // TODO Auto-generated method stub
    return "c://ffmpeg//ffmpeg.exe";
   }
  };
  File source = oldfilepath;
  String out=outFolder.getAbsolutePath()+"\\"+name+".avi";//输出的绝对路径
  File target=new File(out);
  //GetVideoInfo getVideoInfo = new GetVideoInfo();
  //String decoder=getVideoInfo.getDecoder(source);
  if(target.exists()/*||decoder.equals("h264")*/){
   System.out.println("视频无需进行转换!");
   return false;
  }else{
   AudioAttributes audio = new AudioAttributes();//设置音频属性
   audio.setCodec("libmp3lame");//音频使用libmp3lame编码
   audio.setBitRate(new Integer(128000));//设置比特率
   audio.setChannels(new Integer(1));//设置通道,缺省为1
   audio.setSamplingRate(new Integer(22050));//
   VideoAttributes video = new VideoAttributes();//设置视频属性
   
   video.setCodec("mpeg4");//设置编码格式
   video.setBitRate(new Integer(1024000));//设置比特率
   video.setFrameRate(new Integer(10));//设置
   /*getVideoSize getvideoSize=new getVideoSize();
   VideoInfo videoInfo=new VideoInfo();
   videoInfo=getvideoSize.getVideoInfo(source);
   VideoSize videoSize=videoInfo.getSize();
   if(videoSize.getHeight()!=1280||videoSize.getWidth()!=400){
    ResourceBundle resource=ResourceBundle.getBundle("parameter",Locale.getDefault());
    String a=resource.getString("height");
    String b=resource.getString("width");
    int height=Integer.valueOf(a);
    int width=Integer.valueOf(b);
    video.setSize(new VideoSize(width,height));//设置大小
   }*/
   //setSize set=new setSize();
   //set.set(video,source);
   video.setSize(new VideoSize(1080,720));
   EncodingAttributes attrs = new EncodingAttributes();
   attrs.setFormat("avi");
   attrs.setAudioAttributes(audio);
   attrs.setVideoAttributes(video);
   Encoder encoder = new Encoder(locator);
   try {
    encoder.encode(source, target, attrs);
    return true;
   } catch (IllegalArgumentException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    return false;
   } catch (InputFormatException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    return false;
   } catch (EncoderException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    return false;
   }
   
  }
  
    }
 
 
}

这是一个简单的视频处理的方法,轻喷

转载于:https://my.oschina.net/u/1034481/blog/221066

java调用ffmpeg,mencoder进行视频转换,读取时长等相关推荐

  1. JAVA调用FFmpeg实现音视频转码加水印功能

    目录 目录 写在前面 MAVEN引用 获取音视频基本信息 音频转码成Mp3格式 视频转码成Mp4格式 视频转码成Mp4并添加文字水印 视频转码成Mp4并添加图片水印 测试代码 写在前面 如今各大云厂商 ...

  2. 使用java调用ffmpeg命令将视频分屏并音视频同时播放(二分屏)

    实现想法 使用ffmpeg命令中的filter_complex(滤镜)参数来进行展示 引入javacv版本 <dependency><groupId>org.bytedeco& ...

  3. mysql+视频文件转成流_详解java调用ffmpeg转换视频格式为flv

    详解java调用ffmpeg转换视频格式为flv 注意:下面的程序是在Linux下运行的,如果在windows下rmvb转换成avi会出现问题,想成功需要下载下个drv43260.dll东西放到C:W ...

  4. Java调用ffmepg+mencoder视频格式转换

    PS: ffmpeg.rev12665.7z版本相当老了,有很多命令可能出现错误 其他格式转FLV格式,可以用Java调用ffmpeg和memcoder实现 ffmepg版本:ffmpeg.rev12 ...

  5. Java调用FFmpeg实现视频录制

    FFmpeg是一个很好用的开源的视频处理工具,网上也有一些java调用FFmpeg的方法,然而这些文章大部分都有一个共同的特点,就是用java去调用FFmpeg去做视频处理,几乎没有去做录制视频和音频 ...

  6. Java调用ffmpeg进行视频.H264抽帧,并保存为图片

    Java调用ffmpeg进行视频.H264抽帧,并保存为图片 1. 需求 2. 解决 3. 源码 参考 1. 需求 对视频 D:\data\01-test.H264进行抽帧并保存为图片,图片命名为1. ...

  7. java命令截图,GitHub - xuege-cn/fmj: FMJ (FFMpeg for Java)。通过Java调用FFMpeg命令的方式来对音视频进行处理(获取信息、截图等等)。...

    项目介绍 FMJ (FFMpeg for Java) 通过Java调用FFMpeg命令的方式来对音视频进行处理(获取信息.截图等等). FFMpeg安装 建议使用 ffmpeg-2.6.1 版本 Li ...

  8. Java 利用ffmpeg工具实现视频MP4转m3u8

    Java 利用ffmpeg工具实现视频MP4转m3u8(一) 前言 (一)ffmpeg工具转码 1.如何安装ffmpeg工具 2.如何使用ffmpeg工具进行视频转码 (二)播放m3u8文件 1.vi ...

  9. java调用ffmpeg把rtsp视频流保存为MP4文件

    前言:最近需要把rtsp的视频流保存为MP4文件(就是录制直播流).刚开始用的javacv的FFmpegFrameGrabber和FFmpegFrameRecorder,但是声音流和视频流无法调整,声 ...

  10. Java使用ffmpeg进行音频格式转换

    ffmpeg相关文章网址(用于记录一些好的文章地址~) ffmpeg命令详解 https://blog.csdn.net/zzcchunter/article/details/68060989 jav ...

最新文章

  1. 深度学习中图片数据增强方法
  2. 计算机操作系统——死锁
  3. LAMP 3.4 mysql常用操作-2
  4. Nginx网站用户认证
  5. mac 使用js打开计算器_Numi for Mac(mac计算器软件)
  6. ASP.NET与JS交互
  7. 青果教务系统适配小爱课程表
  8. 全国哀悼日 网站变灰装(附代码)
  9. Ubuntu下配置FreeRadius+L2TP+MySQL,实现限制用户流量和登录人数
  10. 很遗憾,这就是现实!35岁之后软件测试工程师靠什么养家?
  11. linux添加定时任务报错 error renaming /var/spool/cron/#tmp.xxxxxxxx to /var/spool/
  12. 微信小程序云开发之数据分页云函数
  13. 学习win32汇编指令:lea和offset
  14. PB EXCEL导入
  15. eslint plugins与extends的区别
  16. 每粒尘埃都有IP,你信了吗?
  17. Ubuntu 1804 升级内核
  18. javascript数据类型边边角角
  19. 奶茶制作APP开发模式解析
  20. python--数据结构--部分背包

热门文章

  1. Redis安装与调试
  2. 在SecureCRT下使用sz下载和rz上传文件
  3. PEAR, PECL和Perl的区别
  4. 【FFmpeg】解决警告warning: xxx is deprecated [-Wdeprecated-declarations]的方法
  5. linux驱动:音频驱动(五)ASoc之codec驱动
  6. matlab图像处理课程设计,基于MATLAB_GUI的数字图像处理程序设计课程设计
  7. python多进程应用场景_python使用多进程的实例详解
  8. springcloud 组件_SpringCloud组件mica 2.0.5发布,添加对sentinel、undertow指标收集
  9. Java学习总结:15
  10. 批量关闭公众号推送_微信推出“一键拒收”长期未读公众号推送功能