Java解析audio時長

前提需要電腦上先安裝后ffmpeg

public long parseDuration(String audioPath) {long durationMs = -1;try {Process process = Runtime.getRuntime().exec("ffprobe " + audioPath);// InputStream is = process.getInputStream();InputStream is = process.getErrorStream();InputStreamReader isr = new InputStreamReader(is);BufferedReader br = new BufferedReader(isr);String line;while ((line = br.readLine()) != null) {if (line.contains("Duration")) {// System.out.println("duration line1 = " + line);String duration = line.split(",")[0].trim();// System.out.println("duration line2 = " + duration);String[] parsedDurationArray = duration.split(":");// System.out.println("array len = " + parsedDurationArray.length);int hour = Integer.parseInt(parsedDurationArray[1].trim());int min = Integer.parseInt(parsedDurationArray[2].trim());float sec = Float.parseFloat(parsedDurationArray[3].trim());// System.out.println("duration line3: hour = " + hour);// System.out.println("duration line3: min = " + min);// System.out.println("duration line3: sec = " + sec);durationMs = (long)(hour * 3600 * 1000 + min * 60 * 1000 + sec * 1000);// System.out.println("duration line4: ms = " + durationMs);}}br.close();process.waitFor();int exitCode = process.exitValue();// System.out.println("exitCode: " + exitCode);process.destroy();} catch (IOException e) {throw new RuntimeException(e);} catch (InterruptedException e) {throw new RuntimeException(e);}return durationMs;}

二、 一個看起來更好的方法

private long parseMediaDuration(String mediaPath) throws IOException {// 假設用 ffprobe 獲取時長ProcessBuilder pb = new ProcessBuilder("ffprobe", "-v", "error", "-show_entries","format=duration", "-of", "default=noprint_wrappers=1:nokey=1", mediaPath);Process process = pb.start();BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));String duration = reader.readLine(); // duration in secondsdouble durationInSeconds = Double.parseDouble(duration);long durationInMicroseconds = (long)(durationInSeconds * 1000000);reader.close();try {process.waitFor();} catch (InterruptedException e) {throw new RuntimeException("ffprobe interrupted", e);}return durationInMicroseconds;}

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

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

相關文章

python學智能算法(十五)|機器學習樸素貝葉斯方法進階-CountVectorizer多文本處理

【1】引言 前序學習進程中,已經學習CountVectorizer文本處理的簡單技巧,先相關文章鏈接為: python學智能算法(十四)|機器學習樸素貝葉斯方法進階-CountVectorizer文本處理簡單測試-CSDN博客 此次繼續深入&#xff0…

AiPy 監控視頻智能監察:人像一鍵抽取+可反復執行程序落地

兄弟們,不知道你們有沒有過查監控的經歷,雖然現在監控攝像頭是越來越多,硬盤越塞越滿,但真出了事兒,回放查錄像堪比大海撈針!純人工一幀幀的去找,能把眼睛盯瞎還是人影都找不到。不過我最近搞了…

期貨反向跟單-終止盤手合作原則(二)

在期貨反向跟單的領域中,數據就是實打實的真金白銀,是策略能否持續盈利的核心價值所在。然而,許多團隊在實際運營過程中,都遭遇了相似的困境:期初策略運轉良好,可隨著時間推移,數據表現卻每況愈…

【Unity】MiniGame編輯器小游戲(三)馬賽克【Mosaic】

更新日期:2025年6月17日。 項目源碼:后續章節發布 索引 馬賽克【Mosaic】一、游戲最終效果二、玩法簡介三、正式開始1.定義游戲窗口類2.規劃游戲窗口、視口區域3.地圖方塊陣列①.定義方塊結構體②.生成方塊陣列③.計算九宮格黑色方塊數量④.排除任意九宮…

基于深度學習的智能圖像質量評估系統:技術與實踐

前言 在數字圖像處理和計算機視覺領域,圖像質量評估(Image Quality Assessment, IQA)是一個重要的研究方向。圖像質量評估的目標是通過算法自動評估圖像的質量,包括清晰度、對比度、噪聲水平等。傳統的圖像質量評估方法主要依賴于…

【Golang面試題】Go語言實現請求頻率限制

Go語言實現請求頻率限制:從計數器到令牌桶的完整指南 在實際開發中,接口被惡意刷請求是常見問題。本文將深入探討Go語言中四種主流的請求限流方案,從簡單到復雜逐步深入,助你構建高可用服務。 一、基礎方案:計數器法…

11Labs 增長負責人分享:企業級市場將從消費級或開發者切入丨Voice Agent 學習筆記

本文摘自 Founder Park AI 產品如何做增長,ElevenLabs的案例很值得學習。 專注于 AI 語音生成的獨角獸企業 ElevenLabs 可以說一直在高速增長。在今年 1 月完成 1.8 億美元 C 輪融資后,ElevenLabs 的估值突破 30 億,直指 33 億美元。2024 年…

Linux 命令:grep

概述 在Linux系統里,grep是一款十分實用的命令行工具,它主要用于在文件或者輸入流中搜索符合特定模式的文本。下面為你詳細介紹它的用法。資料已經分類整理好:https://pan.quark.cn/s/26d73f7dd8a7 基本語法 grep [選項] 搜索模式 [文件..…

Java八股文——MySQL「架構篇」

MySQL主從復制了解嗎 面試官您好,我了解MySQL的主從復制。它是構建高可用、高可擴展數據庫架構的核心基石。 1. 主從復制的核心原理與流程 整個主從復制的過程,就是一場圍繞 binlog(二進制日志) 的“接力賽”。這個過程主要可以…

ubuntu下python版本升級導致pyqt不能正常運行解決

最終解決方案 ubuntu下多python版本pyqt兼容性問題解決 python3.9 -m pip install --upgrade --force-reinstall --prefer-binary pyqt5)嘗試解決方案一(失敗) 系統默認python版本可以,其他版本不行 sudo apt install pyqt5-dev-tools嘗試解決方案二(失敗) 一直…

AIGC工具平臺-VideoRetalking音頻對口型數字人

唇形合成技術正逐漸成為AIGC內容生產領域的重要工具,能夠實現音視頻數據的高度融合。基于VideoRetalking模塊的可視化界面降低了技術門檻,使非技術背景的用戶也能便捷體驗唇形驅動數字人合成的流程。 本文重點解析該模塊的使用方式及開發流程&#xff0…

前端項目如何部署為https

如何為項目部署設置HTTPS 設置HTTPS是保護網站數據傳輸安全的重要步驟。以下是設置HTTPS的主要方法: 1. 獲取SSL/TLS證書 免費證書選項 Let’s Encrypt:最流行的免費證書頒發機構Cloudflare:提供免費SSL和CDN服務ZeroSSL:另一…

nginx 配置 系統升級頁面

默認80端口配置如下: server {listen 80; # 指定端口號server_name 192.168.2.96; # 替換為實際域名或IP# 全局重定向到升級頁面(排除自身防循環)if ($request_uri !~* "/upgrade.html") {return 307 /upgrade.html; # 臨時重定…

計算機基礎(一)——設計模式

一、設計模式 設計模式(Design Patterns)是軟件開發中反復出現問題的解決方案的通用描述。 它是經過總結、提煉的高效代碼結構和設計方案,幫助開發者寫出更靈活、可維護和可擴展的代碼。 優點注意點規范代碼結構,提高開發效率設…

Mac電腦 磁盤檢測和監控工具 DriveDx

DriveDx Mac 一款不監視驅動器的內置S.M.A.R.T.狀態的先進驅動器運行狀況診斷和監測工具。 還分析了所有驅動器健康密切相關的指標, SSD或硬盤驅動器故障(像SSD磨損 /耐久性,壞扇區重新分配,離線壞道,未定扇形區&…

頻繁操作Json嵌套數據PostgreSQL配合JSON操作工具類+sql

文章目錄 1.工具類2.依賴3.sql 本文檔只是為了留檔方便以后工作運維,或者給同事分享文檔內容比較簡陋命令也不是特別全,不適合小白觀看,如有不懂可以私信,上班期間都是在得 背景:因為頻繁操作json嵌套數據 PostgreSQL得…

京東云 centos vim有操作混亂的問題

centos云服務器 安裝micro編輯器可以解決 yum install micro

限流系列之二:TDMQ CKafka 版限流方案詳解及最佳實踐

導語 在當今大數據和實時通信的時代,消息隊列在分布式系統中扮演著至關重要的角色。CKafka 作為一種高性能、高可靠的消息中間件,被廣泛應用于各種業務場景中。然而,隨著業務的增長和數據流量的增加,CKafka 在生產者和消費者以極…

消息隊列的基本概念

文章目錄 為什么需要消息隊列?🤔🎯 核心價值📋 使用場景 🏗? 架構層面的基本概念整體架構圖📦 核心組件詳解1. Broker(消息代理)2. Topic(主題)3. Partition…

Shell腳本中和||語法解析

https://www.cnblogs.com/liuyuelinfighting/p/16377705.html 在 Shell 腳本中,&& 和 || 是邏輯操作符,用于根據前一個命令的退出狀態(成功或失敗)決定是否執行后續命令。這種語法稱為 命令鏈(Command Chainin…