flv格式转换--第一步
不定期更新...
 
首先要安装MediaCoder
安装目录假设为D:\flv\MediaCoder
在D:\flv\MediaCoder\codecs目录下有一些要用到的,如ffmpeg.exe , mencoder.exe还有一些dll
 
ConvertVideo.java
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:\flv\MediaCoder\codecs
    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("p_w_picpath2");
    commend.add("-ss");
    commend.add("38");
    commend.add("-t");
    commend.add("0.001");
    commend.add("-s");
    commend.add("320x240");
    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;
    }
  }

    
}
会在指定目录下D:\test生成b.flv和b.jpg这两个文件.
 
以上为第一步,是最简单的.以后有进展不定期更新...