java調(diào)用ffmpeg實(shí)現(xiàn)視頻轉(zhuǎ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ì)有所幫助。
- Javacv使用ffmpeg實(shí)現(xiàn)音視頻同步播放
- Java利用ffmpeg實(shí)現(xiàn)視頻MP4轉(zhuǎn)m3u8
- Java基于FFmpeg實(shí)現(xiàn)Mp4視頻轉(zhuǎn)GIF
- java使用ffmpeg實(shí)現(xiàn)上傳視頻的轉(zhuǎn)碼提取視頻的截圖等功能(代碼操作)
- Java使用ffmpeg和mencoder實(shí)現(xiàn)視頻轉(zhuǎn)碼
- java調(diào)用ffmpeg實(shí)現(xiàn)轉(zhuǎn)換視頻
- Java+Windows+ffmpeg實(shí)現(xiàn)視頻轉(zhuǎn)換功能
- 詳解java調(diào)用ffmpeg轉(zhuǎn)換視頻格式為flv
- Java工程使用ffmpeg進(jìn)行音視頻格式轉(zhuǎn)換的實(shí)現(xiàn)
相關(guān)文章
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-10java.math.BigDecimal的用法及加減乘除計(jì)算
這篇文章主要介紹了java.math.BigDecimal的用法及加減乘除計(jì)算,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-05-05java算法實(shí)現(xiàn)預(yù)測雙色球中獎(jiǎng)號碼
這篇文章主要介紹了java算法實(shí)現(xiàn)預(yù)測雙色球中獎(jiǎng)號碼的相關(guān)資料,需要的朋友可以參考下2015-12-12JPA如何設(shè)置表名和實(shí)體名,表字段與實(shí)體字段的對應(yīng)
這篇文章主要介紹了JPA如何設(shè)置表名和實(shí)體名,表字段與實(shí)體字段的對應(yīng),具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-11-11詳解MyBatisPlus如何實(shí)現(xiàn)分頁和查詢操作
這篇文章主要為大家詳細(xì)介紹了MyBatisPlus是如何實(shí)現(xiàn)分頁和查詢操作的,文中的示例代碼講解詳細(xì),對我們學(xué)習(xí)有一定的幫助,需要的可以參考一下2022-05-05Spring Shell應(yīng)用程序開發(fā)流程解析
這篇文章主要介紹了Spring Shell應(yīng)用程序開發(fā)流程解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-10-10