如何使用java代码进行视频格式的转换(FLV)

一,前言

    在给网页添加视频播放功能后,发现上传的视频有各种格式,那么就需要将他么转换成FLV,以很好的支持在线视频播放。

二,准备

    工具包    http://pan.baidu.com/share/link?shareid=4285322805&uk=539692501


    drv43260.dll,ffmpeg.exe,mencoder.exe,pncrt.dll,pthreadGC2.dll








    原理其实是使用java代码在CMD下调用MediaCode,完成视频格式的转换。





PS:有时间还要研究一下java如何调用CMD




三,代码


package yctc.cp.converter;
import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.List;
public class ConvertFlv {
    public static void main(String[] args) {
        ConvertFlv.convert("D:\\2.avi", "D:\\3.flv");
    }
     
    public static boolean convert(String inputFile, String outputFile)
    {
        if (!checkfile(inputFile)) {
            System.out.println(inputFile + " is not file");
            return false;
        }
        if (process(inputFile,outputFile)) {
            System.out.println("ok");
            return true;
        }
        return false;
    }
    //检查文件是否存在
    private static boolean checkfile(String path) {
        File file = new File(path);
        if (!file.isFile()) {
            return false;
        }
        return true;
    }
    private static boolean process(String inputFile,String outputFile) {
        int type = checkContentType( inputFile);
        boolean status = false;
        if (type == 0) {
            status = processFLV(inputFile,outputFile);// 直接将文件转为flv文件
        } else if (type == 1) {
            String avifilepath = processAVI(type,inputFile);
            if (avifilepath == null)
                return false;// avi文件没有得到
            status = processFLV(avifilepath,outputFile);// 将avi转为flv
        }
        return status;
    }
    /**
     * 检查视频类型
     * @param inputFile
     * @return ffmpeg 能解析返回0,不能解析返回1
     */
    private static int checkContentType(String inputFile) {
        String type = inputFile.substring(inputFile.lastIndexOf(".") + 1,
inputFile.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;
    }
    /**
     *  ffmepg: 能解析的格式:(asx,asf,mpg,wmv,3gp,mp4,mov,avi,flv等)
     * @param inputFile
     * @param outputFile
     * @return
     */
    private static boolean processFLV(String inputFile,String outputFile) {
        if (!checkfile(inputFile)) {
            System.out.println(inputFile + " is not file");
            return false;
        }
        List commend = new java.util.ArrayList();
        //低精度
        commend.add("");
        commend.add("-i");
        commend.add(inputFile);
        commend.add("-ab");
        commend.add("128");
        commend.add("-acodec");
        commend.add("libmp3lame");
        commend.add("-ac");
        commend.add("1");
        commend.add("-ar");
        commend.add("22050");
        commend.add("-qscale");
        commend.add("4");
        commend.add("-s"); 
        commend.add("350x240");
        commend.add("-r");
        commend.add("29.97");
        commend.add("-b");
        commend.add("512");
        commend.add("-y");
        commend.add(outputFile);
        StringBuffer test=new StringBuffer();
        for(int i=0;i commend = new java.util.ArrayList();
        commend.add("");
        commend.add(inputFile);
        commend.add("-oac");
        commend.add("mp3lame");
        commend.add("-lameopts");
        commend.add("preset=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("");
        StringBuffer test=new StringBuffer();
        for(int i=0;i


你可能感兴趣的:(java,jsp)