JAVA视频格式转换 avi转mp4

J2EE 码拜 8年前 (2016-03-14) 2249次浏览
现在在做一个在线观看视频的系统,需要把上传的视频用转成MP4格式的,用ffmepg好像不能成功转
望高手指点

package com.lichen.test;
import java.io.File;
import java.util.List;
public class ConvertVideo {
  private final static String PATH = "d:\test\a.mpg";
  public static void main(String[] args) {
    if (!checkfile(PATH)) {
       System.out.println(PATH + " is not file");
      return;
     }
    if (process()) {
       System.out.println("ok");
     }
   }
  private static boolean process() {
    int type = checkContentType();
    boolean status = false;
    if (type == 0) {
//       status = processFLV(PATH);// 直接将文件转为flv文件
       status=processImg();
         processFLV(PATH);
     } else if (type == 1) {
       String avifilepath = processAVI(type);
      if (avifilepath == null)
        return false;// avi文件没有得到
       status = processFLV(avifilepath);// 将avi转为flv
     }
    return status;
   }
  private static int checkContentType() {
     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 0;
     } 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;
     }
    // 对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;
   }
  private static boolean checkfile(String path) {
     File file = new File(path);
    if (!file.isFile()) {
      return false;
     }
    return true;
   }
  // 对ffmpeg无法解析的文件格式(wmv9,rm,rmvb等), 可以先用别的工具(mencoder)转换为avi(ffmpeg能解析的)格式.
  private static String processAVI(int type) {
     List<String> commend = new java.util.ArrayList<String>();
//     commend.add("e:\mencoder");         //     D:flvMediaCodercodecs
     commend.add("d:\flv\MediaCoder\codecs");    
     commend.add(PATH);
     commend.add("-oac");
     commend.add("lavc");
     commend.add("-lavcopts");
     commend.add("acodec=mp3:abitrate=64");
     commend.add("-ovc");
     commend.add("xvid");
     commend.add("-xvidencopts");
     commend.add("bitrate=600");
     commend.add("-of");
     commend.add("avi");
     commend.add("-o");
     commend.add("d:\test\a.avi");
    try {
       ProcessBuilder builder = new ProcessBuilder();
       builder.command(commend);
       builder.start();
      return "c:\home\a.avi";
     } catch (Exception e) {
       e.printStackTrace();
      return null;
     }
   }
  // ffmpeg能解析的格式:(asx,asf,mpg,wmv,3gp,mp4,mov,avi,flv等)
  private static boolean processFLV(String oldfilepath) {
    if (!checkfile(PATH)) {
       System.out.println(oldfilepath + " is not file");
      return false;
     }
     List<String> commend = new java.util.ArrayList<String>();
     commend.add("d:\flv\MediaCoder\codecs\ffmpeg.exe");    
     commend.add("-i");
     commend.add(oldfilepath);
     commend.add("-ab");
     commend.add("64");
//     commend.add(" -acodec ");
//     commend.add("codec");
     commend.add("-ac");
     commend.add("2");
     commend.add("-ar");
     commend.add("22050");
     commend.add("-b");
     commend.add("230");
//     commend.add("-s");
//     commend.add("350x240");
     commend.add("-r");
     commend.add("29.97");
     commend.add("-y");
     commend.add("d:\test\b.flv");
     System.out.println(commend);
    try {
       ProcessBuilder builder = new ProcessBuilder();
       builder.command(commend);
       builder.start();
      return true;
     } catch (Exception e) {
       e.printStackTrace();
      return false;
     }
   }
// 生成图片 参数String newfilename, String newimg
  public static boolean processImg() {
//     System.out.println(newfilename + "->" + newimg);
     List<String> commend = new java.util.ArrayList<String>();
     commend.add("d:\flv\MediaCoder\codecs\ffmpeg.exe");
     commend.add("-i");
     commend.add("d:\test\a.mpg");
     commend.add("-y");
     commend.add("-f");
     commend.add("image2");
     commend.add("-ss");
     commend.add("38");
     commend.add("-t");
     commend.add("0.001");
     commend.add("-s");
     commend.add("320x240");
     commend.add("-f");
     commend.add("mp4");      commend.add("d:\test\b.jpg");
    try {
       ProcessBuilder builder = new ProcessBuilder();
       builder.command(commend);
       builder.start();
      return true;
     } catch (Exception e) {
       e.printStackTrace();
      return false;
     }
   }
    
}
解决方案

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明JAVA视频格式转换 avi转mp4
喜欢 (0)
[1034331897@qq.com]
分享 (0)