【JAVA】JAVA使用ffmpeg進行視頻格式轉換以及截圖


JAVA 處理視頻文件,需要用到 ffmpeg  這個工具。不需要依賴jar包。無論是在windows服務器還是linux服務器,想要使用 ffmpeg 都需要先安裝。


附上Linux下  *.tar.gz/*.tgz、*.bz2形式的源代碼軟件包    安裝方法:


說明:建議解壓後先閱讀說明文件,可以瞭解安裝有哪些需求,有必要時還需改動編譯配置。有些軟件包的源代碼在編譯安裝後可以用make  install命令來進行卸載,如果不提供此功能,則軟件的卸載必須手動刪除。由於軟件可能將文件分散地安裝在系統的多個目錄中,往往很難把它刪除幹 淨,那你應該在編譯前進行配置,指定軟件將要安裝到目標路徑:./configure  --prefix=目錄名,這樣可以使用“rm  -rf  軟件目錄名”命令來進行乾淨徹底的卸載。與其它安裝方式相比,需要用戶自己編譯安裝是最難的,它適合於使用Linux已有一定經驗的人,一般不推薦初學 者使用。    


安裝:tar  zxvf  *.tar.gz  或  tar  yxvf  *.bz2  先解壓    
然後進入解壓後的目錄:    
./configure  配置    
make  編譯    
make  install  安裝    
卸載:make  uninstall  或  手動刪除    
 

安裝的時候如果沒有指明安裝路徑,一般都會安裝在 /user/local下面。安裝完成之後,可以在Linux下輸入 ffmpeg 查看是否安裝成功。


安裝成功之後,就可以在代碼裏引用了:


視頻格式轉換:

/**
     * 視頻轉碼
     * @param ffmpegPath    轉碼工具的存放路徑
     * @param upFilePath    用於指定要轉換格式的文件,要截圖的視頻源文件
     * @param codcFilePath    格式轉換後的的文件保存路徑
     * @return
     * @throws Exception
     */
    private boolean executeCodecs(String ffmpegPath, String upFilePath, String codcFilePath) throws Exception {

    	// 創建一個List集合來保存轉換視頻文件爲flv格式的命令
        List<String> convert = new ArrayList<String>();
        convert.add(ffmpegPath); // 添加轉換工具路徑
        convert.add("-i"); // 添加參數"-i",該參數指定要轉換的文件
        convert.add(upFilePath); // 添加要轉換格式的視頻文件的路徑
        convert.add("-qscale");     //指定轉換的質量
        convert.add("6");
        convert.add("-ab");        //設置音頻碼率
        convert.add("64");
        convert.add("-ac");        //設置聲道數
        convert.add("2");
        convert.add("-ar");        //設置聲音的採樣頻率
        convert.add("22050");
        convert.add("-r");        //設置幀頻
        convert.add("24");
        convert.add("-y"); // 添加參數"-y",該參數指定將覆蓋已存在的文件
        convert.add(codcFilePath);

        boolean mark = true;
        ProcessBuilder builder = new ProcessBuilder();
        try {
            
        	builder.command(convert);
            builder.redirectErrorStream(true);
            builder.start();
        	
        } catch (Exception e) {
            mark = false;
            e.printStackTrace();
        }
        return mark;
    }



視頻截圖:

    /**
     * 
     * @param ffmpegPath    轉碼工具的存放路徑
     * @param upFilePath    要截圖的視頻源文件
     * @param mediaPicPath	添加截取的圖片的保存路徑
     * @param width			截圖的寬
     * @param height		截圖的高
     * @return
     */
    private boolean screenImage(String ffmpegPath, String upFilePath, String mediaPicPath, String width, String height) {
    	
    	// 創建一個List集合來保存從視頻中截取圖片的命令
        List<String> cutpic = new ArrayList<String>();
        cutpic.add(ffmpegPath);
        cutpic.add("-i");
        cutpic.add(upFilePath); // 要截圖的視頻源文件
        cutpic.add("-y");
        cutpic.add("-f");
        cutpic.add("image2");
        cutpic.add("-ss"); // 添加參數"-ss",該參數指定截取的起始時間
        cutpic.add("1"); // 添加起始時間爲第17秒
        cutpic.add("-t"); // 添加參數"-t",該參數指定持續時間
        cutpic.add("0.001"); // 添加持續時間爲1毫秒
        cutpic.add("-s"); // 添加參數"-s",該參數指定截取的圖片大小
        cutpic.add(width + "*" + height); // 添加截取的圖片大小爲350*240
        cutpic.add(mediaPicPath); // 添加截取的圖片的保存路徑

        ProcessBuilder builder = new ProcessBuilder();
        try {
        	
            builder.command(cutpic);
            builder.redirectErrorStream(true);
            builder.start();
        } catch (Exception e) {
            e.printStackTrace();
        	return false;
        }
        return true;
    }






發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章