欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

java調(diào)用ffmpeg實(shí)現(xiàn)視頻轉(zhuǎn)換的方法

 更新時(shí)間:2015年06月01日 10:14:20   作者:飛天小豬豬  
這篇文章主要介紹了java調(diào)用ffmpeg實(shí)現(xiàn)視頻轉(zhuǎn)換的方法,較為詳細(xì)分析了java視頻格式轉(zhuǎn)換所需要的步驟及具體實(shí)現(xiàn)技巧,需要的朋友可以參考下

本文實(shí)例講述了java調(diào)用ffmpeg實(shí)現(xiàn)視頻轉(zhuǎn)換的方法。分享給大家供大家參考。具體分析如下:

這里環(huán)境我是在windows平臺下測試的。。。

需要在e:\下有ffmpeg.exe;mencoder.exe;drv43260.dll;pncrt.dll共4個(gè)文件。
 
還要在e:\input下放各種文件名為a的以下各種視頻文件;還要e:\output;java程序執(zhí)行后能得到一個(gè)a.flv的已轉(zhuǎn)換的文件。

ffmpeg.exe能解析的格式:(asx,asf,mpg,wmv,3gp,mp4,mov,avi,flv等)

對ffmpeg.exe無法解析的文件格式(wmv9,rm,rmvb等),可以先用別的工具(mencoder)轉(zhuǎn)換為avi(ffmpeg能解析的)格式;

mencoder.exe;drv43260.dll;pncrt.dll這3個(gè)文件是為文件格式(wmv9,rm,rmvb等)轉(zhuǎn)換為avi(ffmpeg能解析的)格式準(zhǔn)備的;

再把轉(zhuǎn)換好的avi文件再用ffmpeg.exe轉(zhuǎn)換成flv格式的視頻文件。。。
 
java文件的內(nèi)容如下:

import java.io.File;
import java.util.List;
public class ConvertVideo {
 private final static String PATH = "c:\\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);// 直接將文件轉(zhuǎn)為flv文件
    } else if (type==1) {
      String avifilepath = processAVI(type);
      if (avifilepath == null)
        return false;// avi文件沒有得到
      status = processFLV(avifilepath);// 將avi轉(zhuǎn)為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)轉(zhuǎn)換為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)轉(zhuǎn)換為avi(ffmpeg能解析的)格式.
  private static String processAVI(int type) {
    List<String> commend=new java.util.ArrayList<String>();
    commend.add("e:\\mencoder");
    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("c:\\home\\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("e:\\ffmpeg");
    commend.add("-i");
    commend.add(oldfilepath);
    commend.add("-ab");
    commend.add("64");
    commend.add("-acodec");
    commend.add("mp3");
    commend.add("-ac");
    commend.add("2");
    commend.add("-ar");
    commend.add("22050");
    commend.add("-b");
    commend.add("230");
    commend.add("-r");
    commend.add("24");
    commend.add("-y");
    commend.add("c:\\home\\a.flv");
    try {
      ProcessBuilder builder = new ProcessBuilder();
      builder.command(commend);
      builder.start();
      return true;
    } catch (Exception e) {
      e.printStackTrace();
      return false;
    }
  }
}

希望本文所述對大家的java程序設(shè)計(jì)有所幫助。

相關(guān)文章

  • IDEA中Java出現(xiàn)無效的源發(fā)行版錯(cuò)誤的解決辦法

    IDEA中Java出現(xiàn)無效的源發(fā)行版錯(cuò)誤的解決辦法

    這篇文章主要給大家介紹了關(guān)于IDEA中Java出現(xiàn)無效的源發(fā)行版錯(cuò)誤的解決辦法,IDEA中Java出現(xiàn)?效的源發(fā)?版解決辦法出現(xiàn)該問題的原因是項(xiàng)?Project當(dāng)中的jdk與電腦當(dāng)中的jdk版本不?致造成的,需要的朋友可以參考下
    2023-10-10
  • java類加載機(jī)制、類加載器、自定義類加載器的案例

    java類加載機(jī)制、類加載器、自定義類加載器的案例

    這篇文章主要介紹了java類加載機(jī)制、類加載器、自定義類加載器的案例,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-02-02
  • Struts2 OGNL表達(dá)式實(shí)例詳解

    Struts2 OGNL表達(dá)式實(shí)例詳解

    這篇文章主要介紹了Struts2 OGNL表達(dá)式實(shí)例詳解,相關(guān)實(shí)例代碼,需要的朋友可以參考。
    2017-09-09
  • java.math.BigDecimal的用法及加減乘除計(jì)算

    java.math.BigDecimal的用法及加減乘除計(jì)算

    這篇文章主要介紹了java.math.BigDecimal的用法及加減乘除計(jì)算,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-05-05
  • java算法實(shí)現(xiàn)預(yù)測雙色球中獎(jiǎng)號碼

    java算法實(shí)現(xiàn)預(yù)測雙色球中獎(jiǎng)號碼

    這篇文章主要介紹了java算法實(shí)現(xiàn)預(yù)測雙色球中獎(jiǎng)號碼的相關(guān)資料,需要的朋友可以參考下
    2015-12-12
  • Spring Boot統(tǒng)一異常處理詳解

    Spring Boot統(tǒng)一異常處理詳解

    我們在做Web應(yīng)用的時(shí)候,請求處理過程中發(fā)生錯(cuò)誤是非常常見的情況。這個(gè)時(shí)候就需要統(tǒng)一異常處理了,這篇文章主要給大家介紹了Spring Boot如何進(jìn)行統(tǒng)一異常處理的相關(guān)資料,需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-02-02
  • Java接收前端請求體的多種方式總結(jié)

    Java接收前端請求體的多種方式總結(jié)

    這篇文章主要給大家介紹了關(guān)于Java接收前端請求體的多種方式,文中通過代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者Java具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2023-08-08
  • JPA如何設(shè)置表名和實(shí)體名,表字段與實(shí)體字段的對應(yīng)

    JPA如何設(shè)置表名和實(shí)體名,表字段與實(shí)體字段的對應(yīng)

    這篇文章主要介紹了JPA如何設(shè)置表名和實(shí)體名,表字段與實(shí)體字段的對應(yīng),具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • 詳解MyBatisPlus如何實(shí)現(xiàn)分頁和查詢操作

    詳解MyBatisPlus如何實(shí)現(xiàn)分頁和查詢操作

    這篇文章主要為大家詳細(xì)介紹了MyBatisPlus是如何實(shí)現(xiàn)分頁和查詢操作的,文中的示例代碼講解詳細(xì),對我們學(xué)習(xí)有一定的幫助,需要的可以參考一下
    2022-05-05
  • Spring Shell應(yīng)用程序開發(fā)流程解析

    Spring Shell應(yīng)用程序開發(fā)流程解析

    這篇文章主要介紹了Spring Shell應(yīng)用程序開發(fā)流程解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-10-10

最新評論