[英]How to get an accurate duration of any audio file quickly?
有許多使用 VBR 編碼的音頻文件沒有准確的持續時間標簽,命令行 FFMpeg 會輸出以下內容:
從比特率估計持續時間,這可能不准確
(確實如此)
使用libav
,我們可以看到這是使用libavformat/utils.c
的has_duration()
函數進行測試的
我有一個音頻播放器,需要使用libav
獲取准確的持續時間信息。 我已經嘗試完全解碼文件並計算解碼的樣本總數,這是通常的建議(並且是准確的),但是對於 60 分鍾的音頻文件,這可能需要 10 秒以上,這是不可接受的。
我注意到有一些閉源音頻解碼器和音樂播放應用程序可以立即獲得這些文件的准確持續時間。 必須有一些便宜的方法來確定准確的持續時間嗎? 也許一個片段或高級描述會幫助我。
可以非常快速地“解復用”軌道並檢查每個數據包的持續時間以確定軌道的總持續時間,不需要解碼。
只需在循環中添加持續時間,直到達到 EOF:
int read = av_read_frame(pFormatCtx, packet);
durationSeconds = packet->duration * (double) timebase;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.