A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

1.2.2 视频处理技术方案
如何通过程序进行视频处理?
ffmpeg是一个可行的视频处理程序,可以通过Java调用ffmpeg.exe完成视频处理。
在java中可以使用Runtime类和Process Builder类两种方式来执行外部程序,工作中至少掌握一种。 本项目使用Process Builder的方式来调用ffmpeg完成视频处理。
关于Process Builder的测试如下:
[AppleScript] 纯文本查看 复制代码
@Test   
  public void testProcessBuilder(){    
     ProcessBuilder processBuilder = new ProcessBuilder(); //   
    processBuilder.command("ping","127.0.0.1");   
     processBuilder.command("ipconfig");    
     //将标准输入流和错误输入流合并,通过标准输入流读取信息  
       processBuilder.redirectErrorStream(true);    
     try {        
     //启动进程        
     Process start = processBuilder.start();      
       //获取输入流     
        InputStream inputStream = start.getInputStream();   
         //转成字符输入流        
     InputStreamReader inputStreamReader = new InputStreamReader(inputStream,"gbk");     
          int len = ‐1;     
        char[] c = new char[1024];       
      StringBuffer outputString = new StringBuffer();    
         //读取进程输入流中的内容       
      while ((len= inputStreamReader.read(c))!=‐1) {        
         String s = new String(c,0,len);        
         outputString.append(s);     
            System.out.print(s);      
       }         
    inputStream.close();   
      } catch (IOException e) {  
           e.printStackTrace();   
      } 
    }     
@Test   
  public void testFFmpeg(){   
      ProcessBuilder processBuilder = new ProcessBuilder();       
  //定义命令内容     
    List<String> command = new ArrayList<>();    
     command.add("D:\\Program Files\\ffmpeg‐20180227‐fa0c9d6‐win64‐static\\bin\\ffmpeg.exe");   
      command.add("‐i");      
   command.add("E:\\ffmpeg_test\\1.avi");    
     command.add("‐y");//覆盖输出文件   
      command.add("‐c:v");
        command.add("libx264");
command.add("‐s");     
    command.add("1280x720");    
     command.add("‐pix_fmt");    
     command.add("yuv420p");   
      command.add("‐b:a");    
     command.add("63k");     
    command.add("‐b:v");     
    command.add("753k");     
    command.add("‐r");    
     command.add("18");     
    command.add("E:\\ffmpeg_test\\1.mp4");   
      processBuilder.command(command);    
     //将标准输入流和错误输入流合并,通过标准输入流读取信息  
       processBuilder.redirectErrorStream(true);    
     try {      
       //启动进程   
          Process start = processBuilder.start();   
          //获取输入流       
      InputStream inputStream = start.getInputStream();     
        //转成字符输入流        
     InputStreamReader inputStreamReader = new InputStreamReader(inputStream,"gbk");     
        int len = ‐1;       
      char[] c = new char[1024];   
          StringBuffer outputString = new StringBuffer();    
         //读取进程输入流中的内容        
     while ((len= inputStreamReader.read(c))!=‐1) {     
            String s = new String(c,0,len);            
     outputString.append(s);     
            System.out.print(s);        
     }        
     inputStream.close();   
      } catch (IOException e) {     
        e.printStackTrace();    
     }    
 }

上边的代码已经封装成工具类,参见:


上边的工具类中:
Mp4VideoUtil.java完成avi转mp4

HlsVideoUtil.java完成mp4转hls
分别测试每个工具类的使用方法。

[AppleScript] 纯文本查看 复制代码
public static void main(String[] args) throws IOException {   
  //ffmpeg的路径    
 String ffmpeg_path = "D:\\Program Files\\ffmpeg‐20180227‐fa0c9d6‐win64static\\bin\\ffmpeg.exe";//ffmpeg的安装位置    
 //源avi视频的路径  
   String video_path = "E:\\ffmpeg_test\\1.avi";  
   //转换后mp4文件的名称   
  String mp4_name = "1.mp4";    
 //转换后mp4文件的路径  
   String mp4_path = "E:\\ffmpeg_test\\";   
  //创建工具类对象     
Mp4VideoUtil videoUtil = new Mp4VideoUtil(ffmpeg_path,video_path,mp4_name,mp4_path);   
  //开始视频转换,成功将返回success  
   String s = videoUtil.generateMp4();   
  System.out.println(s); }


0 个回复

您需要登录后才可以回帖 登录 | 加入黑马