Java通過(guò)調(diào)用FFMPEG獲取視頻時(shí)長(zhǎng)
FFmpeg是一套可以用來(lái)記錄、轉(zhuǎn)換數(shù)字音頻、視頻,并能將其轉(zhuǎn)化為流的開(kāi)源計(jì)算機(jī)程序。采用LGPL或GPL許可證。它提供了錄制、轉(zhuǎn)換以及流化音視頻的完整解決方案。它包含了非常先進(jìn)的音頻/視頻編解碼庫(kù)libavcodec,為了保證高可移植性和編解碼質(zhì)量,libavcodec里很多codec都是從頭開(kāi)發(fā)的。
由此看來(lái)FFmpeg很強(qiáng)大,很多主流的音頻、視頻處理軟件都使用了FFmpeg。
FFmpeg下載下來(lái)解壓,cmd進(jìn)入到FFmpeg.exe目錄中,即可在命令行下進(jìn)行各種操作,查看視頻信息命令:ffmpeg 視頻 -i,如下圖:
D:\ffmpeg\Libs>ffmpeg -i D:\MonitorRecord\monitor_20091222_050948_1.avi
FFmpeg version SVN-r10087, Copyright (c) 2000-2007 Fabrice Bellard, et al. configuration: --prefix=f:/svn_build_bins --enable-memalign-hack --enable-shared --disable-static --enable-w32threads --enable-liba52 --enable-avisynth --enable-libamr-nb --enable-libamr-wb --enable-libfaac --enable-libfaad --enable-libgsm --enable-libmp3lame --enable-libogg --enable-libtheora --enable-libvorbis --enable-libx264 --enable-gpl --extra-cflags=-I/usr/local/include --extra-ldflags=-L/usr/local/lib libavutil version: 49.5.0 libavcodec version: 51.40.4 libavformat version: 51.12.2 built on Aug 12 2007 11:38:35, gcc: 4.2.1 Compiled by msn: dev # fastreaming.com, 2007/08/12 Enjoy it Input #0, avi, from 'D:\MonitorRecord\monitor_20091222_050948_1.avi': Duration: 00:00:25.0, start: 0.000000, bitrate: 619 kb/s Stream #0.0: Video: mpeg4, yuv420p, 1620x1100, 1.14 fps(r) Must supply at least one output file
在Java中執(zhí)行此操作,解析返回結(jié)果,可以得到視頻時(shí)長(zhǎng)等信息。
/**
* 獲取視頻總時(shí)間
* @param viedo_path 視頻路徑
* @param ffmpeg_path ffmpeg路徑
* @return
*/
public static int getVideoTime(String video_path, String ffmpeg_path) {
List<String> commands = new java.util.ArrayList<String>();
commands.add(ffmpeg_path);
commands.add("-i");
commands.add(video_path);
try {
ProcessBuilder builder = new ProcessBuilder();
builder.command(commands);
final Process p = builder.start();
//從輸入流中讀取視頻信息
BufferedReader br = new BufferedReader(new InputStreamReader(p.getErrorStream()));
StringBuffer sb = new StringBuffer();
String line = "";
while ((line = br.readLine()) != null) {
sb.append(line);
}
br.close();
//從視頻信息中解析時(shí)長(zhǎng)
String regexDuration = "Duration: (.*?), start: (.*?), bitrate: (\\d*) kb\\/s";
Pattern pattern = Pattern.compile(regexDuration);
Matcher m = pattern.matcher(sb.toString());
if (m.find()) {
int time = getTimelen(m.group(1));
log.info(video_path+",視頻時(shí)長(zhǎng):"+time+", 開(kāi)始時(shí)間:"+m.group(2)+",比特率:"+m.group(3)+"kb/s");
return time;
}
} catch (Exception e) {
e.printStackTrace();
}
return 0;
}
//格式:"00:00:10.68"
private static int getTimelen(String timelen){
int min=0;
String strs[] = timelen.split(":");
if (strs[0].compareTo("0") > 0) {
min+=Integer.valueOf(strs[0])*60*60;//秒
}
if(strs[1].compareTo("0")>0){
min+=Integer.valueOf(strs[1])*60;
}
if(strs[2].compareTo("0")>0){
min+=Math.round(Float.valueOf(strs[2]));
}
return min;
}
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
完美解決Spring Boot前端的Access-Control-Allow-Origin跨域問(wèn)題
這篇文章主要介紹了完美解決Spring Boot前端的Access-Control-Allow-Origin跨域問(wèn)題,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-05-05
IDEA里找不到Maven的有效解決辦法(小白超詳細(xì))
這篇文章主要給大家介紹了關(guān)于IDEA里找不到Maven的有效解決辦法,文中通過(guò)圖文將解決的辦法介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-07-07
java 將 list 字符串用逗號(hào)隔開(kāi)拼接字符串的多種方法
這篇文章主要介紹了java 將 list 字符串用逗號(hào)隔開(kāi)拼接字符串,本文給大家分享四種方法,每種方法通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-12-12
SpringBoot中使用websocket出現(xiàn)404的解決方法
在Springboot中使用websocket時(shí),本地開(kāi)發(fā)環(huán)境可以正常運(yùn)行,但部署到服務(wù)器環(huán)境出現(xiàn)404問(wèn)題,所以本文小編講給大家詳細(xì)介紹一下SpringBoot中使用websocket出現(xiàn)404的解決方法,需要的朋友可以參考下2023-09-09
jackson json序列化實(shí)現(xiàn)首字母大寫(xiě),第二個(gè)字母需小寫(xiě)
這篇文章主要介紹了jackson json序列化實(shí)現(xiàn)首字母大寫(xiě),第二個(gè)字母需小寫(xiě)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-06-06
深度源碼解析Java 線程池的實(shí)現(xiàn)原理
如何高效的使用這些資源就是程序員在平時(shí)寫(xiě)代碼時(shí)候的一個(gè)努力的方向。本文要說(shuō)的線程池就是一種對(duì) CPU 利用的優(yōu)化手段。對(duì)Java 線程池的實(shí)現(xiàn)原理相關(guān)知識(shí)感興趣的朋友一起看看吧2021-05-05

