java ffmpeg 獲取視頻時長_Java通過調用FFMPEG獲取視頻時長

FFmpeg是一套可以用來記錄、轉換數字音頻、視頻,并能將其轉化為流的開源計算機程序。采用LGPL或GPL許可證。它提供了錄制、轉換以及流化音視頻的完整解決方案。它包含了非常先進的音頻/視頻編解碼庫libavcodec,為了保證高可移植性和編解碼質量,libavcodec里很多codec都是從頭開發的。

由此看來FFmpeg很強大,很多主流的音頻、視頻處理軟件都使用了FFmpeg。

FFmpeg下載下來解壓,cmd進入到FFmpeg.exe目錄中,即可在命令行下進行各種操作,查看視頻信息命令: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中執行此操作,解析返回結果,可以得到視頻時長等信息。

/**

* 獲取視頻總時間

* @param viedo_path 視頻路徑

* @param ffmpeg_path ffmpeg路徑

* @return

*/

public static int getVideoTime(String video_path, String ffmpeg_path) {

List commands = new java.util.ArrayList();

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();

//從視頻信息中解析時長

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+",視頻時長:"+time+", 開始時間:"+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;

}

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/271905.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/271905.shtml
英文地址,請注明出處:http://en.pswp.cn/news/271905.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

盤點15個搞笑的程序員段子

1.車Delphi象吉普車,什么路上都能開,卻在啥路上也開不好;PB就象卡丁車,只能在固定線路上開,到室外就有些不穩;VC象跑車,你開得起卻買不 起,而且一旦發生故障,想修都找不到…

判斷listview是上滑還是下滑的方法

方法一: 用setOnScrollListener(new AbsListView.OnScrollListener())來實現,判斷滑動后顯示的第一個條目 ,與滑動前的第一個條目的大小來判斷, 這種方法邏輯簡單,但是必須要滑動到當前第一條目隱藏后才能起…

如何保證消息不被重復消費~~~~~(如何保證消息隊列的冪等性)

分析:這個問題其實換一種問法就是,如何保證消息隊列的冪等性?這個問題可以認為是消息隊列領域的基本問題。換句話來說,是在考察你的設計能力,這個問題的回答可以根據具體的業務場景來答,沒有固定的答案。 回…

SpringBoot:搭建第一個Web程序

本文簡單介紹一下spingBoot搭建web程序的流程,希望對入門學習spingBoot的朋友有所幫助。本文采用的開發工具是IDEA。 1、打開IDEA,創建項目。 2、點擊創建項目,進入下一步,具體按照畫紅框的操作。 3、點擊下一步 4、點擊下一步&am…

java uuid 效率_java uuid第一次性能

在java中產生uuid的方式是使用java.util.UUID。UUID.randomUUID().toString();我在測試redis性能時,使用uuid產生測試數據,發現多線程測試redis的rpush接口的時候,性能老是上不去。 查看cpu利用率也不高,網卡流量也不大。就是tps上…

第八周----補

這一周真不知道過得是什么,除了上課,感覺相當的混亂。 整個人每天都是處在消沉狀態,連這次作業都沒能很好的補上。 我的心情也像天氣一樣變得不穩定,一會晴天一會雨天的,更多的就是悶悶的感覺。 總會說事情很多忙的頭暈…

SpringBoot:application.properties基本的參數配置

??作者主頁:IT技術分享社區 ??作者簡介:大家好,我是IT技術分享社區的博主,從事C#、Java開發九年,對數據庫、C#、Java、前端、運維、電腦技巧等經驗豐富。 ??個人榮譽: 數據庫領域優質創作者🏆&#x…

java method 注釋_Java注解

Java注解注解概述3、注解3.1、注解,或者叫做注釋類型,英文單詞是:Annotation疑問:注解到底是干啥的?????????3.2、注解Ann…

盤點八個程序員必備的代碼編輯器

一個好的代碼編輯器不僅能使代碼變得更美觀,增強其可讀性,同時也能迅速推進程序員的工作進程,延長代碼的生命周期。 對于新手和有經驗的程序員,推薦使用的代碼編輯器也均有不同。小樓總結了一些好用的代碼編輯器,還在糾…

C#OOP之二 變量和表達式

2.1 C#的基本語法 C#代碼的外觀和操作方式與C和Java非常相似。初看起來,其語法比較混亂, 不像書面英語和其他語言。但是,在C#編程中,使用的樣式是比較清晰的,不用花太多的力氣就可以編寫出可讀性很強的代碼。 與其他語…

java異步多線程 判斷線程狀態_java多線程和異步回調

在實際開發過程中遇到的多線程情況不多,但是在生產環境中多線程是最基本的情況,java面試時也會考到,所以看看多線程的知識還是很有必要的。Thread,Runnable,Callable,Future,FutureTask,Executo…

C#調用API彈出打印機屬性對話框

調用api彈出打印機屬性對話框 Author:vitoriatangFrom:Internet.NET Framework封裝了很多關于打印的對話框,比如說PrintDialog, PageSetupDialog. 但是有的時候我們還需要關心打印機屬性對話框,那么就可以調用API來解決這個問題。有幾個API函數與之相關P…

Java中異常

首先我們要知道RuntimeException與Exception之間的關系與他們分別的含義: ①在Java中異常的基類為Throwable,他有兩個子類Exception與Errors,同時RuntimeException就是Exception的子類; ②RuntimeException,即運行時異…

第九周作業

你最喜歡做什么--興趣問題清單?根據迄今為止已有的經歷,你真正喜歡從事的工作是什么?動漫設計師或者網頁設計師?休暇時間你最愛從事的活動是什么?看動漫?什么令你精疲力盡?什么能激發你的活力?看動漫?你是重視質量…

SQLServer數據庫獲取重復記錄中日期最新的記錄

??作者主頁:IT技術分享社區 ??作者簡介:大家好,我是IT技術分享社區的博主,從事C#、Java開發九年,對數據庫、C#、Java、前端、運維、電腦技巧等經驗豐富。 ??個人榮譽: 數據庫領域優質創作者🏆&#x…

循環的時候去刪除集合中的元素 java.util.ConcurrentModificationException

使用for循環,刪除集合中的元素,會報錯 java.util.ConcurrentModificationException 只能通過迭代器 iterator刪除 1:在while循環中使用iterator迭代器刪除集合中元素 2:在for循環中使用iterator迭代器刪除集合中元素 3:使用for循…

jquery ajax load

jQuery load() 方法 jQuery load() 方法是簡單但強大的 AJAX 方法。 load() 方法從服務器加載數據,并把返回的數據放入被選元素中。 語法: $(selector).load(URL,data,callback); $("button").click(function(){$("#div1").load(&qu…

計算機網絡硬件設備組成筆記

網絡是計算機或類似計算機的網絡設備的集合,它們之間通過各種傳輸介質進行連接。無論設備之間如何連接,網絡都是將來自于其中一臺網絡設備上的數據,通過傳輸介質傳輸到另外一臺網絡設備上。 本節將基于這個過程講解網絡的組成。 網卡 網卡也被…